diff --git a/bin/build.sh b/bin/build.sh index 169d428..0f4fa49 100755 --- a/bin/build.sh +++ b/bin/build.sh @@ -1,3 +1,3 @@ #!/bin/sh -npx mix --production +npm run build diff --git a/composer.json b/composer.json index 3b0d676..ae1d19f 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,8 @@ "php": "^8.0|^8.1|^8.2", "illuminate/filesystem": "^9.0|^10.0", "illuminate/support": "^9.0|^10.0", - "illuminate/view": "^9.0|^10.0" + "illuminate/view": "^9.0|^10.0", + "spatie/laravel-package-tools": "^1.14" }, "require-dev": { "blade-ui-kit/blade-heroicons": "^2.0", diff --git a/config/form-components.php b/config/form-components.php index 1b8e16b..d6df63a 100644 --- a/config/form-components.php +++ b/config/form-components.php @@ -5,20 +5,269 @@ return [ /* |-------------------------------------------------------------------------- - | Components + | Component Defaults |-------------------------------------------------------------------------- | - | Below is a reference of all the blade components that should be loaded - | into your app by this package. The components shown here are just to - | add shortcuts for accessing them instead of using - | syntax. You can disable or overwrite any component class or alias you want. + | We've added some common options you may want to globally edit to avoid + | having to change them everytime you call a component or having to + | override a component definition. | - | Note: Any components listed here that have an array for the config value - | shouldn't be renamed or removed from the config if you use them since - | the underlying component will reference the config values in the - | component's array. Also, if you rely on `fcStyles` and/or `fcScripts` - | for using component assets via cdn, you shouldn't remove the component's - | from here either. + */ + 'defaults' => [ + // Global defaults will be applied to all components. + 'global' => [ + // Show error states by default. + 'show_errors' => true, + + // Set the fields to use by default for properties on options in select components. + 'value_field' => 'id', + 'label_field' => 'name', + // Will default to label field if null - only applies to custom selects + 'selected_label_field' => null, + 'disabled_field' => 'disabled', + 'children_field' => 'children', + ], + + // Input defaults will be applied to all input types (email, password, etc.). + 'input' => [ + // Supported: 'sm', 'md', 'lg' + // Applies to all input types except for checkbox/radios. + 'size' => 'md', + + // Classes applied by default to input parent div. + // Will also apply to select. + 'container_class' => null, + + // Base input classes applied by default. + 'input_class' => null, + ], + + 'password' => [ + // Show the password reveal button by default. + 'show_toggle' => true, + + // Icon shown when password is hidden. + 'show_icon' => 'heroicon-m-eye', + + // Icon shown when password is revealed. + 'hide_icon' => 'heroicon-m-eye-slash', + ], + + 'textarea' => [ + // How many rows should the textarea have by default. + 'rows' => 3, + + // Automatically resize the textarea based on content length. + 'auto_resize' => true, + ], + + 'select' => [ + // Automatically apply a CSS class to each select. + 'input_class' => null, + ], + + // Defaults for checkbox/radios. + 'choice' => [ + // Automatically apply a CSS class to each checkbox/radio container. + 'container_class' => null, + + // Automatically apply a CSS class to each checkbox/radio input. + 'input_class' => null, + + // Supported: 'sm', 'md', 'lg' (defaults to 'sm') + 'size' => null, + + // Show the description inline with the label by default. + 'inline_description' => false, + + // Render the label on the left side of the checkbox/radio by default. + 'label_left' => false, + ], + + // Defaults for the switch toggle component. + 'switch_toggle' => [ + // Apply a CSS class to the label that contains the switch toggle globally. + 'container_class' => null, + + // Apply a CSS class to the switch toggle (not the actual input element) globally. + 'input_class' => null, + + // Set the default size of the switch toggle. + // Supported: 'sm', 'md', 'lg', (default is 'md') + 'size' => null, + + // Set the default color of the switch toggle. (e.g. "blue", "red", "green", etc.) + 'color' => null, + + // Set the default icon to show when the switch is in an "on" state. + 'on_icon' => null, + + // Set the default icon to show when the switch is in an "off" state. + 'off_icon' => null, + ], + + // Defaults for the date picker component. + 'date_picker' => [ + // Allow date picker to open from clicking on the input by default. + 'click_opens' => true, + + // Allow user to modify the text of the input by default. + 'allow_input' => true, + + // Enable the time picker by default. + 'enable_time' => false, + + // Set the default date format. (defaults to y-m-d) + 'format' => null, + + // Set an icon to show on the date picker for an "open" button by default. + // Set to null to hide it. + 'toggle_icon' => 'heroicon-m-calendar', + + // Allow date pickers to be cleared by a clear button by default. + 'clearable' => true, + + // Set an icon to show on the date picker's clear button by default. + 'clear_icon' => 'heroicon-m-x-mark', + + // Set the default placeholder text for the date picker. + // For best results, use a translation key as it will be translated automatically by the component. + 'placeholder' => 'form-components::messages.date_picker_placeholder', + ], + + // Defaults for custom and tree select. + 'custom_select' => [ + // Apply a CSS class by default to the root element of the custom select. + // Note: this will also apply to tree-select as well. + 'container_class' => null, + + // Apply a CSS class by default to the custom select button. + 'input_class' => null, + + // Apply a CSS class by default to the custom select menu. + 'menu_class' => null, + + // Make custom selects searchable by default. + 'searchable' => true, + + // Make custom selects clearable by default. + // Will not show the clear button if the select is not optional. + 'clearable' => true, + + // Make custom selects optional by default. When marked as optional, custom select + // will allow you to clear out its value, unless it has a minimum amount of options + // required in a multi-select. + 'optional' => false, + + // Set the default icon to use to show that an option is selected. + // Set to null to disable it. + 'option_selected_icon' => 'heroicon-m-check', + + // Define the name of the icon to show on the custom select button by default. + // Set to null to hide it. + 'button_icon' => 'heroicon-m-chevron-down', + + // Define the default clear icon that will show on the custom select button and + // multi-select selected options. Set to null to hide it. + 'clear_icon' => 'heroicon-m-x-mark', + + // In a multi-select, this is the minimum amount of options that must be selected. + // Set to null or 0 to disable it. + 'min_selected' => null, + + // In a multi-select, this is the maximum amount of options that can be selected. + // Set to null to disable it. + 'max_selected' => null, + ], + + // Defaults for the tree select. + 'tree_select' => [ + // Set the default icon to use to show that an option has children. + // Icon will be rotated to indicate when the option is expanded. + 'has_child_icon' => 'heroicon-m-chevron-right', + ], + + // Defaults for the timezone select. + 'timezone_select' => [ + // Use the custom select component by default for the timezone select. + 'use_custom_select' => true, + ], + + // Defaults for the form groups. + 'form_group' => [ + // Apply a CSS class to the root form group element globally. + 'class' => null, + + // Apply a margin bottom by default to form groups (except for last child). + 'margin_bottom' => true, + + // Render a border on top of each form group by default. + // Does not render on first of type form groups in a container. + // This option only applies to inline form groups as well. + 'border' => true, + + // Make all form groups show the label inline with the input by default. + 'inline' => false, + + // Apply a CSS class to the form group label container globally. + 'label_container_class' => null, + + // Apply a CSS class to the form group content globally. + 'content_class' => null, + ], + + // Defaults for the file upload component. + 'file_upload' => [ + // Display a file upload progress bar by default. + // Only shows if a "wire:model" is present. + 'display_upload_progress' => true, + + // Use the native HTML5 progress bar by default. + // Not recommended if you need consistent styling across browsers. + 'use_native_progress_bar' => false, + + // Globally apply a CSS class to each file upload container. + 'container_class' => null, + + // Globally apply a CSS class to each file upload input. + 'input_class' => null, + ], + + // Defaults for the file pond component. + 'file_pond' => [ + // Allow drag and drop file uploads by default. + 'allow_drop' => true, + + // Limit multiple file uploads to a certain number of files by default. + // Set to null to allow unlimited files. + 'max_files' => null, + + // Configure FilePond options by default. + 'options' => [], + ], + + // Defaults for quill. + 'quill' => [ + // Automatically focus the editor on page load by default. + 'auto_focus' => false, + ], + + // Defaults for form errors. + 'form_error' => [ + // Define which HTML tag to use for the error message by default. + 'tag' => 'p', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Component Aliases + |-------------------------------------------------------------------------- + | + | Here you may define aliases for components this package provides. + | For example, instead of rendering an input with , + | you may register an alias of 'input' and render it with + | instead. | */ 'components' => [ @@ -30,64 +279,28 @@ 'label' => Components\Label::class, // Choice - 'checkbox' => Components\Choice\Checkbox::class, 'checkbox-group' => Components\Choice\CheckboxGroup::class, + 'checkbox' => Components\Choice\Checkbox::class, 'radio' => Components\Choice\Radio::class, 'switch-toggle' => Components\Choice\SwitchToggle::class, - // Files - 'file-pond' => Components\Files\FilePond::class, - 'file-upload' => Components\Files\FileUpload::class, - // Inputs - 'custom-select' => [ - 'class' => Components\Inputs\CustomSelect::class, - - /* - * This icon will be shown when an option is selected - * and the "optional" attribute is set to true. - */ - 'clear_icon' => 'heroicon-o-x-mark', - ], - 'custom-select-option' => Components\Inputs\CustomSelectOption::class, - 'date-picker' => [ - 'class' => Components\Inputs\DatePicker::class, - - /* - * This icon will be shown as a "toggle button" for the date picker. - */ - 'icon' => 'heroicon-s-calendar', - - /* - * This icon will be shown when there is a value, and will allow you - * to clear the input. - */ - 'clear_icon' => 'heroicon-s-x-mark', - ], 'input' => Components\Inputs\Input::class, 'email' => Components\Inputs\Email::class, - 'password' => [ - 'class' => Components\Inputs\Password::class, - - /* - * This icon will show when the password is masked and show toggle is enabled. - * Can be overridden individually as well. - */ - 'show_password_icon' => 'heroicon-s-eye', - - /* - * This icon will show when the password is un-masked and show toggle is enabled. - * Can be overridden individually as well. - */ - 'hide_password_icon' => 'heroicon-o-eye-slash', - ], + 'password' => Components\Inputs\Password::class, 'select' => Components\Inputs\Select::class, 'textarea' => Components\Inputs\Textarea::class, + 'date-picker' => Components\Inputs\DatePicker::class, + 'custom-select' => Components\Inputs\CustomSelect::class, + 'custom-select-option' => Components\Inputs\CustomSelectOption::class, 'timezone-select' => Components\Inputs\TimezoneSelect::class, - // Tree select config is same as custom-select config 'tree-select' => Components\Inputs\TreeSelect::class, 'tree-select-option' => Components\Inputs\TreeSelectOption::class, + // Files + 'file-upload' => Components\Files\FileUpload::class, + 'file-pond' => Components\Files\FilePond::class, + // Rich Text 'quill' => Components\RichText\Quill::class, @@ -98,13 +311,13 @@ | Prefix |-------------------------------------------------------------------------- | - | This value will set a prefix for all laravel-form-components blade - | components. By default it's empty. This is useful if you want to avoid - | collision with components from other libraries. + | This value will be a prefix for all component aliases under the + | `components` key. This is useful if you want to avoid collisions + | with components from other libraries. | - | If set with "tw", for example, you can reference components like: + | If you set it to "tw", for example, you can reference it like this: | - | + | | */ 'prefix' => '', @@ -131,7 +344,7 @@ | so you may define a subset of regions to pull from instead. Set | the value to `false` to use all regions. | - | Example: [\Rawilk\FormComponents\Support\TimezoneRegion::AMERICA] + | Example: [\Rawilk\FormComponents\Support\TimezoneRegionEnum::America->value] | */ 'timezone_subset' => false, @@ -150,49 +363,6 @@ */ 'optional_hint_text' => 'form-components::messages.optional', - /* - |-------------------------------------------------------------------------- - | Third Party Asset Libraries - |-------------------------------------------------------------------------- - | - | These settings hold reference to all third party libraries and their - | asset files served through a CDN. Individual components can require - | these asset files through their static `$assets` property. - | - */ - 'assets' => [ - 'alpine' => 'https://unpkg.com/alpinejs@3.9.3/dist/cdn.min.js', - - 'flatpickr' => [ - 'https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css', - 'https://cdnjs.cloudflare.com/ajax/libs/flatpickr/4.6.11/flatpickr.min.js', - ], - - 'filepond' => [ - 'https://unpkg.com/filepond/dist/filepond.css', - 'https://unpkg.com/filepond/dist/filepond.js', - ], - - 'popper' => 'https://unpkg.com/@popperjs/core@2', - - 'quill' => [ - 'https://cdn.quilljs.com/1.3.7/quill.snow.css', - 'https://cdn.quilljs.com/1.3.7/quill.min.js', - ], - ], - - /* - |-------------------------------------------------------------------------- - | Enable Third Party Assets - |-------------------------------------------------------------------------- - | - | Set this to false to disable linking to third-party CDNs from - | the 'assets' key in this config. This is ignored if you pass `true` - | to either `@fcScripts` or `@fcStyles` directives. - | - */ - 'link_vendor_cdn_assets' => env('FC_LINK_VENDOR_CDN_ASSETS', null), - /* |-------------------------------------------------------------------------- | FormComponents Assets URL diff --git a/dist/form-components.js b/dist/form-components.js index dbc1de9..fdd2eca 100644 --- a/dist/form-components.js +++ b/dist/form-components.js @@ -1 +1,2 @@ -(()=>{var t={400:()=>{"function"!=typeof String.prototype.toSlug&&(String.prototype.toSlug=function(){var t=this.toString();t=(t=t.replace(/^\s+|\s+$/g,"")).toLowerCase();for(var e="àáäâèéëêìíïîòóöôùúüûñç·/_,:;",n=0,o=e.length;n{"use strict";function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}var e;function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,o)}return n}function i(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,o=new Array(e);nt.length&&(this.focusedOptionIndex=0),this._focusOption(t[this.focusedOptionIndex])}},focusPreviousOption:function(){if(!this.disabled){if(!this.open)return this.openMenu();var t=this._getFocusableElements();if(!t.length)return this.focusedOptionIndex=-1;this.focusedOptionIndex--,this.focusedOptionIndex<0&&(this.focusedOptionIndex=t.length-1),this._focusOption(t[this.focusedOptionIndex],{block:"start"})}},focusFirstOption:function(){if(!this.disabled){var t=this._getFocusableElements();if(!t.length)return this.focusedOptionIndex=-1;this.focusedOptionIndex=0,this._focusOption(t[this.focusedOptionIndex],{block:"start"})}},focusLastOption:function(){if(!this.disabled){var t=this._getFocusableElements();if(!t.length)return this.focusedOptionIndex=-1;this.focusedOptionIndex=t.length-1,this._focusOption(t[this.focusedOptionIndex],{block:"end"})}},updateFocusedOptionIndexFromElement:function(t){var e=this._getFocusableElements();if(e.length){this.focusedOptionIndex=e.findIndex((function(e){return e.isEqualNode(t)}));try{this._focusedOptionId=t._x_dataStack[0]._id}catch(t){}}},canToggleOption:function(t){if(this.disabled)return!1;var e=this._isValueSelected(t);return this.multiple?e&&this.value.length<=this.minSelected?this.optional:!(!e&&!this._canSelectAnotherOption()):!(e&&!this.optional)},clearValue:function(){this.disabled||this.optional&&(this.value=this.multiple?[]:null,this.valueLabel=null)},toggleOption:function(t){this.disabled||(this.multiple?this._toggleMultiSelectOption(t):this._toggleSingleSelectOption(t))},toggleOptionByValue:function(t){var e=this._getOptionByValue(t);return e=e?e._x_dataStack[0]:{optionValue:t},this.toggleOption(e)},setNewValue:function(e){var n,o=this;if(this.multiple)return this.value=[],this.selectedOptions=[],void e.forEach((function(t){return o.toggleOptionByValue(t)}));null!==(n=e)&&"object"===t(n)&&(e=null),this.value=e},handleValueChange:function(){if(!this.closeOnSelect&&this.open)return this._initPopper(),void this._focusSearch();this.closeOnSelect&&this.open&&this._handleCloseOnSelect()},labelForValue:function(t){var e=this.selectedOptions.find((function(e){return String(e.optionValue)===String(t)}));return e?e.optionSelectedLabel?e.optionSelectedLabel:e.optionLabel:t},_toggleMultiSelectOption:function(t){var e=t.optionValue,n=s(this.value);this._isValueSelected(e)&&this._canDeSelectAnOption()?(n.splice(n.indexOf(e),1),this.selectedOptions.splice(this.selectedOptions.findIndex((function(t){return String(t.optionValue)===String(e)})),1)):!this._isValueSelected(e)&&this._canSelectAnotherOption()&&(n.push(e),this.selectedOptions.push(t)),this.value=n},_toggleSingleSelectOption:function(t){var e="object"===l(t)?t.optionValue:t;this.value=this._isValueSelected(e)?null:e},_canDeSelectAnOption:function(){return!!this.optional||this.value.length>this.minSelected},_canSelectAnotherOption:function(){return null===this.maxSelected||this.value.length1&&void 0!==arguments[1]?arguments[1]:{};try{t._x_dataStack[0].focus(i({parent:this},e)),this.updateFocusedOptionIndexFromElement(t)}catch(t){}},_focusRoot:function(){var t=this;this.disabled||setTimeout((function(){return t._root.focus()}),50)},_focusSearch:function(){var t=this;if(this.searchable)try{setTimeout((function(){return t.searchInput().focus()}),50)}catch(t){}},_focusSelectedOption:function(){var t=this,e=this.multiple?String(this.value[0]):String(this.value);if(e){var n=this._getOptionByValue(e);n&&!n.optionDisabled&&setTimeout((function(){return t._focusOption(n)}),50)}},_getOptionByValue:function(t){var e=this._getAllOptionElements();return e.length?e.find((function(e){try{return String(e._x_dataStack[0].optionValue)===String(t)}catch(t){}})):null},_getAllOptionElements:function(){return s(this.menu().querySelectorAll(this._optionElementSelector))},_getFocusableElements:function(){return null!==this.focusableElements?this.focusableElements:this.focusableElements=s(this.menu().querySelectorAll(this._focusableElementSelector)).filter((function(t){return null!==t.offsetParent}))},_handleCloseOnSelect:function(){this._shouldCloseOnSelect()&&this.closeMenu()},_handleSearch:function(){if(this.focusableElements=null,this.livewireSearch&&this._wire)try{this._wire[this.livewireSearch](this.search)}catch(t){}else this._doLocalSearch()},_doLocalSearch:function(){var t=this._getAllOptionElements(),e=this.search?this.search.toLowerCase():null,n=0;t.forEach((function(t){var o=!0;if(e)try{var i=t._x_dataStack[0].optionValue,r=t._x_dataStack[0].optionLabel;o=String(i).toLowerCase().includes(e)||String(r).toLowerCase().includes(e)}catch(t){}o&&n++,t.style.display=o?null:"none"}));var o=this.$refs.noResults;o&&(o.style.display=0===n?null:"none")},_initPopper:function(){this._resetPopper(),this._popper=e(this._root,this.menu(),this._popperConfig())},_initSelect:function(){var t=this;if(this._root=this.$root,"function"!=typeof(e=window.Popper?window.Popper.createPopper:window.createPopper))throw new TypeError("<".concat(this._componentName,"> requires Popper (https://popper.js.org)"));this.autofocus&&this._focusRoot(),this.searchable&&this.$watch("search",(function(){return t._handleSearch()})),this.multiple||!this.value||this.initialLabel||this._determineInitialLabel(),this.initialLabel&&(this.valueLabel=this.initialLabel,this.valuePlaceholder=this.initialLabel),this.multiple&&this.$nextTick((function(){t.selectedOptions=s(t.value).map((function(e){return t._getOptionByValue(e)._x_dataStack[0]}))})),this.$watch("value",(function(e,n){JSON.stringify(e)!==JSON.stringify(n)&&(t._updateSelectedOption(e),t.handleValueChange(),t.$dispatch("input",e),null===e&&t._wire&&t._wireModelName&&t._wire.set(t._wireModelName,null,!0))}))},_updateSelectedOption:function(t){if(!this.multiple){t||(this.valueLabel=this.placeholder);var e=this._getOptionByValue(t);if(e)try{this.valueLabel=e._x_dataStack[0].optionSelectedLabel,this.valuePlaceholder=e._x_dataStack[0].optionLabel}catch(t){}}},_popperConfig:function(){return{placement:"bottom-start",strategy:this.fixed?"fixed":"absolute",modifiers:[{name:"offset",options:{offset:[0,0]}},{name:"preventOverflow",options:{boundariesElement:this._root}}]}},_resetPopper:function(){this._popper&&(this._popper.destroy(),this._popper=null)},_determineInitialLabel:function(){var t=this;this.$nextTick((function(){var e=t._getOptionByValue(t.value);if(e)try{return t.initialLabel=e._x_dataStack[0].optionSelectedLabel,t.valueLabel=t.initialLabel,void(t.valuePlaceholder=t.initialLabel)}catch(t){}t.initialLabel=t.value,t.valueLabel=t.initialLabel,t.valuePlaceholder=t.initialLabel}))},_shouldCloseOnSelect:function(){return this._noCloseOnSelect?(this._noCloseOnSelect=!1,!1):!!this.closeOnSelect&&(!this.multiple||(null===this.maxSelected?this.value.length>=this.minSelected:this.value.length>=this.maxSelected))}};function u(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,o)}return n}function h(t){for(var e=1;e0:""!==this.value&&null!==this.value},get hasValueAndCanClear(){return!!this.optional&&(!this.disabled&&this.hasValue)},get searchPlaceholder(){return this.multiple?Array.isArray(this.value)&&this.value.length?null:this.placeholder:""!==this.value&&null!==this.value?this.valuePlaceholder:this.placeholder},get showSearchInput(){return!!this.multiple||this.open},init:function(){this._initSelect()},closeMenu:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{focusRoot:!0};if(this.open){this._closeMenu();var e=!1!==t.focusRoot;e&&this._focusRoot()}},selectOption:function(t){if(!this.disabled)try{t._x_dataStack[0].toggle({parentMenu:this})}catch(t){}}})};var d=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=b(t,e),i=n.threshold||t.offsetHeight;return o.top>=0&&o.left>=0&&o.bottom<=e.offsetHeight&&o.right<=e.offsetWidth&&o.top<=e.offsetHeight-i},b=function(t,e){var n=e.getBoundingClientRect(),o=t.getBoundingClientRect();return{top:o.top-n.top,right:o.right-n.right,bottom:o.bottom-n.bottom,left:o.left-n.left}};const O={optionDisabled:!1,optionValue:null,optionLabel:null,optionSelectedLabel:null,hasFocus:!1,_id:null,_optionComponentName:"select-option",_optionSelector:"",_optionIndex:-1,optionSelected:function(){return this._isValueSelected(this.optionValue)},_init:function(){var t,e=this;this._id=(t=this._optionComponentName,"".concat(t,"_").concat(Math.random().toString(36).slice(2))),this.$watch("hasFocus",(function(t){t&&e.$dispatch("".concat(e._componentName,"-").concat(e.name.toSlug(),"-option-focused"),e._id)}))},onReceivedFocus:function(t){var e=t.detail;this.hasFocus=this._id===e,this.hasFocus&&(this._focusedOptionId=this._id)},focus:function(t){var e=t.updateParentIndex,n=void 0!==e&&e,o=t.parent,i=void 0===o?null:o,r=t.scroll,l=void 0===r||r,s=t.block,c=void 0===s?"end":s;this.optionDisabled||this.hasFocus||(i=i||this,this.hasFocus=!0,l&&function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};try{var o=t.offsetTop;e.scrollTop=o||0,d(t,e,n)||t.scrollIntoView({block:n.block||"end",inline:"nearest",behavior:"smooth"})}catch(t){}}(this.$root,i.menu(),{threshold:(this.$root.querySelector(this._optionSelector)||this.$root).offsetHeight,block:c}),n&&i.updateFocusedOptionIndexFromElement(this.$root))},toggle:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{parentMenu:null},e=t.parentMenu||this;!this.optionDisabled&&e.canToggleOption(this.optionValue)&&e.toggleOption(this)}};function v(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,o)}return n}function g(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,o=new Array(e);n0:""!==this.value&&null!==this.value},get hasValueAndCanClear(){return!!this.optional&&(!this.disabled&&this.hasValue)},get searchPlaceholder(){return this.multiple?Array.isArray(this.value)&&this.value.length?null:this.placeholder:""!==this.value&&null!==this.value?this.valuePlaceholder:this.placeholder},get showSearchInput(){return!!this.multiple||this.open},init:function(){this._initSelect()},closeMenu:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{focusRoot:!0};if(this.open){this._closeMenu();var e=!1!==t.focusRoot;e&&this._focusRoot()}},onArrowRight:function(t){if(this.open&&!(this.focusedOptionIndex<0)){var e=this._getFocusableElements()[this.focusedOptionIndex];try{e._x_dataStack[0].expand()&&t.preventDefault()}catch(t){}}},onArrowLeft:function(t){if(this.open&&!(this.focusedOptionIndex<0)){var e=this._getFocusableElements()[this.focusedOptionIndex];try{!0===e._x_dataStack[0].collapse({parent:this})&&t.preventDefault()}catch(t){}}},selectOption:function(t){if(!this.disabled)try{t._x_dataStack[0].toggle({parentMenu:this})}catch(t){}},_doLocalSearch:function(){var t=this,e=this._getTopLevelOptionElements(),n=this.search?this.search.toLowerCase():null,o=0,i=function e(i){var r=!0;if(n)try{var l=i._x_dataStack[0].optionValue,s=i._x_dataStack[0].optionLabel;r=String(l).toLowerCase().includes(n)||String(s).toLowerCase().includes(n)}catch(t){}try{var c=i._x_dataStack[0].level,a=x(i.querySelectorAll(t._levelOptionSelector(c+1))),u=!1;a.forEach((function(t){e(t)&&(u=!0)})),u&&(r=!0)}catch(t){}return r&&o++,i.style.display=r?null:"none",r};e.forEach((function(t){return i(t)}));var r=this.$refs.noResults;r&&(r.style.display=0===o?null:"none")},_getTopLevelOptionElements:function(){return x(this.menu().querySelectorAll(this._levelOptionSelector(0)))},_levelOptionSelector:function(t){return this._topLevelOptionElementSelector.replace(":level",t)}})};var V=function t(e,n){if(e){if(n(e))return e;if(e.parentElement)return t(e.parentElement,n)}};function k(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,o)}return n}function C(t){for(var e=1;e0)return this.focusNearestParent({parentMenu:n}),!0;var o=!0===this.expanded;return this.expanded=!1,o}},expand:function(){if(this.hasChildren&&!this.optionDisabled){var t=!1===this.expanded;return this.expanded=!0,t}},focusNearestParent:function(t){var e=this,n=t.parentMenu,o=void 0===n?null:n;o=o||this;var i=V(this.$root,(function(t){try{var n=t._x_dataStack[0];return!!n&&n.level===e.level-1}catch(t){return!1}}));if(i)try{i._x_dataStack[0].focus({updateParentIndex:!0,parent:o})}catch(t){}}})};document.addEventListener("alpine:init",(function(){Alpine.data("customSelect",f),Alpine.data("customSelectOption",m),Alpine.data("quill",j),Alpine.data("treeSelect",A),Alpine.data("treeSelectOption",M)}));n(400)})()})(); \ No newline at end of file +!function(factory){"function"==typeof define&&define.amd?define(factory):factory()}((function(){"use strict";function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter((function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable}))),keys.push.apply(keys,symbols)}return keys}function _objectSpread2(target){for(var i=1;iarr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i3&&void 0!==arguments[3]&&arguments[3],key=(Math.random()+1).toString(36).substring(7),keyFromValue=this.getKeyFromValue(value,this.__config.by);return keyFromValue&&(key=keyFromValue),isOptGroup||(this.values[key]=value,this.elsByKey[key]=el,this.orderedKeys.push(key),this.searchableText[key]=el.textContent.trim().toLowerCase(),disabled&&this.disabledKeys.push(key),this.__itemBooted(el,value,disabled,key)),key},__itemBooted:function(el,value,disabled,key){},destroyItem:function(el){var key=keyByValue(this.elsByKey,el);this.selectedKeys.includes(key)||delete this.values[key],delete this.elsByKey[key],delete this.orderedKeys[this.orderedKeys.indexOf(key)],delete this.searchableText[key],delete this.disabledKeys[key],this.reorderKeys(),this.__itemDestroyed(el,key)},__itemDestroyed:function(el,key){},resetOptions:function(){this.activeKey=null,this.reorderKeys()},reorderKeys:function(){var _this=this;this.orderedKeys.forEach((function(key){var el=_this.elsByKey[key];null!=el&&el.isConnected||_this.destroyItem(el)})),this.orderedKeys=this.orderedKeys.slice().sort((function(a,z){if(null===a||null===z)return 0;var aEl=_this.elsByKey[a],zEl=_this.elsByKey[z],position=aEl.compareDocumentPosition(zEl);return position&Node.DOCUMENT_POSITION_FOLLOWING?-1:position&Node.DOCUMENT_POSITION_PRECEDING?1:0}))},activeEl:function(){if(this.activeKey)return this.elsByKey[this.activeKey]},isActiveEl:function(el){var key=keyByValue(this.elsByKey,el);if(key)return this.activeKey===key},activateEl:function(el){var key=keyByValue(this.elsByKey,el);key&&this.activateKey(key)},selectEl:function(el){var key=keyByValue(this.elsByKey,el);key&&this.selectKey(key)},isSelectedEl:function(el){var key=keyByValue(this.elsByKey,el);if(key)return this.isSelected(key)},isDisabledEl:function(el){var key=keyByValue(this.elsByKey,el);if(key)return this.isDisabled(key)},hideEl:function(el){el.style.display="none",el.setAttribute("data-hidden","true")},showEl:function(el){el.style.display="",el.removeAttribute("data-hidden")},isHiddenEl:function(el){return"none"===el.style.display||!el.offsetParent},scrollingCount:0,activateAndScrollToKey:function(key){var _this2=this;this.scrollingCount++,this.activateKey(key);var targetEl=this.elsByKey[key];targetEl&&targetEl.scrollIntoView({block:"nearest"}),setTimeout((function(){_this2.scrollingCount--}),25)},selectedBasicValueOrValues:function(by){return this.__multiple?this.selectedBasicValues(by):this.selectedBasicValue(by)},selectedBasicValues:function(by){var _this3=this;return this.selectedKeys.map((function(i){var value=_this3.values[i];return null!=value&&value.hasOwnProperty(by)?value[by]:value}))},selectedBasicValue:function(by){var value=this.selectedKeys[0]?this.values[this.selectedKeys[0]]:null;return null!=value&&value.hasOwnProperty(by)?value[by]:value},selectedValueOrValues:function(){return this.__multiple?this.selectedValues():this.selectedValue()},selectedValues:function(){var _this4=this;return this.selectedKeys.map((function(i){return _this4.values[i]}))},selectedValue:function(){return this.selectedKeys[0]?this.values[this.selectedKeys[0]]:null},selectValue:function(value,by){var _this5=this;if(value=normalizeValue(value,this.__multiple),by=mapByToCallback(by),this.__multiple){var keys=[];return value.forEach((function(i){for(var key in _this5.values)by(_this5.values[key],i)&&(keys.includes(key)||keys.push(key))})),void this.selectExclusive(keys)}for(var key in this.values)value&&by(this.values[key],value)&&this.selectKey(key);null===value&&(this.selectedKeys=[])},getKeyFromValue:function(value,by){if(value)for(var key in by=mapByToCallback(by),this.values)if(by(this.values[key],value))return key},getKeyFromSimpleValue:function(value,by){if(value)for(var key in by=mapByToSimpleCompareCallback(by),this.values)if(by(this.values[key],value))return key},getObjectFromValue:function(value,by){if(value)for(var key in by=mapByToSimpleCompareCallback(by),this.values)if(by(this.values[key],value))return this.values[key]},toggleValue:function(value,by){if(value&&(by=mapByToCallback(by),this.__multiple))for(var key in this.values)if(by(this.values[key],value)){this.toggleSelected(key);break}},isDisabled:function(key){return this.disabledKeys.includes(key)},selectKey:function(key){this.isDisabled(key)||(this.__multiple?this.toggleSelected(key):this.selectOnly(key))},toggleSelected:function(key){if(this.selectedKeys.includes(key)){if(!this.canRemoveOptions())return;this.selectedKeys.splice(this.selectedKeys.indexOf(key),1)}else this.selectedKeys.push(key)},selectOnly:function(key){this.selectedKeys=[],this.selectedKeys.push(key)},selectExclusive:function(keys){for(var _this6=this,toAdd=_toConsumableArray(keys),i=0;i=0&&!visibleKeyFound;)targetKey=this.nonDisabledOrderedKeys[currentIndex],visibleKeyFound=!this.isHiddenEl(this.elsByKey[targetKey]),currentIndex--;return visibleKeyFound||(targetKey=null),targetKey},searchQuery:"",clearSearch:Alpine.debounce((function(){this.searchQuery=""}),350),searchKey:function(query){var foundKey;for(var key in this.clearSearch(),this.searchQuery+=query,this.searchableText){if(this.searchableText[key].startsWith(this.searchQuery)){foundKey=key;break}}if(this.nonDisabledOrderedKeys.includes(foundKey))return foundKey},searchableQuery:"",handleSearchableQuery:function(query){if(query!==this.searchableQuery)if(this.searchableQuery=query,this.__wire&&this.__wireSearch)this.__wire[this.__wireSearch](this.searchableQuery);else for(var key in this.searchableText){var content=this.searchableText[key],el=this.elsByKey[key];!this.searchableQuery||content.toLowerCase().includes(this.searchableQuery.toLowerCase())?this.showEl(el):this.hideEl(el)}},canRemoveOptions:function(){if(!this.__multiple&&1===this.selectedKeys.length)return this.__config.optional;var minSelected=this.__config.minSelected;return!!(Number.isNaN(minSelected)||minSelected<1)||this.selectedKeys.length>minSelected},activateByKeyEvent:function(e){if(this.reorderKeys(),!1!==this.__activateByKeyEvent(e)){var targetKey,hasActive=this.hasActive();switch(e.key){case"Tab":case"Backspace":case"Delete":case"Meta":break;case["ArrowDown","ArrowRight"]["vertical"===this.__orientation?0:1]:e.preventDefault(),e.stopPropagation(),targetKey=hasActive?this.nextKey():this.firstKey();break;case["ArrowUp","ArrowLeft"]["vertical"===this.__orientation?0:1]:e.preventDefault(),e.stopPropagation(),targetKey=hasActive?this.prevKey():this.lastKey();break;case"Home":case"PageUp":e.preventDefault(),e.stopPropagation(),targetKey=this.firstKey();break;case"End":case"PageDown":e.preventDefault(),e.stopPropagation(),targetKey=this.lastKey();break;default:1===e.key.length&&(targetKey=this.searchKey(e.key))}targetKey&&this.activateAndScrollToKey(targetKey)}},__activateByKeyEvent:function(e){}}},keyByValue=function(object,value){return Object.keys(object).find((function(key){return object[key]===value}))},isObjectOrArray=function(subject){return"object"===_typeof(subject)&&null!==subject},renderHiddenInputs=function(el,name,value){var newInputs=generateInputs(name,value);newInputs.forEach((function(i){return i._x_hiddenInput=!0})),newInputs.forEach((function(i){return i._x_ignore=!0}));for(var children=el.children,oldInputs=[],i=0;i2&&void 0!==arguments[2]?arguments[2]:[];if(isObjectOrArray(value))for(var key in value)carry=carry.concat(generateInputs("".concat(name,"[").concat(key,"]"),value[key]));else if(null!==value&&!1!==value){var el=document.createElement("input");return el.setAttribute("type","hidden"),el.setAttribute("name",name),el.setAttribute("value",""+value),[el]}return carry},generateContext$1=function(_ref){var multiple=_ref.multiple,orientation=_ref.orientation,__wire=_ref.__wire,__wireSearch=_ref.__wireSearch,__config=_ref.__config,Alpine=_ref.Alpine;return _objectSpread2(_objectSpread2({},selectContext(Alpine)),{},{__multiple:multiple,__orientation:orientation,__wire:__wire,__wireSearch:__wireSearch,__config:__config,get isScrollingTo(){return this.scrollingCount>0},get nonDisabledOrderedKeys(){var _this=this;return this.orderedKeys.filter((function(i){return!_this.isDisabled(i)}))}})},selectPopper={__createPopper:void 0,__popper:void 0,__resetPopper:function(){this.__popper&&(this.__popper.destroy(),this.__popper=null)},__popperConfig:function(){return{placement:"bottom-start",strategy:this.__fixed?"fixed":"absolute",modifiers:[{name:"offset",options:{offset:[0,10]}},{name:"preventOverflow",options:{boundariesElement:this.$root}}]}},__initPopper:function(){this.__resetPopper(),this.__popper=this.__createPopper(this.$root,this.$refs.__options,this.__popperConfig())}};function selectData(el,Alpine,config){var _config$__value;return{__ready:!1,__value:null!==(_config$__value=config.__value)&&void 0!==_config$__value&&_config$__value,__richValue:!1,__isOpen:!1,__context:void 0,__isMultiple:!1,__isStatic:!1,__isClearable:void 0,__isDisabled:!1,__compareBy:null,__inputName:void 0,__fixed:!1,__searchable:void 0,__hasCustomSelectLabel:!1,__orientation:"vertical",__externalChanged:!1,__config:config.__config,__wireSearch:void 0,__type:"custom",init:function(){var _this=this;if(this.__createPopper=window.Popper?window.Popper.createPopper:window.createPopper,"function"!=typeof this.__createPopper)throw new TypeError("".concat(this.__type,"-select requires Popper.js (https://popper.js.org)"));this.__isMultiple=Alpine.bound(el,"data-multiple",!1),this.__isDisabled=Alpine.bound(el,"disabled",!1)||Alpine.bound(el,"readonly",!1),this.__inputName=Alpine.bound(el,"name",null),this.__compareBy=Alpine.bound(el,"by"),this.__orientation=Alpine.bound(el,"horizontal")?"horizontal":"vertical",this.__searchable=Alpine.bound(el,"searchable",!1),this.__isClearable=Alpine.bound(el,"clearable",!1),this.__wireSearch=Alpine.bound(el,"livewire-search"),this.__fixed=Alpine.bound(el,"fixed",!1);var autoFocus=Alpine.bound(el,"autofocus");this.__context=this.__generateContext(el,Alpine,config);var defaultValue=Alpine.bound(el,"default-value",null);defaultValue&&!this.__value&&(this.__value=defaultValue),queueMicrotask((function(){_this.__ready=!0,queueMicrotask((function(){var lastValueFingerprint=!1;Alpine.effect((function(){if(_this.__context.selectedKeys,!1===lastValueFingerprint||lastValueFingerprint!==JSON.stringify(_this.__value))if(_this.__externalChanged=!0,_this.__isMultiple){_this.__context.clearSelected();var _step,keys=[],_iterator=function(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=_unsupportedIterableToArray(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function(){};return{s:F,n:function(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function(e){throw e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function(){it=it.call(o)},n:function(){var step=it.next();return normalCompletion=step.done,step},e:function(e){didErr=!0,err=e},f:function(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}(_this.__value);try{for(_iterator.s();!(_step=_iterator.n()).done;){var value=_step.value,object=_this.__context.getObjectFromValue(value,_this.__compareBy);object&&keys.push(object)}}catch(err){_iterator.e(err)}finally{_iterator.f()}_this.__context.selectValue(keys,_this.__compareBy),_this.__richValue=_this.__context.selectedValueOrValues()}else{if("object"===_typeof(_this.__value)||Array.isArray(_this.__value)||null===_this.__value)_this.__context.selectValue(_this.__value,_this.__compareBy);else{var key=_this.__context.getKeyFromSimpleValue(_this.__value,_this.__compareBy);key&&_this.__context.selectKey(key)}_this.__richValue=_this.__context.selectedValueOrValues()}else _this.__value=_this.__context.selectedBasicValueOrValues(_this.__compareBy),_this.__richValue=_this.__context.selectedValueOrValues();lastValueFingerprint=JSON.stringify(_this.__value),_this.__inputName&&renderHiddenInputs(_this.$el,_this.__inputName,_this.__value)})),_this.__searchable&&Alpine.effect((function(){var query=_this.__context.searchableQuery;_this.$refs.__options&&_this.$refs.__options.querySelectorAll('[role="presentation"]:not([data-placeholder="true"])').forEach((function(el){query?_this.__context.hideEl(el):_this.__context.showEl(el)}))})),autoFocus&&_this.$refs.__button&&_this.$refs.__button.focus({preventScroll:!0})}))})),this.$watch("__value",(function(newValue){_this.$dispatch("input",newValue)})),this.__componentBooted(el,Alpine,config)},__open:function(){var _this2=this;if(!this.__isDisabled){this.__isOpen=!0,this.__context.activateSelectedOrFirst();var callback;callback=function(){_this2.__searchable&&_this2.$refs.__search?_this2.$refs.__search.focus({preventScroll:!0}):_this2.$refs.__options.focus({preventScroll:!0}),_this2.__initPopper()},requestAnimationFrame((function(){return requestAnimationFrame(callback)}))}},__close:function(){var _this3=this;this.__isOpen=!1,this.__resetPopper(),this.$nextTick((function(){return _this3.$refs.__button.focus({preventScroll:!0})}))},__generateContext:function(el,Alpine,config){},__componentBooted:function(el,Alpine,config){}}}function clearButtonDirective(el,Alpine,type){var magic="tree"===type?"$treeSelect":"$customSelect";return{":tabindex":function(){return!(this.$data.__isDisabled||!this[magic].hasValue)&&"0"},"x-show":function(){return this[magic].shouldShowClear},"x-init":function(){"button"!==this.$el.tagName.toLowerCase()||this.$el.hasAttribute("type")||(this.$el.type="button"),"button"!==this.$el.tagName.toLowerCase&&this.$el.setAttribute("role","button")},"@click.stop.prevent":function(){this.$data.__isDisabled||(this.$data.__context.clearSelected(),this.$data.__close(),this.$data.__value=this.$data.__isMultiple?[]:null)},"@keydown.space.stop.prevent":function(){this.$data.__isDisabled||(this.$data.__context.clearSelected(),this.$data.__close(),this.$data.__value=this.$data.__isMultiple?[]:null)}}}function optionsDirective(el,Alpine){return{"x-ref":"__options",":id":function(){return this.$id("fc-".concat(this.__type,"-select-options"))},"x-init":function(){this.$data.__isStatic=Alpine.bound(this.$el,"static",!1)},"x-show":function(){return!!this.$data.__isStatic||this.$data.__isOpen},"@click.outside":function(){this.$data.__close()},"@keydown.escape.stop.prevent":function(){this.$data.__close()},tabindex:"0",role:"listbox",":aria-orientation":function(){return this.$data.__orientation},":aria-labelledby":function(){return this.$id("fc-".concat(this.__type,"-select-button"))},":aria-activedescendant":function(){return this.$data.__context.activeEl()&&this.$data.__context.activeEl().id},":aria-multiselectable":function(){return this.$data.__isMultiple?"true":"false"},"@focus":function(){this.$data.__context.activateSelectedOrFirst()},"x-trap":function(){return this.$data.__isOpen},"@keydown":function(e){this.$data.__context.activateByKeyEvent(e)},"@keydown.enter.stop.prevent":function(){this.$data.__context.selectActive(),this.$data.__isMultiple||this.$data.__close()},"@keydown.space.stop.prevent":function(){this.$data.__context.selectActive(),this.$data.__isMultiple||this.$data.__close()}}}function optionDirective(el,Alpine,type){var rootMagic="tree"===type?"$treeSelect":"$customSelect",magic="tree"===type?"$treeSelectOption":"$customSelectOption";return{":id":function(){return this.$id("fc-".concat(this.__type,"-select-option"))},":tabindex":function(){return!this.$data.__isDisabled&&"-1"},":role":function(){return this[magic].isOptGroup?"presentation":"option"},"x-init":function(){var _this4=this,initCallback=function(){var value=Alpine.bound(el,"value"),disabled=Alpine.bound(el,"disabled"),isOptGroup=Alpine.bound(el,"is-opt-group");el.__optionKey=_this4.$data.__context.initItem(el,value,disabled,isOptGroup)};this.$data.__ready?initCallback():queueMicrotask(initCallback)},":aria-selected":function(){return this[magic].isSelected},":aria-disabled":function(){return this[magic].isDisabled},"@click":function(){this.$data.__isDisabled||this[magic].isDisabled||(this[magic].isSelected||this[rootMagic].canSelectMore)&&(this.$data.__context.selectEl(el),this.$data.__isMultiple||this.$data.__close())},"@mousemove":function(){this.$data.__context.activateEl(el)},"@mouseleave":function(){this.$data.__context.deactivate()}}}function tokenDirective(el,Alpine){return{":tabindex":function(){return!this.$data.__isDisabled&&"0"},":role":function(){return"button"!==this.$el.tagName.toLowerCase()&&!this.$data.__isDisabled&&"button"},"x-init":function(){var _this6=this,initCallback=function(){el.__key=_this6.$data.__context.getKeyFromValue(el.value)};this.$data.__ready?initCallback():queueMicrotask(initCallback)},"@click.stop.prevent":function(){!this.$data.__isDisabled&&el.__key&&this.$data.__context.toggleSelected(el.__key)},"@keydown.space.stop.prevent":function(){!this.$data.__isDisabled&&el.__key&&this.$data.__context.toggleSelected(el.__key)}}}var rootMagic=function(el,Alpine,callback,stubCallback){var data=Alpine.$data(el);return"function"!=typeof stubCallback&&(stubCallback=function(){return{}}),"function"!=typeof callback&&(callback=function(){return{}}),data.__ready?_objectSpread2({get isOpen(){return data.__isOpen},get isDisabled(){return data.__isDisabled},get isSearchable(){return data.__searchable},get selected(){return data.__value},get active(){return data.__context.active},get selectedObject(){return data.__richValue},get hasValue(){return data.__isMultiple?data.__value&&data.__value.length>0:!!data.__value},get shouldShowClear(){return!data.__isDisabled&&(!1!==data.__config.optional&&(!(data.__isMultiple&&!Number.isNaN(data.__config.minSelected)&&data.__config.minSelected>0)&&(data.__isClearable&&this.hasValue)))},get canSelectMore(){return!data.__isMultiple||(!!(Number.isNaN(data.__config.maxSelected)||data.__config.maxSelected<1)||data.__config.maxSelected>data.__value.length)},get canDeselectOptions(){return!data.__isDisabled&&data.__context.canRemoveOptions()},get hasOptions(){return data.__context.searchableQuery,data.$refs.__options&&data.$refs.__options.querySelectorAll('[role="option"]:not([data-hidden])').length>0},get hasSearch(){return!!data.__context.searchableQuery}},callback(data)):_objectSpread2({isDisabled:!1,isOpen:!1,selected:null,active:null,selectedObject:null},stubCallback(data))},optionMagic=function(el,Alpine,callback,stubCallback){"function"!=typeof stubCallback&&(stubCallback=function(){return{}}),"function"!=typeof callback&&(callback=function(){return{}});var data=Alpine.$data(el),stub=_objectSpread2({isDisabled:!1,isSelected:!1,isActive:!1},stubCallback(data));if(!data.__ready)return stub;var optionEl=Alpine.findClosest(el,(function(i){return i.__optionKey}));if(!optionEl)return stub;var context=data.__context;return _objectSpread2({get isActive(){return context.isActiveEl(optionEl)},get isSelected(){return context.isSelectedEl(optionEl)},get isDisabled(){return context.isDisabledEl(optionEl)}},callback(data,context,optionEl))};function customSelect(Alpine){Alpine.data("customSelect",(function(config){return _objectSpread2(_objectSpread2(_objectSpread2({},selectPopper),selectData(config.__el,Alpine,config)),{},{__generateContext:function(el,Alpine,config){var _config$__config;return generateContext$1({multiple:this.__isMultiple,orientation:this.__orientation,__wire:config.__wire,__wireSearch:Alpine.bound(el,"livewire-search"),__config:null!==(_config$__config=config.__config)&&void 0!==_config$__config?_config$__config:{},Alpine:Alpine})}})})),Alpine.directive("custom-select",(function(el,directive,_ref){var cleanup=_ref.cleanup;switch(directive.value){case"button":!function(el,Alpine){Alpine.bind(el,_objectSpread2({},{"x-ref":"__button",":id":function(){return this.$id("fc-".concat(this.__type,"-select-button"))},"aria-haspopup":"true","data-custom-select-button":"true",":aria-labelledby":function(){return this.$data.__hasCustomSelectLabel?this.$id("fc-".concat(this.__type,"-select-label")):this.$id("fc-label")},":aria-expanded":function(){return this.$data.__isOpen},":aria-controls":function(){return this.$data.__isOpen&&this.$id("fc-".concat(this.__type,"-select-options"))},":tabindex":function(){return this.$data.__isDisabled?"-1":"0"},"x-init":function(){"button"!==this.$el.tagName.toLowerCase()||this.$el.hasAttribute("type")||(this.$el.type="button"),"button"!==this.$el.tagName.toLowerCase()&&this.$el.setAttribute("role","button")},"@click":function(){this.$data.__open()},"@focus":function(){this.$data.__isDisabled&&this.$el.blur()},"@keydown":function(e){["ArrowDown","ArrowUp","ArrowLeft","ArrowRight"].includes(e.key)&&(e.stopPropagation(),e.preventDefault(),this.$data.__open());var $magic="tree"===this.__type?this.$treeSelect:this.$customSelect;if("Backspace"===e.key){if(e.stopPropagation(),e.preventDefault(),this.$data.__isDisabled)return;var lastSelected=this.$data.__isMultiple?$magic.selectedObject[$magic.selectedObject.length-1]:$magic.selectedObject;lastSelected&&this.$data.__context.toggleValue(lastSelected,this.$data.__compareBy)}},"@keydown.space.stop.prevent":function(){this.$data.__open()},"@keydown.enter.stop.prevent":function(){this.$data.__open()}}))}(el,Alpine);break;case"label":!function(el,Alpine){Alpine.bind(el,_objectSpread2({},{"x-ref":"__label",":id":function(){return this.$id("fc-".concat(this.__type,"-custom-select-label"))},"x-init":function(){this.$data.__hasCustomSelectLabel=!0},"@click":function(){this.$refs.__button.focus({preventScroll:!0})}}))}(el,Alpine);break;case"clear":!function(el,Alpine){Alpine.bind(el,_objectSpread2({},clearButtonDirective(0,0,"custom")))}(el,Alpine);break;case"options":!function(el,Alpine){Alpine.bind(el,_objectSpread2({},optionsDirective(0,Alpine)))}(el,Alpine);break;case"option":!function(el,Alpine){Alpine.bind(el,_objectSpread2({},optionDirective(el,Alpine,"custom")))}(el,Alpine),cleanup((function(){var parent=el.closest("[x-data]");parent&&Alpine.$data(parent).__context.destroyItem(el)}));break;case"search":!function(el,Alpine){Alpine.bind(el,_objectSpread2({},{"x-ref":"__search",":id":function(){return this.$id("fc-".concat(this.__type,"-select-search"))},"x-init":function(){var _this5=this,searchableQuery=this.$data.__context.searchableQuery;this.$el.value=searchableQuery,this.$data.__ready&&this.$data.__isOpen&&searchableQuery.length&&this.$nextTick((function(){if(_this5.$el.createTextRange){var range=_this5.$el.createTextRange();range.move("character",searchableQuery.length),range.select()}else _this5.$el.focus(),_this5.$el.setSelectionRange&&_this5.$el.setSelectionRange(searchableQuery.length,searchableQuery.length)}))},"@keyup.debounce.250ms":function(e){["Enter","ArrowDown","ArrowUp","ArrowRight","ArrowLeft","Home","PageUp","End","PageDown","Tab","Meta"].includes(e.key)||this.$data.__context.handleSearchableQuery(e.target.value)},"@keydown.space.stop":function(){},"@keydown.tab.prevent.stop":function(){this.$refs.__options.focus()}}))}(el,Alpine);break;case"token":!function(el,Alpine){Alpine.bind(el,_objectSpread2({},tokenDirective(el)))}(el,Alpine);break;default:throw new Error("Unknown custom-select directive value: ".concat(directive.value))}})),Alpine.magic("customSelect",(function(el){return rootMagic(el,Alpine)})),Alpine.magic("customSelectOption",(function(el){return optionMagic(el,Alpine,(function(data,context,optionEl){return{get isOptGroup(){return Alpine.bound(optionEl,"is-opt-group")}}}),(function(){return{isOptGroup:!1}}))}))}function datePicker(Alpine){Alpine.data("datePicker",(function(config){var _ref,_config$mode;return{__ready:!1,__value:config.value,__rawValue:null,__mode:null!==(_ref=null!==(_config$mode=config.mode)&&void 0!==_config$mode?_config$mode:config.options.mode)&&void 0!==_ref?_ref:"single",__isDisabled:!1,__flatpickr:void 0,init:function(){var _value,_this=this;if("function"!=typeof window.flatpickr)throw new Error("date-picker requires Flatpickr. See https://flatpickr.js.org");var value=this.__value;null!==(_value=value)&&void 0!==_value&&_value.hasOwnProperty("initialValue")&&(value=value.initialValue),this.__rawValue=value,queueMicrotask((function(){_this.__ready=!0,_this.__flatpickr=window.flatpickr(_this.$refs.__input,_this.__config())})),this.$watch("__value",(function(newValue){_this.__rawValue=newValue,_this.__flatpickr.setDate(newValue),_this.$dispatch("input",newValue)})),this.$watch("__isDisabled",(function(newValue){newValue?_this.__flatpickr.set("clickOpens",!1):_this.__flatpickr.set("clickOpens",config.options.clickOpens)}))},__open:function(){!this.__isDisabled&&this.__flatpickr.open()},__clear:function(){this.__isDisabled||(this.__value="single"===this.__mode?null:[])},__config:function(){var _config$config,onOpen=[function(selectedDates,dateStr,instance){instance.setDate(this.__rawValue)}.bind(this)],customConfig=null!==(_config$config=config.config)&&void 0!==_config$config?_config$config:{};if(customConfig.hasOwnProperty("onOpen")){var customOnOpen=Array.isArray(customConfig.onOpen)?customConfig.onOpen:[customConfig.onOpen];onOpen=onOpen.concat(customOnOpen),delete customConfig.onOpen}return _objectSpread2(_objectSpread2({defaultDate:this.__rawValue},config.options),{},{onOpen:onOpen,onChange:function(date,dateString){var newValue=dateString;"multiple"===this.__mode?newValue=dateString.split(", "):"range"===this.__mode&&(newValue=dateString.split(" to ")),this.__value=newValue}.bind(this)},customConfig)}}})),Alpine.directive("date-picker",(function(el,directive,_ref2){var cleanup=_ref2.cleanup;switch(directive.value){case"clear":!function(el,Alpine){Alpine.bind(el,{"x-ref":"__clear","x-init":function(){"button"!==this.$el.tagName.toLowerCase()||this.$el.hasAttribute("type")||this.$el.setAttribute("type","button")},"@click":function(){this.$data.__clear()},"x-show":function(){return this.$datePicker.hasValue&&!this.$datePicker.isDisabled}})}(el,Alpine);break;case"container":!function(el,Alpine){Alpine.bind(el,{"x-ref":"__container",role:"none","x-init":function(){var _this3=this;new MutationObserver((function(mutations){mutations.forEach((function(mutation){if("aria-invalid"===mutation.attributeName)"true"===mutation.target.getAttribute("aria-invalid")?(_this3.$refs.__input.setAttribute("aria-invalid","true"),_this3.$refs.__input.classList.add("input-error")):(_this3.$refs.__input.removeAttribute("aria-invalid"),_this3.$refs.__input.classList.remove("input-error"));else if("aria-describedby"===mutation.attributeName){var describedBy=mutation.target.getAttribute("aria-describedby");describedBy?_this3.$refs.__input.setAttribute("aria-describedby",describedBy):_this3.$refs.__input.removeAttribute("aria-describedby")}}))})).observe(this.$el,{attributes:!0})}})}(el,Alpine);break;case"input":!function(el,Alpine){Alpine.bind(el,{"x-ref":"__input",type:"text","x-init":function(){var _this2=this;this.$data.__isDisabled=this.$el.disabled||this.$el.readOnly,queueMicrotask((function(){new MutationObserver((function(mutations){mutations.forEach((function(mutation){"disabled"!==mutation.attributeName&&"readonly"!==mutation.attributeName||(_this2.$data.__isDisabled=_this2.$el.disabled||_this2.$el.readOnly)}))})).observe(_this2.$el,{attributes:!0})}))}})}(el,Alpine),cleanup((function(){var parent=el.closest("[x-data]");parent&&Alpine.$data(parent).__flatpickr.destroy()}));break;case"toggle":!function(el,Alpine){Alpine.bind(el,{"x-ref":"__toggle",":role":function(){return!this.$datePicker.isDisabled&&("button"!==this.$el.tagName.toLowerCase()&&"button")},"@click":function(){this.$datePicker.open()}})}(el,Alpine);break;default:throw new Error("Unknown date-picker directive value: ".concat(directive.value))}})),Alpine.magic("datePicker",(function(el){var data=Alpine.$data(el);return data.__ready?{get isDisabled(){return data.__isDisabled},get flatpickr(){return data.__flatpickr},get hasValue(){return"single"===data.__mode?null!==data.__value&&""!==data.__value:Array.isArray(data.__value)&&data.__value.length>0},open:function(){data.__open()}}:{isDisabled:!1,flatpickr:void 0,hasValue:!1,open:function(){}}}))}var switchToggle=function(options){return _objectSpread2(_objectSpread2({value:!1,onValue:!0,offValue:!1},options),{},{get isPressed(){return Array.isArray(this.value)?this.value.includes(this.onValue):this.value===this.onValue},toggle:function(){Array.isArray(this.value)?this.isPressed?this.value.splice(this.value.indexOf(this.onValue),1):this.value.push(this.onValue):this.value=this.isPressed?this.offValue:this.onValue,this.$dispatch("input",this.value)}})},generateContext=function(_ref){var multiple=_ref.multiple,orientation=_ref.orientation,__wire=_ref.__wire,__wireSearch=_ref.__wireSearch,__config=_ref.__config,Alpine=_ref.Alpine;return _objectSpread2(_objectSpread2({},selectContext(Alpine)),{},{__multiple:multiple,__orientation:orientation,__wire:__wire,__wireSearch:__wireSearch,__config:__config,expandableEls:{},expandedKeys:[],__itemBooted:function(el,value,disabled,key){var _this=this;queueMicrotask((function(){var _el$__children;null!==(_el$__children=el.__children)&&void 0!==_el$__children&&_el$__children.length&&(_this.expandableEls[key]=el)}))},__itemDestroyed:function(el,key){this.expandableEls[key]&&delete this.expandableEls[key],this.expandedKeys.includes(key)&&this.expandedKeys.splice(this.expandedKeys.indexOf(key),1)},isExpandedEl:function(el){var key=keyByValue(this.elsByKey,el);if(key)return this.expandedKeys.includes(key)},toggleExpandedEl:function(el){var key=keyByValue(this.elsByKey,el);key&&this.toggleExpanded(key)},toggleExpanded:function(key){this.expandedKeys.includes(key)?this.expandedKeys.splice(this.expandedKeys.indexOf(key),1):this.expandedKeys.push(key)},expandChildren:function(key){this.expandedKeys.includes(key)||this.expandedKeys.push(key)},collapseChildren:function(key){this.expandedKeys.includes(key)&&this.expandedKeys.splice(this.expandedKeys.indexOf(key),1)},__activateByKeyEvent:function(e){if(this.hasActive())switch(e.key){case["ArrowRight","ArrowDown"]["vertical"===this.__orientation?0:1]:return e.preventDefault(),e.stopPropagation(),this.expandableEls[this.activeKey]&&this.expandChildren(this.activeKey),!1;case["ArrowLeft","ArrowUp"]["vertical"===this.__orientation?0:1]:return e.preventDefault(),e.stopPropagation(),this.expandableEls[this.activeKey]&&this.collapseChildren(this.activeKey),!1}},get isScrollingTo(){return this.scrollingCount>0},get nonDisabledOrderedKeys(){var _this2=this;return this.orderedKeys.filter((function(i){return!_this2.isDisabled(i)}))}})};function treeSelect(Alpine){Alpine.data("treeSelect",(function(config){return _objectSpread2(_objectSpread2(_objectSpread2({},selectPopper),selectData(config.__el,Alpine,config)),{},{__type:"tree",__generateContext:function(el,Alpine,config){var _config$__config;return generateContext({multiple:this.__isMultiple,orientation:this.__orientation,__wire:config.__wire,__wireSearch:Alpine.bound(el,"livewire-search"),__config:null!==(_config$__config=config.__config)&&void 0!==_config$__config?_config$__config:{},Alpine:Alpine})}})})),Alpine.directive("tree-select",(function(el,directive,_ref){var cleanup=_ref.cleanup;switch(directive.value){case"button":!function(el,Alpine){Alpine.bind(el,_objectSpread2({},{"x-ref":"__button",":id":function(){return this.$id("fc-".concat(this.__type,"-select-button"))},"aria-haspopup":"true","data-custom-select-button":"true",":aria-labelledby":function(){return this.$data.__hasCustomSelectLabel?this.$id("fc-".concat(this.__type,"-select-label")):this.$id("fc-label")},":aria-expanded":function(){return this.$data.__isOpen},":aria-controls":function(){return this.$data.__isOpen&&this.$id("fc-".concat(this.__type,"-select-options"))},":tabindex":function(){return this.$data.__isDisabled?"-1":"0"},"x-init":function(){"button"!==this.$el.tagName.toLowerCase()||this.$el.hasAttribute("type")||(this.$el.type="button"),"button"!==this.$el.tagName.toLowerCase()&&this.$el.setAttribute("role","button")},"@click":function(){this.$data.__open()},"@focus":function(){this.$data.__isDisabled&&this.$el.blur()},"@keydown":function(e){["ArrowDown","ArrowUp","ArrowLeft","ArrowRight"].includes(e.key)&&(e.stopPropagation(),e.preventDefault(),this.$data.__open());var $magic="tree"===this.__type?this.$treeSelect:this.$customSelect;if("Backspace"===e.key){if(e.stopPropagation(),e.preventDefault(),this.$data.__isDisabled)return;var lastSelected=this.$data.__isMultiple?$magic.selectedObject[$magic.selectedObject.length-1]:$magic.selectedObject;lastSelected&&this.$data.__context.toggleValue(lastSelected,this.$data.__compareBy)}},"@keydown.space.stop.prevent":function(){this.$data.__open()},"@keydown.enter.stop.prevent":function(){this.$data.__open()}}))}(el,Alpine);break;case"label":!function(el,Alpine){Alpine.bind(el,_objectSpread2({},{"x-ref":"__label",":id":function(){return this.$id("fc-".concat(this.__type,"-custom-select-label"))},"x-init":function(){this.$data.__hasCustomSelectLabel=!0},"@click":function(){this.$refs.__button.focus({preventScroll:!0})}}))}(el,Alpine);break;case"clear":!function(el,Alpine){Alpine.bind(el,_objectSpread2({},clearButtonDirective(0,0,"tree")))}(el,Alpine);break;case"options":!function(el,Alpine){Alpine.bind(el,_objectSpread2({},optionsDirective(0,Alpine)))}(el,Alpine);break;case"option":!function(el,Alpine){Alpine.bind(el,_objectSpread2(_objectSpread2({},optionDirective(el,Alpine,"tree")),{},{"data-tree-select-option":"true",":role":function(){return"option"},"x-init":function(){var _this=this,initCallback=function(){var value=Alpine.bound(el,"value"),disabled=Alpine.bound(el,"disabled");el.__level=Alpine.bound(el,"level",0),el.__optionKey=_this.$data.__context.initItem(el,value,disabled);var childrenField=_this.$data.__config.childrenField;null!=value&&value.hasOwnProperty(childrenField)&&(el.__children=value[childrenField])};this.$data.__ready?initCallback():queueMicrotask(initCallback)}}))}(el,Alpine),cleanup((function(){var parent=el.closest("[x-data]");parent&&Alpine.$data(parent).__context.destroyItem(el)}));break;case"search":!function(el,Alpine){Alpine.bind(el,_objectSpread2({},{"x-ref":"__search",":id":function(){return this.$id("fc-".concat(this.__type,"-select-search"))},"x-init":function(){var _this5=this,searchableQuery=this.$data.__context.searchableQuery;this.$el.value=searchableQuery,this.$data.__ready&&this.$data.__isOpen&&searchableQuery.length&&this.$nextTick((function(){if(_this5.$el.createTextRange){var range=_this5.$el.createTextRange();range.move("character",searchableQuery.length),range.select()}else _this5.$el.focus(),_this5.$el.setSelectionRange&&_this5.$el.setSelectionRange(searchableQuery.length,searchableQuery.length)}))},"@keyup.debounce.250ms":function(e){["Enter","ArrowDown","ArrowUp","ArrowRight","ArrowLeft","Home","PageUp","End","PageDown","Tab","Meta"].includes(e.key)||this.$data.__context.handleSearchableQuery(e.target.value)},"@keydown.space.stop":function(){},"@keydown.tab.prevent.stop":function(){this.$refs.__options.focus()}}))}(el,Alpine);break;case"token":!function(el,Alpine){Alpine.bind(el,_objectSpread2({},tokenDirective(el)))}(el,Alpine);break;case"child-toggle":!function(el,Alpine){Alpine.bind(el,{"x-init":function(){"button"!==el.tagName.toLowerCase()&&el.setAttribute("role","button")},"@click.stop.prevent":function(){var optionEl=Alpine.findClosest(el,(function(i){return i.__optionKey}));optionEl&&this.$data.__context.toggleExpandedEl(optionEl)}})}(el,Alpine);break;case"children":!function(el,Alpine){Alpine.bind(el,{"data-tree-select-children":"true","x-data":function(){return{__optionEl:void 0,init:function(){try{this.__optionEl=el.parentNode.querySelector('[data-tree-select-option="true"]')}catch(e){}},get __isExpanded(){return this.__optionEl&&this.$data.__context.isExpandedEl(this.__optionEl)}}},"x-show":function(){return this.$data.__isExpanded}})}(el,Alpine);break;default:throw new Error("Unknown tree-select directive: ".concat(directive.value))}})),Alpine.magic("treeSelect",(function(el){return rootMagic(el,Alpine,(function(data){return{get hasExpandableOptions(){return Object.keys(data.__context.expandableEls).length>0}}}))})),Alpine.magic("treeSelectOption",(function(el){return optionMagic(el,Alpine,(function(data,context,optionEl){return{get hasChildren(){return optionEl.__children&&optionEl.__children.length>0},get isExpanded(){return context.isExpandedEl(optionEl)}}}),(function(){return{hasChildren:!1}}))}))}document.addEventListener("alpine:init",(function(){customSelect(Alpine),datePicker(Alpine),function(Alpine){Alpine.data("filepond",(function(_ref){var __value=_ref.__value,__this=_ref.__this,__wireModel=_ref.__wireModel,options=_ref.options,__config=_ref.__config,id=_ref.id;return{__ready:!1,__pond:null,__processingFiles:!1,__value:__value,init:function(){var _window$FilePond,_this=this;if("function"!=typeof(null===(_window$FilePond=window.FilePond)||void 0===_window$FilePond?void 0:_window$FilePond.create))throw new Error("filepond requires FilePond to be loaded. See https://pqina.nl/filepond/docs/getting-started/installation/javascript/");queueMicrotask((function(){_this.__ready=!0;var pondOptions=_objectSpread2({},options);__this&&__wireModel&&(pondOptions.server={process:function(fieldName,file,metadata,load,error,progress,abort,transfer,options){__this.upload(__wireModel,file,load,error,progress)},revert:function(filename,load){__this.removeUpload(__wireModel,filename,load)}},pondOptions.onaddfilestart=function(){return _this.__processingFiles=!0},pondOptions.onprocessfiles=function(){return _this.__processingFiles=!1}),__this&&__this.on("file-pond-clear",(function(desiredId){return _this.__clear(desiredId)})),pondOptions=_objectSpread2(_objectSpread2({},pondOptions),__config(_this,options,pondOptions)),_this.__pond=window.FilePond.create(_this.$refs.input,pondOptions)})),this.$watch("__value",(function(newValue){if(_this.__ready)if(options.allowMultiple){if(_this.__processingFiles)return;if(!newValue)return _this.__clear();var serverIds=Array.isArray(newValue)?newValue:JSON.parse(String(newValue).split("livewire-files:")[1]);_this.__pond.getFiles().forEach((function(f){serverIds.includes(f.serverId)||_this.__pond.removeFile(f.id)}))}else newValue||_this.__clear()}))},__clear:function(eventId){var instance;eventId&&eventId!==id||(instance=this.__pond,options.allowMultiple?instance.getFiles().forEach((function(file){return instance.removeFile(file.id)})):instance.removeFile())}}}))}(Alpine),function(Alpine){Alpine.data("quill",(function(_ref){var __value=_ref.__value,options=_ref.options,__config=_ref.__config,onTextChange=_ref.onTextChange,onInit=_ref.onInit;return{__ready:!1,__value:__value,__quill:void 0,init:function(){var _this=this;if("function"!=typeof window.Quill)throw new Error("quill requires Quill to be loaded. See https://quilljs.com/docs/installation/");queueMicrotask((function(){_this.__ready=!0,_this.__quill=new window.Quill(_this.$refs.quill,_this.__quillOptions()),_this.__quill.root.innerHTML=_this.__value,_this.__quill.on("text-change",(function(){"function"==typeof onTextChange&&!1===onTextChange(_this)||(_this.__value=_this.__quill.root.innerHTML,_this.$dispatch("input",_this.__value))})),options.autofocus&&_this.$nextTick((function(){_this.focus()})),"function"==typeof onInit&&onInit(_this)}))},focus:function(){this.__ready&&this.__quill.focus()},__quillOptions:function(){var config=__config(this,options),toolbarHandlers={},modules={};return config.hasOwnProperty("toolbarHandlers")&&(toolbarHandlers=config.toolbarHandlers,delete config.toolbarHandlers),config.hasOwnProperty("modules")&&(modules=config.modules,delete config.modules),_objectSpread2({theme:options.theme,readOnly:options.readOnly,placeholder:options.placeholder,modules:_objectSpread2({toolbar:{container:options.toolbar,handlers:toolbarHandlers}},modules)},config)}}}))}(Alpine),treeSelect(Alpine),Alpine.data("switchToggle",switchToggle)}));var resize=function(el){el.style.height="auto",el.style.height="".concat(el.scrollHeight,"px")},textareaResize=function(Alpine){Alpine.directive("textarea-resize",(function(el,_ref,_ref2){!function(obj){if(null==obj)throw new TypeError("Cannot destructure "+obj)}(_ref);var cleanup=_ref2.cleanup;el.style.minHeight="".concat(el.scrollHeight,"px"),resize(el);var inputHandler=function(){return resize(el)};el.addEventListener("input",inputHandler),cleanup((function(){el.removeEventListener("input",inputHandler)}))}))};document.addEventListener("alpine:init",(function(){!function(Alpine){Alpine.directive("form-group",(function(el,directive){"label"===directive.value?function(el,Alpine){Alpine.bind(el,{"@click":function(){var group=el.closest("[x-form-group]");if(group){var customSelectButton=group.querySelector('[data-custom-select-button="true"]');if(customSelectButton)customSelectButton.focus({preventScroll:!0});else{var quill=group.querySelector(".quill-wrapper");quill&&Alpine.$data(quill).focus()}}}})}(el,Alpine):function(el,Alpine){Alpine.bind(el,{"x-id":function(){return["fc-label"]}})}(el,Alpine)}))}(Alpine),Alpine.plugin(textareaResize)}))})); +//# sourceMappingURL=form-components.js.map diff --git a/dist/form-components.js.map b/dist/form-components.js.map index f91954a..8b0a957 100644 --- a/dist/form-components.js.map +++ b/dist/form-components.js.map @@ -1 +1 @@ -{"version":3,"file":"form-components.js","sources":["../resources/js/components/custom-select.js","../resources/js/util/findLastIndex.js","../resources/js/util/inspect.js","../resources/js/util/regex.js","../resources/js/util/identity.js","../resources/js/util/get.js","../resources/js/util/options.js","../resources/js/components/index.js"],"sourcesContent":["/*\n * Custom Select Component Definition.\n *\n * Note: Not using polyfills for functions such as Array.from()\n * since I use Livewire, and Livewire already includes polyfills\n * for those functions. If you don't use Livewire, you should\n * make sure are pulling in those polyfills.\n */\n\nimport findLastIndex from '../util/findLastIndex';\nimport { normalizeOptions } from '../util/options';\nimport { isArray } from '../util/inspect';\n\nlet createPopper;\n\nexport default (config) => ({\n focusedOptionIndex: null,\n filterable: false,\n data: [],\n disabled: false,\n options: [],\n open: false,\n search: '',\n wireFilter: false,\n wireListeners: [],\n value: '',\n selectedOption: null, // for storing a selected option in case a \"wire:filter\" removes the option from the list...\n max: false,\n selectId: '',\n valueField: 'value',\n textField: 'text',\n disabledField: 'disabled',\n labelField: 'label', // used for an \"optgroup\"'s label\n optionsField: 'options', // used when creating \"optgroups\"\n popper: null,\n ...config,\n\n get buttonDisplay() {\n if (this.multiple) {\n let optionDisplay = this.optionDisplay(this.value[0]);\n\n if (this.value.length > 1) {\n optionDisplay += ` + ${this.value.length - 1}`;\n }\n\n return optionDisplay;\n }\n\n return this.optionDisplay(this.value);\n },\n\n get fieldNames() {\n return {\n valueField: this.valueField,\n textField: this.textField,\n disabledField: this.disabledField,\n labelField: this.labelField,\n optionsField: this.optionsField,\n };\n },\n\n close() {\n this.open = false;\n this.focusedOptionIndex = null;\n this.search = '';\n\n if (this.popper) {\n this.popper.destroy();\n this.popper = null;\n }\n },\n\n clear() {\n this.value = this.multiple ? [] : null;\n\n if (this.open) {\n this.close();\n this.focusButton();\n }\n },\n\n focusButton() {\n this.$nextTick(() => this.$refs.button.focus());\n },\n\n focusNextOption() {\n if (this.focusedOptionIndex === null) {\n this.focusedOptionIndex = -1;\n }\n\n let nextIndex = this.options.findIndex((o, index) => index > this.focusedOptionIndex && ! o.disabled && ! this.isOptgroup(o));\n if (nextIndex === -1 || (nextIndex + 1) > this.options.length) {\n nextIndex = this.options.findIndex(o => ! o.disabled && ! this.isOptgroup(o));\n }\n\n this.focusedOptionIndex = nextIndex;\n\n this.scrollToOption(this.focusedOptionIndex);\n },\n\n focusPreviousOption() {\n if (this.focusedOptionIndex === null) {\n this.focusedOptionIndex = this.options.length - 1;\n }\n\n let previousIndex = findLastIndex(this.options, (o, index) => index < this.focusedOptionIndex && ! o.disabled && ! this.isOptgroup(o));\n if (previousIndex < 0) {\n previousIndex = findLastIndex(this.options, o => ! o.disabled && ! this.isOptgroup(o));\n }\n\n this.focusedOptionIndex = previousIndex;\n\n this.scrollToOption(this.focusedOptionIndex);\n },\n\n onHome() {\n if (! this.open) {\n return;\n }\n\n const firstIndex = this.options.findIndex(o => ! o.disabled && ! this.isOptgroup(o));\n\n if (firstIndex > -1) {\n this.focusedOptionIndex = firstIndex;\n\n this.scrollToOption(this.focusedOptionIndex);\n }\n },\n\n onEnd() {\n if (! this.open) {\n return;\n }\n\n const lastIndex = findLastIndex(this.options, o => ! o.disabled && ! this.isOptgroup(o));\n\n if (lastIndex > -1) {\n this.focusedOptionIndex = lastIndex;\n\n this.scrollToOption(this.focusedOptionIndex);\n }\n },\n\n isOptgroup(option) {\n return (option || {}).hasOwnProperty('label');\n },\n\n isSelected(value) {\n if (this.multiple) {\n return this.value.includes(value);\n }\n\n return this.value === value;\n },\n\n /*\n * Calling initialize now so Alpine doesn't call the function twice.\n */\n initialize($wire = null, $dispatch = null) {\n createPopper = window.Popper ? window.Popper.createPopper : window.createPopper;\n\n if (typeof createPopper !== 'function') {\n throw new TypeError(` requires Popper (https://popper.js.org)`);\n }\n\n this.data = [...normalizeOptions(this.data, this.fieldNames)];\n this.options = this.data;\n\n if (this.multiple) {\n this.selectedOption = [];\n }\n\n if (this.multiple && ! isArray(this.value)) {\n this.value = [];\n }\n\n if (this.multiple && this.value.length > 0) {\n this.selectedOption = this.options.find(o => ! this.isOptgroup(o) && o.value === this.value[0]);\n } else if (! this.multiple && this.value) {\n this.selectedOption = this.options.find(o => ! this.isOptgroup(o) && o.value === this.value);\n }\n\n this.$watch('value', value => {\n $dispatch && $dispatch('custom-select-value-changed', { id: this.selectId, value });\n });\n\n // Allow local filtering if user has not specified wire:filter on the custom select component.\n this.$watch('search', value => {\n if (! this.open) {\n return this.options = this.data;\n }\n\n // If the user specifies a \"wire:filter\" method, attempt to call that method,\n // otherwise just perform local search.\n if (this.wireFilter && $wire) {\n $wire[this.wireFilter](value)\n .then(data => {\n this.data = normalizeOptions(data, this.fieldNames);\n this.options = this.data;\n });\n\n return;\n }\n\n if (! value) {\n return this.options = this.data;\n }\n\n const lowerCasedSearch = value.toLowerCase();\n\n this.options = this.data\n .filter(o => ! this.isOptgroup(o) && (String(o.value).toLowerCase().includes(lowerCasedSearch) || o.text.toLowerCase().includes(lowerCasedSearch)));\n });\n\n if ($wire) {\n // Wire listeners are useful for selects whose options depend on other selects. On the livewire component,\n // user can emit an event with the options that should be shown in the dependant select based on some\n // criteria.\n this.wireListeners.forEach(listener => {\n $wire.on(listener, data => {\n this.data = normalizeOptions(data, this.fieldNames);\n this.options = this.data;\n });\n });\n }\n\n // Emit our value changed event right away for any listeners...\n $dispatch && $dispatch('custom-select-value-changed', { id: this.selectId, value: this.value });\n },\n\n onMouseover(option, index) {\n if (this.isOptgroup(option) || option.disabled) {\n return;\n }\n\n this.focusedOptionIndex = index;\n },\n\n optionClasses(option, index) {\n const classes = [];\n\n if (this.isOptgroup(option)) {\n classes.push('custom-select__opt-group');\n } else if (index === this.focusedOptionIndex) {\n classes.push('custom-select__option--hovered');\n }\n\n if (this.isSelected((option || {}).value)) {\n classes.push('custom-select__option--selected');\n }\n\n if (option.disabled) {\n classes.push('custom-select__option--disabled');\n }\n\n return classes.join(' ');\n },\n\n openMenu() {\n if (this.disabled) {\n return;\n }\n\n const firstValue = this.multiple ? this.value[0] : this.value;\n this.focusedOptionIndex = this.options.findIndex(o => o.value === firstValue && ! this.isOptgroup(o));\n if (this.focusedOptionIndex < 0) {\n this.focusedOptionIndex = this.options.findIndex(o => ! o.disabled && ! this.isOptgroup(o));\n }\n\n this.popper = createPopper(this.$refs.button, this.$refs.container, {\n placement: 'bottom-start',\n modifiers: [\n {\n name: 'offset',\n options: {\n offset: [0, 4],\n },\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: 'clippingParents',\n },\n },\n {\n name: 'flip',\n options: {\n padding: 30,\n },\n },\n ],\n });\n\n this.open = true;\n\n this.$nextTick(() => {\n if (this.filterable) {\n this.$refs.search.focus({\n preventScroll: true,\n });\n }\n\n this.scrollToOption(this.focusedOptionIndex);\n });\n },\n\n optionDisplay(value) {\n if (! value) {\n return null;\n }\n\n let option = this.options.find(o => o.value === value);\n\n if (! option && this.multiple && this.selectedOption.length > 0) {\n option = this.selectedOption[0];\n } else if (! option && this.selectedOption && this.selectedOption.value === value) {\n option = this.selectedOption;\n }\n\n return (option || { text: null }).text;\n },\n\n onEnter() {\n if (! this.open) {\n return this.openMenu();\n }\n\n const option = this.options[this.focusedOptionIndex];\n\n if (option) {\n this.selectOption(option);\n }\n },\n\n selectOption(option) {\n if (! option) {\n return;\n }\n\n if (option.disabled) {\n return;\n }\n\n if (this.multiple) {\n return this.selectOptionForMultiple(option);\n }\n\n if (this.value === option.value && this.optional) {\n this.value = null;\n this.selectedOption = null;\n } else {\n this.value = option.value;\n this.selectedOption = option;\n }\n\n this.close();\n this.focusButton();\n },\n\n selectOptionForMultiple(option) {\n if (! option) {\n return;\n }\n\n if (this.value.includes(option.value)) {\n if (this.optional || this.value.length > 1) {\n this.value.splice(this.value.indexOf(option.value), 1);\n this.selectedOption = [...this.value];\n }\n\n if (this.value.length === 0) {\n this.selectedOption = [];\n this.close();\n this.focusButton();\n }\n\n return;\n }\n\n if (! this.max || Number(this.max) > this.value.length) {\n this.value.push(option.value);\n this.selectedOption = [...this.value];\n }\n },\n\n hasSelection() {\n if (this.multiple) {\n return this.value.length > 0;\n }\n\n return Boolean(this.value);\n },\n\n scrollToOption(index) {\n if (index === 0 && this.options.length > 1) {\n index = 1;\n }\n\n try {\n const child = this.$refs.listbox.children[index];\n const offsetTop = child.offsetTop;\n this.$refs.listbox.scrollTop = offsetTop || 0;\n\n this.$refs.listbox.children[index].focus();\n } catch (e) {}\n },\n\n toggle() {\n if (this.open) {\n return this.close();\n }\n\n this.openMenu();\n },\n});\n","export default (array, predicate) => {\n let l = array.length;\n while (l--) {\n if (predicate(array[l], l, array)) {\n return l;\n }\n }\n\n return -1;\n};\n","export const isArray = val => Array.isArray(val);\n\nexport const isUndefined = val => val === undefined;\n\nexport const isNull = val => val === null;\n\nexport const isUndefinedOrNull = val => isUndefined(val) || isNull(val);\n\n// Quick object check.\n// This is primarily used to tell Objects from primitive values\n// when we know the value is a JSON-compliant type.\n// Note: object could be a complex type like array, Date, etc.\nexport const isObject = obj => obj !== null && typeof obj === 'object';\n\n// Strict object type check.\n// Only returns true for plain JavaScript objects.\nexport const isPlainObject = obj => Object.prototype.toString.call(obj) === '[object Object]';\n","export const RX_ARRAY_NOTATION = /\\[(\\d+)]/g;","const identity = x => x;\n\nexport default identity;\n","import { isArray, isNull, isObject, isUndefinedOrNull } from './inspect';\nimport { RX_ARRAY_NOTATION } from './regex';\nimport identity from './identity';\n\n/**\n * Get property defined by dot/array notation in string, returns undefined if not found.\n *\n * @param {Object} obj\n * @param {String|Array} path\n * @param {*} defaultValue\n * @return {*}\n */\nexport const getRaw = (obj, path, defaultValue = undefined) => {\n // Handle array of path values.\n path = isArray(path) ? path.join('.') : path;\n \n // If no path or object passed.\n if (! path || ! isObject(obj)) {\n return defaultValue;\n }\n \n // Handle edge case where user has dot(s) in top-level item field key.\n // Using `in` operator vs `hasOwnProperty` to handle obj.prototype getters.\n if (path in obj) {\n return obj[path];\n }\n \n // Handle string array notation (numeric indices only).\n path = String(path).replace(RX_ARRAY_NOTATION, '.$1');\n \n const steps = path.split('.').filter(identity);\n \n // Handle case where someone passes a string of only dots\n if (steps.length === 0) {\n return defaultValue;\n }\n \n // Traverse path in object to find result.\n // Using `in` operator vs `hasOwnProperty` to handle obj.prototype getters.\n return steps.every(step => isObject(obj) && step in obj && ! isUndefinedOrNull((obj = obj[step])))\n ? obj\n : isNull(obj)\n ? null\n : defaultValue;\n};\n\n/**\n * Get property by dot/array notation in string.\n * \n * @param {Object} obj\n * @param {String|Array} path\n * @param {*} defaultValue (optional)\n * @return {*}\n */\nexport const get = (obj, path, defaultValue = null) => {\n const val = getRaw(obj, path);\n \n return isUndefinedOrNull(val) ? defaultValue : val;\n};\n\nexport default get;\n","import { isArray, isNull, isPlainObject, isUndefined } from './inspect';\nimport get from './get';\n\nexport const normalizeOption = (option, fields = {}, key = null) => {\n // When the option is an object, normalize it.\n if (isPlainObject(option)) {\n const value = get(option, fields.valueField || 'value');\n const text = get(option, fields.textField || 'text');\n const options = get(option, fields.optionField || 'options');\n\n // When it has options, create an `` object.\n if (! isNull(options)) {\n return {\n label: String(get(option, fields.labelField || 'label') || text),\n options: normalizeOptions(options),\n };\n }\n\n // Otherwise create an ``, and\n // its options need to be pushed onto the base option array.\n if (option.hasOwnProperty('label')) {\n mapped.push({ label: option.label });\n mapped = mapped.concat(option.options);\n } else {\n mapped.push(option);\n }\n });\n\n return mapped;\n};\n","import customSelect from './custom-select';\n\ndocument.addEventListener('alpine:init', () => {\n Alpine.data('customSelect', customSelect);\n});\n"],"names":["createPopper","array","predicate","l","length","isArray","val","Array","isUndefined","undefined","isNull","isUndefinedOrNull","isObject","obj","_typeof","isPlainObject","Object","prototype","toString","call","RX_ARRAY_NOTATION","identity","x","getRaw","path","defaultValue","join","steps","String","replace","split","filter","every","step","get","normalizeOption","option","fields","key","value","valueField","text","textField","options","optionField","disabled","Boolean","disabledField","label","labelField","normalizeOptions","flattenOptions","map","mapped","forEach","hasOwnProperty","push","concat","config","focusedOptionIndex","filterable","data","open","search","wireFilter","wireListeners","selectedOption","max","selectId","optionsField","popper","this","multiple","optionDisplay","close","destroy","clear","focusButton","$nextTick","_this","$refs","button","focus","focusNextOption","nextIndex","findIndex","o","index","_this2","isOptgroup","scrollToOption","focusPreviousOption","previousIndex","findLastIndex","_this3","onHome","firstIndex","_this4","onEnd","lastIndex","_this5","isSelected","includes","initialize","$wire","$dispatch","window","Popper","TypeError","fieldNames","find","_this6","$watch","id","then","lowerCasedSearch","toLowerCase","listener","on","onMouseover","optionClasses","classes","openMenu","firstValue","_this7","container","placement","modifiers","name","offset","boundary","padding","preventScroll","onEnter","selectOption","selectOptionForMultiple","optional","splice","indexOf","Number","hasSelection","offsetTop","listbox","children","scrollTop","e","toggle","document","addEventListener","Alpine","customSelect"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"form-components.js","sources":["../resources/js/mixins/selectContext.js","../resources/js/util/customSelectContext.js","../resources/js/mixins/selectPopper.js","../resources/js/mixins/select.js","../resources/js/mixins/selectMagic.js","../resources/js/components/custom-select.js","../resources/js/components/date-picker.js","../resources/js/components/switch-toggle.js","../resources/js/util/treeSelectContext.js","../resources/js/components/tree-select.js","../resources/js/components/index.js","../resources/js/components/filepond.js","../resources/js/components/quill.js","../resources/js/directives/textarea-resize.js","../resources/js/directives/index.js","../resources/js/directives/form-group.js"],"sourcesContent":["export default Alpine => ({\n // Main state.\n searchableText: {},\n disabledKeys: [],\n activeKey: null,\n selectedKeys: [],\n orderedKeys: [],\n elsByKey: {},\n values: {},\n\n // These keys will be overridden by each select context implementation.\n __config: {},\n __multiple: false,\n __orientation: 'vertical',\n __wire: undefined,\n __wireSearch: undefined,\n\n /**\n * Initialization.\n */\n\n initItem(el, value, disabled, isOptGroup = false) {\n let key = (Math.random() + 1).toString(36).substring(7);\n\n // If the value is already selected, we will replace the key with the exising one.\n // This usually only happens when options are refreshed via ajax.\n const keyFromValue = this.getKeyFromValue(value, this.__config.by);\n if (keyFromValue) {\n key = keyFromValue;\n }\n\n // We don't need to track \"opt groups\".\n if (isOptGroup) {\n return key;\n }\n\n // Register value by key.\n this.values[key] = value;\n\n // Associate key with element.\n this.elsByKey[key] = el;\n\n // Register key for ordering.\n this.orderedKeys.push(key);\n\n // Register key for searching.\n this.searchableText[key] = el.textContent.trim().toLowerCase();\n\n // Store whether disabled or not.\n disabled && this.disabledKeys.push(key);\n\n this.__itemBooted(el, value, disabled, key);\n\n return key;\n },\n\n /**\n * This provides a way for each select implementation to hook into the initItem process.\n */\n __itemBooted(el, value, disabled, key) {},\n\n destroyItem(el) {\n let key = keyByValue(this.elsByKey, el);\n\n // We need to preserve this to keep the display on the button accurate.\n if (! this.selectedKeys.includes(key)) {\n delete this.values[key];\n }\n\n delete this.elsByKey[key];\n delete this.orderedKeys[this.orderedKeys.indexOf(key)];\n delete this.searchableText[key];\n delete this.disabledKeys[key];\n\n this.reorderKeys();\n\n this.__itemDestroyed(el, key);\n },\n\n /**\n * This provides a way for each select implementation to hook into the destroyItem process.\n */\n __itemDestroyed(el, key) {},\n\n resetOptions() {\n this.activeKey = null;\n\n this.reorderKeys();\n },\n\n /**\n * Handle elements.\n */\n\n reorderKeys() {\n // Filter out elements removed from the DOM.\n this.orderedKeys.forEach(key => {\n const el = this.elsByKey[key];\n\n if (el?.isConnected) {\n return;\n }\n\n this.destroyItem(el);\n });\n\n this.orderedKeys = this.orderedKeys.slice().sort((a, z) => {\n if (a === null || z === null) {\n return 0;\n }\n\n const aEl = this.elsByKey[a];\n const zEl = this.elsByKey[z];\n\n const position = aEl.compareDocumentPosition(zEl);\n\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) {\n return -1;\n }\n\n if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n return 1;\n }\n\n return 0;\n });\n },\n\n activeEl() {\n if (! this.activeKey) {\n return;\n }\n\n return this.elsByKey[this.activeKey];\n },\n\n isActiveEl(el) {\n const key = keyByValue(this.elsByKey, el);\n\n if (! key) {\n return;\n }\n\n return this.activeKey === key;\n },\n\n activateEl(el) {\n const key = keyByValue(this.elsByKey, el);\n\n if (! key) {\n return;\n }\n\n this.activateKey(key);\n },\n\n selectEl(el) {\n const key = keyByValue(this.elsByKey, el);\n\n if (! key) {\n return;\n }\n\n this.selectKey(key);\n },\n\n isSelectedEl(el) {\n const key = keyByValue(this.elsByKey, el);\n\n if (! key) {\n return;\n }\n\n return this.isSelected(key);\n },\n\n isDisabledEl(el) {\n const key = keyByValue(this.elsByKey, el);\n\n if (! key) {\n return;\n }\n\n return this.isDisabled(key);\n },\n\n hideEl(el) {\n el.style.display = 'none';\n el.setAttribute('data-hidden', 'true');\n },\n\n showEl(el) {\n el.style.display = '';\n el.removeAttribute('data-hidden');\n },\n\n isHiddenEl(el) {\n if (el.style.display === 'none') {\n return true;\n }\n\n return ! el.offsetParent;\n },\n\n scrollingCount: 0,\n\n activateAndScrollToKey(key) {\n // This addresses the following problem:\n // If deactivate is hooked up to mouseleave,\n // scrolling to an element will trigger deactivation.\n // This \"isScrollingTo\" is exposed to prevent that.\n this.scrollingCount++;\n\n this.activateKey(key);\n\n const targetEl = this.elsByKey[key];\n\n targetEl && targetEl.scrollIntoView({ block: 'nearest' });\n\n setTimeout(() => {\n this.scrollingCount--;\n }, 25);\n },\n\n /**\n * Handle values.\n */\n\n selectedBasicValueOrValues(by) {\n if (this.__multiple) {\n return this.selectedBasicValues(by);\n }\n\n return this.selectedBasicValue(by);\n },\n\n selectedBasicValues(by) {\n return this.selectedKeys.map(i => {\n const value = this.values[i];\n\n if (value?.hasOwnProperty(by)) {\n return value[by];\n }\n\n return value;\n });\n },\n\n selectedBasicValue(by) {\n const value = this.selectedKeys[0]\n ? this.values[this.selectedKeys[0]]\n : null;\n\n if (value?.hasOwnProperty(by)) {\n return value[by];\n }\n\n return value;\n },\n\n selectedValueOrValues() {\n if (this.__multiple) {\n return this.selectedValues();\n }\n\n return this.selectedValue();\n },\n\n selectedValues() {\n return this.selectedKeys.map(i => this.values[i]);\n },\n\n selectedValue() {\n return this.selectedKeys[0] ? this.values[this.selectedKeys[0]] : null;\n },\n\n selectValue(value, by) {\n value = normalizeValue(value, this.__multiple);\n by = mapByToCallback(by);\n\n if (this.__multiple) {\n let keys = [];\n\n value.forEach(i => {\n for (let key in this.values) {\n if (by(this.values[key], i)) {\n if (! keys.includes(key)) {\n keys.push(key);\n }\n }\n }\n });\n\n this.selectExclusive(keys);\n\n return;\n }\n\n for (let key in this.values) {\n if (value && by(this.values[key], value)) {\n this.selectKey(key);\n }\n }\n\n // Handle edge cases where value is updated externally to null.\n if (value === null) {\n this.selectedKeys = [];\n }\n },\n\n getKeyFromValue(value, by) {\n if (! value) {\n return;\n }\n\n by = mapByToCallback(by);\n\n for (let key in this.values) {\n if (by(this.values[key], value)) {\n return key;\n }\n }\n },\n\n getKeyFromSimpleValue(value, by) {\n if (! value) {\n return;\n }\n\n by = mapByToSimpleCompareCallback(by);\n\n for (let key in this.values) {\n if (by(this.values[key], value)) {\n return key;\n }\n }\n },\n\n getObjectFromValue(value, by) {\n if (! value) {\n return;\n }\n\n by = mapByToSimpleCompareCallback(by);\n\n for (let key in this.values) {\n if (by(this.values[key], value)) {\n return this.values[key];\n }\n }\n },\n\n toggleValue(value, by) {\n if (! value) {\n return;\n }\n\n by = mapByToCallback(by);\n\n if (this.__multiple) {\n for (let key in this.values) {\n if (by(this.values[key], value)) {\n this.toggleSelected(key);\n\n break;\n }\n }\n }\n },\n\n /**\n * Handle disabled keys.\n */\n\n isDisabled(key) {\n return this.disabledKeys.includes(key);\n },\n\n /**\n * Handle selected keys.\n */\n\n selectKey(key) {\n if (this.isDisabled(key)) {\n return;\n }\n\n if (this.__multiple) {\n this.toggleSelected(key);\n } else {\n this.selectOnly(key);\n }\n },\n\n toggleSelected(key) {\n if (this.selectedKeys.includes(key)) {\n // If we have a minimum amount of options that must be selected, and we're greater than or equal\n // to that amount, we can't deselect this option.\n if (! this.canRemoveOptions()) {\n return;\n }\n\n this.selectedKeys.splice(this.selectedKeys.indexOf(key), 1);\n } else {\n this.selectedKeys.push(key);\n }\n },\n\n selectOnly(key) {\n this.selectedKeys = [];\n this.selectedKeys.push(key);\n },\n\n selectExclusive(keys) {\n // We can't just do this.selectedKeys = keys\n // because we need to preserve reactivity...\n let toAdd = [...keys];\n\n for (let i = 0; i < this.selectedKeys.length; i++) {\n if (keys.includes(this.selectedKeys[i])) {\n delete toAdd[toAdd.indexOf(this.selectedKeys[i])];\n continue;\n }\n\n if (! keys.includes(this.selectedKeys[i])) {\n delete this.selectedKeys[i];\n }\n }\n\n toAdd.forEach(i => {\n this.selectedKeys.push(i);\n });\n },\n\n clearSelected() {\n if (this.__config.optional === false) {\n return;\n }\n\n this.selectedKeys = [];\n },\n\n selectActive() {\n if (! this.activeKey) {\n return;\n }\n\n this.selectKey(this.activeKey);\n },\n\n isSelected(key) {\n return this.selectedKeys.includes(key);\n },\n\n firstSelectedKey() {\n return this.selectedKeys[0];\n },\n\n /**\n * Handle activated keys.\n */\n\n hasActive() {\n return !! this.activeKey;\n },\n\n isActiveKey(key) {\n return this.activeKey === key;\n },\n\n get active() {\n return this.hasActive() && this.values[this.activeKey];\n },\n\n activateSelectedOrFirst() {\n setTimeout(() => {\n let firstSelected = this.firstSelectedKey();\n\n if (firstSelected) {\n return this.activateAndScrollToKey(firstSelected);\n }\n\n let firstKey = this.firstKey();\n\n if (firstKey) {\n this.activateAndScrollToKey(firstKey);\n }\n }, 25);\n },\n\n activateKey(key) {\n if (this.isDisabled(key)) {\n return;\n }\n\n this.activeKey = key;\n },\n\n deactivate() {\n if (! this.activeKey) {\n return;\n }\n\n if (this.isScrollingTo) {\n return;\n }\n\n this.activeKey = null;\n },\n\n /**\n * Handle active key traversal.\n */\n\n nextKey() {\n if (! this.activeKey) {\n return;\n }\n\n let index = this.nonDisabledOrderedKeys.findIndex(i => i === this.activeKey)\n let targetKey = this.nonDisabledOrderedKeys[index + 1];\n\n if (targetKey && this.isHiddenEl(this.elsByKey[targetKey])) {\n // If the next key is hidden, we need to skip to the next visible non-disabled key.\n targetKey = this.getNextVisibleKey(index);\n }\n\n return targetKey || this.firstKey();\n },\n\n prevKey() {\n if (! this.activeKey) {\n return;\n }\n\n let index = this.nonDisabledOrderedKeys.findIndex(i => i === this.activeKey);\n let targetKey = this.nonDisabledOrderedKeys[index - 1];\n\n if (targetKey && this.isHiddenEl(this.elsByKey[targetKey])) {\n // If the previous key is hidden, we need to skip to the previous visible non-disabled key.\n targetKey = this.getPrevVisibleKey(index);\n }\n\n return targetKey || this.lastKey();\n },\n\n firstKey() {\n let targetKey = this.nonDisabledOrderedKeys[0];\n\n if (targetKey && this.isHiddenEl(this.elsByKey[targetKey])) {\n // If the first key is hidden, we need to skip to the next visible non-disabled key.\n targetKey = this.getNextVisibleKey(-1);\n }\n\n return targetKey;\n },\n\n lastKey() {\n let targetKey = this.nonDisabledOrderedKeys[this.nonDisabledOrderedKeys.length - 1];\n\n if (targetKey && this.isHiddenEl(this.elsByKey[targetKey])) {\n // If the last key is hidden, we need to skip to the previous visible non-disabled key.\n targetKey = this.getPrevVisibleKey(this.nonDisabledOrderedKeys.length);\n }\n\n return targetKey;\n },\n\n getNextVisibleKey(index) {\n let targetKey;\n let currentIndex = index + 2;\n let visibleKeyFound = false;\n\n while (currentIndex < this.nonDisabledOrderedKeys.length && ! visibleKeyFound) {\n targetKey = this.nonDisabledOrderedKeys[currentIndex];\n\n visibleKeyFound = ! this.isHiddenEl(this.elsByKey[targetKey]);\n\n currentIndex++;\n }\n\n if (! visibleKeyFound) {\n targetKey = null;\n }\n\n return targetKey;\n },\n\n getPrevVisibleKey(index) {\n let targetKey;\n let currentIndex = index - 2;\n let visibleKeyFound = false;\n\n while (currentIndex >= 0 && ! visibleKeyFound) {\n targetKey = this.nonDisabledOrderedKeys[currentIndex];\n\n visibleKeyFound = ! this.isHiddenEl(this.elsByKey[targetKey]);\n\n currentIndex--;\n }\n\n if (! visibleKeyFound) {\n targetKey = null;\n }\n\n return targetKey;\n },\n\n /**\n * Handle simple search when menu is focused.\n */\n\n searchQuery: '',\n\n clearSearch: Alpine.debounce(function () { this.searchQuery = '' }, 350),\n\n searchKey(query) {\n this.clearSearch();\n\n this.searchQuery += query;\n\n let foundKey;\n\n for (let key in this.searchableText) {\n let content = this.searchableText[key];\n\n if (content.startsWith(this.searchQuery)) {\n foundKey = key;\n break;\n }\n }\n\n if (! this.nonDisabledOrderedKeys.includes(foundKey)) {\n return;\n }\n\n return foundKey;\n },\n\n /**\n * Handle full text search from the search input.\n */\n\n searchableQuery: '',\n\n handleSearchableQuery(query) {\n if (query === this.searchableQuery) {\n return;\n }\n\n this.searchableQuery = query;\n\n if (this.__wire && this.__wireSearch) {\n this.__wire[this.__wireSearch](this.searchableQuery);\n\n return;\n }\n\n for (let key in this.searchableText) {\n const content = this.searchableText[key];\n const el = this.elsByKey[key];\n\n const match = this.searchableQuery\n ? content.toLowerCase().includes(this.searchableQuery.toLowerCase())\n : true;\n\n match\n ? this.showEl(el)\n : this.hideEl(el);\n }\n },\n\n /**\n * Other utils.\n */\n\n canRemoveOptions() {\n if (! this.__multiple && this.selectedKeys.length === 1) {\n return this.__config.optional;\n }\n\n const minSelected = this.__config.minSelected;\n\n if (Number.isNaN(minSelected) || minSelected < 1) {\n return true;\n }\n\n return this.selectedKeys.length > minSelected;\n },\n\n /**\n * Handle events.\n */\n\n activateByKeyEvent(e) {\n this.reorderKeys();\n\n if (this.__activateByKeyEvent(e) === false) {\n return;\n }\n\n let hasActive = this.hasActive();\n let targetKey;\n\n switch (e.key) {\n case 'Tab':\n case 'Backspace':\n case 'Delete':\n case 'Meta':\n break;\n case ['ArrowDown', 'ArrowRight'][this.__orientation === 'vertical' ? 0 : 1]:\n e.preventDefault();\n e.stopPropagation();\n targetKey = hasActive ? this.nextKey() : this.firstKey();\n break;\n case ['ArrowUp', 'ArrowLeft'][this.__orientation === 'vertical' ? 0 : 1]:\n e.preventDefault();\n e.stopPropagation();\n targetKey = hasActive ? this.prevKey() : this.lastKey();\n break;\n case 'Home':\n case 'PageUp':\n e.preventDefault();\n e.stopPropagation();\n targetKey = this.firstKey();\n break;\n case 'End':\n case 'PageDown':\n e.preventDefault();\n e.stopPropagation();\n targetKey = this.lastKey();\n break;\n default:\n if (e.key.length === 1) {\n targetKey = this.searchKey(e.key);\n }\n\n break;\n }\n\n if (targetKey) {\n this.activateAndScrollToKey(targetKey);\n }\n },\n\n // This is a way to allow each select implementation to add their own logic to keyboard events on the options menu.\n __activateByKeyEvent(e) {},\n});\n\nexport const keyByValue = (object, value) => Object.keys(object).find(key => object[key] === value);\n\nexport const isObjectOrArray = subject => typeof subject === 'object' && subject !== null;\n\nexport const renderHiddenInputs = (el, name, value) => {\n // Create input elements.\n let newInputs = generateInputs(name, value);\n\n // Mark them for later tracking.\n newInputs.forEach(i => i._x_hiddenInput = true);\n\n // Mark them for Alpine ignoring.\n newInputs.forEach(i => i._x_ignore = true);\n\n // Gather old elements for removal.\n let children = el.children;\n let oldInputs = [];\n\n for (let i = 0; i < children.length; i++) {\n let child = children[i];\n\n if (child._x_hiddenInput) {\n oldInputs.push(child);\n } else {\n break;\n }\n }\n\n // Remove old, and insert new ones into the DOM.\n window.Alpine.mutateDom(() => {\n oldInputs.forEach(i => i.remove());\n\n newInputs.reverse().forEach(i => el.prepend(i));\n });\n};\n\nconst mapByToCallback = by => {\n if (! by) {\n by = (a, b) => a === b;\n }\n\n if (typeof by === 'string') {\n const property = by;\n by = (a, b) => a[property] === b[property];\n }\n\n return by;\n};\n\nconst mapByToSimpleCompareCallback = by => {\n if (! by) {\n by = (a, b) => a === b;\n }\n\n if (typeof by === 'string') {\n const property = by;\n by = (a, b) => a[property] === b;\n }\n\n return by;\n};\n\nconst normalizeValue = (value, multiple) => {\n if (! value) {\n value = (multiple ? [] : null);\n }\n\n if (multiple && ! Array.isArray(value)) {\n value = [value];\n }\n\n return value;\n};\n\nconst generateInputs = (name, value, carry = []) => {\n if (isObjectOrArray(value)) {\n for (let key in value) {\n carry = carry.concat(\n generateInputs(`${name}[${key}]`, value[key])\n );\n }\n } else if (value !== null && value !== false) {\n let el = document.createElement('input');\n el.setAttribute('type', 'hidden');\n el.setAttribute('name', name);\n el.setAttribute('value', '' + value);\n\n return [el];\n }\n\n return carry;\n};\n","import selectContext from '../mixins/selectContext';\n\nexport const generateContext = ({ multiple, orientation, __wire, __wireSearch, __config, Alpine }) => {\n return {\n ...selectContext(Alpine),\n\n /**\n * Select configuration.\n */\n __multiple: multiple,\n __orientation: orientation,\n __wire,\n __wireSearch,\n __config,\n\n /**\n * Getters that don't work in the mixin for some reason...\n */\n\n get isScrollingTo() {\n return this.scrollingCount > 0;\n },\n\n get nonDisabledOrderedKeys() {\n return this.orderedKeys.filter(i => ! this.isDisabled(i));\n },\n };\n};\n","export default {\n __createPopper: undefined,\n __popper: undefined,\n\n __resetPopper() {\n if (this.__popper) {\n this.__popper.destroy();\n this.__popper = null;\n }\n },\n\n __popperConfig() {\n return {\n placement: 'bottom-start',\n strategy: this.__fixed ? 'fixed' : 'absolute',\n modifiers: [\n {\n name: 'offset',\n options: {\n offset: [0, 10],\n },\n },\n {\n name: 'preventOverflow',\n options: {\n boundariesElement: this.$root,\n },\n },\n ],\n };\n },\n\n __initPopper() {\n this.__resetPopper();\n this.__popper = this.__createPopper(this.$root, this.$refs.__options, this.__popperConfig());\n },\n};\n","import { renderHiddenInputs } from './selectContext';\n\nexport function selectData(el, Alpine, config) {\n return {\n __ready: false,\n __value: config.__value ?? false,\n __richValue: false,\n __isOpen: false,\n __context: undefined,\n __isMultiple: false,\n __isStatic: false,\n __isClearable: undefined,\n __isDisabled: false,\n __compareBy: null,\n __inputName: undefined,\n __fixed: false,\n __searchable: undefined,\n __hasCustomSelectLabel: false,\n __orientation: 'vertical',\n __externalChanged: false,\n __config: config.__config,\n __wireSearch: undefined,\n __type: 'custom',\n\n init() {\n this.__createPopper = window.Popper ? window.Popper.createPopper : window.createPopper;\n\n if (typeof this.__createPopper !== 'function') {\n throw new TypeError(`${this.__type}-select requires Popper.js (https://popper.js.org)`);\n }\n\n this.__isMultiple = Alpine.bound(el, 'data-multiple', false);\n this.__isDisabled = Alpine.bound(el, 'disabled', false) || Alpine.bound(el, 'readonly', false);\n this.__inputName = Alpine.bound(el, 'name', null);\n this.__compareBy = Alpine.bound(el, 'by');\n this.__orientation = Alpine.bound(el, 'horizontal') ? 'horizontal' : 'vertical';\n this.__searchable = Alpine.bound(el, 'searchable', false);\n this.__isClearable = Alpine.bound(el, 'clearable', false);\n this.__wireSearch = Alpine.bound(el, 'livewire-search');\n this.__fixed = Alpine.bound(el, 'fixed', false);\n\n const autoFocus = Alpine.bound(el, 'autofocus');\n\n this.__context = this.__generateContext(el, Alpine, config);\n\n const defaultValue = Alpine.bound(el, 'default-value', null);\n if (defaultValue && ! this.__value) {\n this.__value = defaultValue;\n }\n\n // We have to wait for the rest of the HTML to initialize in Alpine before\n // we can mark this component as \"ready\".\n queueMicrotask(() => {\n this.__ready = true;\n\n // We have to wait again after the \"ready\" processes are finished\n // to settle up currently selected values (this prevents this next bit\n // of code from running multiple times on startup).\n queueMicrotask(() => {\n // This \"fingerprint\" acts as a checksum of the last-known \"value\"\n // passed into x-model. We need to track this so that we can determine\n // from the reactive effect if it was the value that changed externally\n // or an option was selected internally.\n let lastValueFingerprint = false;\n\n Alpine.effect(() => {\n // Accessing the selected keys, so a change in it always triggers this effect.\n this.__context.selectedKeys;\n\n if (lastValueFingerprint === false || lastValueFingerprint !== JSON.stringify(this.__value)) {\n // Here we know that the value changed externally, and we can add the selection.\n this.__externalChanged = true;\n\n if (this.__isMultiple) {\n this.__context.clearSelected();\n\n const keys = [];\n\n for (let value of this.__value) {\n const object = this.__context.getObjectFromValue(value, this.__compareBy);\n object && keys.push(object);\n }\n\n this.__context.selectValue(keys, this.__compareBy);\n this.__richValue = this.__context.selectedValueOrValues();\n } else {\n if (typeof this.__value !== 'object' && ! Array.isArray(this.__value) && this.__value !== null) {\n const key = this.__context.getKeyFromSimpleValue(this.__value, this.__compareBy);\n key && this.__context.selectKey(key);\n } else {\n this.__context.selectValue(this.__value, this.__compareBy);\n }\n\n this.__richValue = this.__context.selectedValueOrValues();\n }\n } else {\n // Here we know that an option was selected, and we can change the value.\n this.__value = this.__context.selectedBasicValueOrValues(this.__compareBy);\n this.__richValue = this.__context.selectedValueOrValues();\n }\n\n // Generate the \"value\" checksum for comparison next time.\n lastValueFingerprint = JSON.stringify(this.__value);\n\n // Everytime the value changes, we need to re-render the hidden inputs\n // if a user passed the \"name\" prop.\n this.__inputName && renderHiddenInputs(this.$el, this.__inputName, this.__value);\n });\n\n // If select is searchable, we want to hide any opt groups when a query is present.\n if (this.__searchable) {\n Alpine.effect(() => {\n const query = this.__context.searchableQuery;\n\n this.$refs.__options && this.$refs.__options.querySelectorAll('[role=\"presentation\"]:not([data-placeholder=\"true\"])').forEach(el => {\n if (query) {\n this.__context.hideEl(el);\n } else {\n this.__context.showEl(el);\n }\n });\n });\n }\n\n (autoFocus && this.$refs.__button) && this.$refs.__button.focus({ preventScroll: true });\n });\n });\n\n this.$watch('__value', newValue => {\n this.$dispatch('input', newValue);\n });\n\n this.__componentBooted(el, Alpine, config);\n },\n\n __open() {\n if (this.__isDisabled) {\n return;\n }\n\n this.__isOpen = true;\n\n this.__context.activateSelectedOrFirst();\n\n // Safari needs more of a \"tick\" for focusing after x-show for some reason.\n // Probably because Alpine adds an extra tick when x-showing for @click.outside.\n let nextTick = callback => requestAnimationFrame(() => requestAnimationFrame(callback));\n\n nextTick(() => {\n if (this.__searchable && this.$refs.__search) {\n this.$refs.__search.focus({ preventScroll: true });\n } else {\n this.$refs.__options.focus({ preventScroll: true });\n }\n\n this.__initPopper();\n });\n },\n\n __close() {\n this.__isOpen = false;\n this.__resetPopper();\n\n this.$nextTick(() => this.$refs.__button.focus({ preventScroll: true }));\n },\n\n __generateContext(el, Alpine, config) {},\n\n __componentBooted(el, Alpine, config) {},\n };\n}\n\nexport function buttonDirective(el, Alpine) {\n return {\n 'x-ref': '__button',\n ':id'() { return this.$id(`fc-${this.__type}-select-button`) },\n 'aria-haspopup': 'true',\n 'data-custom-select-button': 'true',\n ':aria-labelledby'() { return this.$data.__hasCustomSelectLabel ? this.$id(`fc-${this.__type}-select-label`) : this.$id('fc-label') },\n ':aria-expanded'() { return this.$data.__isOpen },\n ':aria-controls'() { return this.$data.__isOpen && this.$id(`fc-${this.__type}-select-options`) },\n ':tabindex'() { return this.$data.__isDisabled ? '-1' : '0' },\n 'x-init'() {\n if (this.$el.tagName.toLowerCase() === 'button' && ! this.$el.hasAttribute('type')) {\n this.$el.type = 'button';\n }\n\n if (this.$el.tagName.toLowerCase() !== 'button') {\n this.$el.setAttribute('role', 'button');\n }\n },\n '@click'() { this.$data.__open() },\n '@focus'() { this.$data.__isDisabled && this.$el.blur() },\n '@keydown'(e) {\n if (['ArrowDown', 'ArrowUp', 'ArrowLeft', 'ArrowRight'].includes(e.key)) {\n e.stopPropagation();\n e.preventDefault();\n\n this.$data.__open();\n }\n\n const $magic = this.__type === 'tree' ? this.$treeSelect : this.$customSelect;\n\n if (e.key === 'Backspace') {\n e.stopPropagation();\n e.preventDefault();\n\n if (this.$data.__isDisabled) {\n return;\n }\n\n const lastSelected = this.$data.__isMultiple\n ? $magic.selectedObject[$magic.selectedObject.length - 1]\n : $magic.selectedObject;\n\n lastSelected && this.$data.__context.toggleValue(lastSelected, this.$data.__compareBy);\n }\n },\n '@keydown.space.stop.prevent'() { this.$data.__open() },\n '@keydown.enter.stop.prevent'() { this.$data.__open() },\n };\n}\n\nexport function labelDirective(el, Alpine) {\n return {\n 'x-ref': '__label',\n ':id'() { return this.$id(`fc-${this.__type}-custom-select-label`) },\n 'x-init'() {\n this.$data.__hasCustomSelectLabel = true;\n },\n '@click'() { this.$refs.__button.focus({ preventScroll: true }) },\n };\n}\n\nexport function clearButtonDirective(el, Alpine, type) {\n const magic = type === 'tree' ? '$treeSelect' : '$customSelect';\n\n return {\n ':tabindex'() { return (this.$data.__isDisabled || ! this[magic].hasValue) ? false : '0' },\n 'x-show'() { return this[magic].shouldShowClear },\n 'x-init'() {\n if (this.$el.tagName.toLowerCase() === 'button' && ! this.$el.hasAttribute('type')) {\n this.$el.type = 'button';\n }\n\n if (this.$el.tagName.toLowerCase !== 'button') {\n this.$el.setAttribute('role', 'button');\n }\n },\n '@click.stop.prevent'() {\n if (this.$data.__isDisabled) {\n return;\n }\n\n this.$data.__context.clearSelected();\n this.$data.__close();\n\n // Our value is not reacting to the changes made in context, so we'll set it manually.\n this.$data.__value = this.$data.__isMultiple ? [] : null;\n },\n '@keydown.space.stop.prevent'() {\n if (this.$data.__isDisabled) {\n return;\n }\n\n this.$data.__context.clearSelected();\n this.$data.__close();\n\n // Our value is not reacting to the changes made in context, so we'll set it manually.\n this.$data.__value = this.$data.__isMultiple ? [] : null;\n },\n };\n}\n\nexport function optionsDirective(el, Alpine) {\n return {\n 'x-ref': '__options',\n ':id'() { return this.$id(`fc-${this.__type}-select-options`) },\n 'x-init'() {\n this.$data.__isStatic = Alpine.bound(this.$el, 'static', false);\n },\n 'x-show'() { return this.$data.__isStatic ? true : this.$data.__isOpen },\n '@click.outside'() { this.$data.__close() },\n '@keydown.escape.stop.prevent'() { this.$data.__close() },\n tabindex: '0',\n role: 'listbox',\n ':aria-orientation'() {return this.$data.__orientation },\n ':aria-labelledby'() { return this.$id(`fc-${this.__type}-select-button`) },\n ':aria-activedescendant'() { return this.$data.__context.activeEl() && this.$data.__context.activeEl().id },\n ':aria-multiselectable'() { return this.$data.__isMultiple ? 'true' : 'false' },\n '@focus'() { this.$data.__context.activateSelectedOrFirst() },\n 'x-trap'() { return this.$data.__isOpen },\n '@keydown'(e) { this.$data.__context.activateByKeyEvent(e) },\n '@keydown.enter.stop.prevent'() {\n this.$data.__context.selectActive();\n\n this.$data.__isMultiple || this.$data.__close();\n },\n '@keydown.space.stop.prevent'() {\n this.$data.__context.selectActive();\n\n this.$data.__isMultiple || this.$data.__close();\n },\n };\n}\n\nexport function optionDirective(el, Alpine, type) {\n const rootMagic = type === 'tree' ? '$treeSelect' : '$customSelect';\n const magic = type === 'tree' ? '$treeSelectOption' : '$customSelectOption';\n\n return {\n ':id'() { return this.$id(`fc-${this.__type}-select-option`) },\n ':tabindex'() { return this.$data.__isDisabled ? false : '-1' },\n ':role'() { return this[magic].isOptGroup ? 'presentation' : 'option' },\n 'x-init'() {\n const initCallback = () => {\n let value = Alpine.bound(el, 'value');\n let disabled = Alpine.bound(el, 'disabled');\n let isOptGroup = Alpine.bound(el, 'is-opt-group');\n\n el.__optionKey = this.$data.__context.initItem(el, value, disabled, isOptGroup);\n };\n\n // Our $customSelectOption magic only seems to work with queueMicrotask on initial page load,\n // so if our component says it's ready, we'll just run the code to initialize the option right away.\n if (this.$data.__ready) {\n initCallback();\n } else {\n queueMicrotask(initCallback);\n }\n },\n ':aria-selected'() { return this[magic].isSelected },\n ':aria-disabled'() { return this[magic].isDisabled },\n '@click'() {\n if (this.$data.__isDisabled || this[magic].isDisabled) {\n return;\n }\n\n if (! this[magic].isSelected && ! this[rootMagic].canSelectMore) {\n return;\n }\n\n this.$data.__context.selectEl(el);\n\n this.$data.__isMultiple || this.$data.__close();\n },\n '@mousemove'() { this.$data.__context.activateEl(el) },\n '@mouseleave'() { this.$data.__context.deactivate() },\n };\n}\n\nexport function searchDirective(el, Alpine) {\n return {\n 'x-ref': '__search',\n ':id'() { return this.$id(`fc-${this.__type}-select-search`) },\n 'x-init'() {\n // When using livewire search, the directive re-evaluates even when inside a wire:ignore,\n // so we'll need to re-populate the value of the search query, so we don't lose it...\n const searchableQuery = this.$data.__context.searchableQuery;\n this.$el.value = searchableQuery;\n\n if (this.$data.__ready && this.$data.__isOpen && searchableQuery.length) {\n this.$nextTick(() => {\n if (this.$el.createTextRange) {\n let range = this.$el.createTextRange();\n range.move('character', searchableQuery.length);\n range.select();\n } else {\n // This sets the cursor position to the end of the input and prevents\n // the entire text from being highlighted. IMO this creates a better UX.\n this.$el.focus();\n this.$el.setSelectionRange && this.$el.setSelectionRange(searchableQuery.length, searchableQuery.length);\n }\n });\n }\n },\n '@keyup.debounce.250ms'(e) {\n // We don't want our keyboard nav events to trigger this.\n const keysToSkip = [\n 'Enter',\n 'ArrowDown',\n 'ArrowUp',\n 'ArrowRight',\n 'ArrowLeft',\n 'Home',\n 'PageUp',\n 'End',\n 'PageDown',\n 'Tab',\n 'Meta',\n ];\n if (keysToSkip.includes(e.key)) {\n return;\n }\n\n this.$data.__context.handleSearchableQuery(e.target.value);\n },\n // Prevent our option handler from firing when we're typing in the search box.\n '@keydown.space.stop'() {},\n '@keydown.tab.prevent.stop'() {\n // Options has x-trap on it, which prevent us from tabbing out of the search box.\n // We'll allow the user to tab to the options, which will allow selecting an option using the space key.\n this.$refs.__options.focus();\n }\n };\n}\n\nexport function tokenDirective(el, Alpine) {\n return {\n ':tabindex'() { return this.$data.__isDisabled ? false : '0' },\n ':role'() { return this.$el.tagName.toLowerCase() !== 'button' && ! this.$data.__isDisabled ? 'button' : false },\n 'x-init'() {\n const initCallback = () => {\n el.__key = this.$data.__context.getKeyFromValue(el.value);\n };\n\n if (this.$data.__ready) {\n initCallback();\n } else {\n queueMicrotask(initCallback);\n }\n },\n '@click.stop.prevent'() {\n if (this.$data.__isDisabled || ! el.__key) {\n return;\n }\n\n this.$data.__context.toggleSelected(el.__key);\n },\n '@keydown.space.stop.prevent'() {\n if (this.$data.__isDisabled || ! el.__key) {\n return;\n }\n\n this.$data.__context.toggleSelected(el.__key);\n },\n };\n}\n","export const rootMagic = (el, Alpine, callback, stubCallback) => {\n let data = Alpine.$data(el);\n\n if (typeof stubCallback !== 'function') {\n stubCallback = () => ({});\n }\n\n if (typeof callback !== 'function') {\n callback = () => ({});\n }\n\n if (! data.__ready) {\n return {\n isDisabled: false,\n isOpen: false,\n selected: null,\n active: null,\n selectedObject: null,\n ...stubCallback(data),\n };\n }\n\n return {\n get isOpen() {\n return data.__isOpen;\n },\n get isDisabled() {\n return data.__isDisabled;\n },\n get isSearchable() {\n return data.__searchable;\n },\n get selected() {\n return data.__value;\n },\n get active() {\n return data.__context.active;\n },\n get selectedObject() {\n return data.__richValue;\n },\n get hasValue() {\n if (data.__isMultiple) {\n return data.__value && data.__value.length > 0;\n }\n\n return !! data.__value;\n },\n get shouldShowClear() {\n // If the input is disabled or readonly, we can't clear.\n if (data.__isDisabled) {\n return false;\n }\n\n // If the select is not marked as optional, at least one value is required.\n if (data.__config.optional === false) {\n return false;\n }\n\n // If multi-select and minSelected is a number and at least 1, then we can't clear.\n if (data.__isMultiple && ! Number.isNaN(data.__config.minSelected) && data.__config.minSelected > 0) {\n return false;\n }\n\n return data.__isClearable && this.hasValue;\n },\n get canSelectMore() {\n if (! data.__isMultiple) {\n return true;\n }\n\n // If maxSelected is not a number or less than one, then we can select as many as we want.\n if (Number.isNaN(data.__config.maxSelected) || data.__config.maxSelected < 1) {\n return true;\n }\n\n return data.__config.maxSelected > data.__value.length;\n },\n get canDeselectOptions() {\n if (data.__isDisabled) {\n return false;\n }\n\n return data.__context.canRemoveOptions();\n },\n get hasOptions() {\n // We access searchableQuery here, so a change to it will trigger this getter to re-evaluate.\n data.__context.searchableQuery;\n\n return data.$refs.__options &&\n data.$refs.__options.querySelectorAll('[role=\"option\"]:not([data-hidden])').length > 0;\n },\n get hasSearch() {\n return !! data.__context.searchableQuery;\n },\n\n ...callback(data),\n };\n};\n\nexport const optionMagic = (el, Alpine, callback, stubCallback) => {\n if (typeof stubCallback !== 'function') {\n stubCallback = () => ({});\n }\n\n if (typeof callback !== 'function') {\n callback = () => ({});\n }\n\n let data = Alpine.$data(el);\n\n let stub = {\n isDisabled: false,\n isSelected: false,\n isActive: false,\n ...stubCallback(data),\n };\n\n if (! data.__ready) {\n return stub;\n }\n\n let optionEl = Alpine.findClosest(el, i => i.__optionKey);\n\n if (! optionEl) {\n return stub;\n }\n\n let context = data.__context;\n\n return {\n get isActive() {\n return context.isActiveEl(optionEl);\n },\n get isSelected() {\n return context.isSelectedEl(optionEl);\n },\n get isDisabled() {\n return context.isDisabledEl(optionEl);\n },\n\n ...callback(data, context, optionEl),\n };\n};\n","import { generateContext } from '../util/customSelectContext';\nimport selectPopper from '../mixins/selectPopper';\nimport {\n buttonDirective,\n clearButtonDirective,\n labelDirective,\n optionsDirective,\n optionDirective,\n searchDirective,\n selectData,\n tokenDirective,\n} from '../mixins/select';\nimport { rootMagic, optionMagic } from '../mixins/selectMagic';\n\nexport default function (Alpine) {\n Alpine.data('customSelect', config => {\n return {\n ...selectPopper,\n\n ...selectData(config.__el, Alpine, config),\n\n __generateContext(el, Alpine, config) {\n return generateContext({\n multiple: this.__isMultiple,\n orientation: this.__orientation,\n __wire: config.__wire,\n __wireSearch: Alpine.bound(el, 'livewire-search'),\n __config: config.__config ?? {},\n Alpine,\n });\n },\n }\n });\n\n Alpine.directive('custom-select', (el, directive, { cleanup }) => {\n switch (directive.value) {\n case 'button':\n handleButton(el, Alpine);\n break;\n case 'label':\n handleLabel(el, Alpine);\n break;\n case 'clear':\n handleClearButton(el, Alpine);\n break;\n case 'options':\n handleOptions(el, Alpine);\n break;\n case 'option':\n handleOption(el, Alpine);\n\n // We need to notify the context that the option has left the DOM.\n cleanup(() => {\n const parent = el.closest('[x-data]');\n\n parent && Alpine.$data(parent).__context.destroyItem(el);\n });\n\n break;\n case 'search':\n handleSearch(el, Alpine);\n break;\n case 'token':\n handleToken(el, Alpine);\n break;\n\n default:\n throw new Error(`Unknown custom-select directive value: ${directive.value}`);\n }\n });\n\n Alpine.magic('customSelect', el => {\n return rootMagic(el, Alpine);\n });\n\n Alpine.magic('customSelectOption', el => {\n return optionMagic(\n el,\n Alpine,\n (data, context, optionEl) => {\n return {\n get isOptGroup() {\n return Alpine.bound(optionEl, 'is-opt-group');\n },\n };\n },\n () => {\n return {\n isOptGroup: false,\n };\n },\n );\n });\n}\n\nfunction handleLabel(el, Alpine) {\n Alpine.bind(el, {\n ...labelDirective(el, Alpine),\n });\n}\n\nfunction handleButton(el, Alpine) {\n Alpine.bind(el, {\n ...buttonDirective(el, Alpine),\n });\n}\n\nfunction handleSearch(el, Alpine) {\n Alpine.bind(el, {\n ...searchDirective(el, Alpine),\n });\n}\n\nfunction handleOptions(el, Alpine) {\n Alpine.bind(el, {\n ...optionsDirective(el, Alpine),\n });\n}\n\nfunction handleOption(el, Alpine) {\n Alpine.bind(el, {\n ...optionDirective(el, Alpine, 'custom'),\n });\n}\n\nfunction handleToken(el, Alpine) {\n Alpine.bind(el, {\n ...tokenDirective(el, Alpine),\n });\n}\n\nfunction handleClearButton(el, Alpine) {\n Alpine.bind(el, {\n ...clearButtonDirective(el, Alpine, 'custom'),\n });\n}\n","export default function (Alpine) {\n Alpine.data('datePicker', config => ({\n __ready: false,\n __value: config.value,\n __rawValue: null,\n __mode: config.mode ?? config.options.mode ?? 'single',\n __isDisabled: false,\n __flatpickr: undefined,\n\n init() {\n if (typeof window.flatpickr !== 'function') {\n throw new Error(`date-picker requires Flatpickr. See https://flatpickr.js.org`);\n }\n\n let value = this.__value;\n if (value?.hasOwnProperty('initialValue')) {\n value = value.initialValue;\n }\n\n this.__rawValue = value;\n\n\n // We have to wait for the rest of the HTML to initialize in Alpine before\n // we can mark this component as \"ready\".\n queueMicrotask(() => {\n this.__ready = true;\n\n this.__flatpickr = window.flatpickr(this.$refs.__input, this.__config());\n });\n\n this.$watch('__value', newValue => {\n this.__rawValue = newValue;\n this.__flatpickr.setDate(newValue);\n this.$dispatch('input', newValue);\n });\n\n this.$watch('__isDisabled', newValue => {\n if (newValue) {\n this.__flatpickr.set('clickOpens', false);\n } else {\n this.__flatpickr.set('clickOpens', config.options.clickOpens);\n }\n });\n },\n\n __open() {\n ! this.__isDisabled && this.__flatpickr.open();\n },\n\n __clear() {\n if (this.__isDisabled) {\n return;\n }\n\n this.__value = this.__mode === 'single'\n ? null\n : [];\n },\n\n __config() {\n let onOpen = [\n function (selectedDates, dateStr, instance) {\n instance.setDate(this.__rawValue);\n }.bind(this),\n ];\n\n let customConfig = config.config ?? {};\n if (customConfig.hasOwnProperty('onOpen')) {\n let customOnOpen = Array.isArray(customConfig.onOpen) ? customConfig.onOpen : [customConfig.onOpen];\n\n onOpen = onOpen.concat(customOnOpen);\n\n delete customConfig.onOpen;\n }\n\n return {\n defaultDate: this.__rawValue,\n ...config.options,\n onOpen,\n onChange: function(date, dateString) {\n let newValue = dateString;\n if (this.__mode === 'multiple') {\n newValue = dateString.split(', ');\n } else if (this.__mode === 'range') {\n newValue = dateString.split(' to ');\n }\n\n this.__value = newValue;\n }.bind(this),\n ...customConfig,\n };\n },\n }));\n\n Alpine.directive('date-picker', (el, directive, { cleanup }) => {\n switch (directive.value) {\n case 'clear':\n handleClear(el, Alpine);\n break;\n case 'container':\n handleContainer(el, Alpine);\n break;\n case 'input':\n handleInput(el, Alpine);\n\n cleanup(() => {\n const parent = el.closest('[x-data]');\n\n parent && Alpine.$data(parent).__flatpickr.destroy();\n });\n\n break;\n case 'toggle':\n handleToggle(el, Alpine);\n break;\n default:\n throw new Error(`Unknown date-picker directive value: ${directive.value}`);\n }\n });\n\n Alpine.magic('datePicker', el => {\n let data = Alpine.$data(el);\n\n if (! data.__ready) {\n return {\n isDisabled: false,\n flatpickr: undefined,\n hasValue: false,\n open() {},\n };\n }\n\n return {\n get isDisabled() {\n return data.__isDisabled;\n },\n get flatpickr() {\n return data.__flatpickr;\n },\n get hasValue() {\n if (data.__mode === 'single') {\n return data.__value !== null && data.__value !== '';\n }\n\n return Array.isArray(data.__value) && data.__value.length > 0;\n },\n open() {\n data.__open();\n },\n };\n });\n}\n\nfunction handleInput(el, Alpine) {\n Alpine.bind(el, {\n 'x-ref': '__input',\n 'type': 'text',\n 'x-init'() {\n this.$data.__isDisabled = this.$el.disabled || this.$el.readOnly;\n\n queueMicrotask(() => {\n const observer = new MutationObserver(mutations => {\n mutations.forEach(mutation => {\n if (mutation.attributeName === 'disabled' || mutation.attributeName === 'readonly') {\n this.$data.__isDisabled = this.$el.disabled || this.$el.readOnly;\n }\n });\n });\n\n observer.observe(this.$el, { attributes: true });\n });\n },\n });\n}\n\n// Since we're using wire:ignore on the input, we are going to show error attributes (i.e. aria-invalid) on the container.\n// We'll watch for these changes with a mutation observer and then apply them to the input.\nfunction handleContainer(el, Alpine) {\n Alpine.bind(el, {\n 'x-ref': '__container',\n 'role': 'none',\n 'x-init'() {\n const observer = new MutationObserver(mutations => {\n mutations.forEach(mutation => {\n if (mutation.attributeName === 'aria-invalid') {\n const invalid = mutation.target.getAttribute('aria-invalid') === 'true';\n\n if (invalid) {\n this.$refs.__input.setAttribute('aria-invalid', 'true');\n this.$refs.__input.classList.add('input-error');\n } else {\n this.$refs.__input.removeAttribute('aria-invalid');\n this.$refs.__input.classList.remove('input-error');\n }\n } else if (mutation.attributeName === 'aria-describedby') {\n const describedBy = mutation.target.getAttribute('aria-describedby');\n\n if (describedBy) {\n this.$refs.__input.setAttribute('aria-describedby', describedBy);\n } else {\n this.$refs.__input.removeAttribute('aria-describedby');\n }\n }\n });\n });\n\n observer.observe(this.$el, { attributes: true });\n },\n });\n}\n\nfunction handleToggle(el, Alpine) {\n Alpine.bind(el, {\n 'x-ref': '__toggle',\n ':role'() {\n if (this.$datePicker.isDisabled) {\n return false;\n }\n\n if (this.$el.tagName.toLowerCase() === 'button') {\n return false;\n }\n\n return 'button';\n },\n '@click'() {\n this.$datePicker.open();\n },\n });\n}\n\nfunction handleClear(el, Alpine) {\n Alpine.bind(el, {\n 'x-ref': '__clear',\n 'x-init'() {\n if (this.$el.tagName.toLowerCase() === 'button' && ! this.$el.hasAttribute('type')) {\n this.$el.setAttribute('type', 'button');\n }\n },\n '@click'() {\n this.$data.__clear();\n },\n 'x-show'() { return this.$datePicker.hasValue && ! this.$datePicker.isDisabled },\n });\n}\n","export default options => ({\n value: false,\n onValue: true,\n offValue: false,\n ...options,\n\n get isPressed() {\n if (Array.isArray(this.value)) {\n return this.value.includes(this.onValue);\n }\n\n return this.value === this.onValue;\n },\n\n toggle() {\n if (Array.isArray(this.value)) {\n this.isPressed\n ? this.value.splice(this.value.indexOf(this.onValue), 1)\n : this.value.push(this.onValue);\n } else {\n this.value = this.isPressed ? this.offValue : this.onValue;\n }\n\n this.$dispatch('input', this.value);\n },\n});\n","import selectContext from '../mixins/selectContext';\nimport { keyByValue } from '../mixins/selectContext';\n\nexport const generateContext = ({ multiple, orientation, __wire, __wireSearch, __config, Alpine }) => {\n return {\n ...selectContext(Alpine),\n\n /**\n * Select configuration.\n */\n\n __multiple: multiple,\n __orientation: orientation,\n __wire,\n __wireSearch,\n __config,\n\n /**\n * Tree select specific configuration.\n */\n\n expandableEls: {},\n expandedKeys: [],\n\n __itemBooted(el, value, disabled, key) {\n // We need to wait for the option to finish initializing before we can check\n // for the presence of children.\n queueMicrotask(() => {\n if (el.__children?.length) {\n this.expandableEls[key] = el;\n }\n });\n },\n\n __itemDestroyed(el, key) {\n if (this.expandableEls[key]) {\n delete this.expandableEls[key];\n }\n\n if (this.expandedKeys.includes(key)) {\n this.expandedKeys.splice(this.expandedKeys.indexOf(key), 1);\n }\n },\n\n isExpandedEl(el) {\n const key = keyByValue(this.elsByKey, el);\n\n if (! key) {\n return;\n }\n\n return this.expandedKeys.includes(key);\n },\n\n toggleExpandedEl(el) {\n const key = keyByValue(this.elsByKey, el);\n\n if (! key) {\n return;\n }\n\n this.toggleExpanded(key);\n },\n\n toggleExpanded(key) {\n if (this.expandedKeys.includes(key)) {\n this.expandedKeys.splice(this.expandedKeys.indexOf(key), 1);\n } else {\n this.expandedKeys.push(key);\n }\n },\n\n expandChildren(key) {\n if (! this.expandedKeys.includes(key)) {\n this.expandedKeys.push(key);\n }\n },\n\n collapseChildren(key) {\n if (this.expandedKeys.includes(key)) {\n this.expandedKeys.splice(this.expandedKeys.indexOf(key), 1);\n }\n },\n\n __activateByKeyEvent(e) {\n if (! this.hasActive()) {\n return;\n }\n\n switch (e.key) {\n case ['ArrowRight', 'ArrowDown'][this.__orientation === 'vertical' ? 0 : 1]:\n e.preventDefault();\n e.stopPropagation();\n\n if (this.expandableEls[this.activeKey]) {\n this.expandChildren(this.activeKey);\n }\n\n return false;\n case ['ArrowLeft', 'ArrowUp'][this.__orientation === 'vertical' ? 0 : 1]:\n e.preventDefault();\n e.stopPropagation();\n\n if (this.expandableEls[this.activeKey]) {\n this.collapseChildren(this.activeKey);\n }\n\n return false;\n }\n },\n\n /**\n * Getters that don't work in the mixin for some reason...\n */\n\n get isScrollingTo() {\n return this.scrollingCount > 0;\n },\n\n get nonDisabledOrderedKeys() {\n return this.orderedKeys.filter(i => ! this.isDisabled(i));\n },\n };\n};\n","import { generateContext } from '../util/treeSelectContext';\nimport selectPopper from '../mixins/selectPopper';\nimport {\n buttonDirective,\n clearButtonDirective,\n labelDirective,\n optionsDirective,\n optionDirective,\n searchDirective,\n selectData,\n tokenDirective,\n} from '../mixins/select';\nimport { rootMagic, optionMagic } from '../mixins/selectMagic';\n\nexport default function (Alpine) {\n Alpine.data('treeSelect', config => {\n return {\n ...selectPopper,\n\n ...selectData(config.__el, Alpine, config),\n\n __type: 'tree',\n\n __generateContext(el, Alpine, config) {\n return generateContext({\n multiple: this.__isMultiple,\n orientation: this.__orientation,\n __wire: config.__wire,\n __wireSearch: Alpine.bound(el, 'livewire-search'),\n __config: config.__config ?? {},\n Alpine,\n });\n },\n };\n });\n\n Alpine.directive('tree-select', (el, directive, { cleanup }) => {\n switch (directive.value) {\n case 'button':\n handleButton(el, Alpine);\n break;\n case 'label':\n handleLabel(el, Alpine);\n break;\n case 'clear':\n handleClearButton(el, Alpine);\n break;\n case 'options':\n handleOptions(el, Alpine);\n break;\n case 'option':\n handleOption(el, Alpine);\n\n // We need to notify the context that the option has left the DOM.\n cleanup(() => {\n const parent = el.closest('[x-data]');\n\n parent && Alpine.$data(parent).__context.destroyItem(el);\n });\n\n break;\n case 'search':\n handleSearch(el, Alpine);\n break;\n case 'token':\n handleToken(el, Alpine);\n break;\n case 'child-toggle':\n handleChildToggle(el, Alpine);\n break;\n case 'children':\n handleChildren(el, Alpine);\n break;\n\n default:\n throw new Error(`Unknown tree-select directive: ${directive.value}`);\n }\n });\n\n Alpine.magic('treeSelect', el => {\n return rootMagic(\n el,\n Alpine,\n data => {\n return {\n get hasExpandableOptions() {\n return Object.keys(data.__context.expandableEls).length > 0;\n },\n };\n },\n );\n });\n\n Alpine.magic('treeSelectOption', el => {\n return optionMagic(\n el,\n Alpine,\n (data, context, optionEl) => {\n return {\n get hasChildren() {\n return optionEl.__children && optionEl.__children.length > 0;\n },\n get isExpanded() {\n return context.isExpandedEl(optionEl);\n },\n };\n },\n () => {\n return {\n hasChildren: false,\n };\n },\n );\n });\n}\n\nfunction handleButton(el, Alpine) {\n Alpine.bind(el, {\n ...buttonDirective(el, Alpine),\n });\n}\n\nfunction handleLabel(el, Alpine) {\n Alpine.bind(el, {\n ...labelDirective(el, Alpine),\n });\n}\n\nfunction handleClearButton(el, Alpine) {\n Alpine.bind(el, {\n ...clearButtonDirective(el, Alpine, 'tree'),\n });\n}\n\nfunction handleOptions(el, Alpine) {\n Alpine.bind(el, {\n ...optionsDirective(el, Alpine),\n });\n}\n\nfunction handleOption(el, Alpine) {\n Alpine.bind(el, {\n ...optionDirective(el, Alpine, 'tree'),\n\n 'data-tree-select-option': 'true',\n ':role'() { return 'option' },\n\n 'x-init'() {\n const initCallback = () => {\n let value = Alpine.bound(el, 'value');\n let disabled = Alpine.bound(el, 'disabled');\n\n el.__level = Alpine.bound(el, 'level', 0);\n\n el.__optionKey = this.$data.__context.initItem(el, value, disabled);\n\n const childrenField = this.$data.__config.childrenField;\n if (value?.hasOwnProperty(childrenField)) {\n el.__children = value[childrenField];\n }\n };\n\n // Our $customSelectOption magic only seems to work with queueMicrotask on initial page load,\n // so if our component says it's ready, we'll just run the code to initialize the option right away.\n if (this.$data.__ready) {\n initCallback();\n } else {\n queueMicrotask(initCallback);\n }\n },\n });\n}\n\nfunction handleSearch(el, Alpine) {\n Alpine.bind(el, {\n ...searchDirective(el, Alpine),\n });\n}\n\nfunction handleToken(el, Alpine) {\n Alpine.bind(el, {\n ...tokenDirective(el, Alpine),\n });\n}\n\nfunction handleChildToggle(el, Alpine) {\n Alpine.bind(el, {\n 'x-init'() {\n if (el.tagName.toLowerCase() !== 'button') {\n el.setAttribute('role', 'button');\n }\n },\n '@click.stop.prevent'() {\n let optionEl = Alpine.findClosest(el, i => i.__optionKey);\n\n optionEl && this.$data.__context.toggleExpandedEl(optionEl);\n },\n });\n}\n\n// We are using this directive to hide/show the children of an option because it is out of the scope\n// of where the $treeSelectOption magic will pick up on the state of the option.\nfunction handleChildren(el, Alpine) {\n Alpine.bind(el, {\n 'data-tree-select-children': 'true',\n 'x-data'() {\n return {\n __optionEl: undefined,\n init() {\n try {\n this.__optionEl = el.parentNode.querySelector('[data-tree-select-option=\"true\"]');\n } catch (e) {}\n },\n get __isExpanded() {\n return this.__optionEl && this.$data.__context.isExpandedEl(this.__optionEl);\n }\n };\n },\n 'x-show'() { return this.$data.__isExpanded },\n });\n}\n","import customSelect from './custom-select';\nimport datePicker from './date-picker';\nimport filepond from './filepond';\nimport quill from './quill';\nimport switchToggle from './switch-toggle';\nimport treeSelect from './tree-select';\n\ndocument.addEventListener('alpine:init', () => {\n customSelect(Alpine);\n datePicker(Alpine);\n filepond(Alpine);\n quill(Alpine);\n treeSelect(Alpine);\n Alpine.data('switchToggle', switchToggle);\n});\n","export default function (Alpine) {\n Alpine.data('filepond', ({ __value, __this, __wireModel, options, __config, id }) => {\n return {\n __ready: false,\n __pond: null,\n __processingFiles: false,\n __value,\n\n init() {\n if (typeof window.FilePond?.create !== 'function') {\n throw new Error(`filepond requires FilePond to be loaded. See https://pqina.nl/filepond/docs/getting-started/installation/javascript/`);\n }\n\n queueMicrotask(() => {\n this.__ready = true;\n\n let pondOptions = { ...options };\n\n if (__this && __wireModel) {\n pondOptions.server = {\n process: (fieldName, file, metadata, load, error, progress, abort, transfer, options) => {\n __this.upload(__wireModel, file, load, error, progress);\n },\n revert: (filename, load) => {\n __this.removeUpload(__wireModel, filename, load);\n },\n };\n\n // To prevent our wire:model watcher from pre-maturely removing files from\n // filepond, we need to tell our component we are still processing.\n pondOptions.onaddfilestart = () => this.__processingFiles = true;\n\n pondOptions.onprocessfiles = () => this.__processingFiles = false;\n }\n\n if (__this) {\n // Listen for livewire components to emit a file-pond-clear event.\n __this.on('file-pond-clear', (desiredId) => this.__clear(desiredId));\n }\n\n pondOptions = { ...pondOptions, ...__config(this, options, pondOptions) };\n\n this.__pond = window.FilePond.create(this.$refs.input, pondOptions);\n });\n\n this.$watch('__value', newValue => {\n if (! this.__ready) {\n return;\n }\n\n if (options.allowMultiple) {\n // If filepond is processing files, we shouldn't do anything.\n if (this.__processingFiles) {\n return;\n }\n\n // If the new value is null or undefined, we'll just remove everything from filepond.\n if (! newValue) {\n return this.__clear();\n }\n\n // Remove files from filepond that are not present in the new value.\n const serverIds = Array.isArray(newValue) ? newValue : JSON.parse(String(newValue).split('livewire-files:')[1]);\n\n this.__pond.getFiles().forEach(f => {\n if (! serverIds.includes(f.serverId)) {\n this.__pond.removeFile(f.id);\n }\n });\n\n return;\n }\n\n if (! newValue) {\n this.__clear();\n }\n });\n },\n\n __clear(eventId) {\n if (! eventId || (eventId === id)) {\n clearFilepond(this.__pond, options.allowMultiple);\n }\n },\n };\n });\n}\n\nfunction clearFilepond(instance, allowMultiple) {\n if (allowMultiple) {\n instance.getFiles().forEach(file => instance.removeFile(file.id));\n } else {\n instance.removeFile();\n }\n}\n","export default function (Alpine) {\n Alpine.data('quill', ({ __value, options, __config, onTextChange, onInit }) => {\n return {\n __ready: false,\n __value,\n __quill: undefined,\n\n init() {\n if (typeof window.Quill !== 'function') {\n throw new Error(`quill requires Quill to be loaded. See https://quilljs.com/docs/installation/`);\n }\n\n queueMicrotask(() => {\n this.__ready = true;\n\n this.__quill = new window.Quill(this.$refs.quill, this.__quillOptions());\n\n this.__quill.root.innerHTML = this.__value;\n\n this.__quill.on('text-change', () => {\n if (typeof onTextChange === 'function') {\n const result = onTextChange(this);\n\n if (result === false) {\n return;\n }\n }\n\n this.__value = this.__quill.root.innerHTML;\n\n this.$dispatch('input', this.__value);\n });\n\n if (options.autofocus) {\n this.$nextTick(() => {\n this.focus();\n });\n }\n\n if (typeof onInit === 'function') {\n onInit(this);\n }\n });\n },\n\n focus() {\n if (! this.__ready) {\n return;\n }\n\n this.__quill.focus();\n },\n\n __quillOptions() {\n let config = __config(this, options);\n let toolbarHandlers = {};\n let modules = {};\n\n if (config.hasOwnProperty('toolbarHandlers')) {\n toolbarHandlers = config.toolbarHandlers;\n delete config.toolbarHandlers;\n }\n\n if (config.hasOwnProperty('modules')) {\n modules = config.modules;\n delete config.modules;\n }\n\n return {\n theme: options.theme,\n readOnly: options.readOnly,\n placeholder: options.placeholder,\n modules: {\n toolbar: {\n container: options.toolbar,\n handlers: toolbarHandlers,\n },\n ...modules,\n },\n ...config,\n };\n },\n };\n });\n}\n","const resize = el => {\n el.style.height = 'auto';\n el.style.height = `${el.scrollHeight}px`;\n};\n\nexport default Alpine => {\n Alpine.directive('textarea-resize', (el, {}, { cleanup }) => {\n el.style.minHeight = `${el.scrollHeight}px`;\n resize(el);\n\n const inputHandler = () => resize(el);\n\n el.addEventListener('input', inputHandler);\n\n cleanup(() => {\n el.removeEventListener('input', inputHandler);\n });\n });\n};\n","import formGroup from './form-group';\nimport textareaResize from './textarea-resize';\n\ndocument.addEventListener('alpine:init', () => {\n formGroup(Alpine);\n Alpine.plugin(textareaResize);\n});\n","export default function (Alpine) {\n Alpine.directive('form-group', (el, directive) => {\n if (directive.value === 'label') {\n handleLabel(el, Alpine);\n } else {\n handleRoot(el, Alpine);\n }\n });\n}\n\nfunction handleRoot(el, Alpine) {\n Alpine.bind(el, {\n 'x-id'() { return ['fc-label'] },\n });\n}\n\nfunction handleLabel(el, Alpine) {\n Alpine.bind(el, {\n '@click'() {\n const group = el.closest('[x-form-group]');\n if (! group) {\n return;\n }\n\n // Check if there is a custom select in the form group.\n const customSelectButton = group.querySelector('[data-custom-select-button=\"true\"]');\n if (customSelectButton) {\n customSelectButton.focus({ preventScroll: true });\n\n return;\n }\n\n // Check if there is a quill editor in the form group.\n const quill = group.querySelector('.quill-wrapper');\n if (quill) {\n Alpine.$data(quill).focus();\n }\n },\n });\n}\n"],"names":["selectContext","Alpine","searchableText","disabledKeys","activeKey","selectedKeys","orderedKeys","elsByKey","values","__config","__multiple","__orientation","__wire","undefined","__wireSearch","initItem","el","value","disabled","isOptGroup","arguments","length","key","Math","random","toString","substring","keyFromValue","this","getKeyFromValue","by","push","textContent","trim","toLowerCase","__itemBooted","destroyItem","keyByValue","includes","indexOf","reorderKeys","__itemDestroyed","resetOptions","_this","forEach","isConnected","slice","sort","a","z","aEl","zEl","position","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","activeEl","isActiveEl","activateEl","activateKey","selectEl","selectKey","isSelectedEl","isSelected","isDisabledEl","isDisabled","hideEl","style","display","setAttribute","showEl","removeAttribute","isHiddenEl","offsetParent","scrollingCount","activateAndScrollToKey","_this2","targetEl","scrollIntoView","block","setTimeout","selectedBasicValueOrValues","selectedBasicValues","selectedBasicValue","_this3","map","i","hasOwnProperty","selectedValueOrValues","selectedValues","selectedValue","_this4","selectValue","_this5","normalizeValue","mapByToCallback","keys","selectExclusive","getKeyFromSimpleValue","mapByToSimpleCompareCallback","getObjectFromValue","toggleValue","toggleSelected","selectOnly","canRemoveOptions","splice","_this6","toAdd","_toConsumableArray","clearSelected","optional","selectActive","firstSelectedKey","hasActive","isActiveKey","active","activateSelectedOrFirst","_this7","firstSelected","firstKey","deactivate","isScrollingTo","nextKey","_this8","index","nonDisabledOrderedKeys","findIndex","targetKey","getNextVisibleKey","prevKey","_this9","getPrevVisibleKey","lastKey","currentIndex","visibleKeyFound","searchQuery","clearSearch","debounce","searchKey","query","foundKey","startsWith","searchableQuery","handleSearchableQuery","content","minSelected","Number","isNaN","activateByKeyEvent","e","__activateByKeyEvent","preventDefault","stopPropagation","object","Object","find","isObjectOrArray","subject","_typeof","renderHiddenInputs","name","newInputs","generateInputs","_x_hiddenInput","_x_ignore","children","oldInputs","child","window","mutateDom","remove","reverse","prepend","b","property","multiple","Array","isArray","carry","concat","document","createElement","generateContext","_ref","orientation","_objectSpread","filter","selectPopper","__createPopper","__popper","__resetPopper","destroy","__popperConfig","placement","strategy","__fixed","modifiers","options","offset","boundariesElement","$root","__initPopper","$refs","__options","selectData","config","_config$__value","__ready","__value","__richValue","__isOpen","__context","__isMultiple","__isStatic","__isClearable","__isDisabled","__compareBy","__inputName","__searchable","__hasCustomSelectLabel","__externalChanged","__type","init","Popper","createPopper","TypeError","bound","autoFocus","__generateContext","defaultValue","queueMicrotask","lastValueFingerprint","effect","JSON","stringify","_step","_iterator","_createForOfIteratorHelper","s","n","done","err","f","$el","querySelectorAll","__button","focus","preventScroll","$watch","newValue","$dispatch","__componentBooted","__open","callback","__search","requestAnimationFrame","__close","$nextTick","clearButtonDirective","type","magic","$data","hasValue","shouldShowClear","tagName","hasAttribute","optionsDirective","$id","tabindex","role","id","optionDirective","rootMagic","initCallback","__optionKey","canSelectMore","tokenDirective","__key","stubCallback","data","isOpen","isSearchable","selected","selectedObject","maxSelected","canDeselectOptions","hasOptions","hasSearch","optionMagic","stub","isActive","optionEl","findClosest","context","customSelect","__el","_config$__config","directive","cleanup","bind","buttonDirective","blur","$magic","$treeSelect","$customSelect","lastSelected","handleButton","labelDirective","handleLabel","handleClearButton","handleOptions","handleOption","parent","closest","searchDirective","createTextRange","range","move","select","setSelectionRange","target","keydownSpaceStop","handleSearch","handleToken","Error","datePicker","_config$mode","__rawValue","__mode","mode","__flatpickr","_value","flatpickr","initialValue","__input","setDate","set","clickOpens","open","__clear","_config$config","onOpen","selectedDates","dateStr","instance","customConfig","customOnOpen","defaultDate","onChange","date","dateString","split","_ref2","$datePicker","handleClear","MutationObserver","mutations","mutation","attributeName","getAttribute","classList","add","describedBy","observe","attributes","handleContainer","readOnly","handleInput","handleToggle","switchToggle","onValue","offValue","isPressed","toggle","expandableEls","expandedKeys","_el$__children","__children","isExpandedEl","toggleExpandedEl","toggleExpanded","expandChildren","collapseChildren","treeSelect","__level","childrenField","handleChildToggle","__optionEl","parentNode","querySelector","__isExpanded","handleChildren","hasExpandableOptions","hasChildren","isExpanded","addEventListener","__this","__wireModel","__pond","__processingFiles","_window$FilePond","FilePond","create","pondOptions","server","process","fieldName","file","metadata","load","error","progress","abort","transfer","upload","revert","filename","removeUpload","onaddfilestart","onprocessfiles","on","desiredId","input","allowMultiple","serverIds","parse","String","getFiles","serverId","removeFile","eventId","filepond","onTextChange","onInit","__quill","Quill","quill","__quillOptions","root","innerHTML","autofocus","toolbarHandlers","modules","theme","placeholder","toolbar","container","handlers","resize","height","scrollHeight","textareaResize","_objectDestructuringEmpty","minHeight","inputHandler","removeEventListener","group","customSelectButton","handleRoot","formGroup","plugin"],"mappings":"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"} \ No newline at end of file diff --git a/dist/manifest.json b/dist/manifest.json new file mode 100644 index 0000000..dabc8a7 --- /dev/null +++ b/dist/manifest.json @@ -0,0 +1 @@ +{"/form-components.js":"/form-components.js?id=b76f7a4ea5c48752ffab"} \ No newline at end of file diff --git a/dist/mix-manifest.json b/dist/mix-manifest.json deleted file mode 100644 index 3575b2c..0000000 --- a/dist/mix-manifest.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "/form-components.js": "/form-components.js?id=03553f899311a06c3381" -} diff --git a/docs/selects/timezone-select.md b/docs/selects/timezone-select.md index f3e03fd..94a2360 100644 --- a/docs/selects/timezone-select.md +++ b/docs/selects/timezone-select.md @@ -23,6 +23,7 @@ You may not always want or need to show a list of every timezone region. You can be rendered either by using the `timezone_subset` config option, or the `only` prop for a per-case basis. Via config: + ```php ... 'timezone_subset' => [\Rawilk\FormComponents\Support\TimeZoneRegion::AMERICA], diff --git a/package-lock.json b/package-lock.json index b383673..aa004db 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,19 +7,42 @@ "name": "laravel-form-components", "license": "MIT", "devDependencies": { - "@babel/core": "^7.20.12", + "@babel/core": "^7.21.0", "@babel/plugin-proposal-object-rest-spread": "^7.20.7", "@babel/preset-env": "^7.20.2", - "laravel-mix": "^6.0.49" + "@rollup/plugin-babel": "^6.0.3", + "@rollup/plugin-commonjs": "^24.0.1", + "@rollup/plugin-node-resolve": "^15.0.1", + "fs-extra": "^11.1.0", + "laravel-mix": "^6.0.49", + "md5": "^2.3.0", + "rollup": "^2.79.1", + "rollup-plugin-filesize": "^10.0.0", + "rollup-plugin-output-manifest": "^2.0.0", + "rollup-plugin-terser": "^7.0.2" } }, "node_modules/@ampproject/remapping": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.0.tgz", - "integrity": "sha512-d5RysTlJ7hmw5Tw4UxgxcY3lkMe92n8sXCcuLPAyIAHK6j8DefDwtGnVVDgOnv+RnEosulDJ9NPKQL27bDId0g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@ampproject/remapping/node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.0" + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" }, "engines": { "node": ">=6.0.0" @@ -47,21 +70,21 @@ } }, "node_modules/@babel/core": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", - "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz", + "integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==", "dev": true, "dependencies": { - "@ampproject/remapping": "^2.1.0", + "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", + "@babel/generator": "^7.21.0", "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", + "@babel/helper-module-transforms": "^7.21.0", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.0", "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.12", - "@babel/types": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -77,13 +100,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", - "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", + "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", "dev": true, "dependencies": { - "@babel/types": "^7.20.7", + "@babel/types": "^7.21.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { @@ -226,13 +250,13 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dev": true, "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -275,9 +299,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", - "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", @@ -286,8 +310,8 @@ "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.10", - "@babel/types": "^7.20.7" + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" }, "engines": { "node": ">=6.9.0" @@ -428,14 +452,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", - "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", "dev": true, "dependencies": { "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.13", - "@babel/types": "^7.20.7" + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -456,9 +480,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.15", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz", - "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz", + "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -1630,19 +1654,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", - "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.2.tgz", + "integrity": "sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", + "@babel/generator": "^7.21.1", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.13", - "@babel/types": "^7.20.7", + "@babel/parser": "^7.21.2", + "@babel/types": "^7.21.2", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1651,9 +1675,9 @@ } }, "node_modules/@babel/types": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", - "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz", + "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.19.4", @@ -1673,6 +1697,12 @@ "node": ">=10.0.0" } }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", @@ -1766,210 +1796,618 @@ "node": ">= 8" } }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, "engines": { - "node": ">=10.13.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@types/babel__core": { - "version": "7.1.18", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", - "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "node_modules/@npmcli/git": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.0.3.tgz", + "integrity": "sha512-8cXNkDIbnXPVbhXMmQ7/bklCAjtmPaXfI9aEM4iH+xSuEHINLMHhlfESvVwdqmHJRJkR48vNJTSUvoF6GRPSFA==", "dev": true, "dependencies": { - "@babel/types": "^7.0.0" + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "engines": { + "node": ">=12" } }, - "node_modules/@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "node_modules/@npmcli/git/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "dependencies": { - "@babel/types": "^7.3.0" + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "node_modules/@npmcli/git/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { - "@types/connect": "*", - "@types/node": "*" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "node_modules/@npmcli/git/node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "@types/node": "*" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@types/clean-css": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.5.tgz", - "integrity": "sha512-NEzjkGGpbs9S9fgC4abuBvTpVwE3i+Acu9BBod3PUyjDVZcNsGx61b8r2PphR61QGPnn0JHVs5ey6/I4eTrkxw==", + "node_modules/@npmcli/git/node_modules/which": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", + "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", "dev": true, "dependencies": { - "@types/node": "*", - "source-map": "^0.6.0" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@types/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", "dev": true, + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", "dev": true, "dependencies": { - "@types/node": "*" + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@types/eslint": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", - "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", "dev": true, "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", - "dev": true - }, - "node_modules/@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", + "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", "dev": true, "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.28", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", - "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "node_modules/@npmcli/run-script": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.0.tgz", + "integrity": "sha512-ql+AbRur1TeOdl1FY+RAwGW9fcr4ZwiVKabdvm93mujGREVuVLbdkXRJDrkTXSdCjaxYydr1wlA2v67jxWG5BQ==", "dev": true, "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", + "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", "dev": true, "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@types/http-proxy": { - "version": "1.17.8", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", - "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", + "node_modules/@rollup/plugin-babel": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.3.tgz", + "integrity": "sha512-fKImZKppa1A/gX73eg4JGo+8kQr/q1HBQaCGKECZ0v4YBBv3lFqi14+7xyApECzvkLTHCifx+7ntcrvtBIRcpg==", "dev": true, "dependencies": { - "@types/node": "*" + "@babel/helper-module-imports": "^7.18.6", + "@rollup/pluginutils": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + }, + "rollup": { + "optional": true + } } }, - "node_modules/@types/imagemin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-8.0.0.tgz", - "integrity": "sha512-B9X2CUeDv/uUeY9CqkzSTfmsLkeJP6PkmXlh4lODBbf9SwpmNuLS30WzUOi863dgsjY3zt3gY5q2F+UdifRi1A==", + "node_modules/@rollup/plugin-commonjs": { + "version": "24.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-24.0.1.tgz", + "integrity": "sha512-15LsiWRZk4eOGqvrJyu3z3DaBu5BhXIMeWnijSRvd8irrrg9SHpQ1pH+BUK4H6Z9wL9yOxZJMTLU+Au86XHxow==", "dev": true, "dependencies": { - "@types/node": "*" + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.27.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@types/imagemin-gifsicle": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.1.tgz", - "integrity": "sha512-kUz6sUh0P95JOS0RGEaaemWUrASuw+dLsWIveK2UZJx74id/B9epgblMkCk/r5MjUWbZ83wFvacG5Rb/f97gyA==", + "node_modules/@rollup/plugin-commonjs/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "@types/imagemin": "*" + "balanced-match": "^1.0.0" } }, - "node_modules/@types/imagemin-mozjpeg": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.1.tgz", - "integrity": "sha512-kMQWEoKxxhlnH4POI3qfW9DjXlQfi80ux3l2b3j5R3eudSCoUIzKQLkfMjNJ6eMYnMWBcB+rfQOWqIzdIwFGKw==", + "node_modules/@rollup/plugin-commonjs/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "dependencies": { - "@types/imagemin": "*" - } - }, - "node_modules/@types/imagemin-optipng": { - "version": "5.2.1", + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz", + "integrity": "sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.0", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@tufjs/models": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.0.tgz", + "integrity": "sha512-RRMu4uMxWnZlxaIBxahSb2IssFZiu188sndesZflWOe1cA/qUqtemSIoBWbuVKPvvdktapImWNnKpBcc+VrCQw==", + "dev": true, + "dependencies": { + "minimatch": "^6.1.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-6.2.0.tgz", + "integrity": "sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/babel__core": { + "version": "7.1.18", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", + "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/clean-css": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.5.tgz", + "integrity": "sha512-NEzjkGGpbs9S9fgC4abuBvTpVwE3i+Acu9BBod3PUyjDVZcNsGx61b8r2PphR61QGPnn0JHVs5ey6/I4eTrkxw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "source-map": "^0.6.0" + } + }, + "node_modules/@types/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", + "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.28", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/http-proxy": { + "version": "1.17.8", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", + "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/imagemin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-8.0.0.tgz", + "integrity": "sha512-B9X2CUeDv/uUeY9CqkzSTfmsLkeJP6PkmXlh4lODBbf9SwpmNuLS30WzUOi863dgsjY3zt3gY5q2F+UdifRi1A==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/imagemin-gifsicle": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.1.tgz", + "integrity": "sha512-kUz6sUh0P95JOS0RGEaaemWUrASuw+dLsWIveK2UZJx74id/B9epgblMkCk/r5MjUWbZ83wFvacG5Rb/f97gyA==", + "dev": true, + "dependencies": { + "@types/imagemin": "*" + } + }, + "node_modules/@types/imagemin-mozjpeg": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.1.tgz", + "integrity": "sha512-kMQWEoKxxhlnH4POI3qfW9DjXlQfi80ux3l2b3j5R3eudSCoUIzKQLkfMjNJ6eMYnMWBcB+rfQOWqIzdIwFGKw==", + "dev": true, + "dependencies": { + "@types/imagemin": "*" + } + }, + "node_modules/@types/imagemin-optipng": { + "version": "5.2.1", "resolved": "https://registry.npmjs.org/@types/imagemin-optipng/-/imagemin-optipng-5.2.1.tgz", "integrity": "sha512-XCM/3q+HUL7v4zOqMI+dJ5dTxT+MUukY9KU49DSnYb/4yWtSMHJyADP+WHSMVzTR63J2ZvfUOzSilzBNEQW78g==", "dev": true, @@ -2029,6 +2467,12 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", "dev": true }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, "node_modules/@types/retry": { "version": "0.12.1", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", @@ -2272,6 +2716,12 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -2306,6 +2756,41 @@ "acorn": "^8" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/agentkeepalive/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -2383,6 +2868,15 @@ "ajv": "^6.9.1" } }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, "node_modules/ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", @@ -2429,6 +2923,39 @@ "node": ">= 8" } }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -2667,53 +3194,145 @@ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, "engines": { - "node": ">= 0.8" + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/boxen/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "ms": "2.0.0" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/body-parser/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "node_modules/boxen/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/boxen/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "node_modules/boxen/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2742,6 +3361,18 @@ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true }, + "node_modules/brotli-size": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/brotli-size/-/brotli-size-4.0.0.tgz", + "integrity": "sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==", + "dev": true, + "dependencies": { + "duplexer": "0.1.1" + }, + "engines": { + "node": ">= 10.16.0" + } + }, "node_modules/browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", @@ -2906,12 +3537,48 @@ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/builtins/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -2921,6 +3588,79 @@ "node": ">= 0.8" } }, + "node_modules/cacache": { + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.4.tgz", + "integrity": "sha512-Z/nL3gU+zTUjz5pCA5vVjYM8pmaw2kxM7JEiE0fv3w77Wj+sFbi70CrBruUWH0uNcEdvLDixFpgA2JM4F4DBjA==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^8.0.1", + "lru-cache": "^7.7.1", + "minipass": "^4.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -2953,6 +3693,18 @@ "tslib": "^2.0.3" } }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -3031,6 +3783,15 @@ "fsevents": "~2.3.2" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", @@ -3080,6 +3841,18 @@ "node": ">=6" } }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cli-table3": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", @@ -3141,6 +3914,15 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, "node_modules/colord": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", @@ -3158,7 +3940,6 @@ "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, - "optional": true, "engines": { "node": ">=0.1.90" } @@ -3271,6 +4052,12 @@ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, "node_modules/constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -3754,6 +4541,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/deepmerge": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", + "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -3829,6 +4625,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, "node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -4038,6 +4840,12 @@ "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", "dev": true }, + "node_modules/duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==", + "dev": true + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -4095,6 +4903,29 @@ "node": ">= 0.8" } }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/enhanced-resolve": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", @@ -4117,6 +4948,15 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/envinfo": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", @@ -4129,6 +4969,12 @@ "node": ">=4" } }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -4211,6 +5057,12 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -4494,6 +5346,15 @@ "node": ">=8" } }, + "node_modules/filesize": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.4.0.tgz", + "integrity": "sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -4630,9 +5491,9 @@ } }, "node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", + "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -4640,7 +5501,19 @@ "universalify": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=14.14" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.1.tgz", + "integrity": "sha512-MhaJDcFRTuLidHrIttu0RDGyyXs/IYHVmlcxfLAEFIWjc1vdLAkdwT7Ace2u7DbitWC0toKMl5eJZRYNVreIMw==", + "dev": true, + "dependencies": { + "minipass": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/fs-monkey": { @@ -4675,6 +5548,25 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -4797,6 +5689,27 @@ "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", "dev": true }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gzip-size/node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, "node_modules/handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", @@ -4851,6 +5764,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, "node_modules/hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -4935,6 +5854,27 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", @@ -5093,6 +6033,12 @@ "entities": "^2.0.0" } }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, "node_modules/http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", @@ -5153,6 +6099,20 @@ "node": ">=8.0.0" } }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/http-proxy-middleware": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.2.tgz", @@ -5178,6 +6138,19 @@ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -5187,6 +6160,15 @@ "node": ">=10.17.0" } }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -5240,6 +6222,42 @@ "node": ">= 4" } }, + "node_modules/ignore-walk": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.1.tgz", + "integrity": "sha512-/c8MxUAqpRccq+LyDOecwF+9KqajueJHh8fz7g3YqjMZt+NSfJzx05zrKiXwa2sKwFCzaiZ5qUVfRj0pmxixEA==", + "dev": true, + "dependencies": { + "minimatch": "^6.1.6" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-6.2.0.tgz", + "integrity": "sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/imagemin": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz", @@ -5308,6 +6326,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, "node_modules/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -5317,6 +6344,12 @@ "node": ">=8" } }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -5397,10 +6430,25 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -5469,6 +6517,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -5520,6 +6580,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -5679,6 +6748,15 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, "node_modules/junk": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", @@ -5830,6 +6908,20 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/laravel-mix/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/laravel-mix/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -5881,87 +6973,295 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "node_modules/loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "node_modules/loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/make-fetch-happen/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "engines": { - "node": ">=6.11.5" + "node": ">=12" } }, - "node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "node_modules/make-fetch-happen/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=4.0.0" + "node": ">=10" } }, - "node_modules/loader-utils/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "node_modules/make-fetch-happen/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "dependencies": { - "minimist": "^1.2.0" + "yallist": "^4.0.0" }, - "bin": { - "json5": "lib/cli.js" + "engines": { + "node": ">=8" } }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/make-fetch-happen/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "dependencies": { - "p-locate": "^4.1.0" + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "node_modules/make-fetch-happen/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { - "tslib": "^2.0.3" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/lru-cache": { + "node_modules/make-fetch-happen/node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", @@ -5973,19 +7273,40 @@ "node": ">=10" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", "dev": true, "dependencies": { - "semver": "^6.0.0" + "minipass": "^3.1.1" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "dependencies": { + "unique-slug": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/md5": { @@ -6147,83 +7468,264 @@ "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", "dev": true, "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.1.0" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "node_modules/minipass": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.5.tgz", + "integrity": "sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dev": true, + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.4.0 || ^5.0.0" + "node": ">=8" } }, - "node_modules/mini-css-extract-plugin/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "yallist": "^4.0.0" }, "engines": { - "node": ">=8.9.0" + "node": ">=8" } }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "minipass": "^3.0.0", + "yallist": "^4.0.0" }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">= 8" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "yallist": "^4.0.0" }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, "node_modules/mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -6304,58 +7806,298 @@ "integrity": "sha512-08ARB91bUi6zNKzVmaj3QO7cr397uiDT2nJ63cHjyNtCTWIgvS47j3eT0WfzUwS9+6Z5YshRaoasFkXCKrIYbA==", "dev": true, "engines": { - "node": ">= 6.13.0" + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.1.tgz", + "integrity": "sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "dependencies": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "node_modules/node-notifier": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz", + "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==", + "dev": true, + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + } + }, + "node_modules/node-notifier/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-releases": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "dev": true + }, + "node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.0.0.tgz", + "integrity": "sha512-SBU9oFglRVZnfElwAtF14NivyulDqF1VKqqwNsFW9HDcbHMAPHpRSsVFgKuwFGq/hVvWZExz62Th0kvxn/XE7Q==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.0.tgz", + "integrity": "sha512-g+DPQSkusnk7HYXr75NtzkIP4+N81i3RPsGFidF3DzHd9MT9wWngmqoeg/fnHFz5MNdtG4w03s+QnhewSLTT2Q==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "node_modules/npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", "dev": true, "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/node-notifier": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz", - "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==", + "node_modules/npm-pick-manifest": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", "dev": true, "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/node-notifier/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "node_modules/npm-pick-manifest/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -6367,40 +8109,74 @@ "node": ">=10" } }, - "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true + "node_modules/npm-registry-fetch": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.3.tgz", + "integrity": "sha512-YaeRbVNpnWvsGOjX2wk5s85XJ7l1qQBGAp724h8e2CZFFhMSuw9enom7K1mWVUtvXO1uUSFIAPofQK0pPN0ZcA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^11.0.0", + "minipass": "^4.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/npm-registry-fetch/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz", + "integrity": "sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA==", "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^4.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.1.tgz", + "integrity": "sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==", "dev": true, + "dependencies": { + "minipass": "^4.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "encoding": "^0.1.13" } }, "node_modules/npm-run-path": { @@ -6415,6 +8191,21 @@ "node": ">=8" } }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/nth-check": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", @@ -6620,6 +8411,38 @@ "node": ">=6" } }, + "node_modules/pacote": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.1.1.tgz", + "integrity": "sha512-eeqEe77QrA6auZxNHIp+1TzHQ0HBKf5V6c8zcaYZ134EJe1lCi+fjXATkNiEEfbG+e50nu02GLvUtmZcGOYabQ==", + "dev": true, + "dependencies": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^4.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -7392,6 +9215,15 @@ "node": ">=4" } }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -7407,6 +9239,34 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/promise-retry/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -7561,6 +9421,92 @@ "node": ">= 0.8" } }, + "node_modules/read-package-json": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.0.tgz", + "integrity": "sha512-b/9jxWJ8EwogJPpv99ma+QwtqB7FSl3+V6UXS7Aaay8/5VwMY50oIFooY1UKXMWpfNCM6T/PoGqa5GD1g9xf9w==", + "dev": true, + "dependencies": { + "glob": "^8.0.1", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -7739,12 +9685,12 @@ "dev": true }, "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, "dependencies": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -7776,57 +9722,173 @@ "node": ">=8" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-filesize": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-filesize/-/rollup-plugin-filesize-10.0.0.tgz", + "integrity": "sha512-JAYYhzCcmGjmCzo3LEHSDE3RAPHKIeBdpqRhiyZSv5o/3wFhktUOzYAWg/uUKyEu5dEaVaql6UOmaqHx1qKrZA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.8", + "boxen": "^5.0.0", + "brotli-size": "4.0.0", + "colors": "1.4.0", + "filesize": "^6.1.0", + "gzip-size": "^6.0.0", + "pacote": "^15.1.1", + "terser": "^5.6.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/rollup-plugin-output-manifest": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-output-manifest/-/rollup-plugin-output-manifest-2.0.0.tgz", + "integrity": "sha512-RJJ/MzM2Sj65o63qs1aIwD+AofAhdYi5Hx1Pk8/Fn6dWxbcSlficfJLNGeYJ14CPi7CHvEHwgjs23LiFS/x/Dw==", + "dev": true, + "dependencies": { + "@types/node": "^13.9.1", + "tslib": "^1.10.0" + } + }, + "node_modules/rollup-plugin-output-manifest/node_modules/@types/node": { + "version": "13.13.52", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.52.tgz", + "integrity": "sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==", + "dev": true + }, + "node_modules/rollup-plugin-output-manifest/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" } }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "node_modules/rollup-plugin-terser/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">= 4" + "node": ">=8" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">= 10.13.0" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", "dev": true, "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "randombytes": "^2.1.0" } }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "node_modules/rollup-plugin-terser/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/run-parallel": { @@ -8056,6 +10118,12 @@ "node": ">= 0.8.0" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -8140,6 +10208,74 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/sigstore": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.0.0.tgz", + "integrity": "sha512-e+qfbn/zf1+rCza/BhIA//Awmf0v1pa5HQS8Xk8iXrn9bgytytVLqYD0P7NSqZ6IELTgq+tcDvLPkQjNHyWLNg==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.0.0" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/sigstore/node_modules/make-fetch-happen": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz", + "integrity": "sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^4.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/minipass-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.1.tgz", + "integrity": "sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==", + "dev": true, + "dependencies": { + "minipass": "^4.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -8149,6 +10285,16 @@ "node": ">=8" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, "node_modules/sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -8160,6 +10306,40 @@ "websocket-driver": "^0.7.4" } }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/socks/node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, "node_modules/source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -8194,6 +10374,38 @@ "node": ">=0.10.0" } }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, "node_modules/spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", @@ -8238,6 +10450,18 @@ "node": ">= 6" } }, + "node_modules/ssri": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.1.tgz", + "integrity": "sha512-WVy6di9DlPOeBWEjMScpNipeSX2jIZBGEn5Uuo8Q7aIuFEuDX0pw8RxcOjlD1TWP4obi24ki7m/13+nFpcbXrw==", + "dev": true, + "dependencies": { + "minipass": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", @@ -8468,6 +10692,59 @@ "node": ">=6" } }, + "node_modules/tar": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", + "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^4.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/terser": { "version": "5.16.3", "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.3.tgz", @@ -8625,6 +10902,83 @@ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, + "node_modules/tuf-js": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.1.tgz", + "integrity": "sha512-WTp382/PR96k0dI4GD5RdiRhgOU0rAC7+lnoih/5pZg3cyb3aNMqDozleEEWwyfT3+FOg7Qz9JU3n6A44tLSHw==", + "dev": true, + "dependencies": { + "@tufjs/models": "1.0.0", + "make-fetch-happen": "^11.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/tuf-js/node_modules/make-fetch-happen": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz", + "integrity": "sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^4.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/minipass-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.1.tgz", + "integrity": "sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==", + "dev": true, + "dependencies": { + "minipass": "^4.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -8678,6 +11032,30 @@ "node": ">=4" } }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -8795,6 +11173,28 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -9343,6 +11743,27 @@ "node": ">= 8" } }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", @@ -9489,12 +11910,25 @@ }, "dependencies": { "@ampproject/remapping": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.0.tgz", - "integrity": "sha512-d5RysTlJ7hmw5Tw4UxgxcY3lkMe92n8sXCcuLPAyIAHK6j8DefDwtGnVVDgOnv+RnEosulDJ9NPKQL27bDId0g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "dev": true, "requires": { - "@jridgewell/trace-mapping": "^0.3.0" + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } } }, "@babel/code-frame": { @@ -9513,21 +11947,21 @@ "dev": true }, "@babel/core": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", - "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz", + "integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==", "dev": true, "requires": { - "@ampproject/remapping": "^2.1.0", + "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", + "@babel/generator": "^7.21.0", "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", + "@babel/helper-module-transforms": "^7.21.0", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.0", "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.12", - "@babel/types": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -9536,13 +11970,14 @@ } }, "@babel/generator": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", - "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", + "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", "dev": true, "requires": { - "@babel/types": "^7.20.7", + "@babel/types": "^7.21.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" } }, @@ -9651,13 +12086,13 @@ } }, "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dev": true, "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" } }, "@babel/helper-hoist-variables": { @@ -9688,9 +12123,9 @@ } }, "@babel/helper-module-transforms": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", - "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", @@ -9699,8 +12134,8 @@ "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.10", - "@babel/types": "^7.20.7" + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" } }, "@babel/helper-optimise-call-expression": { @@ -9802,14 +12237,14 @@ } }, "@babel/helpers": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", - "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", "dev": true, "requires": { "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.13", - "@babel/types": "^7.20.7" + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" } }, "@babel/highlight": { @@ -9824,9 +12259,9 @@ } }, "@babel/parser": { - "version": "7.20.15", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz", - "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz", + "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { @@ -10616,27 +13051,27 @@ } }, "@babel/traverse": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", - "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.2.tgz", + "integrity": "sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", + "@babel/generator": "^7.21.1", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.13", - "@babel/types": "^7.20.7", + "@babel/parser": "^7.21.2", + "@babel/types": "^7.21.2", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", - "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz", + "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==", "dev": true, "requires": { "@babel/helper-string-parser": "^7.19.4", @@ -10650,6 +13085,12 @@ "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==", "dev": true }, + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, "@jridgewell/gen-mapping": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", @@ -10725,12 +13166,295 @@ "fastq": "^1.6.0" } }, + "@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, + "requires": { + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@npmcli/git": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.0.3.tgz", + "integrity": "sha512-8cXNkDIbnXPVbhXMmQ7/bklCAjtmPaXfI9aEM4iH+xSuEHINLMHhlfESvVwdqmHJRJkR48vNJTSUvoF6GRPSFA==", + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "which": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", + "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "dev": true, + "requires": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + } + }, + "@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } + } + }, + "@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true + }, + "@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "dev": true, + "requires": { + "which": "^3.0.0" + }, + "dependencies": { + "which": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", + "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@npmcli/run-script": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.0.tgz", + "integrity": "sha512-ql+AbRur1TeOdl1FY+RAwGW9fcr4ZwiVKabdvm93mujGREVuVLbdkXRJDrkTXSdCjaxYydr1wlA2v67jxWG5BQ==", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "dependencies": { + "which": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", + "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@rollup/plugin-babel": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.3.tgz", + "integrity": "sha512-fKImZKppa1A/gX73eg4JGo+8kQr/q1HBQaCGKECZ0v4YBBv3lFqi14+7xyApECzvkLTHCifx+7ntcrvtBIRcpg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@rollup/pluginutils": "^5.0.1" + } + }, + "@rollup/plugin-commonjs": { + "version": "24.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-24.0.1.tgz", + "integrity": "sha512-15LsiWRZk4eOGqvrJyu3z3DaBu5BhXIMeWnijSRvd8irrrg9SHpQ1pH+BUK4H6Z9wL9yOxZJMTLU+Au86XHxow==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.27.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "@rollup/plugin-node-resolve": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz", + "integrity": "sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.0", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + } + }, + "@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "dependencies": { + "@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + } + } + }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, "@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "dev": true }, + "@tufjs/models": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.0.tgz", + "integrity": "sha512-RRMu4uMxWnZlxaIBxahSb2IssFZiu188sndesZflWOe1cA/qUqtemSIoBWbuVKPvvdktapImWNnKpBcc+VrCQw==", + "dev": true, + "requires": { + "minimatch": "^6.1.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-6.2.0.tgz", + "integrity": "sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, "@types/babel__core": { "version": "7.1.18", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", @@ -10984,6 +13708,12 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", "dev": true }, + "@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, "@types/retry": { "version": "0.12.1", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", @@ -11214,6 +13944,12 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -11237,6 +13973,34 @@ "dev": true, "requires": {} }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + } + } + }, "aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -11295,6 +14059,15 @@ "dev": true, "requires": {} }, + "ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "requires": { + "string-width": "^4.1.0" + } + }, "ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", @@ -11326,6 +14099,35 @@ "picomatch": "^2.0.4" } }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -11518,43 +14320,110 @@ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "2.0.0" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" } }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -11580,6 +14449,15 @@ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true }, + "brotli-size": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/brotli-size/-/brotli-size-4.0.0.tgz", + "integrity": "sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==", + "dev": true, + "requires": { + "duplexer": "0.1.1" + } + }, "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", @@ -11713,18 +14591,104 @@ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, + "builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true + }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", "dev": true }, + "cacache": { + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.4.tgz", + "integrity": "sha512-Z/nL3gU+zTUjz5pCA5vVjYM8pmaw2kxM7JEiE0fv3w77Wj+sFbi70CrBruUWH0uNcEdvLDixFpgA2JM4F4DBjA==", + "dev": true, + "requires": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^8.0.1", + "lru-cache": "^7.7.1", + "minipass": "^4.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -11751,6 +14715,12 @@ "tslib": "^2.0.3" } }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, "caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -11802,6 +14772,12 @@ "readdirp": "~3.6.0" } }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, "chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", @@ -11841,6 +14817,12 @@ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, "cli-table3": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", @@ -11894,6 +14876,12 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, "colord": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", @@ -11910,8 +14898,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "optional": true + "dev": true }, "commander": { "version": "7.2.0", @@ -12007,6 +14994,12 @@ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -12367,6 +15360,12 @@ "regexp.prototype.flags": "^1.2.0" } }, + "deepmerge": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", + "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", + "dev": true + }, "default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -12423,6 +15422,12 @@ } } }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -12591,6 +15596,12 @@ "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", "dev": true }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==", + "dev": true + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -12644,6 +15655,28 @@ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, "enhanced-resolve": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", @@ -12660,12 +15693,24 @@ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, "envinfo": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -12732,6 +15777,12 @@ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -12952,6 +16003,12 @@ "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==", "dev": true }, + "filesize": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.4.0.tgz", + "integrity": "sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ==", + "dev": true + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -13045,9 +16102,9 @@ "dev": true }, "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", + "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -13055,6 +16112,15 @@ "universalify": "^2.0.0" } }, + "fs-minipass": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.1.tgz", + "integrity": "sha512-MhaJDcFRTuLidHrIttu0RDGyyXs/IYHVmlcxfLAEFIWjc1vdLAkdwT7Ace2u7DbitWC0toKMl5eJZRYNVreIMw==", + "dev": true, + "requires": { + "minipass": "^4.0.0" + } + }, "fs-monkey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", @@ -13080,6 +16146,22 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -13172,6 +16254,23 @@ "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", "dev": true }, + "gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "requires": { + "duplexer": "^0.1.2" + }, + "dependencies": { + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + } + } + }, "handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", @@ -13208,6 +16307,12 @@ "has-symbols": "^1.0.2" } }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, "hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -13271,6 +16376,23 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + } + } + }, "hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", @@ -13394,6 +16516,12 @@ "entities": "^2.0.0" } }, + "http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, "http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", @@ -13444,6 +16572,17 @@ "requires-port": "^1.0.0" } }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, "http-proxy-middleware": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.2.tgz", @@ -13463,12 +16602,31 @@ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -13497,6 +16655,35 @@ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, + "ignore-walk": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.1.tgz", + "integrity": "sha512-/c8MxUAqpRccq+LyDOecwF+9KqajueJHh8fz7g3YqjMZt+NSfJzx05zrKiXwa2sKwFCzaiZ5qUVfRj0pmxixEA==", + "dev": true, + "requires": { + "minimatch": "^6.1.6" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-6.2.0.tgz", + "integrity": "sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, "imagemin": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz", @@ -13541,12 +16728,24 @@ "resolve-cwd": "^3.0.0" } }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -13612,10 +16811,19 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, + "is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "requires": { + "builtin-modules": "^3.3.0" + } + }, "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "requires": { "has": "^1.0.3" @@ -13657,6 +16865,18 @@ "is-extglob": "^2.1.1" } }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -13690,6 +16910,15 @@ "isobject": "^3.0.1" } }, + "is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "requires": { + "@types/estree": "*" + } + }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -13807,6 +17036,12 @@ "universalify": "^2.0.0" } }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true + }, "junk": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", @@ -13917,6 +17152,17 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -14034,6 +17280,15 @@ "yallist": "^4.0.0" } }, + "magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -14043,6 +17298,176 @@ "semver": "^6.0.0" } }, + "make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "dependencies": { + "@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "requires": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "requires": { + "unique-slug": "^3.0.0" + } + }, + "unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + } + } + }, "md5": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", @@ -14227,6 +17652,157 @@ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, + "minipass": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.5.tgz", + "integrity": "sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==", + "dev": true + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -14292,6 +17868,35 @@ "integrity": "sha512-08ARB91bUi6zNKzVmaj3QO7cr397uiDT2nJ63cHjyNtCTWIgvS47j3eT0WfzUwS9+6Z5YshRaoasFkXCKrIYbA==", "dev": true }, + "node-gyp": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.1.tgz", + "integrity": "sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "node-libs-browser": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", @@ -14343,35 +17948,215 @@ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "lru-cache": "^6.0.0" + } + } + } + }, + "node-releases": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "dev": true + }, + "nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "requires": { + "abbrev": "^1.0.0" + } + }, + "normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^3.0.0" + } + }, + "npm-install-checks": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.0.0.tgz", + "integrity": "sha512-SBU9oFglRVZnfElwAtF14NivyulDqF1VKqqwNsFW9HDcbHMAPHpRSsVFgKuwFGq/hVvWZExz62Th0kvxn/XE7Q==", + "dev": true, + "requires": { + "semver": "^7.1.1" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "npm-normalize-package-bin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.0.tgz", + "integrity": "sha512-g+DPQSkusnk7HYXr75NtzkIP4+N81i3RPsGFidF3DzHd9MT9wWngmqoeg/fnHFz5MNdtG4w03s+QnhewSLTT2Q==", + "dev": true + }, + "npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "requires": { + "ignore-walk": "^6.0.0" + } + }, + "npm-pick-manifest": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "dev": true, + "requires": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "npm-registry-fetch": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.3.tgz", + "integrity": "sha512-YaeRbVNpnWvsGOjX2wk5s85XJ7l1qQBGAp724h8e2CZFFhMSuw9enom7K1mWVUtvXO1uUSFIAPofQK0pPN0ZcA==", + "dev": true, + "requires": { + "make-fetch-happen": "^11.0.0", + "minipass": "^4.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + }, + "make-fetch-happen": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz", + "integrity": "sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^4.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + } + }, + "minipass-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.1.tgz", + "integrity": "sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^4.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" } } } }, - "node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -14381,6 +18166,18 @@ "path-key": "^3.0.0" } }, + "npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + }, "nth-check": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", @@ -14523,6 +18320,32 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "pacote": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.1.1.tgz", + "integrity": "sha512-eeqEe77QrA6auZxNHIp+1TzHQ0HBKf5V6c8zcaYZ134EJe1lCi+fjXATkNiEEfbG+e50nu02GLvUtmZcGOYabQ==", + "dev": true, + "requires": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^4.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + } + }, "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -15038,6 +18861,12 @@ "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", "dev": true }, + "proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true + }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -15050,6 +18879,30 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "dependencies": { + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true + } + } + }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -15168,6 +19021,75 @@ } } }, + "read-package-json": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.0.tgz", + "integrity": "sha512-b/9jxWJ8EwogJPpv99ma+QwtqB7FSl3+V6UXS7Aaay8/5VwMY50oIFooY1UKXMWpfNCM6T/PoGqa5GD1g9xf9w==", + "dev": true, + "requires": { + "glob": "^8.0.1", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "dependencies": { + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + } + } + }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -15314,12 +19236,12 @@ "dev": true }, "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, "requires": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -15378,6 +19300,104 @@ "inherits": "^2.0.1" } }, + "rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-filesize": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-filesize/-/rollup-plugin-filesize-10.0.0.tgz", + "integrity": "sha512-JAYYhzCcmGjmCzo3LEHSDE3RAPHKIeBdpqRhiyZSv5o/3wFhktUOzYAWg/uUKyEu5dEaVaql6UOmaqHx1qKrZA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.13.8", + "boxen": "^5.0.0", + "brotli-size": "4.0.0", + "colors": "1.4.0", + "filesize": "^6.1.0", + "gzip-size": "^6.0.0", + "pacote": "^15.1.1", + "terser": "^5.6.0" + } + }, + "rollup-plugin-output-manifest": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-output-manifest/-/rollup-plugin-output-manifest-2.0.0.tgz", + "integrity": "sha512-RJJ/MzM2Sj65o63qs1aIwD+AofAhdYi5Hx1Pk8/Fn6dWxbcSlficfJLNGeYJ14CPi7CHvEHwgjs23LiFS/x/Dw==", + "dev": true, + "requires": { + "@types/node": "^13.9.1", + "tslib": "^1.10.0" + }, + "dependencies": { + "@types/node": { + "version": "13.13.52", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.52.tgz", + "integrity": "sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -15566,6 +19586,12 @@ "send": "0.18.0" } }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -15635,12 +19661,71 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "sigstore": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.0.0.tgz", + "integrity": "sha512-e+qfbn/zf1+rCza/BhIA//Awmf0v1pa5HQS8Xk8iXrn9bgytytVLqYD0P7NSqZ6IELTgq+tcDvLPkQjNHyWLNg==", + "dev": true, + "requires": { + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + }, + "make-fetch-happen": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz", + "integrity": "sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^4.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + } + }, + "minipass-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.1.tgz", + "integrity": "sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^4.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + } + } + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, "sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -15652,6 +19737,35 @@ "websocket-driver": "^0.7.4" } }, + "socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "dependencies": { + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + } + } + }, + "socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -15682,6 +19796,38 @@ } } }, + "spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, "spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", @@ -15722,6 +19868,15 @@ } } }, + "ssri": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.1.tgz", + "integrity": "sha512-WVy6di9DlPOeBWEjMScpNipeSX2jIZBGEn5Uuo8Q7aIuFEuDX0pw8RxcOjlD1TWP4obi24ki7m/13+nFpcbXrw==", + "dev": true, + "requires": { + "minipass": "^4.0.0" + } + }, "stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", @@ -15886,6 +20041,48 @@ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, + "tar": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", + "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^4.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } + } + }, "terser": { "version": "5.16.3", "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.3.tgz", @@ -15998,6 +20195,65 @@ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, + "tuf-js": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.1.tgz", + "integrity": "sha512-WTp382/PR96k0dI4GD5RdiRhgOU0rAC7+lnoih/5pZg3cyb3aNMqDozleEEWwyfT3+FOg7Qz9JU3n6A44tLSHw==", + "dev": true, + "requires": { + "@tufjs/models": "1.0.0", + "make-fetch-happen": "^11.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + }, + "make-fetch-happen": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz", + "integrity": "sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^4.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + } + }, + "minipass-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.1.tgz", + "integrity": "sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^4.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + } + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -16036,6 +20292,24 @@ "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true }, + "unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "requires": { + "unique-slug": "^4.0.0" + } + }, + "unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -16128,6 +20402,25 @@ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -16515,6 +20808,24 @@ "isexe": "^2.0.0" } }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, "wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", diff --git a/package.json b/package.json index 27940ff..bcbb981 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,24 @@ { "main": "dist/form-components.js", "name": "laravel-form-components", - "scripts": {}, + "scripts": { + "build": "npx rollup -c", + "watch": "npx rollup -c -w" + }, "author": "Randall Wilk", "license": "MIT", "devDependencies": { - "@babel/core": "^7.20.12", + "@babel/core": "^7.21.0", "@babel/plugin-proposal-object-rest-spread": "^7.20.7", "@babel/preset-env": "^7.20.2", - "laravel-mix": "^6.0.49" + "@rollup/plugin-babel": "^6.0.3", + "@rollup/plugin-commonjs": "^24.0.1", + "@rollup/plugin-node-resolve": "^15.0.1", + "fs-extra": "^11.1.0", + "md5": "^2.3.0", + "rollup": "^2.79.1", + "rollup-plugin-filesize": "^10.0.0", + "rollup-plugin-output-manifest": "^2.0.0", + "rollup-plugin-terser": "^7.0.2" } } diff --git a/resources/css/addons.css b/resources/css/addons.css index ff82c94..d316cea 100644 --- a/resources/css/addons.css +++ b/resources/css/addons.css @@ -1,13 +1,192 @@ @layer components { + .leading-addon, + .trailing-addon { + @apply inline-flex + items-center + px-3 + border + sm:text-sm; + + background-color: var(--leading-addon-background-color); + color: var(--leading-addon-color); + border-color: var(--input-border-color); + } + + .leading-addon { + @apply border-r-0; + + border-top-left-radius: var(--input-border-radius); + border-bottom-left-radius: var(--input-border-radius); + } + + .leading-addon + :is(.leading-addon, .form-text, .custom-select__button) { + @apply rounded-l-none; + } + + .leading-icon { + @apply absolute + inset-y-0 + left-0 + pl-3 + flex + items-center; + + color: var(--leading-icon-color); + } + + :is(.leading-icon, .trailing-icon):not(button):not([role="button"]):not(:has(button, [role="button"])) { + @apply pointer-events-none; + } + + .leading-icon-container, + .trailing-icon-container { + @apply h-5 w-5; + } + + .clear-button { + @apply relative + h-6 + w-6 + rounded-full + transition-colors + flex + items-center + justify-center + bg-transparent + focus:outline-none + focus:ring-0; + } + + .clear-button:is(:hover, :focus) { + background-color: var(--clear-button-hover-bg); + } + + .clear-button:is(:hover, :focus) svg { + color: var(--clear-button-hover-color); + } + + .clear-button svg { + @apply h-5 w-5; + } + + .leading-icon + :is(.form-text, .custom-select__button) { + @apply pl-10 !important; + } + .leading-addon svg { @apply h-5 w-5; } - .leading-icon { - z-index: 1; + .leading-icon, + .trailing-icon { + z-index: 3; } .leading-icon svg { @apply max-w-full; } + + .inline-addon { + @apply absolute + inset-y-0 + left-0 + pl-3 + flex + items-center + sm:text-sm + sm:leading-5; + + color: var(--input-color); + } + + .inline-addon + :is(.form-text, .custom-select__button) { + padding-left: var(--inline-addon-pl) !important; + } + + @screen sm { + .inline-addon + :is(.form-text, .custom-select__button) { + --inline-addon-pl: theme('spacing.14'); + } + } + + .trailing-addon { + @apply border-l-0; + } + + :is(.form-text, .custom-select__button):has(+ .trailing-addon) { + @apply rounded-r-none; + @apply z-[2]; + } + + .trailing-addon:last-of-type { + border-top-right-radius: var(--input-border-radius); + border-bottom-right-radius: var(--input-border-radius); + } + + .trailing-icon { + @apply absolute + inset-y-0 + right-0 + pr-3 + flex + items-center; + + color: var(--leading-icon-color); + } + + .form-text:has(+ .trailing-icon) { + @apply pr-10 !important; + } + + .trailing-inline-addon { + @apply absolute + inset-y-0 + right-0 + pr-3 + flex + items-center + sm:text-sm + sm:leading-5; + + color: var(--input-color); + } + + .form-text:has(+ .trailing-inline-addon) { + padding-right: var(--trailing-inline-addon-pr) !important; + } + + /* sizing */ + .has-leading-icon.form-input--lg .form-text { + @apply pl-11 !important; + } + + .has-trailing-icon.form-input--lg .form-text { + @apply pr-11 !important; + } + + :is(.has-leading-icon, .has-trailing-icon).form-input--lg :is(.leading-icon-container, .trailing-icon-container) { + @apply h-6 w-6; + } + + /* error states */ + .leading-icon:has(+ .input-error), + .input-error + .trailing-icon { + color: var(--input-error-leading-icon-color); + } + + .inline-addon:has(+ .input-error), + .input-error + .trailing-inline-addon { + color: var(--input-error-color); + } +} + +/* sizing */ +@layer utilities { + .form-input--sm :is(.leading-addon, .inline-addon, .trailing-addon, .trailing-inline-addon) { + @apply sm:text-xs; + } + + .form-input--lg :is(.leading-addon, .inline-addon, .trailing-addon, .trailing-inline-addon) { + @apply sm:text-base; + } } diff --git a/resources/css/checkbox-group.css b/resources/css/checkbox-group.css index dcd5e78..ccfbb3a 100644 --- a/resources/css/checkbox-group.css +++ b/resources/css/checkbox-group.css @@ -1,9 +1,19 @@ -:root { - --fc-checkbox-grid-cols: 3; -} - @layer components { - .form-checkbox-group { + .form-checkbox-group--inline { + @apply grid + items-start; + grid-template-columns: repeat(var(--fc-checkbox-grid-cols), minmax(0, 1fr)); + gap: var(--fc-checkbox-grid-gap); + } + + .form-checkbox-group--stacked { + @apply space-y-4; + } +} + +@layer utilities { + .form-checkbox-group--stacked.form-checkbox-group--lg { + @apply space-y-6; } } diff --git a/resources/css/choice.css b/resources/css/choice.css new file mode 100644 index 0000000..11b0778 --- /dev/null +++ b/resources/css/choice.css @@ -0,0 +1,106 @@ +@layer components { + .choice-container { + @apply relative + flex + items-start; + } + + .choice-container--label-left { + @apply py-4; + } + + .choice-input { + @apply flex + h-5 + items-center; + } + + .choice-input--right { + @apply ml-3; + } + + .form-choice { + @apply border; + + width: var(--choice-size); + height: var(--choice-size); + border-color: var(--input-border-color); + color: var(--choice-color); + background-color: var(--choice-bg); + } + + .form-choice:focus { + --tw-ring-color: var(--choice-ring-color); + } + + .form-checkbox { + @apply rounded; + } + + .choice-label { + @apply ml-3 text-sm; + } + + .choice-label--left { + @apply ml-0 + min-w-0 + flex-1; + } + + .choice-label label { + font-weight: var(--choice-label-font-weight); + color: var(--choice-label-color); + } + + .choice-description { + color: var(--choice-description-color); + } + + .form-choice:is([disabled], [readonly], [disabled]:hover, [readonly]:hover) { + color: var(--choice-color); + background-color: var(--choice-disabled-bg); + border-color: var(--input-disabled-border-color); + + @apply cursor-not-allowed opacity-[.40]; + } + + .form-choice:is([disabled]:checked, [readonly]:checked) { + background-color: currentColor; + } + + .choice-label label[data-disabled="true"] { + @apply cursor-not-allowed opacity-75; + } + + .form-choice:checked { + background-color: currentColor; + } + + .form-choice:is(:checked, :checked:hover) { + border-color: transparent; + } +} + +/* sizing */ +@layer utilities { + .form-choice--sm .form-choice { + width: var(--choice-size); + height: var(--choice-size); + } + + .form-choice--md .form-choice { + @apply h-6 w-6; + } + + .form-choice--md .choice-label { + @apply -mt-1; + } + + .form-choice--lg .form-choice { + @apply h-8 w-8; + } + + .form-choice--lg .choice-label { + @apply text-base -mt-2; + } +} diff --git a/resources/css/custom-select.css b/resources/css/custom-select.css index 078e17b..02b7580 100644 --- a/resources/css/custom-select.css +++ b/resources/css/custom-select.css @@ -1,112 +1,258 @@ @layer components { - .custom-select__button, - .tree-select__button { - @apply pl-2 - pr-1 + .custom-select__button-container { + @apply flex + relative + shadow-sm; + + border-radius: var(--input-border-radius); + } + + .custom-select__button { + @apply flex-1 + flex + items-center justify-between + block + gap-2 + w-full border - border-slate-300 - rounded-md - bg-white - sm:text-sm - table - table-fixed - h-[38px] - w-full; + shadow-none + text-left + sm:text-sm; + + background-color: var(--input-background-color); + padding: var(--input-padding-y) var(--input-padding-x); + border-radius: var(--input-border-radius); + border-color: var(--input-border-color); + color: var(--input-color); + } + + .custom-select__button:is(:active, :focus, .open) { + @apply ring-1; + --tw-ring-color: var(--input-focus-border-color); + border-color: var(--input-focus-border-color); + } + + .custom-select:is([disabled], [readonly]) .custom-select__button { + @apply cursor-not-allowed; + + background-color: var(--input-disabled-bg-color); + border-color: var(--input-disabled-border-color); + } + + .custom-select:is([disabled], [readonly]) .custom-select__button:is(:active, :focus) { + @apply ring-0 outline-none; + } + + .custom-select__button-icon { + @apply h-5 w-5 shrink-0; } - .custom-select__button.disabled, - .tree-select__button.disabled { - @apply bg-slate-50 cursor-not-allowed; + .custom-select__button-container:has(+ [data-popper-placement="top-start"]) .custom-select__button-icon { + @apply rotate-180; } - .custom-select-menu, - .tree-select-menu { + .custom-select__clear { + @apply shrink-0; + } + + .custom-select__clear:is(:hover, :focus) { + @apply relative + h-6 + w-6 + rounded-full + transition-colors; + + color: var(--clear-button-hover-color); + background-color: var(--clear-button-hover-bg); + } + + .custom-select__clear svg { + @apply h-5 w-5; + } + + .custom-select__button-content { + @apply flex-1 w-0 truncate; + } + + .custom-select__menu { @apply absolute + mt-2 + z-10 origin-top-right - right-0 - rounded-md - bg-white - focus:outline-none + max-w-full w-full border - border-blue-300; + shadow-md + overflow-hidden + outline-none; + + background-color: var(--custom-select-menu-bg); + border-color: var(--custom-select-menu-border-color); + border-radius: var(--custom-select-menu-border-radius); } - .custom-select-menu[data-popper-placement="top-start"], - .tree-select-menu[data-popper-placement="top-start"] { - @apply rounded-b-none border-b-0; + .custom-select__menu-content { + @apply overflow-x-hidden + overflow-y-auto; + + max-height: var(--custom-select-max-menu-height); } - .custom-select-menu[data-popper-placement="top-start"] .custom-select-menu__container, - .tree-select-menu[data-popper-placement="top-start"] .tree-select-menu__container { - @apply rounded-b-none; + .custom-select__option { + @apply flex + items-center + justify-between + cursor-default + gap-2 + w-full + px-4 + py-2 + text-sm + transition-colors + focus:outline-none; + + color: var(--custom-select-menu-color); } - .custom-select-menu[data-popper-placement="bottom-start"], - .tree-select-menu[data-popper-placement="bottom-start"] { - @apply rounded-t-none border-t-0; + .custom-select__option--active { + @apply cursor-pointer; + + background-color: var(--custom-select-option-active-bg); + color: var(--custom-select-option-active-color); + } + + .custom-select__option--selected { + font-weight: var(--custom-select-option-selected-font-weight); + } + + .custom-select__option--selected:not(.custom-select__option--active) { + background-color: var(--custom-select-option-selected-bg); + color: var(--custom-select-option-selected-color); + } + + .custom-select__option:is(.custom-select__option--disabled, [disabled]) { + @apply opacity-50 cursor-not-allowed; + } + + .custom-select__selected-icon svg { + @apply h-5 w-5; + } + + .custom-select__selected-icon { + color: var(--custom-select-selected-icon-color); + } + + .custom-select__option--active .custom-select__selected-icon { + color: var(--custom-select-selected-icon-hover-color); + } + + .custom-select__search { + @apply w-full + sticky + top-0 + py-2 + px-2.5 + border-b + sm:text-sm + z-[2]; + + background-color: var(--custom-select-menu-bg); + border-color: var(--custom-select-search-border-color); + } + + .custom-select__search input { + @apply w-full + border-0 + bg-transparent + focus:outline-none + focus:ring-0; + + color: var(--input-color); } - .custom-select-menu[data-popper-placement="bottom-start"] .custom-select-menu__container, - .tree-select-menu[data-popper-placement="bottom-start"] .tree-select-menu__container { - @apply rounded-t-none; + .custom-select__search input::placeholder { + color: var(--input-placeholder-color); } - .custom-select-menu:not(.invisible) + .custom-select__button, - .tree-select-menu:not(.invisible) + .tree-select__button { - @apply border-blue-300; + .custom-select__button-tokens { + @apply flex + flex-wrap + gap-1; } - .custom-select-menu:not(.invisible)[data-popper-placement="bottom-start"] + .custom-select__button, - .tree-select-menu:not(.invisible)[data-popper-placement="bottom-start"] + .tree-select__button { - @apply rounded-b-none border-b-slate-200; + .custom-select__button-token { + @apply inline-flex + rounded-full + px-2.5 + py-1 + break-all + transition-colors + gap-2 + items-center + justify-between + max-w-full + text-xs; + + background-color: var(--custom-select-button-token-bg); + color: var(--custom-select-button-token-color); } - .custom-select-menu:not(.invisible)[data-popper-placement="top-start"] + .custom-select__button, - .tree-select-menu:not(.invisible)[data-popper-placement="top-start"] + .tree-select__button { - @apply rounded-t-none border-t-slate-200; + .custom-select__button-token.custom-select__button-token--deleteable { + @apply pr-1.5; } - .custom-select-option, - .tree-select-option { - @apply w-full focus:outline-none; + .custom-select__button-token:not(.disabled):is(:hover, :focus) { + @apply cursor-pointer outline-none; + + background-color: var(--custom-select-button-token-hover-bg); } - .custom-select-option__container, - .tree-select-option__container { - @apply px-2.5 text-sm text-slate-600 flex items-center; + .custom-select__button-token-delete svg { + @apply h-3.5 w-3.5 opacity-75 transition-opacity; } - .custom-select-option:not(.disabled).has-focus > .custom-select-option__container, - .tree-select-option:not(.disabled).has-focus > .tree-select-option__container { - outline: none; - background-color: theme(colors.slate.100); + .custom-select__button-token.disabled { + @apply opacity-75; } - .custom-select-option.disabled > .custom-select-option__container, - .tree-select-option.disabled > .tree-select-option__container { - @apply bg-gray-100 opacity-50 cursor-not-allowed; + .group:is(:hover, :focus) .custom-select__button-token-delete svg { + @apply opacity-100; } - .custom-select-option__label, - .tree-select-option__label { - @apply py-3.5; + .custom-select__opt-group { + @apply text-sm pointer-events-none border-b; + + font-weight: var(--custom-select-opt-group-font-weight); + color: var(--custom-select-opt-group-color); + background-color: var(--custom-select-opt-group-bg); + border-color: var(--custom-select-opt-group-border-color); } - .custom-select-option--opt-group .custom-select-option__container { - @apply text-slate-400 font-semibold; + .custom-select__no-results { + @apply text-sm py-2 px-2.5; + + color: var(--custom-select-menu-color); + } +} + +@layer utilities { + /* sizing */ + .custom-select__button--sm { + padding: var(--input-padding-y-sm) var(--input-padding-x-sm); + @apply sm:text-xs; } - .custom-select-option--opt-group .custom-select-option__label { - @apply py-2; + .custom-select__button--sm .custom-select__button-token { + @apply py-0.5; } - .custom-select-option--opt-group:not(:first-child) { - @apply border-t border-t-slate-300; + .custom-select__button--md { + padding: var(--input-padding-y) var(--input-padding-x); + @apply sm:text-sm; } - .custom-select-option.selected > .custom-select-option__container, - .tree-select-option.selected > .tree-select-option__container { - @apply bg-blue-200 font-semibold; + .custom-select__button--lg { + padding: var(--input-padding-y-lg) var(--input-padding-x-lg); + @apply sm:text-base; } } diff --git a/resources/css/dark-mode.css b/resources/css/dark-mode.css new file mode 100644 index 0000000..623a0e2 --- /dev/null +++ b/resources/css/dark-mode.css @@ -0,0 +1,329 @@ +@layer components { + /* class strategy */ + .dark { + /* choice */ + .form-choice { + color: var(--choice-dark-ring-color); + border-color: var(--input-dark-border-color); + background-color: var(--input-dark-background-color); + --tw-ring-offset-color: var(--choice-dark-ring-offset-color); + } + + .choice-label label { + --choice-label-color: var(--choice-dark-label-color); + } + + .form-choice:focus { + --tw-ring-color: var(--choice-dark-ring-color); + } + + .form-choice:is(:checked, :checked:hover) { + border-color: transparent; + background-color: currentColor; + } + + /* input */ + .form-text { + --input-background-color: var(--input-dark-background-color); + --input-border-color: var(--input-dark-border-color); + color: var(--input-dark-color); + } + + .form-text::placeholder { + color: var(--input-dark-placeholder-color); + } + + .form-text:is([disabled], [readonly]) { + --input-disabled-bg-color: var(--input-dark-disabled-bg-color); + --input-disabled-border-color: var(--input-dark-disabled-border-color); + color: var(--input-dark-disabled-color); + opacity: .4; + } + + .custom-select { + --input-background-color: var(--input-dark-background-color); + --input-border-color: var(--input-dark-border-color); + --input-color: var(--input-dark-color); + --custom-select-menu-bg: var(--custom-select-dark-menu-bg); + --custom-select-menu-color: var(--custom-select-dark-menu-color); + --custom-select-menu-border-color: var(--custom-select-dark-menu-border-color); + --custom-select-opt-group-bg: var(--custom-select-dark-opt-group-bg); + --custom-select-opt-group-border-color: var(--custom-select-dark-opt-group-border-color); + --custom-select-search-border-color: var(--custom-select-dark-search-border-color); + --custom-select-opt-group-color: var(--custom-select-dark-opt-group-color); + --custom-select-option-selected-bg: var(--custom-select-dark-option-selected-bg); + --custom-select-option-selected-color: var(--custom-select-dark-option-selected-color); + --custom-select-option-active-bg: var(--custom-select-dark-option-active-bg); + --custom-select-option-active-color: var(--custom-select-dark-option-active-color); + --custom-select-selected-icon-hover-color: var(--custom-select-dark-selected-icon-hover-color); + --tree-select-child-border-color: var(--tree-select-dark-child-border-color); + --tree-select-child-hover-border-color: var(--tree-select-dark-child-hover-border-color); + } + + .custom-select:is([disabled], [readonly]) { + --input-disabled-bg-color: var(--input-dark-disabled-bg-color); + --input-disabled-border-color: var(--input-dark-disabled-border-color); + } + + /* file upload */ + .file-upload__input { + --input-background-color: var(--input-dark-background-color); + --input-border-color: var(--input-dark-border-color); + --input-color: var(--input-dark-color); + } + + .file-upload__input::file-selector-button { + --file-upload-button-color: var(--file-upload-button-dark-color); + --file-upload-button-bg: var(--file-upload-button-dark-bg); + } + + .file-upload__input:is([disabled], [readonly]) { + background-color: var(--input-dark-disabled-bg-color); + border-color: var(--input-dark-disabled-border-color); + color: var(--input-dark-disabled-color); + opacity: .4; + } + + .file-upload__input:is([disabled], [readonly])::file-selector-button { + @apply opacity-75; + background-color: var(--file-upload-button-dark-disabled-bg); + } + + /* addons */ + :is(.leading-addon, .trailing-addon) { + --leading-addon-background-color: var(--leading-addon-dark-background-color); + --leading-addon-color: var(--leading-addon-dark-color); + border-color: var(--input-dark-border-color); + } + + :is(.inline-addon, .trailing-inline-addon) { + color: var(--input-dark-color); + } + + .inline-addon:has(+ .input-error), + .input-error + .trailing-inline-addon { + color: var(--input-error-dark-color); + } + + .clear-button:hover { + --clear-button-hover-bg: var(--clear-button-dark-hover-bg); + --clear-button-hover-color: var(--clear-button-dark-hover-color); + } + + /* label */ + .form-label { + --label-color: var(--label-dark-color); + } + + /* form group */ + .form-group--border { + --form-group-border-color: var(--form-group-dark-border-color); + } + + /* switch toggle */ + .switch-toggle__label { + --switch-toggle-label-color: var(--switch-toggle-dark-label-color); + } + + .switch-toggle { + background-color: var(--switch-toggle-dark-bg); + border-color: var(--switch-toggle-dark-border-color); + } + + .peer:focus ~ .switch-toggle { + --tw-ring-color: var(--switch-toggle-dark-ring-color); + } + + .peer:disabled ~ .switch-toggle__label { + color: var(--switch-toggle-dark-disabled-label-color); + } + + .peer:focus ~ .switch-toggle--short { + --tw-ring-offset-color: var(--switch-toggle-dark-ring-offset-color); + } + + /* errors */ + .has-error label { + color: var(--input-error-dark-label-color); + } + + .input-error, + .has-error :is(.form-text, .form-select, .custom-select__button, .file-upload__input) { + --input-dark-color: var(--input-error-dark-color); + --input-dark-placeholder-color: var(--input-error-dark-placeholder-color); + --input-dark-border-color: var(--input-error-dark-border-color); + } + + .has-error .file-upload__input::file-selector-button { + --file-upload-button-color: var(--file-upload-button-error-dark-color); + } + + .has-error :is(.ql-container, .ql-toolbar).ql-snow { + border-color: var(--input-error-dark-border-color); + } + } + + /* os strategy */ + @media (prefers-color-scheme: dark) { + /* choice */ + .form-choice { + color: var(--choice-dark-ring-color); + border-color: var(--input-dark-border-color); + background-color: var(--input-dark-background-color); + --tw-ring-offset-color: var(--choice-dark-ring-offset-color); + } + + .choice-label label { + --choice-label-color: var(--choice-dark-label-color); + } + + .form-choice:focus { + --tw-ring-color: var(--choice-dark-ring-color); + } + + .form-choice:is(:checked, :checked:hover) { + border-color: transparent; + background-color: currentColor; + } + + /* input */ + .form-text { + --input-background-color: var(--input-dark-background-color); + --input-border-color: var(--input-dark-border-color); + color: var(--input-dark-color); + } + + .form-text::placeholder { + color: var(--input-dark-placeholder-color); + } + + .form-text:is([disabled], [readonly]) { + --input-disabled-bg-color: var(--input-dark-disabled-bg-color); + --input-disabled-border-color: var(--input-dark-disabled-border-color); + color: var(--input-dark-disabled-color); + opacity: .4; + } + + .custom-select { + --input-background-color: var(--input-dark-background-color); + --input-border-color: var(--input-dark-border-color); + --input-color: var(--input-dark-color); + --custom-select-menu-bg: var(--custom-select-dark-menu-bg); + --custom-select-menu-color: var(--custom-select-dark-menu-color); + --custom-select-menu-border-color: var(--custom-select-dark-menu-border-color); + --custom-select-opt-group-bg: var(--custom-select-dark-opt-group-bg); + --custom-select-opt-group-border-color: var(--custom-select-dark-opt-group-border-color); + --custom-select-search-border-color: var(--custom-select-dark-search-border-color); + --custom-select-opt-group-color: var(--custom-select-dark-opt-group-color); + --custom-select-option-selected-bg: var(--custom-select-dark-option-selected-bg); + --custom-select-option-selected-color: var(--custom-select-dark-option-selected-color); + --custom-select-option-active-bg: var(--custom-select-dark-option-active-bg); + --custom-select-option-active-color: var(--custom-select-dark-option-active-color); + --custom-select-selected-icon-hover-color: var(--custom-select-dark-selected-icon-hover-color); + --tree-select-child-border-color: var(--tree-select-dark-child-border-color); + --tree-select-child-hover-border-color: var(--tree-select-dark-child-hover-border-color); + } + + .custom-select:is([disabled], [readonly]) { + --input-disabled-bg-color: var(--input-dark-disabled-bg-color); + --input-disabled-border-color: var(--input-dark-disabled-border-color); + } + + /* file upload */ + .file-upload__input { + --input-background-color: var(--input-dark-background-color); + --input-border-color: var(--input-dark-border-color); + --input-color: var(--input-dark-color); + } + + .file-upload__input::file-selector-button { + --file-upload-button-color: var(--file-upload-button-dark-color); + --file-upload-button-bg: var(--file-upload-button-dark-bg); + } + + .file-upload__input:is([disabled], [readonly]) { + background-color: var(--input-dark-disabled-bg-color); + border-color: var(--input-dark-disabled-border-color); + color: var(--input-dark-disabled-color); + opacity: .4; + } + + .file-upload__input:is([disabled], [readonly])::file-selector-button { + @apply opacity-75; + background-color: var(--file-upload-button-dark-disabled-bg); + } + + /* addons */ + :is(.leading-addon, .trailing-addon) { + --leading-addon-background-color: var(--leading-addon-dark-background-color); + --leading-addon-color: var(--leading-addon-dark-color); + border-color: var(--input-dark-border-color); + } + + :is(.inline-addon, .trailing-inline-addon) { + color: var(--input-dark-color); + } + + .inline-addon:has(+ .input-error), + .input-error + .trailing-inline-addon { + color: var(--input-error-dark-color); + } + + .clear-button:hover { + --clear-button-hover-bg: var(--clear-button-dark-hover-bg); + --clear-button-hover-color: var(--clear-button-dark-hover-color); + } + + /* label */ + .form-label { + --label-color: var(--label-dark-color); + } + + /* form group */ + .form-group--border { + --form-group-border-color: var(--form-group-dark-border-color); + } + + /* switch toggle */ + .switch-toggle__label { + --switch-toggle-label-color: var(--switch-toggle-dark-label-color); + } + + .switch-toggle { + background-color: var(--switch-toggle-dark-bg); + border-color: var(--switch-toggle-dark-border-color); + } + + .peer:focus ~ .switch-toggle { + --tw-ring-color: var(--switch-toggle-dark-ring-color); + } + + .peer:disabled ~ .switch-toggle__label { + color: var(--switch-toggle-dark-disabled-label-color); + } + + .peer:focus ~ .switch-toggle--short { + --tw-ring-offset-color: var(--switch-toggle-dark-ring-offset-color); + } + + /* errors */ + .has-error label { + color: var(--input-error-dark-label-color); + } + + .input-error, + .has-error :is(.form-text, .form-select, .custom-select__button, .file-upload__input) { + --input-dark-color: var(--input-error-dark-color); + --input-dark-placeholder-color: var(--input-error-dark-placeholder-color); + --input-dark-border-color: var(--input-error-dark-border-color); + } + + .has-error .file-upload__input::file-selector-button { + --file-upload-button-color: var(--file-upload-button-error-dark-color); + } + + .has-error :is(.ql-container, .ql-toolbar).ql-snow { + border-color: var(--input-error-dark-border-color); + } + } +} diff --git a/resources/css/disabled.css b/resources/css/disabled.css deleted file mode 100644 index 2aed1ed..0000000 --- a/resources/css/disabled.css +++ /dev/null @@ -1,14 +0,0 @@ -@layer components { - input[disabled], - textarea[disabled], - select[disabled] { - @apply bg-slate-50 cursor-not-allowed; - } - - .form-checkbox[disabled], - .form-checkbox.disabled, - .form-radio[disabled], - .form-radio.disabled { - @apply opacity-75 text-slate-300; - } -} diff --git a/resources/css/errors.css b/resources/css/errors.css index 5aa717b..1dbbeaf 100644 --- a/resources/css/errors.css +++ b/resources/css/errors.css @@ -1,33 +1,26 @@ @layer components { .has-error label { - @apply text-red-500; + color: var(--input-error-label-color); } - .input-error, - .has-error .form-input, - .has-error .form-select, - .has-error .custom-select__button { - @apply border-red-300 text-red-900 focus:border-red-300; - } + .form-error { + @apply mt-1 + text-sm; - .input-error:not(.password-toggleable), - .has-error .custom-select__button, - .has-error .form-input:not(.password-toggleable), - .has-error .form-select:not(.password-toggleable) { - @apply focus:ring-red-400 focus:ring-opacity-50; + color: var(--input-error-message-color); } - .has-error .password-input-container { - @apply focus-within:ring-red-400 focus-within:border-red-300 focus-within:ring-opacity-50; - } - - .has-error .password-toggle { - @apply border-red-300; + .input-error, + .has-error :is(.form-text, .form-select, .custom-select__button, .file-upload__input) { + --input-border-color: var(--input-error-border-color); + --input-color: var(--input-error-color); + --input-placeholder-color: var(--input-error-placeholder-color); + --input-background-color: var(--input-error-bg-color); + --input-focus-border-color: var(--input-error-focus-border-color); } - .input-error::placeholder, - .has-error .form-input::placeholder, - .has-error .form-select::placeholder { - @apply text-red-300; + .has-error .file-upload__input::file-selector-button { + --file-upload-button-bg: var(--file-upload-button-error-bg); + --file-upload-button-color: var(--file-upload-button-error-color); } } diff --git a/resources/css/file-upload.css b/resources/css/file-upload.css new file mode 100644 index 0000000..537484a --- /dev/null +++ b/resources/css/file-upload.css @@ -0,0 +1,173 @@ +@layer components { + .file-upload { + @apply flex + items-center + space-x-5; + } + + .file-upload__input { + @apply block + w-full + border + shadow-none + cursor-pointer + sm:text-sm; + + border-color: var(--input-border-color); + border-radius: var(--input-border-radius); + background-color: var(--input-background-color); + color: var(--input-color); + } + + .file-upload__input:is(:focus, :active):not(:is([disabled], [readonly])) { + @apply ring-1 outline-none; + --tw-ring-color: var(--input-focus-border-color); + border-color: var(--input-focus-border-color); + } + + .file-upload__input::file-selector-button { + @apply cursor-pointer; + border-radius: var(--input-border-radius); + @apply rounded-r-none border-0 mr-4; + + padding: var(--input-padding-y) var(--input-padding-x); + color: var(--file-upload-button-color); + background-color: var(--file-upload-button-bg); + font-weight: var(--file-upload-button-font-weight); + } + + .file-upload__input:is([disabled], [readonly]) { + @apply cursor-not-allowed; + + background-color: var(--input-disabled-bg-color); + border-color: var(--input-disabled-border-color); + } + + .file-upload__input:is([disabled], [readonly])::file-selector-button { + @apply cursor-not-allowed opacity-50; + + background-color: var(--file-upload-button-disabled-bg); + } + + .file-upload__badge { + @apply inline-flex + items-center + px-2.5 + py-0.5 + rounded-full + text-xs + font-medium; + + background-color: var(--file-upload-badge-bg); + color: var(--file-upload-badge-color); + } + + .file-upload__percent { + @apply text-right; + } + + .file-upload__percent > span { + @apply text-xs + font-semibold + inline-block; + + color: var(--file-upload-percent-color); + } + + .file-upload__progress--native { + @apply overflow-hidden; + } + + .file-upload__progress--native progress { + -webkit-appearance: none; + -moz-appearance: none; + @apply appearance-none + block + border-0 + rounded + mb-4 + p-0 + w-full; + + height: var(--file-upload-progress-height); + } + + /* For now, only webkit browsers seem to be able to style the non-filled in part of the progress bar */ + .file-upload__progress--native progress::-webkit-progress-bar { + @apply rounded; + + background-color: var(--file-upload-progress-bg); + } + + /* We cannot combine the selectors for the browser prefixes because it breaks each browser's progress bar for some reason... */ + .file-upload__progress--native progress::-webkit-progress-value { + @apply rounded-l; + + background-color: var(--file-upload-progress-filled-bg); + } + + .file-upload__progress--native progress::-moz-progress-bar { + @apply rounded-l; + + background-color: var(--file-upload-progress-filled-bg); + } + + .file-upload__progress--native progress::-ms-fill { + @apply rounded-l; + + background-color: var(--file-upload-progress-filled-bg); + } + + /* non native progress bar */ + .file-upload__progress { + @apply overflow-hidden + mb-4 + text-xs + flex + rounded; + + height: var(--file-upload-progress-height); + background-color: var(--file-upload-progress-bg); + } + + .file-upload__progress > div { + @apply shadow-none + flex + flex-col + justify-center + whitespace-nowrap + text-white; + + background-color: var(--file-upload-progress-filled-bg); + } +} + +/* sizing */ +@layer utilities { + .file-upload__input--sm { + @apply sm:text-xs; + } + + .file-upload__input--sm::file-selector-button { + padding: var(--input-padding-y-sm) var(--input-padding-x-sm); + @apply sm:text-xs; + } + + .file-upload__input--md { + @apply sm:text-sm; + } + + .file-upload__input--md::file-selector-button { + padding: var(--input-padding-y) var(--input-padding-x); + @apply sm:text-sm; + } + + .file-upload__input--lg { + @apply sm:text-base; + } + + .file-upload__input--lg::file-selector-button { + padding: var(--input-padding-y-lg) var(--input-padding-x-lg); + @apply sm:text-base; + } +} diff --git a/resources/css/filepond.css b/resources/css/filepond.css index e6daae8..7dc0726 100644 --- a/resources/css/filepond.css +++ b/resources/css/filepond.css @@ -1,20 +1,67 @@ /* filepond overrides */ -/* purgecss start ignore */ +.filepond--root { + @apply cursor-pointer; +} + .filepond--panel-root { - @apply border-dashed border-2 border-slate-200 rounded-md max-w-full transition; - @apply bg-transparent !important; + @apply max-w-full transition; + + border-style: var(--filepond-border-style); + border-width: var(--filepond-border-width); + border-color: var(--input-border-color); + border-radius: var(--input-border-radius); + background-color: var(--filepond-bg); + + pointer-events: unset; +} + +.filepond--root:hover .filepond--panel-root { + background-color: var(--filepond-hover-bg); } .filepond--label-action { - @apply text-blue-600 transition hover:opacity-75 focus:opacity-75; - text-decoration-color: theme('colors.blue.600'); + @apply transition-colors hover:opacity-75 focus:opacity-75; + + color: var(--filepond-label-link-color); + text-decoration-color: var(--filepond-label-link-color); } -.fc-filepond-desc { - @apply text-slate-500; +.fc-filepond--desc { + @apply cursor-pointer; + + color: var(--filepond-desc-color); } .fc-filepond--sub-desc { @apply text-xs !important; } -/* purgecss end ignore */ + +/* error states */ +:is(.has-error, .input-error) .filepond--panel-root { + border-color: var(--input-error-border-color); +} + +:is(.has-error, .input-error) .filepond--root:hover .filepond--panel-root { + background-color: var(--input-error-bg-color); +} + +/* dark mode */ +.dark .filepond--panel-root { + border-color: var(--input-dark-border-color); + background-color: var(--input-dark-background-color); +} + +.dark .filepond--root:hover .filepond--panel-root { + background-color: var(--filepond-dark-hover-bg); +} + +@media (prefers-color-scheme: dark) { + .filepond--panel-root { + border-color: var(--input-dark-border-color); + background-color: var(--input-dark-background-color); + } + + .filepond--root:hover .filepond--panel-root { + background-color: var(--filepond-dark-hover-bg); + } +} diff --git a/resources/css/flatpickr.css b/resources/css/flatpickr.css index 79fa225..a8f027d 100644 --- a/resources/css/flatpickr.css +++ b/resources/css/flatpickr.css @@ -1,5 +1,5 @@ /* flatpickr overrides */ -/* purgecss start ignore */ + .flatpickr-calendar { width: 345px !important; } @@ -9,7 +9,10 @@ } .flatpickr-months { - @apply relative bg-blue-600 text-white py-3 px-2 items-center; + @apply relative py-3 px-2 items-center; + + background-color: var(--flatpickr-header-bg); + color: var(--flatpickr-header-color); } .flatpickr-months .flatpickr-prev-month, @@ -27,18 +30,18 @@ .flatpickr-months .flatpickr-prev-month:hover svg, .flatpickr-months .flatpickr-next-month:hover svg { - fill: theme('colors.slate.800') !important; + fill: var(--flatpickr-nav-button-hover-color) !important; } .flatpickr-months .flatpickr-prev-month svg, .flatpickr-months .flatpickr-next-month svg { - fill: #fff; + fill: var(--flatpickr-header-color); opacity: .8; } .flatpickr-months .flatpickr-prev-month:hover, .flatpickr-months .flatpickr-next-month:hover { - @apply bg-slate-300; + background-color: var(--flatpickr-nav-button-hover-bg); } .flatpickr-months .flatpickr-month { @@ -46,9 +49,10 @@ } .flatpickr-months .flatpickr-month .flatpickr-current-month { - @apply text-white w-full relative; + @apply w-full relative; left: unset; transform: unset; + color: var(--flatpickr-header-color); } .flatpickr-months .flatpickr-month .flatpickr-current-month .flatpickr-monthDropdown-months { @@ -68,6 +72,8 @@ } .flatpickr-day.today:not(.selected) { - @apply border-none bg-slate-300 rounded-full text-slate-500; + @apply border-none rounded-full; + + color: var(--flatpickr-current-day-color); + background-color: var(--flatpickr-current-day-bg); } -/* purgecss end ignore */ diff --git a/resources/css/form-group.css b/resources/css/form-group.css new file mode 100644 index 0000000..0b5d7de --- /dev/null +++ b/resources/css/form-group.css @@ -0,0 +1,65 @@ +@layer components { + .form-group--inline { + @apply sm:grid + sm:grid-cols-3 + sm:gap-4 + sm:items-start; + } + + .form-group--mb { + @apply mb-5 last:mb-0; + } + + .form-group--border { + @apply sm:pt-5 + sm:border-t + first:sm:pt-0 + first:sm:border-none; + + border-color: var(--form-group-border-color); + } + + .form-group__label-container:has(.form-group__hint) { + @apply flex justify-between; + } + + .form-group__content { + @apply mt-1; + } + + .form-group__content--inline { + @apply sm:mt-0 sm:col-span-2; + } + + .form-group--inline .form-group__label-container .form-group__hint { + @apply inline-block sm:hidden; + } + + .form-group__label-container .form-group__hint { + @apply ml-2; + } + + .form-group__label-container--inline:not(.form-group__label-container--checkbox-group) label { + @apply sm:mt-px sm:pt-2; + } + + .form-group__hint { + font-size: var(--form-group-hint-text-size); + line-height: var(--form-group-hint-line-height); + color: var(--form-group-hint-color); + } + + .form-group__hint--inline { + @apply mt-1 + hidden + sm:block; + } + + .form-help { + @apply mt-2; + + font-size: var(--form-group-hint-text-size); + line-height: var(--form-group-hint-line-height); + color: var(--form-group-hint-color); + } +} diff --git a/resources/css/index.css b/resources/css/index.css index ade423d..bc46347 100644 --- a/resources/css/index.css +++ b/resources/css/index.css @@ -1,11 +1,17 @@ -@import 'addons.css'; +@import 'variables.css'; +@import 'form-group.css'; @import 'checkbox-group.css'; @import 'custom-select.css'; -@import 'disabled.css'; -@import 'errors.css'; +@import 'file-upload.css'; @import 'filepond.css'; @import 'flatpickr.css'; +@import 'quill.css'; +@import 'label.css'; @import 'input.css'; +@import 'choice.css'; @import 'select.css'; @import 'switch-toggle.css'; @import 'tree-select.css'; +@import 'addons.css'; +@import 'errors.css'; +@import 'dark-mode.css'; diff --git a/resources/css/input.css b/resources/css/input.css index 6efb7f1..d8f83a9 100644 --- a/resources/css/input.css +++ b/resources/css/input.css @@ -14,4 +14,59 @@ input.busy[type="search"]::-webkit-search-results-decoration { display: none; } + + .form-text-container { + @apply flex + relative + shadow-sm; + + border-radius: var(--input-border-radius); + } + + .form-text { + @apply flex-1 + block + w-full + border + shadow-none + sm:text-sm; + + background-color: var(--input-background-color); + padding: var(--input-padding-y) var(--input-padding-x); + border-radius: var(--input-border-radius); + border-color: var(--input-border-color); + color: var(--input-color); + } + + .form-text::placeholder { + color: var(--input-placeholder-color); + } + + .form-text:focus { + --tw-ring-color: var(--input-focus-border-color); + border-color: var(--input-focus-border-color); + } + + .form-text:is([disabled], [readonly]) { + background-color: var(--input-disabled-bg-color); + border-color: var(--input-disabled-border-color); + } +} + +/* sizing */ +@layer utilities { + .form-input--sm .form-text { + padding: var(--input-padding-y-sm) var(--input-padding-x-sm); + @apply sm:text-xs; + } + + .form-input--md .form-text { + padding: var(--input-padding-y) var(--input-padding-x); + @apply sm:text-sm; + } + + .form-input--lg .form-text { + padding: var(--input-padding-y-lg) var(--input-padding-x-lg); + @apply sm:text-base; + } } diff --git a/resources/css/label.css b/resources/css/label.css new file mode 100644 index 0000000..783cf54 --- /dev/null +++ b/resources/css/label.css @@ -0,0 +1,10 @@ +@layer components { + .form-label { + @apply block; + + font-size: var(--label-text-size); + font-weight: var(--label-font-weight); + line-height: var(--label-line-height); + color: var(--label-color); + } +} diff --git a/resources/css/quill.css b/resources/css/quill.css new file mode 100644 index 0000000..967cf88 --- /dev/null +++ b/resources/css/quill.css @@ -0,0 +1,259 @@ +/* quill style overrides */ + +/* errors */ +.has-error :is(.ql-container, .ql-toolbar).ql-snow { + border-color: var(--input-error-border-color); +} + +/* dark mode */ +.dark { + :is(.ql-container, .ql-toolbar).ql-snow { + border-color: var(--input-dark-border-color); + } + + .ql-editor { + background-color: var(--input-dark-background-color); + color: var(--input-dark-color); + } + + .ql-toolbar.ql-snow { + background-color: var(--quill-dark-toolbar-bg); + } + + .ql-toolbar.ql-snow .ql-picker-label { + color: var(--quill-dark-toolbar-color); + } + + .ql-snow .ql-stroke { + stroke: var(--quill-dark-toolbar-color); + } + + .ql-snow .ql-fill, + .ql-snow .ql-stroke.ql-fill { + fill: var(--quill-dark-toolbar-color); + } + + .ql-snow.ql-toolbar button:is(:focus, :hover) { + color: var(--quill-dark-toolbar-hover-color); + } + + .ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke, + .ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter, + .ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke, + .ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke-miter, + .ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke, + .ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter, + .ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke, + .ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke-miter, + .ql-snow .ql-toolbar button.ql-active .ql-stroke, + .ql-snow .ql-toolbar button.ql-active .ql-stroke-miter, + .ql-snow .ql-toolbar button:focus .ql-stroke, + .ql-snow .ql-toolbar button:focus .ql-stroke-miter, + .ql-snow .ql-toolbar button:hover .ql-stroke, + .ql-snow .ql-toolbar button:hover .ql-stroke-miter, + .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke, + .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter, + .ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke, + .ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke-miter, + .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke, + .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter, + .ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke, + .ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke-miter, + .ql-snow.ql-toolbar button.ql-active .ql-stroke, + .ql-snow.ql-toolbar button.ql-active .ql-stroke-miter, + .ql-snow.ql-toolbar button:focus .ql-stroke, + .ql-snow.ql-toolbar button:focus .ql-stroke-miter, + .ql-snow.ql-toolbar button:hover .ql-stroke, + .ql-snow.ql-toolbar button:hover .ql-stroke-miter { + stroke: var(--quill-dark-toolbar-hover-color); + } + + .ql-snow.ql-toolbar button:is(:focus, :hover) .ql-fill, + .ql-snow.ql-toolbar button:is(:focus, :hover) .ql-stroke.ql-fill, + .ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-fill, + .ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill, + .ql-snow .ql-toolbar .ql-picker-item:hover .ql-fill, + .ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill, + .ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-fill, + .ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill, + .ql-snow .ql-toolbar .ql-picker-label:hover .ql-fill, + .ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill, + .ql-snow .ql-toolbar button.ql-active .ql-fill, + .ql-snow .ql-toolbar button.ql-active .ql-stroke.ql-fill, + .ql-snow .ql-toolbar button:focus .ql-fill, + .ql-snow .ql-toolbar button:focus .ql-stroke.ql-fill, + .ql-snow .ql-toolbar button:hover .ql-fill, + .ql-snow .ql-toolbar button:hover .ql-stroke.ql-fill, + .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-fill, + .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill, + .ql-snow.ql-toolbar .ql-picker-item:hover .ql-fill, + .ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill, + .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-fill, + .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill, + .ql-snow.ql-toolbar .ql-picker-label:hover .ql-fill, + .ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill, + .ql-snow.ql-toolbar button.ql-active .ql-fill, + .ql-snow.ql-toolbar button.ql-active .ql-stroke.ql-fill, + .ql-snow.ql-toolbar button:focus .ql-fill, + .ql-snow.ql-toolbar button:focus .ql-stroke.ql-fill, + .ql-snow.ql-toolbar button:hover .ql-fill, + .ql-snow.ql-toolbar button:hover .ql-stroke.ql-fill { + fill: var(--quill-dark-toolbar-hover-color); + } + + .ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options { + background-color: var(--quill-dark-toolbar-dropdown-bg); + border-color: var(--quill-dark-toolbar-dropdown-border-color); + } + + .ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label { + border-color: var(--quill-dark-button-focus-border-color); + } + + .ql-snow .ql-picker-options .ql-picker-item { + color: var(--quill-dark-toolbar-color); + } + + .ql-snow .ql-toolbar .ql-picker-item.ql-selected, + .ql-snow .ql-toolbar .ql-picker-item:hover, + .ql-snow .ql-toolbar .ql-picker-label.ql-active, + .ql-snow .ql-toolbar .ql-picker-label:hover, + .ql-snow .ql-toolbar button.ql-active, + .ql-snow .ql-toolbar button:focus, + .ql-snow .ql-toolbar button:hover, + .ql-snow.ql-toolbar .ql-picker-item.ql-selected, + .ql-snow.ql-toolbar .ql-picker-item:hover, + .ql-snow.ql-toolbar .ql-picker-label.ql-active, + .ql-snow.ql-toolbar .ql-picker-label:hover, + .ql-snow.ql-toolbar button.ql-active, + .ql-snow.ql-toolbar button:focus, + .ql-snow.ql-toolbar button:hover { + color: var(--quill-dark-toolbar-selected-color); + } +} + +@media (prefers-color-scheme: dark) { + :is(.ql-container, .ql-toolbar).ql-snow { + border-color: var(--input-dark-border-color); + } + + .ql-editor { + background-color: var(--input-dark-background-color); + color: var(--input-dark-color); + } + + .ql-toolbar.ql-snow { + background-color: var(--quill-dark-toolbar-bg); + } + + .ql-toolbar.ql-snow .ql-picker-label { + color: var(--quill-dark-toolbar-color); + } + + .ql-snow .ql-stroke { + stroke: var(--quill-dark-toolbar-color); + } + + .ql-snow .ql-fill, + .ql-snow .ql-stroke.ql-fill { + fill: var(--quill-dark-toolbar-color); + } + + .ql-snow.ql-toolbar button:is(:focus, :hover) { + color: var(--quill-dark-toolbar-hover-color); + } + + .ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke, + .ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter, + .ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke, + .ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke-miter, + .ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke, + .ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter, + .ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke, + .ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke-miter, + .ql-snow .ql-toolbar button.ql-active .ql-stroke, + .ql-snow .ql-toolbar button.ql-active .ql-stroke-miter, + .ql-snow .ql-toolbar button:focus .ql-stroke, + .ql-snow .ql-toolbar button:focus .ql-stroke-miter, + .ql-snow .ql-toolbar button:hover .ql-stroke, + .ql-snow .ql-toolbar button:hover .ql-stroke-miter, + .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke, + .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter, + .ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke, + .ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke-miter, + .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke, + .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter, + .ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke, + .ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke-miter, + .ql-snow.ql-toolbar button.ql-active .ql-stroke, + .ql-snow.ql-toolbar button.ql-active .ql-stroke-miter, + .ql-snow.ql-toolbar button:focus .ql-stroke, + .ql-snow.ql-toolbar button:focus .ql-stroke-miter, + .ql-snow.ql-toolbar button:hover .ql-stroke, + .ql-snow.ql-toolbar button:hover .ql-stroke-miter { + stroke: var(--quill-dark-toolbar-hover-color); + } + + .ql-snow.ql-toolbar button:is(:focus, :hover) .ql-fill, + .ql-snow.ql-toolbar button:is(:focus, :hover) .ql-stroke.ql-fill, + .ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-fill, + .ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill, + .ql-snow .ql-toolbar .ql-picker-item:hover .ql-fill, + .ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill, + .ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-fill, + .ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill, + .ql-snow .ql-toolbar .ql-picker-label:hover .ql-fill, + .ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill, + .ql-snow .ql-toolbar button.ql-active .ql-fill, + .ql-snow .ql-toolbar button.ql-active .ql-stroke.ql-fill, + .ql-snow .ql-toolbar button:focus .ql-fill, + .ql-snow .ql-toolbar button:focus .ql-stroke.ql-fill, + .ql-snow .ql-toolbar button:hover .ql-fill, + .ql-snow .ql-toolbar button:hover .ql-stroke.ql-fill, + .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-fill, + .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill, + .ql-snow.ql-toolbar .ql-picker-item:hover .ql-fill, + .ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill, + .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-fill, + .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill, + .ql-snow.ql-toolbar .ql-picker-label:hover .ql-fill, + .ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill, + .ql-snow.ql-toolbar button.ql-active .ql-fill, + .ql-snow.ql-toolbar button.ql-active .ql-stroke.ql-fill, + .ql-snow.ql-toolbar button:focus .ql-fill, + .ql-snow.ql-toolbar button:focus .ql-stroke.ql-fill, + .ql-snow.ql-toolbar button:hover .ql-fill, + .ql-snow.ql-toolbar button:hover .ql-stroke.ql-fill { + fill: var(--quill-dark-toolbar-hover-color); + } + + .ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options { + background-color: var(--quill-dark-toolbar-dropdown-bg); + border-color: var(--quill-dark-toolbar-dropdown-border-color); + } + + .ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label { + border-color: var(--quill-dark-button-focus-border-color); + } + + .ql-snow .ql-picker-options .ql-picker-item { + color: var(--quill-dark-toolbar-color); + } + + .ql-snow .ql-toolbar .ql-picker-item.ql-selected, + .ql-snow .ql-toolbar .ql-picker-item:hover, + .ql-snow .ql-toolbar .ql-picker-label.ql-active, + .ql-snow .ql-toolbar .ql-picker-label:hover, + .ql-snow .ql-toolbar button.ql-active, + .ql-snow .ql-toolbar button:focus, + .ql-snow .ql-toolbar button:hover, + .ql-snow.ql-toolbar .ql-picker-item.ql-selected, + .ql-snow.ql-toolbar .ql-picker-item:hover, + .ql-snow.ql-toolbar .ql-picker-label.ql-active, + .ql-snow.ql-toolbar .ql-picker-label:hover, + .ql-snow.ql-toolbar button.ql-active, + .ql-snow.ql-toolbar button:focus, + .ql-snow.ql-toolbar button:hover { + color: var(--quill-dark-toolbar-selected-color); + } +} diff --git a/resources/css/select.css b/resources/css/select.css index 1e0e80f..cb1840d 100644 --- a/resources/css/select.css +++ b/resources/css/select.css @@ -4,12 +4,11 @@ overflow: auto; } - .form-select + .trailing-addon, - .form-select + .trailing-icon { - right: 1.5rem; + .form-select + :is(.trailing-inline-addon, .trailing-icon) { + @apply right-5; } - .form-select.has-trailing-icon { - padding-right: 4rem; + .form-select:has(+ .trailing-icon) { + @apply pr-12; } } diff --git a/resources/css/switch-toggle.css b/resources/css/switch-toggle.css index 7c1f2a9..d387caf 100644 --- a/resources/css/switch-toggle.css +++ b/resources/css/switch-toggle.css @@ -1,418 +1,185 @@ @layer components { - .switch-toggle { + .switch-toggle-container { @apply relative - flex-shrink-0 inline-flex - rounded-full - cursor-pointer - focus:outline-none - focus:ring-2 - focus:ring-offset-2 - focus:ring-blue-500; + items-center + cursor-pointer; } - .switch-toggle-simple { - @apply h-6 - w-11 - border-2 - border-transparent - transition-colors - ease-in-out - duration-200 - bg-slate-200; - } - - .switch-toggle-simple.pressed { - @apply bg-blue-600; - } + .switch-toggle__label { + @apply text-sm; - .switch-toggle-short { - @apply items-center - justify-center - h-5 - w-10; + font-weight: var(--switch-toggle-label-font-weight); + color: var(--switch-toggle-label-color); } - .switch-toggle-button { - @apply inline-block - h-5 - w-5 - rounded-full - bg-white - shadow - transform - ring-0 - transition - ease-in-out - duration-200 - translate-x-0; + .switch-toggle__label--left { + @apply mr-3; } - .switch-toggle-button.pressed { - @apply translate-x-5; + .switch-toggle__label--right { + @apply ml-3; } - .switch-toggle-short-bg { - @apply absolute - h-4 - w-9 - mx-auto - rounded-full - transition-colors - ease-in-out - duration-200 - bg-gray-200; - } + .switch-toggle { + @apply relative + rounded-full; - .switch-toggle-short-bg.pressed { - @apply bg-blue-600; + background-color: var(--switch-toggle-bg); + width: var(--switch-toggle-width); + height: var(--switch-toggle-height); } - .switch-toggle-short-button { + .switch-toggle:after { @apply absolute - left-0 - inline-block - h-5 - w-5 + bg-white border - border-slate-200 + border-slate-300 rounded-full - bg-white - shadow - transform - ring-0 - transition-transform - ease-in-out - duration-200 - translate-x-0; - } + transition-all; + content: ''; + top: 2px; + left: 2px; - .switch-toggle-short-button.pressed { - @apply translate-x-5; + width: var(--switch-toggle-circle-size); + height: var(--switch-toggle-circle-size); } - .switch-toggle.disabled, - .switch-toggle[disabled] { - @apply cursor-not-allowed; - } + .peer:focus ~ .switch-toggle { + @apply outline-none + ring-4; - .switch-toggle.disabled .switch-toggle-simple, - .switch-toggle[disabled] .switch-toggle-simple { - @apply opacity-75; + --tw-ring-color: var(--switch-toggle-ring-color); } - .switch-toggle.disabled.switch-toggle-simple, - .switch-toggle[disabled].switch-toggle-simple, - .switch-toggle.disabled .switch-toggle-short-bg, - .switch-toggle[disabled] .switch-toggle-short-bg { - @apply bg-gray-200; + .peer:checked ~ .switch-toggle { + background-color: var(--switch-toggle-bg-checked); } - .switch-toggle.disabled.switch-toggle-simple.pressed, - .switch-toggle[disabled].switch-toggle-simple.pressed, - .switch-toggle.disabled .switch-toggle-short-bg.pressed, - .switch-toggle[disabled] .switch-toggle-short-bg.pressed { - @apply bg-blue-400 opacity-75; + .peer:checked ~ .switch-toggle:after { + @apply translate-x-full + border-white; } - .switch-toggle.disabled .switch-toggle-button, - .switch-toggle.disabled .switch-toggle-short-button, - .switch-toggle[disabled] .switch-toggle-button, - .switch-toggle[disabled] .switch-toggle-short-button { - @apply bg-slate-100; + .peer:disabled ~ .switch-toggle { + @apply cursor-not-allowed opacity-50; } - /* - * responsive switch variants. - * doing it this way because the selectors are not simple, and tailwind - * appends the size prefixes to the last selector, which is not desired. - */ + .peer:disabled ~ .switch-toggle__label { + @apply cursor-not-allowed opacity-75; - /* simple - sm */ - .switch-toggle--sm.switch-toggle-simple { - @apply h-5 w-10; + color: var(--switch-toggle-disabled-label-color); } - .switch-toggle--sm.switch-toggle-simple .switch-toggle-button { - @apply h-4 w-4; - } + .switch-toggle__icon { + @apply absolute + hidden + z-[1]; - .switch-toggle--sm.switch-toggle-simple .switch-toggle-button.pressed { - @apply translate-x-5; + top: 5px; + width: var(--switch-toggle-icon-size); + height: var(--switch-toggle-icon-size); } - /* simple - base */ - .switch-toggle--base.switch-toggle-simple { - @apply h-6 w-11; + .switch-toggle__icon--off { + @apply inline-block; + left: 5px; } - .switch-toggle--base.switch-toggle-simple .switch-toggle-button { - @apply h-5 w-5; + .switch-toggle__icon--on { + right: 5px; + color: var(--switch-toggle-bg-checked); } - .switch-toggle--base.switch-toggle-simple .switch-toggle-button.pressed { - @apply translate-x-5; + .peer:checked ~ .switch-toggle .switch-toggle__icon--off { + @apply hidden; } - /* simple - lg */ - .switch-toggle--lg.switch-toggle-simple { - @apply h-8 w-14; + .peer:checked ~ .switch-toggle .switch-toggle__icon--on { + @apply inline-block; } - .switch-toggle--lg.switch-toggle-simple .switch-toggle-button { - @apply h-7 w-7; + .switch-toggle--short { + height: var(--switch-toggle-short-height); } - .switch-toggle--lg.switch-toggle-simple .switch-toggle-button.pressed { - @apply translate-x-6; + .switch-toggle--short:after { + top: -3px; + left: -1px; } - /* short - lg */ - .switch-toggle--lg.switch-toggle-short { - @apply h-7 w-12; + .peer:focus ~ .switch-toggle--short { + @apply ring-2 ring-offset-4; } - .switch-toggle--lg.switch-toggle-short .switch-toggle-short-bg { - @apply h-5 w-11; + .peer:checked ~ .switch-toggle--short:after { + left: 5px; + @apply border-slate-300; } +} - .switch-toggle--lg.switch-toggle-short .switch-toggle-short-button { - @apply h-6 w-6; +@layer utilities { + .switch-toggle--sm { + width: var(--switch-toggle-sm-width); + height: var(--switch-toggle-sm-height); } - .switch-toggle--lg.switch-toggle-short .switch-toggle-short-button.pressed { - @apply translate-x-6; + .switch-toggle--sm:after { + width: var(--switch-toggle-sm-circle-size); + height: var(--switch-toggle-sm-circle-size); } - @screen sm { - /* simple - sm */ - .sm\:switch-toggle--sm.switch-toggle-simple { - @apply h-5 w-10; - } - - .sm\:switch-toggle--sm.switch-toggle-simple .switch-toggle-button { - @apply h-4 w-4; - } - - .sm\:switch-toggle--sm.switch-toggle-simple .switch-toggle-button.pressed { - @apply translate-x-5; - } - - /* simple - base */ - .sm\:switch-toggle--base.switch-toggle-simple { - @apply h-6 w-11; - } - - .sm\:switch-toggle--base.switch-toggle-simple .switch-toggle-button { - @apply h-5 w-5; - } - - .sm\:switch-toggle--base.switch-toggle-simple .switch-toggle-button.pressed { - @apply translate-x-5; - } - - /* simple - lg */ - .sm\:switch-toggle--lg.switch-toggle-simple { - @apply h-8 w-14; - } - - .sm\:switch-toggle--lg.switch-toggle-simple .switch-toggle-button { - @apply h-7 w-7; - } - - .sm\:switch-toggle--lg.switch-toggle-simple .switch-toggle-button.pressed { - @apply translate-x-6; - } - - /* short - lg */ - .sm\:switch-toggle--lg.switch-toggle-short { - @apply h-7 w-12; - } - - .sm\:switch-toggle--lg.switch-toggle-short .switch-toggle-short-bg { - @apply h-5 w-11; - } - - .sm\:switch-toggle--lg.switch-toggle-short .switch-toggle-short-button { - @apply h-6 w-6; - } + .switch-toggle--sm .switch-toggle__icon { + top: 4px; + width: var(--switch-toggle-sm-icon-size); + height: var(--switch-toggle-sm-icon-size); + } - .sm\:switch-toggle--lg.switch-toggle-short .switch-toggle-short-button.pressed { - @apply translate-x-6; - } + .switch-toggle--sm .switch-toggle__icon--off { + left: 4px; } - @screen md { - /* simple - sm */ - .md\:switch-toggle--sm.switch-toggle-simple { - @apply h-5 w-10; - } + .switch-toggle--sm .switch-toggle__icon--on { + right: 4px; + } - .md\:switch-toggle--sm.switch-toggle-simple .switch-toggle-button { - @apply h-4 w-4; - } + .switch-toggle--md { + width: var(--switch-toggle-width); + height: var(--switch-toggle-height); + } - .md\:switch-toggle--sm.switch-toggle-simple .switch-toggle-button.pressed { - @apply translate-x-5; - } + .switch-toggle--md:after { + width: var(--switch-toggle-circle-size); + height: var(--switch-toggle-circle-size); + } - /* simple - base */ - .md\:switch-toggle--base.switch-toggle-simple { - @apply h-6 w-11; - } + .switch-toggle--lg { + width: var(--switch-toggle-lg-width); + height: var(--switch-toggle-lg-height); + } - .md\:switch-toggle--base.switch-toggle-simple .switch-toggle-button { - @apply h-5 w-5; - } + .switch-toggle--lg:after { + width: var(--switch-toggle-lg-circle-size); + height: var(--switch-toggle-lg-circle-size); + @apply top-0.5; + left: 3px; + } - .md\:switch-toggle--base.switch-toggle-simple .switch-toggle-button.pressed { - @apply translate-x-5; - } + .peer:checked ~ .switch-toggle--lg:after { + left: 5px; + } - /* simple - lg */ - .md\:switch-toggle--lg.switch-toggle-simple { - @apply h-8 w-14; - } + .switch-toggle--lg .switch-toggle__icon { + top: 6px; + width: var(--switch-toggle-lg-icon-size); + height: var(--switch-toggle-lg-icon-size); + } - .md\:switch-toggle--lg.switch-toggle-simple .switch-toggle-button { - @apply h-7 w-7; - } + .switch-toggle--lg .switch-toggle__icon--off { + left: 6px; + } - .md\:switch-toggle--lg.switch-toggle-simple .switch-toggle-button.pressed { - @apply translate-x-6; - } - - /* short - lg */ - .md\:switch-toggle--lg.switch-toggle-short { - @apply h-7 w-12; - } - - .md\:switch-toggle--lg.switch-toggle-short .switch-toggle-short-bg { - @apply h-5 w-11; - } - - .md\:switch-toggle--lg.switch-toggle-short .switch-toggle-short-button { - @apply h-6 w-6; - } - - .md\:switch-toggle--lg.switch-toggle-short .switch-toggle-short-button.pressed { - @apply translate-x-6; - } - } - - @screen lg { - /* simple - sm */ - .lg\:switch-toggle--sm.switch-toggle-simple { - @apply h-5 w-10; - } - - .lg\:switch-toggle--sm.switch-toggle-simple .switch-toggle-button { - @apply h-4 w-4; - } - - .lg\:switch-toggle--sm.switch-toggle-simple .switch-toggle-button.pressed { - @apply translate-x-5; - } - - /* simple - base */ - .lg\:switch-toggle--base.switch-toggle-simple { - @apply h-6 w-11; - } - - .lg\:switch-toggle--base.switch-toggle-simple .switch-toggle-button { - @apply h-5 w-5; - } - - .lg\:switch-toggle--base.switch-toggle-simple .switch-toggle-button.pressed { - @apply translate-x-5; - } - - /* simple - lg */ - .lg\:switch-toggle--lg.switch-toggle-simple { - @apply h-8 w-14; - } - - .lg\:switch-toggle--lg.switch-toggle-simple .switch-toggle-button { - @apply h-7 w-7; - } - - .lg\:switch-toggle--lg.switch-toggle-simple .switch-toggle-button.pressed { - @apply translate-x-6; - } - - /* short - lg */ - .lg\:switch-toggle--lg.switch-toggle-short { - @apply h-7 w-12; - } - - .lg\:switch-toggle--lg.switch-toggle-short .switch-toggle-short-bg { - @apply h-5 w-11; - } - - .lg\:switch-toggle--lg.switch-toggle-short .switch-toggle-short-button { - @apply h-6 w-6; - } - - .lg\:switch-toggle--lg.switch-toggle-short .switch-toggle-short-button.pressed { - @apply translate-x-6; - } - } - - @screen xl { - /* simple - sm */ - .xl\:switch-toggle--sm.switch-toggle-simple { - @apply h-5 w-10; - } - - .xl\:switch-toggle--sm.switch-toggle-simple .switch-toggle-button { - @apply h-4 w-4; - } - - .xl\:switch-toggle--sm.switch-toggle-simple .switch-toggle-button.pressed { - @apply translate-x-5; - } - - /* simple - base */ - .xl\:switch-toggle--base.switch-toggle-simple { - @apply h-6 w-11; - } - - .xl\:switch-toggle--base.switch-toggle-simple .switch-toggle-button { - @apply h-5 w-5; - } - - .xl\:switch-toggle--base.switch-toggle-simple .switch-toggle-button.pressed { - @apply translate-x-5; - } - - /* simple - lg */ - .xl\:switch-toggle--lg.switch-toggle-simple { - @apply h-8 w-14; - } - - .xl\:switch-toggle--lg.switch-toggle-simple .switch-toggle-button { - @apply h-7 w-7; - } - - .xl\:switch-toggle--lg.switch-toggle-simple .switch-toggle-button.pressed { - @apply translate-x-6; - } - - /* short - lg */ - .xl\:switch-toggle--lg.switch-toggle-short { - @apply h-7 w-12; - } - - .xl\:switch-toggle--lg.switch-toggle-short .switch-toggle-short-bg { - @apply h-5 w-11; - } - - .xl\:switch-toggle--lg.switch-toggle-short .switch-toggle-short-button { - @apply h-6 w-6; - } - - .xl\:switch-toggle--lg.switch-toggle-short .switch-toggle-short-button.pressed { - @apply translate-x-6; - } + .switch-toggle--lg .switch-toggle__icon--on { + right: 6px; } } diff --git a/resources/css/tree-select.css b/resources/css/tree-select.css index 2692818..30c5677 100644 --- a/resources/css/tree-select.css +++ b/resources/css/tree-select.css @@ -1,9 +1,69 @@ @layer components { - [data-level="1"] .tree-select-option__container { - @apply pl-8; + .tree-select__has-child-icon { + @apply w-4 + h-4 + flex + items-center + justify-center + opacity-50 + hover:opacity-100; } - [data-level="1"] .tree-select-option__label { - @apply py-2.5; + .tree-select__has-child-icon svg { + @apply h-4 w-4; + } + + .tree-select__has-child-icon.expanded svg { + @apply transform + rotate-90; + } + + .tree-select__option + .tree-select__children .tree-select__option { + padding-left: calc((var(--level) * theme('spacing.5')) + theme('spacing.5')); + } + + .tree-select__children { + @apply relative; + } + + .tree-select__children:before { + @apply absolute + top-0 + bottom-5 + left-0 + border-l + transition-colors + z-[2]; + + content: ''; + border-style: var(--tree-select-child-border-style); + border-color: var(--tree-select-child-border-color); + } + + .tree-select__option + .tree-select__children:before { + left: calc((var(--level) * theme('spacing.6')) + theme('spacing.6')); + } + + .tree-select__children .tree-select__option:before { + @apply absolute + transition-colors + border-t; + + content: ''; + border-style: var(--tree-select-child-border-style); + width: 1rem; + left: calc(((var(--level) - 1) * theme('spacing.6')) + theme('spacing.6')); + border-color: var(--tree-select-child-border-color); + } + + .tree-select__option:not(:has(+ .tree-select__children)):before { + width: 1.6rem; + } + + .tree-select__children:hover:before, + .tree-select__children.group:hover :is(.tree-select__children, .tree-select__option):before, + .tree-select__children:has(:is(.custom-select__option--active, .custom-select__option--selected)) :is(.tree-select__children, .tree-select__option):before, + .tree-select__children:has(:is(.custom-select__option--active, .custom-select__option--selected)):before { + border-color: var(--tree-select-child-hover-border-color); } } diff --git a/resources/css/variables.css b/resources/css/variables.css new file mode 100644 index 0000000..ef146ea --- /dev/null +++ b/resources/css/variables.css @@ -0,0 +1,207 @@ +:root { + /* addons */ + --leading-addon-background-color: theme('colors.slate.50'); + --leading-addon-color: theme('colors.slate.400'); + --leading-icon-color: theme('colors.slate.400'); + --input-error-leading-icon-color: theme('colors.red.400'); + --inline-addon-pl: theme('spacing.16'); + --trailing-inline-addon-pr: theme('spacing.12'); + --clear-button-hover-bg: theme('colors.slate.200'); + --clear-button-hover-color: theme('colors.slate.600'); + + --leading-addon-dark-background-color: theme('colors.slate.500'); + --leading-addon-dark-color: theme('colors.slate.300'); + --clear-button-dark-hover-bg: theme('colors.slate.500'); + --clear-button-dark-hover-color: theme('colors.slate.300'); + + /* checkbox group */ + --fc-checkbox-grid-cols: 3; + --fc-checkbox-grid-gap: theme('spacing.4'); + + /* choice */ + --choice-size: theme("width.4"); + --choice-color: theme("colors.blue.600"); + --choice-bg: theme("colors.white"); + --choice-ring-color: theme("colors.blue.500"); + --choice-label-font-weight: theme("fontWeight.medium"); + --choice-label-color: theme("colors.slate.700"); + --choice-description-color: theme("colors.slate.500"); + --choice-disabled-bg: theme("colors.slate.100"); + + --choice-dark-ring-offset-color: theme("colors.slate.800"); + --choice-dark-label-color: theme("colors.slate.300"); + --choice-dark-ring-color: theme("colors.blue.600"); + + /* custom select */ + --custom-select-menu-bg: theme('colors.white'); + --custom-select-menu-color: theme('colors.slate.600'); + --custom-select-menu-border-color: theme('colors.slate.200'); + --custom-select-menu-border-radius: theme('borderRadius.md'); + --custom-select-option-active-bg: theme('colors.blue.300'); + --custom-select-option-active-color: theme('colors.slate.900'); + --custom-select-option-selected-font-weight: theme('fontWeight.semibold'); + --custom-select-option-selected-bg: theme('colors.blue.100'); + --custom-select-option-selected-color: theme('colors.slate.900'); + --custom-select-max-menu-height: 345px; + --custom-select-button-token-bg: theme('colors.blue.500'); + --custom-select-button-token-color: theme('colors.white'); + --custom-select-button-token-hover-bg: theme('colors.blue.600'); + --custom-select-opt-group-font-weight: theme('fontWeight.bold'); + --custom-select-opt-group-color: theme('colors.slate.800'); + --custom-select-opt-group-bg: theme('colors.slate.100'); + --custom-select-opt-group-border-color: theme('colors.slate.300'); + --custom-select-selected-icon-color: theme('colors.green.500'); + --custom-select-selected-icon-hover-color: theme('colors.green.600'); + --custom-select-search-border-color: theme('colors.slate.300'); + + --custom-select-dark-menu-color: theme('colors.slate.400'); + --custom-select-dark-menu-bg: theme('colors.slate.700'); + --custom-select-dark-menu-border-color: theme('colors.slate.600'); + --custom-select-dark-opt-group-bg: theme('colors.slate.600'); + --custom-select-dark-opt-group-border-color: theme('colors.slate.500'); + --custom-select-dark-opt-group-color: theme('colors.slate.400'); + --custom-select-dark-search-border-color: var(--custom-select-dark-opt-group-border-color); + --custom-select-dark-option-selected-bg: theme('colors.slate.600'); + --custom-select-dark-option-selected-color: theme('colors.slate.400'); + --custom-select-dark-option-active-bg: theme('colors.slate.500'); + --custom-select-dark-option-active-color: theme('colors.slate.300'); + --custom-select-dark-selected-icon-hover-color: theme('colors.green.500'); + + /* tree select */ + --tree-select-child-border-style: dashed; + --tree-select-child-border-color: theme('colors.slate.400'); + --tree-select-child-hover-border-color: theme('colors.slate.500'); + + --tree-select-dark-child-border-color: theme('colors.slate.400'); + --tree-select-dark-child-hover-border-color: theme('colors.slate.300'); + + /* input */ + --input-padding-y: theme('spacing[2.5]'); + --input-padding-x: theme('spacing.3'); + --input-padding-y-sm: theme('spacing.2'); + --input-padding-x-sm: theme('spacing.2'); + --input-padding-y-lg: theme('spacing.4'); + --input-padding-x-lg: theme('spacing.4'); + --input-background-color: theme('colors.white'); + --input-border-color: theme('colors.slate.300'); + --input-placeholder-color: theme('colors.slate.400'); + --input-border-radius: theme('borderRadius.lg'); + --input-focus-border-color: theme('colors.blue.300'); + --input-color: theme('colors.slate.900'); + --input-disabled-bg-color: theme('colors.slate.100'); + --input-disabled-border-color: theme('colors.slate.300'); + + --input-dark-background-color: theme('colors.slate.700'); + --input-dark-border-color: theme('colors.slate.600'); + --input-dark-color: theme('colors.white'); + --input-dark-placeholder-color: theme('colors.slate.400'); + --input-dark-disabled-bg-color: theme('colors.slate.500'); + --input-dark-disabled-border-color: theme('colors.slate.600'); + --input-dark-disabled-color: theme('colors.slate.300'); + + --input-error-label-color: theme('colors.red.600'); + --input-error-border-color: theme('colors.red.500'); + --input-error-color: theme('colors.red.900'); + --input-error-placeholder-color: theme('colors.red.500'); + --input-error-bg-color: theme('colors.red.50'); + --input-error-focus-border-color: theme('colors.red.500'); + --input-error-message-color: theme('colors.red.500'); + + --input-error-dark-label-color: theme('colors.red.500'); + --input-error-dark-color: theme('colors.red.500'); + --input-error-dark-placeholder-color: theme('colors.red.400'); + --input-error-dark-border-color: theme('colors.red.500'); + + /* label */ + --label-text-size: theme('fontSize.base'); + --label-font-weight: theme('fontWeight.medium'); + --label-line-height: theme('lineHeight.5'); + --label-color: theme('colors.slate.700'); + + --label-dark-color: theme('colors.slate.300'); + + /* form group */ + --form-group-hint-text-size: theme('fontSize.sm'); + --form-group-hint-line-height: theme('lineHeight.5'); + --form-group-hint-color: theme('colors.slate.500'); + --form-group-border-color: theme('colors.slate.200'); + + --form-group-dark-border-color: theme('colors.slate.600'); + + /* file upload */ + --file-upload-button-bg: theme('colors.slate.100'); + --file-upload-button-color: theme('colors.slate.600'); + --file-upload-button-font-weight: theme('fontWeight.medium'); + --file-upload-button-disabled-bg: theme('colors.slate.200'); + --file-upload-badge-bg: theme('colors.green.100'); + --file-upload-badge-color: theme('colors.green.800'); + --file-upload-percent-color: theme('colors.green.600'); + --file-upload-progress-bg: theme('colors.green.200'); + --file-upload-progress-filled-bg: theme('colors.green.500'); + --file-upload-progress-height: theme('height.2'); + + --file-upload-button-error-bg: theme('colors.red.100'); + --file-upload-button-error-color: theme('colors.red.600'); + + --file-upload-button-dark-bg: theme('colors.slate.600'); + --file-upload-button-dark-color: theme('colors.white'); + --file-upload-button-dark-disabled-bg: theme('colors.slate.600'); + --file-upload-button-error-dark-color: theme('colors.red.500'); + + /* filepond */ + --filepond-border-style: dashed; + --filepond-border-width: theme('borderWidth.2'); + --filepond-bg: theme('colors.transparent'); + --filepond-hover-bg: theme('colors.slate.50'); + --filepond-label-link-color: theme('colors.blue.600'); + --filepond-desc-color: theme('colors.slate.500'); + + --filepond-dark-hover-bg: theme('colors.slate.600'); + + /* switch toggle */ + --switch-toggle-label-font-weight: theme('fontWeight.medium'); + --switch-toggle-label-color: theme('colors.slate.900'); + --switch-toggle-bg: theme('colors.slate.200'); + --switch-toggle-bg-checked: theme('colors.blue.600'); + --switch-toggle-ring-color: theme('colors.blue.300'); + --switch-toggle-width: theme('width.11'); + --switch-toggle-height: theme('height.6'); + --switch-toggle-short-height: theme('height[3.5]'); + --switch-toggle-circle-size: theme('width.5'); + --switch-toggle-disabled-label-color: theme('colors.slate.400'); + --switch-toggle-icon-size: theme('width[3.5]'); + + --switch-toggle-sm-width: theme('width.9'); + --switch-toggle-sm-height: theme('height.5'); + --switch-toggle-sm-circle-size: theme('width.4'); + --switch-toggle-sm-icon-size: theme('width.3'); + + --switch-toggle-lg-width: theme('width.14'); + --switch-toggle-lg-height: theme('height.7'); + --switch-toggle-lg-circle-size: theme('width.6'); + --switch-toggle-lg-icon-size: theme('width.4'); + + --switch-toggle-dark-label-color: theme('colors.slate.300'); + --switch-toggle-dark-ring-color: theme('colors.blue.800'); + --switch-toggle-dark-bg: theme('colors.slate.700'); + --switch-toggle-dark-border-color: theme('colors.slate.600'); + --switch-toggle-dark-disabled-label-color: theme('colors.slate.500'); + --switch-toggle-dark-ring-offset-color: theme('colors.slate.800'); + + /* quill */ + --quill-dark-toolbar-bg: theme('colors.slate.600'); + --quill-dark-toolbar-color: theme('colors.slate.300'); + --quill-dark-toolbar-hover-color: theme('colors.slate.400'); + --quill-dark-toolbar-dropdown-bg: theme('colors.slate.700'); + --quill-dark-toolbar-dropdown-border-color: theme('colors.slate.600'); + --quill-dark-button-focus-border-color: theme('colors.slate.700'); + --quill-dark-toolbar-selected-color: theme('colors.slate.400'); + + /* flatpickr */ + --flatpickr-header-bg: theme('colors.blue.600'); + --flatpickr-header-color: theme('colors.white'); + --flatpickr-nav-button-hover-color: theme('colors.slate.800'); + --flatpickr-nav-button-hover-bg: theme('colors.slate.300'); + --flatpickr-current-day-color: theme('colors.slate.500'); + --flatpickr-current-day-bg: theme('colors.slate.300'); +} diff --git a/resources/js/components/custom-select-option.js b/resources/js/components/custom-select-option.js deleted file mode 100644 index b7ce8f3..0000000 --- a/resources/js/components/custom-select-option.js +++ /dev/null @@ -1,12 +0,0 @@ -import selectOptionMixin from '../mixins/select-option'; - -export default options => ({ - ...selectOptionMixin, - ...options, - _optionComponentName: 'custom-select-option', - _optionSelector: '.custom-select-option__container', - - init() { - this._init(); - }, -}); diff --git a/resources/js/components/custom-select.js b/resources/js/components/custom-select.js index 125771d..30e5b9f 100644 --- a/resources/js/components/custom-select.js +++ b/resources/js/components/custom-select.js @@ -1,79 +1,136 @@ -import selectMixins from '../mixins/select'; - -export default options => ({ - ...selectMixins, - ...options, - _componentName: 'custom-select', - _focusableElementSelector: '.custom-select-option:not(.disabled):not(.select-no-results):not(.custom-select-option--opt-group)', - _optionElementSelector: '.custom-select-option:not(.select-no-results):not(.custom-select-option--opt-group)', - - get hasValue() { - return this.multiple - ? this.value.length > 0 - : this.value !== '' && this.value !== null; - }, - - get hasValueAndCanClear() { - if (! this.optional) { - return false; +import { generateContext } from '../util/customSelectContext'; +import selectPopper from '../mixins/selectPopper'; +import { + buttonDirective, + clearButtonDirective, + labelDirective, + optionsDirective, + optionDirective, + searchDirective, + selectData, + tokenDirective, +} from '../mixins/select'; +import { rootMagic, optionMagic } from '../mixins/selectMagic'; + +export default function (Alpine) { + Alpine.data('customSelect', config => { + return { + ...selectPopper, + + ...selectData(config.__el, Alpine, config), + + __generateContext(el, Alpine, config) { + return generateContext({ + multiple: this.__isMultiple, + orientation: this.__orientation, + __wire: config.__wire, + __wireSearch: Alpine.bound(el, 'livewire-search'), + __config: config.__config ?? {}, + Alpine, + }); + }, } - - if (this.disabled) { - return false; - } - - return this.hasValue; - }, - - get searchPlaceholder() { - if (this.multiple) { - if (! Array.isArray(this.value)) { - return this.placeholder; - } - - return this.value.length - ? null - : this.placeholder; + }); + + Alpine.directive('custom-select', (el, directive, { cleanup }) => { + switch (directive.value) { + case 'button': + handleButton(el, Alpine); + break; + case 'label': + handleLabel(el, Alpine); + break; + case 'clear': + handleClearButton(el, Alpine); + break; + case 'options': + handleOptions(el, Alpine); + break; + case 'option': + handleOption(el, Alpine); + + // We need to notify the context that the option has left the DOM. + cleanup(() => { + const parent = el.closest('[x-data]'); + + parent && Alpine.$data(parent).__context.destroyItem(el); + }); + + break; + case 'search': + handleSearch(el, Alpine); + break; + case 'token': + handleToken(el, Alpine); + break; + + default: + throw new Error(`Unknown custom-select directive value: ${directive.value}`); } - - return this.value !== '' && this.value !== null - ? this.valuePlaceholder - : this.placeholder; - }, - - get showSearchInput() { - if (this.multiple) { - return true; - } - - return this.open; - }, - - init() { - this._initSelect(); - }, - - closeMenu(options = { focusRoot: true }) { - if (! this.open) { - return; - } - - this._closeMenu(); - - const focusRoot = options.focusRoot !== false; - - if (focusRoot) { - this._focusRoot(); - } - }, - - selectOption(option) { - if (this.disabled) { - return; - } - - try { - option._x_dataStack[0].toggle({ parentMenu: this }); - } catch (e) {} - }, -}); + }); + + Alpine.magic('customSelect', el => { + return rootMagic(el, Alpine); + }); + + Alpine.magic('customSelectOption', el => { + return optionMagic( + el, + Alpine, + (data, context, optionEl) => { + return { + get isOptGroup() { + return Alpine.bound(optionEl, 'is-opt-group'); + }, + }; + }, + () => { + return { + isOptGroup: false, + }; + }, + ); + }); +} + +function handleLabel(el, Alpine) { + Alpine.bind(el, { + ...labelDirective(el, Alpine), + }); +} + +function handleButton(el, Alpine) { + Alpine.bind(el, { + ...buttonDirective(el, Alpine), + }); +} + +function handleSearch(el, Alpine) { + Alpine.bind(el, { + ...searchDirective(el, Alpine), + }); +} + +function handleOptions(el, Alpine) { + Alpine.bind(el, { + ...optionsDirective(el, Alpine), + }); +} + +function handleOption(el, Alpine) { + Alpine.bind(el, { + ...optionDirective(el, Alpine, 'custom'), + }); +} + +function handleToken(el, Alpine) { + Alpine.bind(el, { + ...tokenDirective(el, Alpine), + }); +} + +function handleClearButton(el, Alpine) { + Alpine.bind(el, { + ...clearButtonDirective(el, Alpine, 'custom'), + }); +} diff --git a/resources/js/components/date-picker.js b/resources/js/components/date-picker.js new file mode 100644 index 0000000..7dc58ea --- /dev/null +++ b/resources/js/components/date-picker.js @@ -0,0 +1,245 @@ +export default function (Alpine) { + Alpine.data('datePicker', config => ({ + __ready: false, + __value: config.value, + __rawValue: null, + __mode: config.mode ?? config.options.mode ?? 'single', + __isDisabled: false, + __flatpickr: undefined, + + init() { + if (typeof window.flatpickr !== 'function') { + throw new Error(`date-picker requires Flatpickr. See https://flatpickr.js.org`); + } + + let value = this.__value; + if (value?.hasOwnProperty('initialValue')) { + value = value.initialValue; + } + + this.__rawValue = value; + + + // We have to wait for the rest of the HTML to initialize in Alpine before + // we can mark this component as "ready". + queueMicrotask(() => { + this.__ready = true; + + this.__flatpickr = window.flatpickr(this.$refs.__input, this.__config()); + }); + + this.$watch('__value', newValue => { + this.__rawValue = newValue; + this.__flatpickr.setDate(newValue); + this.$dispatch('input', newValue); + }); + + this.$watch('__isDisabled', newValue => { + if (newValue) { + this.__flatpickr.set('clickOpens', false); + } else { + this.__flatpickr.set('clickOpens', config.options.clickOpens); + } + }); + }, + + __open() { + ! this.__isDisabled && this.__flatpickr.open(); + }, + + __clear() { + if (this.__isDisabled) { + return; + } + + this.__value = this.__mode === 'single' + ? null + : []; + }, + + __config() { + let onOpen = [ + function (selectedDates, dateStr, instance) { + instance.setDate(this.__rawValue); + }.bind(this), + ]; + + let customConfig = config.config ?? {}; + if (customConfig.hasOwnProperty('onOpen')) { + let customOnOpen = Array.isArray(customConfig.onOpen) ? customConfig.onOpen : [customConfig.onOpen]; + + onOpen = onOpen.concat(customOnOpen); + + delete customConfig.onOpen; + } + + return { + defaultDate: this.__rawValue, + ...config.options, + onOpen, + onChange: function(date, dateString) { + let newValue = dateString; + if (this.__mode === 'multiple') { + newValue = dateString.split(', '); + } else if (this.__mode === 'range') { + newValue = dateString.split(' to '); + } + + this.__value = newValue; + }.bind(this), + ...customConfig, + }; + }, + })); + + Alpine.directive('date-picker', (el, directive, { cleanup }) => { + switch (directive.value) { + case 'clear': + handleClear(el, Alpine); + break; + case 'container': + handleContainer(el, Alpine); + break; + case 'input': + handleInput(el, Alpine); + + cleanup(() => { + const parent = el.closest('[x-data]'); + + parent && Alpine.$data(parent).__flatpickr.destroy(); + }); + + break; + case 'toggle': + handleToggle(el, Alpine); + break; + default: + throw new Error(`Unknown date-picker directive value: ${directive.value}`); + } + }); + + Alpine.magic('datePicker', el => { + let data = Alpine.$data(el); + + if (! data.__ready) { + return { + isDisabled: false, + flatpickr: undefined, + hasValue: false, + open() {}, + }; + } + + return { + get isDisabled() { + return data.__isDisabled; + }, + get flatpickr() { + return data.__flatpickr; + }, + get hasValue() { + if (data.__mode === 'single') { + return data.__value !== null && data.__value !== ''; + } + + return Array.isArray(data.__value) && data.__value.length > 0; + }, + open() { + data.__open(); + }, + }; + }); +} + +function handleInput(el, Alpine) { + Alpine.bind(el, { + 'x-ref': '__input', + 'type': 'text', + 'x-init'() { + this.$data.__isDisabled = this.$el.disabled || this.$el.readOnly; + + queueMicrotask(() => { + const observer = new MutationObserver(mutations => { + mutations.forEach(mutation => { + if (mutation.attributeName === 'disabled' || mutation.attributeName === 'readonly') { + this.$data.__isDisabled = this.$el.disabled || this.$el.readOnly; + } + }); + }); + + observer.observe(this.$el, { attributes: true }); + }); + }, + }); +} + +// Since we're using wire:ignore on the input, we are going to show error attributes (i.e. aria-invalid) on the container. +// We'll watch for these changes with a mutation observer and then apply them to the input. +function handleContainer(el, Alpine) { + Alpine.bind(el, { + 'x-ref': '__container', + 'role': 'none', + 'x-init'() { + const observer = new MutationObserver(mutations => { + mutations.forEach(mutation => { + if (mutation.attributeName === 'aria-invalid') { + const invalid = mutation.target.getAttribute('aria-invalid') === 'true'; + + if (invalid) { + this.$refs.__input.setAttribute('aria-invalid', 'true'); + this.$refs.__input.classList.add('input-error'); + } else { + this.$refs.__input.removeAttribute('aria-invalid'); + this.$refs.__input.classList.remove('input-error'); + } + } else if (mutation.attributeName === 'aria-describedby') { + const describedBy = mutation.target.getAttribute('aria-describedby'); + + if (describedBy) { + this.$refs.__input.setAttribute('aria-describedby', describedBy); + } else { + this.$refs.__input.removeAttribute('aria-describedby'); + } + } + }); + }); + + observer.observe(this.$el, { attributes: true }); + }, + }); +} + +function handleToggle(el, Alpine) { + Alpine.bind(el, { + 'x-ref': '__toggle', + ':role'() { + if (this.$datePicker.isDisabled) { + return false; + } + + if (this.$el.tagName.toLowerCase() === 'button') { + return false; + } + + return 'button'; + }, + '@click'() { + this.$datePicker.open(); + }, + }); +} + +function handleClear(el, Alpine) { + Alpine.bind(el, { + 'x-ref': '__clear', + 'x-init'() { + if (this.$el.tagName.toLowerCase() === 'button' && ! this.$el.hasAttribute('type')) { + this.$el.setAttribute('type', 'button'); + } + }, + '@click'() { + this.$data.__clear(); + }, + 'x-show'() { return this.$datePicker.hasValue && ! this.$datePicker.isDisabled }, + }); +} diff --git a/resources/js/components/filepond.js b/resources/js/components/filepond.js new file mode 100644 index 0000000..b1b586c --- /dev/null +++ b/resources/js/components/filepond.js @@ -0,0 +1,95 @@ +export default function (Alpine) { + Alpine.data('filepond', ({ __value, __this, __wireModel, options, __config, id }) => { + return { + __ready: false, + __pond: null, + __processingFiles: false, + __value, + + init() { + if (typeof window.FilePond?.create !== 'function') { + throw new Error(`filepond requires FilePond to be loaded. See https://pqina.nl/filepond/docs/getting-started/installation/javascript/`); + } + + queueMicrotask(() => { + this.__ready = true; + + let pondOptions = { ...options }; + + if (__this && __wireModel) { + pondOptions.server = { + process: (fieldName, file, metadata, load, error, progress, abort, transfer, options) => { + __this.upload(__wireModel, file, load, error, progress); + }, + revert: (filename, load) => { + __this.removeUpload(__wireModel, filename, load); + }, + }; + + // To prevent our wire:model watcher from pre-maturely removing files from + // filepond, we need to tell our component we are still processing. + pondOptions.onaddfilestart = () => this.__processingFiles = true; + + pondOptions.onprocessfiles = () => this.__processingFiles = false; + } + + if (__this) { + // Listen for livewire components to emit a file-pond-clear event. + __this.on('file-pond-clear', (desiredId) => this.__clear(desiredId)); + } + + pondOptions = { ...pondOptions, ...__config(this, options, pondOptions) }; + + this.__pond = window.FilePond.create(this.$refs.input, pondOptions); + }); + + this.$watch('__value', newValue => { + if (! this.__ready) { + return; + } + + if (options.allowMultiple) { + // If filepond is processing files, we shouldn't do anything. + if (this.__processingFiles) { + return; + } + + // If the new value is null or undefined, we'll just remove everything from filepond. + if (! newValue) { + return this.__clear(); + } + + // Remove files from filepond that are not present in the new value. + const serverIds = Array.isArray(newValue) ? newValue : JSON.parse(String(newValue).split('livewire-files:')[1]); + + this.__pond.getFiles().forEach(f => { + if (! serverIds.includes(f.serverId)) { + this.__pond.removeFile(f.id); + } + }); + + return; + } + + if (! newValue) { + this.__clear(); + } + }); + }, + + __clear(eventId) { + if (! eventId || (eventId === id)) { + clearFilepond(this.__pond, options.allowMultiple); + } + }, + }; + }); +} + +function clearFilepond(instance, allowMultiple) { + if (allowMultiple) { + instance.getFiles().forEach(file => instance.removeFile(file.id)); + } else { + instance.removeFile(); + } +} diff --git a/resources/js/components/index.js b/resources/js/components/index.js index e69dff4..ccb4913 100644 --- a/resources/js/components/index.js +++ b/resources/js/components/index.js @@ -1,13 +1,15 @@ import customSelect from './custom-select'; -import customSelectOption from './custom-select-option'; +import datePicker from './date-picker'; +import filepond from './filepond'; import quill from './quill'; +import switchToggle from './switch-toggle'; import treeSelect from './tree-select'; -import treeSelectOption from './tree-select-option'; document.addEventListener('alpine:init', () => { - Alpine.data('customSelect', customSelect); - Alpine.data('customSelectOption', customSelectOption); - Alpine.data('quill', quill); - Alpine.data('treeSelect', treeSelect); - Alpine.data('treeSelectOption', treeSelectOption); + customSelect(Alpine); + datePicker(Alpine); + filepond(Alpine); + quill(Alpine); + treeSelect(Alpine); + Alpine.data('switchToggle', switchToggle); }); diff --git a/resources/js/components/quill.js b/resources/js/components/quill.js index bfbcd78..ef06e15 100644 --- a/resources/js/components/quill.js +++ b/resources/js/components/quill.js @@ -1,52 +1,85 @@ -export default options => ({ - autofocus: false, - value: '', - theme: 'snow', - readOnly: false, - placeholder: null, - toolbar: {}, - toolbarHandlers: {}, - ...options, - _quill: null, - - init() { - if (typeof Quill !== 'function') { - throw new TypeError(`Quill Editor requires Quill (https://quilljs.com)`); - } - - this._quill = new Quill(this.$refs.quill, this._quillOptions()); - - this._quill.root.innerHTML = this.value; - - this._quill.on('text-change', () => { - this.value = this._quill.root.innerHTML; - - this.$dispatch('quill-input', this.value); - }); - - if (this.autofocus) { - this.$nextTick(() => this._quill.focus()); - } - }, - - _quillOptions() { - const toolbarHandlers = this.toolbarHandlers; - if (toolbarHandlers !== null) { - Object.keys(toolbarHandlers).forEach(key => { - toolbarHandlers[key] = new Function('value', toolbarHandlers[key]); - }); - } - +export default function (Alpine) { + Alpine.data('quill', ({ __value, options, __config, onTextChange, onInit }) => { return { - theme: this.theme, - readOnly: this.readOnly, - placeholder: this.placeholder, - modules: { - toolbar: { - container: this.toolbar, - handlers: toolbarHandlers || {}, - }, + __ready: false, + __value, + __quill: undefined, + + init() { + if (typeof window.Quill !== 'function') { + throw new Error(`quill requires Quill to be loaded. See https://quilljs.com/docs/installation/`); + } + + queueMicrotask(() => { + this.__ready = true; + + this.__quill = new window.Quill(this.$refs.quill, this.__quillOptions()); + + this.__quill.root.innerHTML = this.__value; + + this.__quill.on('text-change', () => { + if (typeof onTextChange === 'function') { + const result = onTextChange(this); + + if (result === false) { + return; + } + } + + this.__value = this.__quill.root.innerHTML; + + this.$dispatch('input', this.__value); + }); + + if (options.autofocus) { + this.$nextTick(() => { + this.focus(); + }); + } + + if (typeof onInit === 'function') { + onInit(this); + } + }); + }, + + focus() { + if (! this.__ready) { + return; + } + + this.__quill.focus(); + }, + + __quillOptions() { + let config = __config(this, options); + let toolbarHandlers = {}; + let modules = {}; + + if (config.hasOwnProperty('toolbarHandlers')) { + toolbarHandlers = config.toolbarHandlers; + delete config.toolbarHandlers; + } + + if (config.hasOwnProperty('modules')) { + modules = config.modules; + delete config.modules; + } + + return { + theme: options.theme, + readOnly: options.readOnly, + placeholder: options.placeholder, + modules: { + toolbar: { + container: options.toolbar, + handlers: toolbarHandlers, + }, + ...modules, + }, + ...config, + }; }, }; - } -}); + }); +} diff --git a/resources/js/components/switch-toggle.js b/resources/js/components/switch-toggle.js new file mode 100644 index 0000000..b4c7eff --- /dev/null +++ b/resources/js/components/switch-toggle.js @@ -0,0 +1,26 @@ +export default options => ({ + value: false, + onValue: true, + offValue: false, + ...options, + + get isPressed() { + if (Array.isArray(this.value)) { + return this.value.includes(this.onValue); + } + + return this.value === this.onValue; + }, + + toggle() { + if (Array.isArray(this.value)) { + this.isPressed + ? this.value.splice(this.value.indexOf(this.onValue), 1) + : this.value.push(this.onValue); + } else { + this.value = this.isPressed ? this.offValue : this.onValue; + } + + this.$dispatch('input', this.value); + }, +}); diff --git a/resources/js/components/tree-select-option.js b/resources/js/components/tree-select-option.js deleted file mode 100644 index aac22e1..0000000 --- a/resources/js/components/tree-select-option.js +++ /dev/null @@ -1,89 +0,0 @@ -import { findClosest } from '../util/findElement'; -import selectOptionMixin from '../mixins/select-option'; - -export default options => ({ - ...selectOptionMixin, - children: [], - expanded: false, - hasChildren: false, - level: 0, - ...options, - _optionComponentName: 'tree-select-option', - _optionSelector: '.tree-select-option__container', - - init() { - this._init(); - - this.$watch('expanded', () => { - // reset parent component value - this.focusableElements = null; - }); - - if (this.searchable) { - // Watch parent select `search` value. - this.$watch('search', search => { - if (search && this.hasChildren) { - this.expanded = true; - } - }); - } - }, - - collapse({ parent = null }) { - if (this.optionDisabled) { - return; - } - - if (! this.hasChildren && this.level > 0) { - this.focusNearestParent({ parentMenu: parent }); - - // Return true to let our menu know to prevent the default arrow - // left event from bubbling up. - return true; - } - - const wasCollapsed = this.expanded === true; - - this.expanded = false; - - return wasCollapsed; - }, - - expand() { - if (! this.hasChildren || this.optionDisabled) { - return; - } - - const wasExpanded = this.expanded === false; - - this.expanded = true; - - return wasExpanded; - }, - - focusNearestParent({ parentMenu = null }) { - parentMenu = parentMenu || this; - - const parent = findClosest(this.$root, el => { - try { - const data = el._x_dataStack[0]; - - if (! data) { - return false; - } - - return data.level === (this.level - 1); - } catch (e) { - return false; - } - }); - - if (! parent) { - return; - } - - try { - parent._x_dataStack[0].focus({ updateParentIndex: true, parent: parentMenu }); - } catch (e) {} - }, -}); diff --git a/resources/js/components/tree-select.js b/resources/js/components/tree-select.js index 78202ae..2b6f86c 100644 --- a/resources/js/components/tree-select.js +++ b/resources/js/components/tree-select.js @@ -1,172 +1,221 @@ -import selectMixins from '../mixins/select'; - -export default options => ({ - ...selectMixins, - ...options, - _componentName: 'tree-select', - _focusableElementSelector: '.tree-select-option:not(.disabled):not(.select-no-results)', - _optionElementSelector: '.tree-select-option:not(.select-no-results)', - _topLevelOptionElementSelector: '.tree-select-option[data-level=":level"]:not(.select-no-results)', - - get hasValue() { - return this.multiple - ? this.value.length > 0 - : this.value !== '' && this.value !== null; - }, - - get hasValueAndCanClear() { - if (! this.optional) { - return false; - } - - if (this.disabled) { - return false; - } - - return this.hasValue; - }, - - get searchPlaceholder() { - if (this.multiple) { - if (! Array.isArray(this.value)) { - return this.placeholder; - } - - return this.value.length - ? null - : this.placeholder; - } - - return this.value !== '' && this.value !== null - ? this.valuePlaceholder - : this.placeholder; - }, - - get showSearchInput() { - if (this.multiple) { - return true; - } - - return this.open; - }, - - init() { - this._initSelect(); - }, - - closeMenu(options = { focusRoot: true }) { - if (! this.open) { - return; - } - - this._closeMenu(); - - const focusRoot = options.focusRoot !== false; - - if (focusRoot) { - this._focusRoot(); - } - }, - - onArrowRight(event) { - if (! this.open || this.focusedOptionIndex < 0) { - return; - } - - const option = this._getFocusableElements()[this.focusedOptionIndex]; - - try { - const wasExpanded = option._x_dataStack[0].expand(); - - if (wasExpanded) { - event.preventDefault(); - } - } catch (e) {} - }, +import { generateContext } from '../util/treeSelectContext'; +import selectPopper from '../mixins/selectPopper'; +import { + buttonDirective, + clearButtonDirective, + labelDirective, + optionsDirective, + optionDirective, + searchDirective, + selectData, + tokenDirective, +} from '../mixins/select'; +import { rootMagic, optionMagic } from '../mixins/selectMagic'; + +export default function (Alpine) { + Alpine.data('treeSelect', config => { + return { + ...selectPopper, + + ...selectData(config.__el, Alpine, config), + + __type: 'tree', + + __generateContext(el, Alpine, config) { + return generateContext({ + multiple: this.__isMultiple, + orientation: this.__orientation, + __wire: config.__wire, + __wireSearch: Alpine.bound(el, 'livewire-search'), + __config: config.__config ?? {}, + Alpine, + }); + }, + }; + }); + + Alpine.directive('tree-select', (el, directive, { cleanup }) => { + switch (directive.value) { + case 'button': + handleButton(el, Alpine); + break; + case 'label': + handleLabel(el, Alpine); + break; + case 'clear': + handleClearButton(el, Alpine); + break; + case 'options': + handleOptions(el, Alpine); + break; + case 'option': + handleOption(el, Alpine); + + // We need to notify the context that the option has left the DOM. + cleanup(() => { + const parent = el.closest('[x-data]'); + + parent && Alpine.$data(parent).__context.destroyItem(el); + }); - onArrowLeft(event) { - if (! this.open || this.focusedOptionIndex < 0) { - return; + break; + case 'search': + handleSearch(el, Alpine); + break; + case 'token': + handleToken(el, Alpine); + break; + case 'child-toggle': + handleChildToggle(el, Alpine); + break; + case 'children': + handleChildren(el, Alpine); + break; + + default: + throw new Error(`Unknown tree-select directive: ${directive.value}`); } - - const option = this._getFocusableElements()[this.focusedOptionIndex]; - - try { - const wasCollapsed = option._x_dataStack[0].collapse({ parent: this }); - - if (wasCollapsed === true) { - event.preventDefault(); + }); + + Alpine.magic('treeSelect', el => { + return rootMagic( + el, + Alpine, + data => { + return { + get hasExpandableOptions() { + return Object.keys(data.__context.expandableEls).length > 0; + }, + }; + }, + ); + }); + + Alpine.magic('treeSelectOption', el => { + return optionMagic( + el, + Alpine, + (data, context, optionEl) => { + return { + get hasChildren() { + return optionEl.__children && optionEl.__children.length > 0; + }, + get isExpanded() { + return context.isExpandedEl(optionEl); + }, + }; + }, + () => { + return { + hasChildren: false, + }; + }, + ); + }); +} + +function handleButton(el, Alpine) { + Alpine.bind(el, { + ...buttonDirective(el, Alpine), + }); +} + +function handleLabel(el, Alpine) { + Alpine.bind(el, { + ...labelDirective(el, Alpine), + }); +} + +function handleClearButton(el, Alpine) { + Alpine.bind(el, { + ...clearButtonDirective(el, Alpine, 'tree'), + }); +} + +function handleOptions(el, Alpine) { + Alpine.bind(el, { + ...optionsDirective(el, Alpine), + }); +} + +function handleOption(el, Alpine) { + Alpine.bind(el, { + ...optionDirective(el, Alpine, 'tree'), + + 'data-tree-select-option': 'true', + ':role'() { return 'option' }, + + 'x-init'() { + const initCallback = () => { + let value = Alpine.bound(el, 'value'); + let disabled = Alpine.bound(el, 'disabled'); + + el.__level = Alpine.bound(el, 'level', 0); + + el.__optionKey = this.$data.__context.initItem(el, value, disabled); + + const childrenField = this.$data.__config.childrenField; + if (value?.hasOwnProperty(childrenField)) { + el.__children = value[childrenField]; + } + }; + + // Our $customSelectOption magic only seems to work with queueMicrotask on initial page load, + // so if our component says it's ready, we'll just run the code to initialize the option right away. + if (this.$data.__ready) { + initCallback(); + } else { + queueMicrotask(initCallback); } - } catch (e) {} - }, - - selectOption(option) { - if (this.disabled) { - return; - } - - try { - option._x_dataStack[0].toggle({ parentMenu: this }); - } catch (e) {} - }, - - _doLocalSearch() { - const options = this._getTopLevelOptionElements(); - const lowercaseSearch = this.search ? this.search.toLowerCase() : null; - let matchCount = 0; - - const optionMatches = option => { - let matches = true; - if (lowercaseSearch) { - try { - const value = option._x_dataStack[0].optionValue; - const label = option._x_dataStack[0].optionLabel; - - matches = String(value).toLowerCase().includes(lowercaseSearch) - || String(label).toLowerCase().includes(lowercaseSearch); - } catch (e) {} + }, + }); +} + +function handleSearch(el, Alpine) { + Alpine.bind(el, { + ...searchDirective(el, Alpine), + }); +} + +function handleToken(el, Alpine) { + Alpine.bind(el, { + ...tokenDirective(el, Alpine), + }); +} + +function handleChildToggle(el, Alpine) { + Alpine.bind(el, { + 'x-init'() { + if (el.tagName.toLowerCase() !== 'button') { + el.setAttribute('role', 'button'); } - - // Check if any children match - try { - const level = option._x_dataStack[0].level; - const children = [...option.querySelectorAll(this._levelOptionSelector(level + 1))]; - let childMatches = false; - children.forEach(child => { - const childMatch = optionMatches(child); - - if (childMatch) { - childMatches = true; - } - }); - - if (childMatches) { - matches = true; + }, + '@click.stop.prevent'() { + let optionEl = Alpine.findClosest(el, i => i.__optionKey); + + optionEl && this.$data.__context.toggleExpandedEl(optionEl); + }, + }); +} + +// We are using this directive to hide/show the children of an option because it is out of the scope +// of where the $treeSelectOption magic will pick up on the state of the option. +function handleChildren(el, Alpine) { + Alpine.bind(el, { + 'data-tree-select-children': 'true', + 'x-data'() { + return { + __optionEl: undefined, + init() { + try { + this.__optionEl = el.parentNode.querySelector('[data-tree-select-option="true"]'); + } catch (e) {} + }, + get __isExpanded() { + return this.__optionEl && this.$data.__context.isExpandedEl(this.__optionEl); } - } catch (e) {} - - if (matches) { - matchCount++; - } - - option.style.display = matches ? null : 'none'; - - return matches; - }; - - options.forEach(o => optionMatches(o)); - - const noResults = this.$refs.noResults; - if (noResults) { - noResults.style.display = matchCount === 0 ? null : 'none'; - } - }, - - _getTopLevelOptionElements() { - return [...this.menu().querySelectorAll(this._levelOptionSelector(0))]; - }, - - _levelOptionSelector(level) { - return this._topLevelOptionElementSelector.replace(':level', level); - } -}); + }; + }, + 'x-show'() { return this.$data.__isExpanded }, + }); +} diff --git a/resources/js/directives/form-group.js b/resources/js/directives/form-group.js new file mode 100644 index 0000000..6494a2f --- /dev/null +++ b/resources/js/directives/form-group.js @@ -0,0 +1,40 @@ +export default function (Alpine) { + Alpine.directive('form-group', (el, directive) => { + if (directive.value === 'label') { + handleLabel(el, Alpine); + } else { + handleRoot(el, Alpine); + } + }); +} + +function handleRoot(el, Alpine) { + Alpine.bind(el, { + 'x-id'() { return ['fc-label'] }, + }); +} + +function handleLabel(el, Alpine) { + Alpine.bind(el, { + '@click'() { + const group = el.closest('[x-form-group]'); + if (! group) { + return; + } + + // Check if there is a custom select in the form group. + const customSelectButton = group.querySelector('[data-custom-select-button="true"]'); + if (customSelectButton) { + customSelectButton.focus({ preventScroll: true }); + + return; + } + + // Check if there is a quill editor in the form group. + const quill = group.querySelector('.quill-wrapper'); + if (quill) { + Alpine.$data(quill).focus(); + } + }, + }); +} diff --git a/resources/js/directives/index.js b/resources/js/directives/index.js new file mode 100644 index 0000000..4ce201f --- /dev/null +++ b/resources/js/directives/index.js @@ -0,0 +1,7 @@ +import formGroup from './form-group'; +import textareaResize from './textarea-resize'; + +document.addEventListener('alpine:init', () => { + formGroup(Alpine); + Alpine.plugin(textareaResize); +}); diff --git a/resources/js/directives/textarea-resize.js b/resources/js/directives/textarea-resize.js new file mode 100644 index 0000000..940602f --- /dev/null +++ b/resources/js/directives/textarea-resize.js @@ -0,0 +1,19 @@ +const resize = el => { + el.style.height = 'auto'; + el.style.height = `${el.scrollHeight}px`; +}; + +export default Alpine => { + Alpine.directive('textarea-resize', (el, {}, { cleanup }) => { + el.style.minHeight = `${el.scrollHeight}px`; + resize(el); + + const inputHandler = () => resize(el); + + el.addEventListener('input', inputHandler); + + cleanup(() => { + el.removeEventListener('input', inputHandler); + }); + }); +}; diff --git a/resources/js/index.js b/resources/js/index.js index fd9e3e9..c624bf5 100644 --- a/resources/js/index.js +++ b/resources/js/index.js @@ -1,2 +1,2 @@ import './components'; -import './util/prototypes'; +import './directives'; diff --git a/resources/js/mixins/select-option.js b/resources/js/mixins/select-option.js deleted file mode 100644 index ea21046..0000000 --- a/resources/js/mixins/select-option.js +++ /dev/null @@ -1,69 +0,0 @@ -import { uniqueId } from '../util/id'; -import { focusElementInParent } from '../util/focusElement'; - -export default { - optionDisabled: false, - optionValue: null, - optionLabel: null, - optionSelectedLabel: null, - hasFocus: false, - _id: null, - _optionComponentName: 'select-option', - _optionSelector: '', - _optionIndex: -1, - - optionSelected() { - return this._isValueSelected(this.optionValue); - }, - - _init() { - this._id = uniqueId(this._optionComponentName); - - this.$watch('hasFocus', hasFocus => { - if (hasFocus) { - // `this.name` is a property that should come from the parent select component. - this.$dispatch(`${this._componentName}-${this.name.toSlug()}-option-focused`, this._id); - } - }); - }, - - onReceivedFocus(event) { - const _id = event.detail; - this.hasFocus = this._id === _id; - - if (this.hasFocus) { - this._focusedOptionId = this._id; - } - }, - - focus({ updateParentIndex = false, parent = null, scroll = true, block = 'end' }) { - if (this.optionDisabled || this.hasFocus) { - return; - } - - parent = parent || this; - - this.hasFocus = true; - - if (scroll) { - focusElementInParent(this.$root, parent.menu(), { - threshold: (this.$root.querySelector(this._optionSelector) || this.$root).offsetHeight, - block, - }); - } - - if (updateParentIndex) { - parent.updateFocusedOptionIndexFromElement(this.$root); - } - }, - - toggle(options = { parentMenu: null }) { - const parentMenu = options.parentMenu || this; - - if (this.optionDisabled || ! parentMenu.canToggleOption(this.optionValue)) { - return; - } - - parentMenu.toggleOption(this); - }, -}; diff --git a/resources/js/mixins/select.js b/resources/js/mixins/select.js index 8d5ca9b..b9a1f65 100644 --- a/resources/js/mixins/select.js +++ b/resources/js/mixins/select.js @@ -1,614 +1,438 @@ -// Common functionality needed across custom selects. -import { isArray, isObject } from '../util/inspect'; - -let createPopper; - -export default { - open: false, - disabled: false, - fixed: false, - optional: false, - searchable: true, - closeOnSelect: false, - multiple: false, - placeholder: null, - valuePlaceholder: null, - search: '', - value: null, - valueLabel: null, - initialLabel: null, - focusedOptionIndex: -1, - focusableElements: null, - autofocus: false, - minSelected: 1, - maxSelected: null, - selectedOptions: [], - livewireSearch: null, - _wire: null, - _root: null, - _popper: null, - _componentName: '', - _focusableElementSelector: '', - _optionElementSelector: '', - _wireToggleMethod: '', - _focusedOptionId: null, - _noCloseOnSelect: false, // flag we can set for certain actions that shouldn't close the menu - _wireModelName: null, - - menu() { - if (! this.$refs.menu) { - return this._root.querySelector('[x-ref="menu"]'); - } - - return this.$refs.menu; - }, - - searchInput() { - if (! this.$refs.search) { - return this._root.querySelector('[x-ref="search"]'); - } - - return this.$refs.search; - }, - - _closeMenu() { - this.search = ''; - this.focusableElements = null; - this.open = false; - this._resetPopper(); - }, - - openMenu() { - if (this.disabled) { - return; - } - - this._initPopper(); - this.open = true; - this._focusSearch(); - this._focusSelectedOption(); - }, - - onBackspace() { - if (! this.open || this.disabled || this.search) { - return; - } - - const value = this.multiple - ? this.value[this.value.length - 1] - : this.value; - - if (value) { - this._noCloseOnSelect = true; - this.toggleOptionByValue(value); - } - }, - - onEnter() { - if (! this.open) { - return this.openMenu(); - } - - if (this.focusedOptionIndex < 0) { - return; - } - - const elements = this._getFocusableElements(); - - if (elements.length) { - this.selectOption(elements[this.focusedOptionIndex]); - } - }, - - onTab() { - if (this.disabled || ! this.open) { - return; - } - - this.closeMenu({ focusRoot: false }); - }, - - focusNextOption() { - if (this.disabled) { - return; - } - - if (! this.open) { - return this.openMenu(); - } - - const elements = this._getFocusableElements(); - if (! elements.length) { - return this.focusedOptionIndex = -1; - } - - this.focusedOptionIndex++; - if (this.focusedOptionIndex + 1 > elements.length) { - this.focusedOptionIndex = 0; - } - - this._focusOption(elements[this.focusedOptionIndex]); - }, - - focusPreviousOption() { - if (this.disabled) { - return; - } - - if (! this.open) { - return this.openMenu(); - } - - const elements = this._getFocusableElements(); - if (! elements.length) { - return this.focusedOptionIndex = -1; - } - - this.focusedOptionIndex--; - if (this.focusedOptionIndex < 0) { - this.focusedOptionIndex = elements.length - 1; - } - - this._focusOption(elements[this.focusedOptionIndex], { block: 'start' }); - }, - - focusFirstOption() { - if (this.disabled) { - return; - } +import { renderHiddenInputs } from './selectContext'; + +export function selectData(el, Alpine, config) { + return { + __ready: false, + __value: config.__value ?? false, + __richValue: false, + __isOpen: false, + __context: undefined, + __isMultiple: false, + __isStatic: false, + __isClearable: undefined, + __isDisabled: false, + __compareBy: null, + __inputName: undefined, + __fixed: false, + __searchable: undefined, + __hasCustomSelectLabel: false, + __orientation: 'vertical', + __externalChanged: false, + __config: config.__config, + __wireSearch: undefined, + __type: 'custom', + + init() { + this.__createPopper = window.Popper ? window.Popper.createPopper : window.createPopper; + + if (typeof this.__createPopper !== 'function') { + throw new TypeError(`${this.__type}-select requires Popper.js (https://popper.js.org)`); + } - const elements = this._getFocusableElements(); - if (! elements.length) { - return this.focusedOptionIndex = -1; - } + this.__isMultiple = Alpine.bound(el, 'data-multiple', false); + this.__isDisabled = Alpine.bound(el, 'disabled', false) || Alpine.bound(el, 'readonly', false); + this.__inputName = Alpine.bound(el, 'name', null); + this.__compareBy = Alpine.bound(el, 'by'); + this.__orientation = Alpine.bound(el, 'horizontal') ? 'horizontal' : 'vertical'; + this.__searchable = Alpine.bound(el, 'searchable', false); + this.__isClearable = Alpine.bound(el, 'clearable', false); + this.__wireSearch = Alpine.bound(el, 'livewire-search'); + this.__fixed = Alpine.bound(el, 'fixed', false); - this.focusedOptionIndex = 0; + const autoFocus = Alpine.bound(el, 'autofocus'); - this._focusOption(elements[this.focusedOptionIndex], { block: 'start' }); - }, + this.__context = this.__generateContext(el, Alpine, config); - focusLastOption() { - if (this.disabled) { - return; - } + const defaultValue = Alpine.bound(el, 'default-value', null); + if (defaultValue && ! this.__value) { + this.__value = defaultValue; + } - const elements = this._getFocusableElements(); - if (! elements.length) { - return this.focusedOptionIndex = -1; - } + // We have to wait for the rest of the HTML to initialize in Alpine before + // we can mark this component as "ready". + queueMicrotask(() => { + this.__ready = true; + + // We have to wait again after the "ready" processes are finished + // to settle up currently selected values (this prevents this next bit + // of code from running multiple times on startup). + queueMicrotask(() => { + // This "fingerprint" acts as a checksum of the last-known "value" + // passed into x-model. We need to track this so that we can determine + // from the reactive effect if it was the value that changed externally + // or an option was selected internally. + let lastValueFingerprint = false; + + Alpine.effect(() => { + // Accessing the selected keys, so a change in it always triggers this effect. + this.__context.selectedKeys; + + if (lastValueFingerprint === false || lastValueFingerprint !== JSON.stringify(this.__value)) { + // Here we know that the value changed externally, and we can add the selection. + this.__externalChanged = true; + + if (this.__isMultiple) { + this.__context.clearSelected(); + + const keys = []; + + for (let value of this.__value) { + const object = this.__context.getObjectFromValue(value, this.__compareBy); + object && keys.push(object); + } + + this.__context.selectValue(keys, this.__compareBy); + this.__richValue = this.__context.selectedValueOrValues(); + } else { + if (typeof this.__value !== 'object' && ! Array.isArray(this.__value) && this.__value !== null) { + const key = this.__context.getKeyFromSimpleValue(this.__value, this.__compareBy); + key && this.__context.selectKey(key); + } else { + this.__context.selectValue(this.__value, this.__compareBy); + } + + this.__richValue = this.__context.selectedValueOrValues(); + } + } else { + // Here we know that an option was selected, and we can change the value. + this.__value = this.__context.selectedBasicValueOrValues(this.__compareBy); + this.__richValue = this.__context.selectedValueOrValues(); + } + + // Generate the "value" checksum for comparison next time. + lastValueFingerprint = JSON.stringify(this.__value); + + // Everytime the value changes, we need to re-render the hidden inputs + // if a user passed the "name" prop. + this.__inputName && renderHiddenInputs(this.$el, this.__inputName, this.__value); + }); + + // If select is searchable, we want to hide any opt groups when a query is present. + if (this.__searchable) { + Alpine.effect(() => { + const query = this.__context.searchableQuery; + + this.$refs.__options && this.$refs.__options.querySelectorAll('[role="presentation"]:not([data-placeholder="true"])').forEach(el => { + if (query) { + this.__context.hideEl(el); + } else { + this.__context.showEl(el); + } + }); + }); + } + + (autoFocus && this.$refs.__button) && this.$refs.__button.focus({ preventScroll: true }); + }); + }); - this.focusedOptionIndex = elements.length - 1; + this.$watch('__value', newValue => { + this.$dispatch('input', newValue); + }); - this._focusOption(elements[this.focusedOptionIndex], { block: 'end' }); - }, + this.__componentBooted(el, Alpine, config); + }, - updateFocusedOptionIndexFromElement(el) { - const elements = this._getFocusableElements(); + __open() { + if (this.__isDisabled) { + return; + } - if (elements.length) { - this.focusedOptionIndex = elements.findIndex(other => other.isEqualNode(el)); + this.__isOpen = true; - try { - this._focusedOptionId = el._x_dataStack[0]._id; - } catch (e) {} - } - }, + this.__context.activateSelectedOrFirst(); - canToggleOption(value) { - if (this.disabled) { - return false; - } + // Safari needs more of a "tick" for focusing after x-show for some reason. + // Probably because Alpine adds an extra tick when x-showing for @click.outside. + let nextTick = callback => requestAnimationFrame(() => requestAnimationFrame(callback)); - const isSelected = this._isValueSelected(value); + nextTick(() => { + if (this.__searchable && this.$refs.__search) { + this.$refs.__search.focus({ preventScroll: true }); + } else { + this.$refs.__options.focus({ preventScroll: true }); + } - if (this.multiple) { - if (isSelected && this.value.length <= this.minSelected) { - return this.optional; + this.__initPopper(); + }); + }, + + __close() { + this.__isOpen = false; + this.__resetPopper(); + + this.$nextTick(() => this.$refs.__button.focus({ preventScroll: true })); + }, + + __generateContext(el, Alpine, config) {}, + + __componentBooted(el, Alpine, config) {}, + }; +} + +export function buttonDirective(el, Alpine) { + return { + 'x-ref': '__button', + ':id'() { return this.$id(`fc-${this.__type}-select-button`) }, + 'aria-haspopup': 'true', + 'data-custom-select-button': 'true', + ':aria-labelledby'() { return this.$data.__hasCustomSelectLabel ? this.$id(`fc-${this.__type}-select-label`) : this.$id('fc-label') }, + ':aria-expanded'() { return this.$data.__isOpen }, + ':aria-controls'() { return this.$data.__isOpen && this.$id(`fc-${this.__type}-select-options`) }, + ':tabindex'() { return this.$data.__isDisabled ? '-1' : '0' }, + 'x-init'() { + if (this.$el.tagName.toLowerCase() === 'button' && ! this.$el.hasAttribute('type')) { + this.$el.type = 'button'; } - if (! isSelected && ! this._canSelectAnotherOption()) { - return false; + if (this.$el.tagName.toLowerCase() !== 'button') { + this.$el.setAttribute('role', 'button'); + } + }, + '@click'() { this.$data.__open() }, + '@focus'() { this.$data.__isDisabled && this.$el.blur() }, + '@keydown'(e) { + if (['ArrowDown', 'ArrowUp', 'ArrowLeft', 'ArrowRight'].includes(e.key)) { + e.stopPropagation(); + e.preventDefault(); + + this.$data.__open(); } - return true; - } - - if (isSelected && ! this.optional) { - return false; - } - - return true; - }, - - clearValue() { - if (this.disabled) { - return; - } - - if (! this.optional) { - return; - } - - this.value = this.multiple ? [] : null; - this.valueLabel = null; - }, - - toggleOption(option) { - if (this.disabled) { - return; - } - - if (this.multiple) { - this._toggleMultiSelectOption(option); - } else { - this._toggleSingleSelectOption(option); - } - }, - - toggleOptionByValue(value) { - let option = this._getOptionByValue(value); - if (option) { - option = option._x_dataStack[0]; - } else { - option = { optionValue: value }; - } - - return this.toggleOption(option); - }, - - setNewValue(newValue) { - if (this.multiple) { - this.value = []; - this.selectedOptions = []; - - newValue.forEach(value => this.toggleOptionByValue(value)); - - return; - } - - // When emitting `null` values from php, sometimes it comes through as an object, - // so we'll "fix" it here. - if (isObject(newValue)) { - newValue = null; - } - - this.value = newValue; - }, - - handleValueChange() { - if (! this.closeOnSelect && this.open) { - this._initPopper(); - this._focusSearch(); - - return; - } - - if (this.closeOnSelect && this.open) { - this._handleCloseOnSelect(); - } - }, - - labelForValue(value) { - const option = this.selectedOptions.find(o => String(o.optionValue) === String(value)); - - if (! option) { - return value; - } - - return option.optionSelectedLabel ? option.optionSelectedLabel : option.optionLabel; - }, - - _toggleMultiSelectOption(option) { - const value = option.optionValue; - let newValue = [...this.value]; - - if (this._isValueSelected(value) && this._canDeSelectAnOption()) { - newValue.splice(newValue.indexOf(value), 1); - this.selectedOptions.splice( - this.selectedOptions.findIndex(o => String(o.optionValue) === String(value)), - 1 - ); - } else if (! this._isValueSelected(value) && this._canSelectAnotherOption()) { - newValue.push(value); - this.selectedOptions.push(option); - } - - this.value = newValue; - }, - - _toggleSingleSelectOption(option) { - const optionValue = typeof option === 'object' ? option.optionValue : option; - this.value = this._isValueSelected(optionValue) - ? null - : optionValue; - }, - - _canDeSelectAnOption() { - if (this.optional) { - return true; - } - - return this.value.length > this.minSelected; - }, - - _canSelectAnotherOption() { - if (this.maxSelected === null) { - return true; - } - - return this.value.length < this.maxSelected; - }, - - _isValueSelected(value) { - const stringValue = String(value); - - if (this.multiple) { - // In certain edge cases, `this.value` may not be an array, so - // we'll force it to be one if it's not here. - const value = isArray(this.value) ? this.value : []; - - return value.some(v => String(v) === stringValue); - } - - return stringValue === String(this.value); - }, - - _focusOption(option, options = {}) { - try { - option._x_dataStack[0].focus({ parent: this, ...options }); - this.updateFocusedOptionIndexFromElement(option); - } catch (e) {} - }, - - _focusRoot() { - if (! this.disabled) { - setTimeout(() => this._root.focus(), 50); - } - }, - - _focusSearch() { - if (! this.searchable) { - return; - } - - try { - setTimeout(() => this.searchInput().focus(), 50); - } catch (e) {} - }, - - _focusSelectedOption() { - const firstValue = this.multiple ? String(this.value[0]) : String(this.value); - if (! firstValue) { - return; - } - - const option = this._getOptionByValue(firstValue); - - if (option && ! option.optionDisabled) { - setTimeout(() => this._focusOption(option), 50); - } - }, - - _getOptionByValue(value) { - const focusableElements = this._getAllOptionElements(); - if (! focusableElements.length) { - return null; - } - - return focusableElements.find(o => { - try { - return String(o._x_dataStack[0].optionValue) === String(value); - } catch (e) {} - }); - }, - - _getAllOptionElements() { - return [...this.menu().querySelectorAll(this._optionElementSelector)]; - }, - - _getFocusableElements() { - if (this.focusableElements !== null) { - return this.focusableElements; - } - - return this.focusableElements = [...this.menu().querySelectorAll(this._focusableElementSelector)] - .filter(el => el.offsetParent !== null); // Ensure option is visible - }, - - _handleCloseOnSelect() { - if (this._shouldCloseOnSelect()) { - this.closeMenu(); - } - }, + const $magic = this.__type === 'tree' ? this.$treeSelect : this.$customSelect; - _handleSearch() { - this.focusableElements = null; + if (e.key === 'Backspace') { + e.stopPropagation(); + e.preventDefault(); - if (this.livewireSearch && this._wire) { - try { - this._wire[this.livewireSearch](this.search); - } catch (e) {} + if (this.$data.__isDisabled) { + return; + } - return; - } + const lastSelected = this.$data.__isMultiple + ? $magic.selectedObject[$magic.selectedObject.length - 1] + : $magic.selectedObject; - this._doLocalSearch(); - }, - - _doLocalSearch() { - const options = this._getAllOptionElements(); - const lowercaseSearch = this.search ? this.search.toLowerCase() : null; - let matchCount = 0; - options.forEach(o => { - let matches = true; - if (lowercaseSearch) { - try { - const optionValue = o._x_dataStack[0].optionValue; - const label = o._x_dataStack[0].optionLabel; - - matches = String(optionValue).toLowerCase().includes(lowercaseSearch) - || String(label).toLowerCase().includes(lowercaseSearch); - } catch (e) {} + lastSelected && this.$data.__context.toggleValue(lastSelected, this.$data.__compareBy); } - - if (matches) { - matchCount++; + }, + '@keydown.space.stop.prevent'() { this.$data.__open() }, + '@keydown.enter.stop.prevent'() { this.$data.__open() }, + }; +} + +export function labelDirective(el, Alpine) { + return { + 'x-ref': '__label', + ':id'() { return this.$id(`fc-${this.__type}-custom-select-label`) }, + 'x-init'() { + this.$data.__hasCustomSelectLabel = true; + }, + '@click'() { this.$refs.__button.focus({ preventScroll: true }) }, + }; +} + +export function clearButtonDirective(el, Alpine, type) { + const magic = type === 'tree' ? '$treeSelect' : '$customSelect'; + + return { + ':tabindex'() { return (this.$data.__isDisabled || ! this[magic].hasValue) ? false : '0' }, + 'x-show'() { return this[magic].shouldShowClear }, + 'x-init'() { + if (this.$el.tagName.toLowerCase() === 'button' && ! this.$el.hasAttribute('type')) { + this.$el.type = 'button'; } - o.style.display = matches ? null : 'none'; - }); - - const noResults = this.$refs.noResults; - if (noResults) { - noResults.style.display = matchCount === 0 ? null : 'none'; - } - }, - - _initPopper() { - this._resetPopper(); - - this._popper = createPopper(this._root, this.menu(), this._popperConfig()); - }, - - _initSelect() { - this._root = this.$root; - - createPopper = window.Popper ? window.Popper.createPopper : window.createPopper; - - if (typeof createPopper !== 'function') { - throw new TypeError(`<${this._componentName}> requires Popper (https://popper.js.org)`); - } - - if (this.autofocus) { - this._focusRoot(); - } - - if (this.searchable) { - this.$watch('search', () => this._handleSearch()); - } - - if (! this.multiple && this.value && ! this.initialLabel) { - this._determineInitialLabel(); - } - - if (this.initialLabel) { - this.valueLabel = this.initialLabel; - this.valuePlaceholder = this.initialLabel; - } - - if (this.multiple) { - this.$nextTick(() => { - this.selectedOptions = [...this.value].map(v => this._getOptionByValue(v)._x_dataStack[0]); - }); - } - - this.$watch('value', (newValue, oldValue) => { - // Possible bug: When livewire components are updated, the watcher - // gets triggered again, even if the new and old values are the same, - // so we want to prevent our handlers from running in those cases... - if (JSON.stringify(newValue) === JSON.stringify(oldValue)) { + if (this.$el.tagName.toLowerCase !== 'button') { + this.$el.setAttribute('role', 'button'); + } + }, + '@click.stop.prevent'() { + if (this.$data.__isDisabled) { return; } - this._updateSelectedOption(newValue); - this.handleValueChange(); + this.$data.__context.clearSelected(); + this.$data.__close(); - this.$dispatch('input', newValue); - - // For some reason when using a wire:model.defer, livewire is not - // sending null values back to the server for updates, so we will - // force it to here... - if (newValue === null && this._wire && this._wireModelName) { - this._wire.set(this._wireModelName, null, true); + // Our value is not reacting to the changes made in context, so we'll set it manually. + this.$data.__value = this.$data.__isMultiple ? [] : null; + }, + '@keydown.space.stop.prevent'() { + if (this.$data.__isDisabled) { + return; } - }); - }, - - _updateSelectedOption(newValue) { - if (this.multiple) { - return; - } - - if (! newValue) { - this.valueLabel = this.placeholder; - } - - const option = this._getOptionByValue(newValue); - - if (option) { - try { - this.valueLabel = option._x_dataStack[0].optionSelectedLabel; - this.valuePlaceholder = option._x_dataStack[0].optionLabel; - } catch (e) {} - } - }, - - _popperConfig() { - return { - placement: 'bottom-start', - strategy: this.fixed ? 'fixed' : 'absolute', - modifiers: [ - { - name: 'offset', - options: { - offset: [0, 0], - }, - }, - { - name: 'preventOverflow', - options: { - boundariesElement: this._root, - }, - }, - ], - }; - }, - - _resetPopper() { - if (this._popper) { - this._popper.destroy(); - this._popper = null; - } - }, - - _determineInitialLabel() { - this.$nextTick(() => { - const option = this._getOptionByValue(this.value); - if (option) { - try { - this.initialLabel = option._x_dataStack[0].optionSelectedLabel; - - this.valueLabel = this.initialLabel; - this.valuePlaceholder = this.initialLabel; - - return; - } catch (e) {} + this.$data.__context.clearSelected(); + this.$data.__close(); + + // Our value is not reacting to the changes made in context, so we'll set it manually. + this.$data.__value = this.$data.__isMultiple ? [] : null; + }, + }; +} + +export function optionsDirective(el, Alpine) { + return { + 'x-ref': '__options', + ':id'() { return this.$id(`fc-${this.__type}-select-options`) }, + 'x-init'() { + this.$data.__isStatic = Alpine.bound(this.$el, 'static', false); + }, + 'x-show'() { return this.$data.__isStatic ? true : this.$data.__isOpen }, + '@click.outside'() { this.$data.__close() }, + '@keydown.escape.stop.prevent'() { this.$data.__close() }, + tabindex: '0', + role: 'listbox', + ':aria-orientation'() {return this.$data.__orientation }, + ':aria-labelledby'() { return this.$id(`fc-${this.__type}-select-button`) }, + ':aria-activedescendant'() { return this.$data.__context.activeEl() && this.$data.__context.activeEl().id }, + ':aria-multiselectable'() { return this.$data.__isMultiple ? 'true' : 'false' }, + '@focus'() { this.$data.__context.activateSelectedOrFirst() }, + 'x-trap'() { return this.$data.__isOpen }, + '@keydown'(e) { this.$data.__context.activateByKeyEvent(e) }, + '@keydown.enter.stop.prevent'() { + this.$data.__context.selectActive(); + + this.$data.__isMultiple || this.$data.__close(); + }, + '@keydown.space.stop.prevent'() { + this.$data.__context.selectActive(); + + this.$data.__isMultiple || this.$data.__close(); + }, + }; +} + +export function optionDirective(el, Alpine, type) { + const rootMagic = type === 'tree' ? '$treeSelect' : '$customSelect'; + const magic = type === 'tree' ? '$treeSelectOption' : '$customSelectOption'; + + return { + ':id'() { return this.$id(`fc-${this.__type}-select-option`) }, + ':tabindex'() { return this.$data.__isDisabled ? false : '-1' }, + ':role'() { return this[magic].isOptGroup ? 'presentation' : 'option' }, + 'x-init'() { + const initCallback = () => { + let value = Alpine.bound(el, 'value'); + let disabled = Alpine.bound(el, 'disabled'); + let isOptGroup = Alpine.bound(el, 'is-opt-group'); + + el.__optionKey = this.$data.__context.initItem(el, value, disabled, isOptGroup); + }; + + // Our $customSelectOption magic only seems to work with queueMicrotask on initial page load, + // so if our component says it's ready, we'll just run the code to initialize the option right away. + if (this.$data.__ready) { + initCallback(); + } else { + queueMicrotask(initCallback); + } + }, + ':aria-selected'() { return this[magic].isSelected }, + ':aria-disabled'() { return this[magic].isDisabled }, + '@click'() { + if (this.$data.__isDisabled || this[magic].isDisabled) { + return; } - this.initialLabel = this.value; - this.valueLabel = this.initialLabel; - this.valuePlaceholder = this.initialLabel; - }); - }, - - _shouldCloseOnSelect() { - if (this._noCloseOnSelect) { - this._noCloseOnSelect = false; + if (! this[magic].isSelected && ! this[rootMagic].canSelectMore) { + return; + } - return false; - } + this.$data.__context.selectEl(el); + + this.$data.__isMultiple || this.$data.__close(); + }, + '@mousemove'() { this.$data.__context.activateEl(el) }, + '@mouseleave'() { this.$data.__context.deactivate() }, + }; +} + +export function searchDirective(el, Alpine) { + return { + 'x-ref': '__search', + ':id'() { return this.$id(`fc-${this.__type}-select-search`) }, + 'x-init'() { + // When using livewire search, the directive re-evaluates even when inside a wire:ignore, + // so we'll need to re-populate the value of the search query, so we don't lose it... + const searchableQuery = this.$data.__context.searchableQuery; + this.$el.value = searchableQuery; + + if (this.$data.__ready && this.$data.__isOpen && searchableQuery.length) { + this.$nextTick(() => { + if (this.$el.createTextRange) { + let range = this.$el.createTextRange(); + range.move('character', searchableQuery.length); + range.select(); + } else { + // This sets the cursor position to the end of the input and prevents + // the entire text from being highlighted. IMO this creates a better UX. + this.$el.focus(); + this.$el.setSelectionRange && this.$el.setSelectionRange(searchableQuery.length, searchableQuery.length); + } + }); + } + }, + '@keyup.debounce.250ms'(e) { + // We don't want our keyboard nav events to trigger this. + const keysToSkip = [ + 'Enter', + 'ArrowDown', + 'ArrowUp', + 'ArrowRight', + 'ArrowLeft', + 'Home', + 'PageUp', + 'End', + 'PageDown', + 'Tab', + 'Meta', + ]; + if (keysToSkip.includes(e.key)) { + return; + } - if (! this.closeOnSelect) { - return false; - } + this.$data.__context.handleSearchableQuery(e.target.value); + }, + // Prevent our option handler from firing when we're typing in the search box. + '@keydown.space.stop'() {}, + '@keydown.tab.prevent.stop'() { + // Options has x-trap on it, which prevent us from tabbing out of the search box. + // We'll allow the user to tab to the options, which will allow selecting an option using the space key. + this.$refs.__options.focus(); + } + }; +} + +export function tokenDirective(el, Alpine) { + return { + ':tabindex'() { return this.$data.__isDisabled ? false : '0' }, + ':role'() { return this.$el.tagName.toLowerCase() !== 'button' && ! this.$data.__isDisabled ? 'button' : false }, + 'x-init'() { + const initCallback = () => { + el.__key = this.$data.__context.getKeyFromValue(el.value); + }; + + if (this.$data.__ready) { + initCallback(); + } else { + queueMicrotask(initCallback); + } + }, + '@click.stop.prevent'() { + if (this.$data.__isDisabled || ! el.__key) { + return; + } - if (this.multiple) { - return this.maxSelected === null - ? this.value.length >= this.minSelected - : this.value.length >= this.maxSelected; - } + this.$data.__context.toggleSelected(el.__key); + }, + '@keydown.space.stop.prevent'() { + if (this.$data.__isDisabled || ! el.__key) { + return; + } - return true; - }, -}; + this.$data.__context.toggleSelected(el.__key); + }, + }; +} diff --git a/resources/js/mixins/selectContext.js b/resources/js/mixins/selectContext.js new file mode 100644 index 0000000..4c18933 --- /dev/null +++ b/resources/js/mixins/selectContext.js @@ -0,0 +1,841 @@ +export default Alpine => ({ + // Main state. + searchableText: {}, + disabledKeys: [], + activeKey: null, + selectedKeys: [], + orderedKeys: [], + elsByKey: {}, + values: {}, + + // These keys will be overridden by each select context implementation. + __config: {}, + __multiple: false, + __orientation: 'vertical', + __wire: undefined, + __wireSearch: undefined, + + /** + * Initialization. + */ + + initItem(el, value, disabled, isOptGroup = false) { + let key = (Math.random() + 1).toString(36).substring(7); + + // If the value is already selected, we will replace the key with the exising one. + // This usually only happens when options are refreshed via ajax. + const keyFromValue = this.getKeyFromValue(value, this.__config.by); + if (keyFromValue) { + key = keyFromValue; + } + + // We don't need to track "opt groups". + if (isOptGroup) { + return key; + } + + // Register value by key. + this.values[key] = value; + + // Associate key with element. + this.elsByKey[key] = el; + + // Register key for ordering. + this.orderedKeys.push(key); + + // Register key for searching. + this.searchableText[key] = el.textContent.trim().toLowerCase(); + + // Store whether disabled or not. + disabled && this.disabledKeys.push(key); + + this.__itemBooted(el, value, disabled, key); + + return key; + }, + + /** + * This provides a way for each select implementation to hook into the initItem process. + */ + __itemBooted(el, value, disabled, key) {}, + + destroyItem(el) { + let key = keyByValue(this.elsByKey, el); + + // We need to preserve this to keep the display on the button accurate. + if (! this.selectedKeys.includes(key)) { + delete this.values[key]; + } + + delete this.elsByKey[key]; + delete this.orderedKeys[this.orderedKeys.indexOf(key)]; + delete this.searchableText[key]; + delete this.disabledKeys[key]; + + this.reorderKeys(); + + this.__itemDestroyed(el, key); + }, + + /** + * This provides a way for each select implementation to hook into the destroyItem process. + */ + __itemDestroyed(el, key) {}, + + resetOptions() { + this.activeKey = null; + + this.reorderKeys(); + }, + + /** + * Handle elements. + */ + + reorderKeys() { + // Filter out elements removed from the DOM. + this.orderedKeys.forEach(key => { + const el = this.elsByKey[key]; + + if (el?.isConnected) { + return; + } + + this.destroyItem(el); + }); + + this.orderedKeys = this.orderedKeys.slice().sort((a, z) => { + if (a === null || z === null) { + return 0; + } + + const aEl = this.elsByKey[a]; + const zEl = this.elsByKey[z]; + + const position = aEl.compareDocumentPosition(zEl); + + if (position & Node.DOCUMENT_POSITION_FOLLOWING) { + return -1; + } + + if (position & Node.DOCUMENT_POSITION_PRECEDING) { + return 1; + } + + return 0; + }); + }, + + activeEl() { + if (! this.activeKey) { + return; + } + + return this.elsByKey[this.activeKey]; + }, + + isActiveEl(el) { + const key = keyByValue(this.elsByKey, el); + + if (! key) { + return; + } + + return this.activeKey === key; + }, + + activateEl(el) { + const key = keyByValue(this.elsByKey, el); + + if (! key) { + return; + } + + this.activateKey(key); + }, + + selectEl(el) { + const key = keyByValue(this.elsByKey, el); + + if (! key) { + return; + } + + this.selectKey(key); + }, + + isSelectedEl(el) { + const key = keyByValue(this.elsByKey, el); + + if (! key) { + return; + } + + return this.isSelected(key); + }, + + isDisabledEl(el) { + const key = keyByValue(this.elsByKey, el); + + if (! key) { + return; + } + + return this.isDisabled(key); + }, + + hideEl(el) { + el.style.display = 'none'; + el.setAttribute('data-hidden', 'true'); + }, + + showEl(el) { + el.style.display = ''; + el.removeAttribute('data-hidden'); + }, + + isHiddenEl(el) { + if (el.style.display === 'none') { + return true; + } + + return ! el.offsetParent; + }, + + scrollingCount: 0, + + activateAndScrollToKey(key) { + // This addresses the following problem: + // If deactivate is hooked up to mouseleave, + // scrolling to an element will trigger deactivation. + // This "isScrollingTo" is exposed to prevent that. + this.scrollingCount++; + + this.activateKey(key); + + const targetEl = this.elsByKey[key]; + + targetEl && targetEl.scrollIntoView({ block: 'nearest' }); + + setTimeout(() => { + this.scrollingCount--; + }, 25); + }, + + /** + * Handle values. + */ + + selectedBasicValueOrValues(by) { + if (this.__multiple) { + return this.selectedBasicValues(by); + } + + return this.selectedBasicValue(by); + }, + + selectedBasicValues(by) { + return this.selectedKeys.map(i => { + const value = this.values[i]; + + if (value?.hasOwnProperty(by)) { + return value[by]; + } + + return value; + }); + }, + + selectedBasicValue(by) { + const value = this.selectedKeys[0] + ? this.values[this.selectedKeys[0]] + : null; + + if (value?.hasOwnProperty(by)) { + return value[by]; + } + + return value; + }, + + selectedValueOrValues() { + if (this.__multiple) { + return this.selectedValues(); + } + + return this.selectedValue(); + }, + + selectedValues() { + return this.selectedKeys.map(i => this.values[i]); + }, + + selectedValue() { + return this.selectedKeys[0] ? this.values[this.selectedKeys[0]] : null; + }, + + selectValue(value, by) { + value = normalizeValue(value, this.__multiple); + by = mapByToCallback(by); + + if (this.__multiple) { + let keys = []; + + value.forEach(i => { + for (let key in this.values) { + if (by(this.values[key], i)) { + if (! keys.includes(key)) { + keys.push(key); + } + } + } + }); + + this.selectExclusive(keys); + + return; + } + + for (let key in this.values) { + if (value && by(this.values[key], value)) { + this.selectKey(key); + } + } + + // Handle edge cases where value is updated externally to null. + if (value === null) { + this.selectedKeys = []; + } + }, + + getKeyFromValue(value, by) { + if (! value) { + return; + } + + by = mapByToCallback(by); + + for (let key in this.values) { + if (by(this.values[key], value)) { + return key; + } + } + }, + + getKeyFromSimpleValue(value, by) { + if (! value) { + return; + } + + by = mapByToSimpleCompareCallback(by); + + for (let key in this.values) { + if (by(this.values[key], value)) { + return key; + } + } + }, + + getObjectFromValue(value, by) { + if (! value) { + return; + } + + by = mapByToSimpleCompareCallback(by); + + for (let key in this.values) { + if (by(this.values[key], value)) { + return this.values[key]; + } + } + }, + + toggleValue(value, by) { + if (! value) { + return; + } + + by = mapByToCallback(by); + + if (this.__multiple) { + for (let key in this.values) { + if (by(this.values[key], value)) { + this.toggleSelected(key); + + break; + } + } + } + }, + + /** + * Handle disabled keys. + */ + + isDisabled(key) { + return this.disabledKeys.includes(key); + }, + + /** + * Handle selected keys. + */ + + selectKey(key) { + if (this.isDisabled(key)) { + return; + } + + if (this.__multiple) { + this.toggleSelected(key); + } else { + this.selectOnly(key); + } + }, + + toggleSelected(key) { + if (this.selectedKeys.includes(key)) { + // If we have a minimum amount of options that must be selected, and we're greater than or equal + // to that amount, we can't deselect this option. + if (! this.canRemoveOptions()) { + return; + } + + this.selectedKeys.splice(this.selectedKeys.indexOf(key), 1); + } else { + this.selectedKeys.push(key); + } + }, + + selectOnly(key) { + this.selectedKeys = []; + this.selectedKeys.push(key); + }, + + selectExclusive(keys) { + // We can't just do this.selectedKeys = keys + // because we need to preserve reactivity... + let toAdd = [...keys]; + + for (let i = 0; i < this.selectedKeys.length; i++) { + if (keys.includes(this.selectedKeys[i])) { + delete toAdd[toAdd.indexOf(this.selectedKeys[i])]; + continue; + } + + if (! keys.includes(this.selectedKeys[i])) { + delete this.selectedKeys[i]; + } + } + + toAdd.forEach(i => { + this.selectedKeys.push(i); + }); + }, + + clearSelected() { + if (this.__config.optional === false) { + return; + } + + this.selectedKeys = []; + }, + + selectActive() { + if (! this.activeKey) { + return; + } + + this.selectKey(this.activeKey); + }, + + isSelected(key) { + return this.selectedKeys.includes(key); + }, + + firstSelectedKey() { + return this.selectedKeys[0]; + }, + + /** + * Handle activated keys. + */ + + hasActive() { + return !! this.activeKey; + }, + + isActiveKey(key) { + return this.activeKey === key; + }, + + get active() { + return this.hasActive() && this.values[this.activeKey]; + }, + + activateSelectedOrFirst() { + setTimeout(() => { + let firstSelected = this.firstSelectedKey(); + + if (firstSelected) { + return this.activateAndScrollToKey(firstSelected); + } + + let firstKey = this.firstKey(); + + if (firstKey) { + this.activateAndScrollToKey(firstKey); + } + }, 25); + }, + + activateKey(key) { + if (this.isDisabled(key)) { + return; + } + + this.activeKey = key; + }, + + deactivate() { + if (! this.activeKey) { + return; + } + + if (this.isScrollingTo) { + return; + } + + this.activeKey = null; + }, + + /** + * Handle active key traversal. + */ + + nextKey() { + if (! this.activeKey) { + return; + } + + let index = this.nonDisabledOrderedKeys.findIndex(i => i === this.activeKey) + let targetKey = this.nonDisabledOrderedKeys[index + 1]; + + if (targetKey && this.isHiddenEl(this.elsByKey[targetKey])) { + // If the next key is hidden, we need to skip to the next visible non-disabled key. + targetKey = this.getNextVisibleKey(index); + } + + return targetKey || this.firstKey(); + }, + + prevKey() { + if (! this.activeKey) { + return; + } + + let index = this.nonDisabledOrderedKeys.findIndex(i => i === this.activeKey); + let targetKey = this.nonDisabledOrderedKeys[index - 1]; + + if (targetKey && this.isHiddenEl(this.elsByKey[targetKey])) { + // If the previous key is hidden, we need to skip to the previous visible non-disabled key. + targetKey = this.getPrevVisibleKey(index); + } + + return targetKey || this.lastKey(); + }, + + firstKey() { + let targetKey = this.nonDisabledOrderedKeys[0]; + + if (targetKey && this.isHiddenEl(this.elsByKey[targetKey])) { + // If the first key is hidden, we need to skip to the next visible non-disabled key. + targetKey = this.getNextVisibleKey(-1); + } + + return targetKey; + }, + + lastKey() { + let targetKey = this.nonDisabledOrderedKeys[this.nonDisabledOrderedKeys.length - 1]; + + if (targetKey && this.isHiddenEl(this.elsByKey[targetKey])) { + // If the last key is hidden, we need to skip to the previous visible non-disabled key. + targetKey = this.getPrevVisibleKey(this.nonDisabledOrderedKeys.length); + } + + return targetKey; + }, + + getNextVisibleKey(index) { + let targetKey; + let currentIndex = index + 2; + let visibleKeyFound = false; + + while (currentIndex < this.nonDisabledOrderedKeys.length && ! visibleKeyFound) { + targetKey = this.nonDisabledOrderedKeys[currentIndex]; + + visibleKeyFound = ! this.isHiddenEl(this.elsByKey[targetKey]); + + currentIndex++; + } + + if (! visibleKeyFound) { + targetKey = null; + } + + return targetKey; + }, + + getPrevVisibleKey(index) { + let targetKey; + let currentIndex = index - 2; + let visibleKeyFound = false; + + while (currentIndex >= 0 && ! visibleKeyFound) { + targetKey = this.nonDisabledOrderedKeys[currentIndex]; + + visibleKeyFound = ! this.isHiddenEl(this.elsByKey[targetKey]); + + currentIndex--; + } + + if (! visibleKeyFound) { + targetKey = null; + } + + return targetKey; + }, + + /** + * Handle simple search when menu is focused. + */ + + searchQuery: '', + + clearSearch: Alpine.debounce(function () { this.searchQuery = '' }, 350), + + searchKey(query) { + this.clearSearch(); + + this.searchQuery += query; + + let foundKey; + + for (let key in this.searchableText) { + let content = this.searchableText[key]; + + if (content.startsWith(this.searchQuery)) { + foundKey = key; + break; + } + } + + if (! this.nonDisabledOrderedKeys.includes(foundKey)) { + return; + } + + return foundKey; + }, + + /** + * Handle full text search from the search input. + */ + + searchableQuery: '', + + handleSearchableQuery(query) { + if (query === this.searchableQuery) { + return; + } + + this.searchableQuery = query; + + if (this.__wire && this.__wireSearch) { + this.__wire[this.__wireSearch](this.searchableQuery); + + return; + } + + for (let key in this.searchableText) { + const content = this.searchableText[key]; + const el = this.elsByKey[key]; + + const match = this.searchableQuery + ? content.toLowerCase().includes(this.searchableQuery.toLowerCase()) + : true; + + match + ? this.showEl(el) + : this.hideEl(el); + } + }, + + /** + * Other utils. + */ + + canRemoveOptions() { + if (! this.__multiple && this.selectedKeys.length === 1) { + return this.__config.optional; + } + + const minSelected = this.__config.minSelected; + + if (Number.isNaN(minSelected) || minSelected < 1) { + return true; + } + + return this.selectedKeys.length > minSelected; + }, + + /** + * Handle events. + */ + + activateByKeyEvent(e) { + this.reorderKeys(); + + if (this.__activateByKeyEvent(e) === false) { + return; + } + + let hasActive = this.hasActive(); + let targetKey; + + switch (e.key) { + case 'Tab': + case 'Backspace': + case 'Delete': + case 'Meta': + break; + case ['ArrowDown', 'ArrowRight'][this.__orientation === 'vertical' ? 0 : 1]: + e.preventDefault(); + e.stopPropagation(); + targetKey = hasActive ? this.nextKey() : this.firstKey(); + break; + case ['ArrowUp', 'ArrowLeft'][this.__orientation === 'vertical' ? 0 : 1]: + e.preventDefault(); + e.stopPropagation(); + targetKey = hasActive ? this.prevKey() : this.lastKey(); + break; + case 'Home': + case 'PageUp': + e.preventDefault(); + e.stopPropagation(); + targetKey = this.firstKey(); + break; + case 'End': + case 'PageDown': + e.preventDefault(); + e.stopPropagation(); + targetKey = this.lastKey(); + break; + default: + if (e.key.length === 1) { + targetKey = this.searchKey(e.key); + } + + break; + } + + if (targetKey) { + this.activateAndScrollToKey(targetKey); + } + }, + + // This is a way to allow each select implementation to add their own logic to keyboard events on the options menu. + __activateByKeyEvent(e) {}, +}); + +export const keyByValue = (object, value) => Object.keys(object).find(key => object[key] === value); + +export const isObjectOrArray = subject => typeof subject === 'object' && subject !== null; + +export const renderHiddenInputs = (el, name, value) => { + // Create input elements. + let newInputs = generateInputs(name, value); + + // Mark them for later tracking. + newInputs.forEach(i => i._x_hiddenInput = true); + + // Mark them for Alpine ignoring. + newInputs.forEach(i => i._x_ignore = true); + + // Gather old elements for removal. + let children = el.children; + let oldInputs = []; + + for (let i = 0; i < children.length; i++) { + let child = children[i]; + + if (child._x_hiddenInput) { + oldInputs.push(child); + } else { + break; + } + } + + // Remove old, and insert new ones into the DOM. + window.Alpine.mutateDom(() => { + oldInputs.forEach(i => i.remove()); + + newInputs.reverse().forEach(i => el.prepend(i)); + }); +}; + +const mapByToCallback = by => { + if (! by) { + by = (a, b) => a === b; + } + + if (typeof by === 'string') { + const property = by; + by = (a, b) => a[property] === b[property]; + } + + return by; +}; + +const mapByToSimpleCompareCallback = by => { + if (! by) { + by = (a, b) => a === b; + } + + if (typeof by === 'string') { + const property = by; + by = (a, b) => a[property] === b; + } + + return by; +}; + +const normalizeValue = (value, multiple) => { + if (! value) { + value = (multiple ? [] : null); + } + + if (multiple && ! Array.isArray(value)) { + value = [value]; + } + + return value; +}; + +const generateInputs = (name, value, carry = []) => { + if (isObjectOrArray(value)) { + for (let key in value) { + carry = carry.concat( + generateInputs(`${name}[${key}]`, value[key]) + ); + } + } else if (value !== null && value !== false) { + let el = document.createElement('input'); + el.setAttribute('type', 'hidden'); + el.setAttribute('name', name); + el.setAttribute('value', '' + value); + + return [el]; + } + + return carry; +}; diff --git a/resources/js/mixins/selectMagic.js b/resources/js/mixins/selectMagic.js new file mode 100644 index 0000000..484799b --- /dev/null +++ b/resources/js/mixins/selectMagic.js @@ -0,0 +1,144 @@ +export const rootMagic = (el, Alpine, callback, stubCallback) => { + let data = Alpine.$data(el); + + if (typeof stubCallback !== 'function') { + stubCallback = () => ({}); + } + + if (typeof callback !== 'function') { + callback = () => ({}); + } + + if (! data.__ready) { + return { + isDisabled: false, + isOpen: false, + selected: null, + active: null, + selectedObject: null, + ...stubCallback(data), + }; + } + + return { + get isOpen() { + return data.__isOpen; + }, + get isDisabled() { + return data.__isDisabled; + }, + get isSearchable() { + return data.__searchable; + }, + get selected() { + return data.__value; + }, + get active() { + return data.__context.active; + }, + get selectedObject() { + return data.__richValue; + }, + get hasValue() { + if (data.__isMultiple) { + return data.__value && data.__value.length > 0; + } + + return !! data.__value; + }, + get shouldShowClear() { + // If the input is disabled or readonly, we can't clear. + if (data.__isDisabled) { + return false; + } + + // If the select is not marked as optional, at least one value is required. + if (data.__config.optional === false) { + return false; + } + + // If multi-select and minSelected is a number and at least 1, then we can't clear. + if (data.__isMultiple && ! Number.isNaN(data.__config.minSelected) && data.__config.minSelected > 0) { + return false; + } + + return data.__isClearable && this.hasValue; + }, + get canSelectMore() { + if (! data.__isMultiple) { + return true; + } + + // If maxSelected is not a number or less than one, then we can select as many as we want. + if (Number.isNaN(data.__config.maxSelected) || data.__config.maxSelected < 1) { + return true; + } + + return data.__config.maxSelected > data.__value.length; + }, + get canDeselectOptions() { + if (data.__isDisabled) { + return false; + } + + return data.__context.canRemoveOptions(); + }, + get hasOptions() { + // We access searchableQuery here, so a change to it will trigger this getter to re-evaluate. + data.__context.searchableQuery; + + return data.$refs.__options && + data.$refs.__options.querySelectorAll('[role="option"]:not([data-hidden])').length > 0; + }, + get hasSearch() { + return !! data.__context.searchableQuery; + }, + + ...callback(data), + }; +}; + +export const optionMagic = (el, Alpine, callback, stubCallback) => { + if (typeof stubCallback !== 'function') { + stubCallback = () => ({}); + } + + if (typeof callback !== 'function') { + callback = () => ({}); + } + + let data = Alpine.$data(el); + + let stub = { + isDisabled: false, + isSelected: false, + isActive: false, + ...stubCallback(data), + }; + + if (! data.__ready) { + return stub; + } + + let optionEl = Alpine.findClosest(el, i => i.__optionKey); + + if (! optionEl) { + return stub; + } + + let context = data.__context; + + return { + get isActive() { + return context.isActiveEl(optionEl); + }, + get isSelected() { + return context.isSelectedEl(optionEl); + }, + get isDisabled() { + return context.isDisabledEl(optionEl); + }, + + ...callback(data, context, optionEl), + }; +}; diff --git a/resources/js/mixins/selectPopper.js b/resources/js/mixins/selectPopper.js new file mode 100644 index 0000000..3ced222 --- /dev/null +++ b/resources/js/mixins/selectPopper.js @@ -0,0 +1,37 @@ +export default { + __createPopper: undefined, + __popper: undefined, + + __resetPopper() { + if (this.__popper) { + this.__popper.destroy(); + this.__popper = null; + } + }, + + __popperConfig() { + return { + placement: 'bottom-start', + strategy: this.__fixed ? 'fixed' : 'absolute', + modifiers: [ + { + name: 'offset', + options: { + offset: [0, 10], + }, + }, + { + name: 'preventOverflow', + options: { + boundariesElement: this.$root, + }, + }, + ], + }; + }, + + __initPopper() { + this.__resetPopper(); + this.__popper = this.__createPopper(this.$root, this.$refs.__options, this.__popperConfig()); + }, +}; diff --git a/resources/js/tailwind-plugins/switch-toggle.js b/resources/js/tailwind-plugins/switch-toggle.js new file mode 100644 index 0000000..2b83033 --- /dev/null +++ b/resources/js/tailwind-plugins/switch-toggle.js @@ -0,0 +1,25 @@ +module.exports = function ({ addComponents, theme, config }) { + const colors = config('theme.colors', {}), + expectedVariants = ['50', '100', '200', '300', '400', '500', '600', '700', '800', '900'], + toggles = {}; + + for (const colorName in colors) { + const color = colors[colorName]; + + if (typeof color !== 'object') { + continue; + } + + if (! expectedVariants.every(key => Object.keys(color).includes(key))) { + continue; + } + + toggles[`.switch-toggle--${colorName}`] = { + '--switch-toggle-bg-checked': color['600'], + '--switch-toggle-ring-color': color['300'], + '--switch-toggle-dark-ring-color': color['800'], + }; + } + + addComponents(toggles); +}; diff --git a/resources/js/util/customSelectContext.js b/resources/js/util/customSelectContext.js new file mode 100644 index 0000000..f9d2e61 --- /dev/null +++ b/resources/js/util/customSelectContext.js @@ -0,0 +1,28 @@ +import selectContext from '../mixins/selectContext'; + +export const generateContext = ({ multiple, orientation, __wire, __wireSearch, __config, Alpine }) => { + return { + ...selectContext(Alpine), + + /** + * Select configuration. + */ + __multiple: multiple, + __orientation: orientation, + __wire, + __wireSearch, + __config, + + /** + * Getters that don't work in the mixin for some reason... + */ + + get isScrollingTo() { + return this.scrollingCount > 0; + }, + + get nonDisabledOrderedKeys() { + return this.orderedKeys.filter(i => ! this.isDisabled(i)); + }, + }; +}; diff --git a/resources/js/util/findElement.js b/resources/js/util/findElement.js deleted file mode 100644 index 016d0b1..0000000 --- a/resources/js/util/findElement.js +++ /dev/null @@ -1,15 +0,0 @@ -export const findClosest = (el, callback) => { - if (! el) { - return; - } - - if (callback(el)) { - return el; - } - - if (! el.parentElement) { - return; - } - - return findClosest(el.parentElement, callback); -}; diff --git a/resources/js/util/findLastIndex.js b/resources/js/util/findLastIndex.js deleted file mode 100644 index 2849359..0000000 --- a/resources/js/util/findLastIndex.js +++ /dev/null @@ -1,10 +0,0 @@ -export default (array, predicate) => { - let l = array.length; - while (l--) { - if (predicate(array[l], l, array)) { - return l; - } - } - - return -1; -}; diff --git a/resources/js/util/focusElement.js b/resources/js/util/focusElement.js deleted file mode 100644 index 2859027..0000000 --- a/resources/js/util/focusElement.js +++ /dev/null @@ -1,35 +0,0 @@ -export const focusElementInParent = (el, parent, options = {}) => { - try { - const offsetTop = el.offsetTop; - parent.scrollTop = offsetTop || 0; - - if (! isInParentViewport(el, parent, options)) { - el.scrollIntoView({ block: options.block || 'end', inline: 'nearest', behavior: 'smooth' }); - } - } catch (e) {} -}; - -const isInParentViewport = (el, parent, options = {}) => { - const position = positionRelativeToParent(el, parent); - const threshold = options.threshold || el.offsetHeight; - - return ( - position.top >= 0 && - position.left >= 0 && - position.bottom <= parent.offsetHeight && - position.right <= parent.offsetWidth && - position.top <= (parent.offsetHeight - threshold) - ); -}; - -const positionRelativeToParent = (el, parent) => { - const parentPosition = parent.getBoundingClientRect(); - const childPosition = el.getBoundingClientRect(); - - return { - top: childPosition.top - parentPosition.top, - right: childPosition.right - parentPosition.right, - bottom: childPosition.bottom - parentPosition.bottom, - left: childPosition.left - parentPosition.left, - }; -}; diff --git a/resources/js/util/get.js b/resources/js/util/get.js deleted file mode 100644 index 0839ea3..0000000 --- a/resources/js/util/get.js +++ /dev/null @@ -1,61 +0,0 @@ -import { isArray, isNull, isObject, isUndefinedOrNull } from './inspect'; -import { RX_ARRAY_NOTATION } from './regex'; -import identity from './identity'; - -/** - * Get property defined by dot/array notation in string, returns undefined if not found. - * - * @param {Object} obj - * @param {String|Array} path - * @param {*} defaultValue - * @return {*} - */ -export const getRaw = (obj, path, defaultValue = undefined) => { - // Handle array of path values. - path = isArray(path) ? path.join('.') : path; - - // If no path or object passed. - if (! path || ! isObject(obj)) { - return defaultValue; - } - - // Handle edge case where user has dot(s) in top-level item field key. - // Using `in` operator vs `hasOwnProperty` to handle obj.prototype getters. - if (path in obj) { - return obj[path]; - } - - // Handle string array notation (numeric indices only). - path = String(path).replace(RX_ARRAY_NOTATION, '.$1'); - - const steps = path.split('.').filter(identity); - - // Handle case where someone passes a string of only dots - if (steps.length === 0) { - return defaultValue; - } - - // Traverse path in object to find result. - // Using `in` operator vs `hasOwnProperty` to handle obj.prototype getters. - return steps.every(step => isObject(obj) && step in obj && ! isUndefinedOrNull((obj = obj[step]))) - ? obj - : isNull(obj) - ? null - : defaultValue; -}; - -/** - * Get property by dot/array notation in string. - * - * @param {Object} obj - * @param {String|Array} path - * @param {*} defaultValue (optional) - * @return {*} - */ -export const get = (obj, path, defaultValue = null) => { - const val = getRaw(obj, path); - - return isUndefinedOrNull(val) ? defaultValue : val; -}; - -export default get; diff --git a/resources/js/util/id.js b/resources/js/util/id.js deleted file mode 100644 index 3814895..0000000 --- a/resources/js/util/id.js +++ /dev/null @@ -1 +0,0 @@ -export const uniqueId = prefix => `${prefix}_${Math.random().toString(36).slice(2)}`; diff --git a/resources/js/util/identity.js b/resources/js/util/identity.js deleted file mode 100644 index de56036..0000000 --- a/resources/js/util/identity.js +++ /dev/null @@ -1,3 +0,0 @@ -const identity = x => x; - -export default identity; diff --git a/resources/js/util/inspect.js b/resources/js/util/inspect.js deleted file mode 100644 index 88f1a50..0000000 --- a/resources/js/util/inspect.js +++ /dev/null @@ -1,17 +0,0 @@ -export const isArray = val => Array.isArray(val); - -export const isUndefined = val => val === undefined; - -export const isNull = val => val === null; - -export const isUndefinedOrNull = val => isUndefined(val) || isNull(val); - -// Quick object check. -// This is primarily used to tell Objects from primitive values -// when we know the value is a JSON-compliant type. -// Note: object could be a complex type like array, Date, etc. -export const isObject = obj => obj !== null && typeof obj === 'object'; - -// Strict object type check. -// Only returns true for plain JavaScript objects. -export const isPlainObject = obj => Object.prototype.toString.call(obj) === '[object Object]'; diff --git a/resources/js/util/options.js b/resources/js/util/options.js deleted file mode 100644 index 23e5cd0..0000000 --- a/resources/js/util/options.js +++ /dev/null @@ -1,62 +0,0 @@ -import { isArray, isNull, isPlainObject, isUndefined } from './inspect'; -import get from './get'; - -export const normalizeOption = (option, fields = {}, key = null) => { - // When the option is an object, normalize it. - if (isPlainObject(option)) { - const value = get(option, fields.valueField || 'value'); - const text = get(option, fields.textField || 'text'); - const options = get(option, fields.optionField || 'options'); - - // When it has options, create an `` object. - if (! isNull(options)) { - return { - label: String(get(option, fields.labelField || 'label') || text), - options: normalizeOptions(options), - }; - } - - // Otherwise create an ``, and - // its options need to be pushed onto the base option array. - if (option.hasOwnProperty('label')) { - mapped.push({ label: option.label }); - mapped = mapped.concat(option.options); - } else { - mapped.push(option); - } - }); - - return mapped; -}; diff --git a/resources/js/util/prototypes.js b/resources/js/util/prototypes.js deleted file mode 100644 index b1b229f..0000000 --- a/resources/js/util/prototypes.js +++ /dev/null @@ -1,20 +0,0 @@ -if (typeof String.prototype.toSlug !== 'function') { - String.prototype.toSlug = function () { - let str = this.toString(); - str = str.replace(/^\s+|\s+$/g, ''); - str = str.toLowerCase(); - - // remove accents, swap ñ for n, etc - const from = 'àáäâèéëêìíïîòóöôùúüûñç·/_,:;'; - const to = 'aaaaeeeeiiiioooouuuunc------'; - for (let i = 0, l = from.length; i < l; i++) { - str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i)); - } - - str = str.replace(/[^a-z0-9 -]/g, '') // remove invalid chars - .replace(/\s+/g, '-') // collapse whitespace and replace by - - .replace(/-+/g, '-'); // collapse dashes - - return str; - }; -} diff --git a/resources/js/util/regex.js b/resources/js/util/regex.js deleted file mode 100644 index 803a25d..0000000 --- a/resources/js/util/regex.js +++ /dev/null @@ -1 +0,0 @@ -export const RX_ARRAY_NOTATION = /\[(\d+)]/g; \ No newline at end of file diff --git a/resources/js/util/treeSelectContext.js b/resources/js/util/treeSelectContext.js new file mode 100644 index 0000000..8995db6 --- /dev/null +++ b/resources/js/util/treeSelectContext.js @@ -0,0 +1,124 @@ +import selectContext from '../mixins/selectContext'; +import { keyByValue } from '../mixins/selectContext'; + +export const generateContext = ({ multiple, orientation, __wire, __wireSearch, __config, Alpine }) => { + return { + ...selectContext(Alpine), + + /** + * Select configuration. + */ + + __multiple: multiple, + __orientation: orientation, + __wire, + __wireSearch, + __config, + + /** + * Tree select specific configuration. + */ + + expandableEls: {}, + expandedKeys: [], + + __itemBooted(el, value, disabled, key) { + // We need to wait for the option to finish initializing before we can check + // for the presence of children. + queueMicrotask(() => { + if (el.__children?.length) { + this.expandableEls[key] = el; + } + }); + }, + + __itemDestroyed(el, key) { + if (this.expandableEls[key]) { + delete this.expandableEls[key]; + } + + if (this.expandedKeys.includes(key)) { + this.expandedKeys.splice(this.expandedKeys.indexOf(key), 1); + } + }, + + isExpandedEl(el) { + const key = keyByValue(this.elsByKey, el); + + if (! key) { + return; + } + + return this.expandedKeys.includes(key); + }, + + toggleExpandedEl(el) { + const key = keyByValue(this.elsByKey, el); + + if (! key) { + return; + } + + this.toggleExpanded(key); + }, + + toggleExpanded(key) { + if (this.expandedKeys.includes(key)) { + this.expandedKeys.splice(this.expandedKeys.indexOf(key), 1); + } else { + this.expandedKeys.push(key); + } + }, + + expandChildren(key) { + if (! this.expandedKeys.includes(key)) { + this.expandedKeys.push(key); + } + }, + + collapseChildren(key) { + if (this.expandedKeys.includes(key)) { + this.expandedKeys.splice(this.expandedKeys.indexOf(key), 1); + } + }, + + __activateByKeyEvent(e) { + if (! this.hasActive()) { + return; + } + + switch (e.key) { + case ['ArrowRight', 'ArrowDown'][this.__orientation === 'vertical' ? 0 : 1]: + e.preventDefault(); + e.stopPropagation(); + + if (this.expandableEls[this.activeKey]) { + this.expandChildren(this.activeKey); + } + + return false; + case ['ArrowLeft', 'ArrowUp'][this.__orientation === 'vertical' ? 0 : 1]: + e.preventDefault(); + e.stopPropagation(); + + if (this.expandableEls[this.activeKey]) { + this.collapseChildren(this.activeKey); + } + + return false; + } + }, + + /** + * Getters that don't work in the mixin for some reason... + */ + + get isScrollingTo() { + return this.scrollingCount > 0; + }, + + get nonDisabledOrderedKeys() { + return this.orderedKeys.filter(i => ! this.isDisabled(i)); + }, + }; +}; diff --git a/resources/lang/en/messages.php b/resources/lang/en/messages.php index ef9b4ef..fe11235 100644 --- a/resources/lang/en/messages.php +++ b/resources/lang/en/messages.php @@ -2,7 +2,6 @@ return [ 'filepond_instructions' => 'Upload a file or drag and drop', - 'file_upload_label' => 'Select File', 'file_upload_processing' => 'Processing...', 'custom_select_filter_placeholder' => 'Search...', 'custom_select_clear_button' => 'Clear selected', @@ -11,7 +10,6 @@ 'custom_select_no_results' => 'No results found...', 'date_picker_placeholder' => 'Y-m-d', 'timezone_select_placeholder' => 'Select a timezone', - 'switch_button_label' => 'Turn on', 'optional' => 'Optional', 'date_picker_toggle_icon_title' => 'Select a date', 'date_picker_clear_button' => 'Clear selected', diff --git a/resources/views/components/choice/checkbox-group.blade.php b/resources/views/components/choice/checkbox-group.blade.php index 31641bd..05d2dd9 100644 --- a/resources/views/components/choice/checkbox-group.blade.php +++ b/resources/views/components/choice/checkbox-group.blade.php @@ -1,4 +1,4 @@ -
class($stacked ? 'space-y-4' : 'form-checkbox-group grid gap-4 items-start') }} +
class($classes()) }} @unless ($stacked) style="--fc-checkbox-grid-cols: {{ $gridCols }};" @endunless > {{ $slot }} diff --git a/resources/views/components/choice/checkbox-or-radio.blade.php b/resources/views/components/choice/checkbox-or-radio.blade.php index eda7585..7a6228d 100644 --- a/resources/views/components/choice/checkbox-or-radio.blade.php +++ b/resources/views/components/choice/checkbox-or-radio.blade.php @@ -1,34 +1,26 @@ -
-
- class($type === 'checkbox' ? 'form-checkbox h-4 w-4 text-blue-600 border-slate-300 rounded focus:ring-blue-500' : 'form-radio h-4 w-4 text-blue-600 border-slate-300 focus:ring-blue-500')->except('type') !!} - @if ($name) name="{{ $name }}" @endif - @if ($id) id="{{ $id }}" @endif - type="{{ $type }}" - @if ($value) value="{{ $value }}" @endif - @if ($checked && ! $hasBoundModel()) checked @endif - {{ $extraAttributes }} - {!! $ariaDescribedBy() !!} - @if ($hasErrorsAndShow($name)) - aria-invalid="true" - @endif - /> -
+@aware(['inputSize' => null]) - @if (! $slot->isEmpty() || $label || $description) -
- @if (! $slot->isEmpty() || $label) - - @endif +
+ @includeWhen($labelLeft, 'form-components::components.choice.partials.label') - @if ($description) -

{{ $description }}

+
$labelLeft, + ])> + except(['aria-describedby', 'type'])->class($inputClass()) }} + type="{{ $type }}" + @if ($name) name="{{ $name }}" @endif + @if ($id) id="{{ $id }}" @endif + @if ($hasErrorsAndShow($name)) + aria-invalid="true" @endif -
- @endif + {!! $ariaDescribedBy() !!} + {{ $extraAttributes ?? '' }} + @if ($value && ! $hasBoundModel()) value="{{ $value }}" @endif + @checked($checked && ! $hasBoundModel()) + /> +
+ + @includeWhen(! $labelLeft, 'form-components::components.choice.partials.label')
diff --git a/resources/views/components/choice/partials/label.blade.php b/resources/views/components/choice/partials/label.blade.php new file mode 100644 index 0000000..757eb44 --- /dev/null +++ b/resources/views/components/choice/partials/label.blade.php @@ -0,0 +1,28 @@ +@if ($label || $description || ! $slot->isEmpty()) +
$labelLeft, + ])> + @if ($label || ! $slot->isEmpty()) + + @endif + + @if ($description) + @if ($inlineDescription) + + @if ($label || ! $slot->isEmpty()) + {{ $label ?? $slot }} + @endif + {{ $description }} + + @else +

{{ $description }}

+ @endif + @endif +
+@endif diff --git a/resources/views/components/choice/switch-toggle.blade.php b/resources/views/components/choice/switch-toggle.blade.php index 8833777..c3430c8 100644 --- a/resources/views/components/choice/switch-toggle.blade.php +++ b/resources/views/components/choice/switch-toggle.blade.php @@ -1,6 +1,6 @@ -
wire('model')), @elseif ($hasXModel()) @@ -8,91 +8,68 @@ @else value: {{ \Illuminate\Support\Js::from($value) }}, @endif - get isPressed() { - return this.value === this.onValue; - }, - toggle() { - this.value = this.isPressed ? this.offValue : this.onValue; - $dispatch('input', this.value); - @if ($hasXModel()) - {{ $attributes->first('x-model') }} = this.value; - @endif - }, - }" - wire:ignore.self - class="{{ $getContainerClass() }}" - {{ $extraAttributes }} -> - @if ($label && $labelPosition === 'left') - - {{ $label }} - + onValue: {{ \Illuminate\Support\Js::from($onValue) }}, + offValue: {{ \Illuminate\Support\Js::from($offValue) }}, + })" + @if ($hasXModel()) + x-modelable="value" + {{ $attributes->whereStartsWith('x-model') }} @endif +> +
diff --git a/resources/views/components/files/file-pond.blade.php b/resources/views/components/files/file-pond.blade.php index 5602aae..c6a2866 100644 --- a/resources/views/components/files/file-pond.blade.php +++ b/resources/views/components/files/file-pond.blade.php @@ -1,80 +1,41 @@ -
wire('model')->value() }}', + __value: @entangle($attributes->wire('model')), + @elseif ($hasXModel()) + __value: {{ $attributes->first('x-model') }}, @endif - }); - @endif - $nextTick(function () { - pond = FilePond.create($refs.input, { - {{ $jsonOptions() }} - @if ($attributes->hasStartsWith('wire:model')) - server: { - process: (fieldName, file, metadata, load, error, progress, abort, transfer, options) => { - @this.upload('{{ $attributes->wire('model')->value() }}', file, load, error, progress); - }, - revert: (filename, load) => { - @this.removeUpload('{{ $attributes->wire('model')->value() }}', filename, load); - }, - }, - @endif - {{ $optionsSlot ?? '' }} - }); - }); - " -> - except('wire:model') }} - /> + options: {{ \Illuminate\Support\Js::from($options()) }}, + + __config(instance, options, pondOptions) { + return { {{ $config ?? '' }} }; + }, + + id: {{ \Illuminate\Support\Js::from($id) }}, + })" + x-cloak + x-on:file-pond-clear.window="__clear($event.detail.id)" + + @if ($hasXModel()) + {{ $attributes->whereStartsWith('x-model') }} + x-modelable="__value" + @endif + > + {{-- this input will be completely wiped away once we initialize filepond --}} + +
diff --git a/resources/views/components/files/file-upload.blade.php b/resources/views/components/files/file-upload.blade.php index 1a040ed..4e41c6d 100644 --- a/resources/views/components/files/file-upload.blade.php +++ b/resources/views/components/files/file-upload.blade.php @@ -1,72 +1,22 @@ -
+
{{ $slot }} -
- - except('class') }} - {{ $extraAttributes }} - /> + @include('form-components::components.files.partials.file-input') + @includeWhen($canShowUploadProgress(), 'form-components::components.files.partials.upload-progress') - - - - {{-- Upload progress --}} - @if ($canShowUploadProgress($attributes)) -
-
-
- {{ __('form-components::messages.file_upload_processing') }} -
- -
- - -
-
- -
-
-
-
-
- @endif + {{ $afterInput ?? '' }}
{{ $after ?? '' }} diff --git a/resources/views/components/files/partials/custom-progress-bar.blade.php b/resources/views/components/files/partials/custom-progress-bar.blade.php new file mode 100644 index 0000000..29decfe --- /dev/null +++ b/resources/views/components/files/partials/custom-progress-bar.blade.php @@ -0,0 +1,9 @@ +
+
+
diff --git a/resources/views/components/files/partials/file-input.blade.php b/resources/views/components/files/partials/file-input.blade.php new file mode 100644 index 0000000..d961bbc --- /dev/null +++ b/resources/views/components/files/partials/file-input.blade.php @@ -0,0 +1,16 @@ +except('aria-describedby')->class($inputClass()) }} + + {{ $extraAttributes ?? '' }} +/> diff --git a/resources/views/components/files/partials/native-progress-bar.blade.php b/resources/views/components/files/partials/native-progress-bar.blade.php new file mode 100644 index 0000000..b6744d2 --- /dev/null +++ b/resources/views/components/files/partials/native-progress-bar.blade.php @@ -0,0 +1,3 @@ +
+ +
diff --git a/resources/views/components/files/partials/upload-progress.blade.php b/resources/views/components/files/partials/upload-progress.blade.php new file mode 100644 index 0000000..11c8012 --- /dev/null +++ b/resources/views/components/files/partials/upload-progress.blade.php @@ -0,0 +1,20 @@ +
+
+
+ {{ __('form-components::messages.file_upload_processing') }} +
+ +
+ +
+
+ + {{-- progress bar --}} + @includeWhen($useNativeProgressBar, 'form-components::components.files.partials.native-progress-bar') + @includeWhen(! $useNativeProgressBar, 'form-components::components.files.partials.custom-progress-bar') +
diff --git a/resources/views/components/form-error.blade.php b/resources/views/components/form-error.blade.php index c0d9d00..a19b863 100644 --- a/resources/views/components/form-error.blade.php +++ b/resources/views/components/form-error.blade.php @@ -1,5 +1,5 @@ @error($name, $bag) - <{{ $tag }} {{ $attributes->merge(['class' => 'form-error mt-1 text-red-500 text-sm', 'id' => "{$inputId}-error"]) }}> + <{{ $tag }} {{ $attributes->merge(['class' => 'form-error', 'id' => "{$inputId}-error"]) }}> @if ($slot->isEmpty()) {{ $message }} @else diff --git a/resources/views/components/form-group.blade.php b/resources/views/components/form-group.blade.php index 95376ba..1347818 100644 --- a/resources/views/components/form-group.blade.php +++ b/resources/views/components/form-group.blade.php @@ -1,27 +1,33 @@ -
class($groupClass()) }}> - @include('form-components::partials.form-group-label') +
only('class')->class($groupClass()) }}> +
+
except('class') }}> + @include('form-components::partials.form-group-label') -
$inline, - ]) - > - {{ $slot }} +
$inline, + config('form-components.defaults.form_group.content_class'), + ])> + {{ $slot }} - @if ($hasErrorsAndShow($name)) - - @endif + @if ($hasErrorsAndShow($name)) + + @endif - @if ($inline && $hint) - - @endif + @if ($inline && $hint) + + {{ $hint }} + + @endif - @if ($helpText) -

{{ $helpText }}

- @endif + @if ($helpText) +

{{ $helpText }}

+ @endif + + {{ $after ?? '' }} +
+
diff --git a/resources/views/components/form.blade.php b/resources/views/components/form.blade.php index 532f745..655b526 100644 --- a/resources/views/components/form.blade.php +++ b/resources/views/components/form.blade.php @@ -7,9 +7,9 @@ enctype="multipart/form-data" @endif - @if (! $spellcheck) - spellcheck="false" - @endif + @unless ($spellcheck) + spellcheck="false" + @endunless {{ $attributes }} > diff --git a/resources/views/components/inputs/custom-select-option.blade.php b/resources/views/components/inputs/custom-select-option.blade.php index bd1e1c3..fc9d213 100644 --- a/resources/views/components/inputs/custom-select-option.blade.php +++ b/resources/views/components/inputs/custom-select-option.blade.php @@ -1,62 +1,62 @@ -@aware(['name' => '', 'multiple' => false, 'showCheckbox' => false]) +@aware([ + 'valueField' => 'value', + 'labelField' => 'label', + 'disabledField' => 'disabled', + 'childrenField' => 'children', + 'optionSelectedIcon' => null, +]) -
  • class('custom-select__option custom-select__opt-group') }} + > + + @isset($optionTemplate) + {{ $optionTemplate }} + @else + {{ $optionLabel($labelField) }} + @endisset + +
  • - @class([ - 'custom-select-option', - 'custom-select-option--opt-group' => $isOptGroup, - 'relative group', - 'disabled' => $disabled, - ]) + @foreach ($optionChildren($childrenField) as $child) + + @isset($optionTemplate) + {{ $optionTemplate }} + @endisset + + @endforeach +@else +
  • class('custom-select__option') }} + x-bind:class="{ + {{-- $customSelectOption magic doesn't play nicely with class binding on ajax refresh for some reason, we just use __context for now... --}} + 'custom-select__option--active': __context.isActiveEl($el), + 'custom-select__option--selected': __context.isSelectedEl($el), + 'custom-select__option--disabled': __context.isDisabledEl($el) || (! $customSelect.canSelectMore && ! __context.isSelectedEl($el)), + }" + > + + @isset($optionTemplate) + {{ $optionTemplate }} + @else + {{ $optionLabel($labelField) }} + @endisset + - @unless ($isOptGroup) - x-bind:class="{ 'has-focus': hasFocus, 'selected': optionSelected() }" - x-bind:aria-selected="optionSelected() ? 'true' : 'false'" - @endunless - tabindex="-1" - id="customSelect{{ $name }}Option-{{ $value }}" -> -
    -
    ! $disabled && ! $isOptGroup, - ]) - > - {{-- checkbox --}} - @if ($showCheckbox && ! $isOptGroup) -
    - -
    - @endif - - {{-- label --}} -
    - @if ($slot->isNotEmpty()) - {{ $slot }} - @else - {{ $label }} - @endif -
    -
    -
    -
  • + @if ($optionSelectedIcon) + {{-- if we don't render this in a conditional that checks if the element is connected to the DOM, Alpine will throw an error from x-show... --}} + + @endif + +@endif diff --git a/resources/views/components/inputs/custom-select.blade.php b/resources/views/components/inputs/custom-select.blade.php index ae44cab..ca324d9 100644 --- a/resources/views/components/inputs/custom-select.blade.php +++ b/resources/views/components/inputs/custom-select.blade.php @@ -1,97 +1,90 @@ -
    -
    class(['relative rounded-md focus:outline-none'])->except(['tabindex', 'data-name']) }} - x-bind:class="{ 'focus:border-blue-300 focus:ring-opacity-50 focus:ring-4 focus:ring-blue-400': ! open }" - tabindex="0" - data-name="{{ \Illuminate\Support\Str::slug($name) }}" - @if ($hasLivewire()) wire:ignore.self @endif - {{ $extraAttributes }} - > - {{-- menu --}} -
    -
    -
      - @if ($slot->isNotEmpty()) - {{ $slot }} - @else - @forelse ($options as $option) - - @empty - - @endforelse - @endif +
    + @if ($livewireSearch) + __wire: @this, + @endif - @if ($livewireSearch) - - @endif -
    -
    + @if ($hasWireModel()) + __value: @entangle($attributes->wire('model')), + @elseif ($hasXModel()) + __value: {{ $attributes->first('x-model') }}, + @else + __value: {{ \Illuminate\Support\Js::from($value) }}, + @endif + + __config: {{ $config() }}, + })" + x-id="() => ['fc-custom-select-button', 'fc-custom-select-options', 'fc-custom-select-label', 'fc-custom-select-search']" + wire:ignore.self + + @if ($name) name="{{ $name }}" @endif + @if ($multiple) data-multiple @endif + @if ($searchable) searchable @endif + @if ($clearable) clearable @endif + @if ($livewireSearch) livewire-search="{{ $livewireSearch }}" @endif + by="{{ $valueField }}" + + {{ $attributes->except(['class'])->whereDoesntStartWith(['x-model', 'wire:model']) }} + {{ $extraAttributes ?? '' }} - {{-- trigger --}} - @include('form-components::partials.select.select-trigger', ['type' => 'custom']) + @if ($hasXModel()) + {{ $attributes->whereStartsWith('x-model') }} + x-modelable="__value" + @endif +> + {{-- trigger --}} + @include('form-components::partials.select.select-trigger', ['type' => 'custom']) - {{-- selected value (mostly for non-livewire forms) --}} - @unless ($hasWireModel() || $hasXModel()) - @if ($multiple) - - @else - + {{-- menu --}} +
    + @if ($searchable) + + @endif + +
      + @foreach ($options as $option) + + @isset($optionTemplate) + {{ $optionTemplate }} + @endisset + + @endforeach + + + + {{ $slot }} +
    + + @if ($livewireSearch) + + @endif
    diff --git a/resources/views/components/inputs/date-picker.blade.php b/resources/views/components/inputs/date-picker.blade.php index b8c0ab2..1f486a8 100644 --- a/resources/views/components/inputs/date-picker.blade.php +++ b/resources/views/components/inputs/date-picker.blade.php @@ -1,90 +1,77 @@ -
    wire('model')), @elseif ($hasXModel()) - value: {{ $attributes->first('x-model') }}, + value: {{ $attributes->first('x-model' ) }}, @else - value: {{ $value ? "'{$value}'" : 'null' }}, + value: {{ \Illuminate\Support\Js::from($value) }}, @endif - updateValue(newValue) { - this.value = newValue; - $dispatch('input', newValue); - try { - this.fp.setDate(newValue); - } catch {} + options: {{ \Illuminate\Support\Js::from($options()) }}, - @if ($hasXModel()) - {{ $attributes->first('x-model') }} = newValue; - @endif - }, - }" - x-init="fp = flatpickr($refs.input, { - defaultDate: value, - onOpen: [ - function (selectedDates, dateStr, instance) { - instance.setDate(value); - }, - {{ $onOpen ?? '' }} - ], - {{ $jsonOptions() }} - {{ $optionsSlot ?? '' }} - })" - x-on:change="updateValue($event.target.value)" - class="{{ $getContainerClass() }}" - {{ $extraAttributes }} -> - @if ($toggleIcon !== false) - - - - - - @else - @include('form-components::partials.leading-addons') - @endif + config: { {{ $config ?? '' }} }, + })" + wire:ignore.self - merge(['class' => $inputClass()])->except('type')->whereDoesntStartWith('wire:model') }} + @if ($hasXModel()) + {{ $attributes->whereStartsWith('x-model') }} + x-modelable="__value" + @endif - wire:ignore - @if ($name) name="{{ $name }}" @endif - @if ($id) id="{{ $id }}" @endif - x-ref="input" + class="date-picker-root" +> +
    + @if ($toggleIcon) + {{ $before ?? '' }} + + + + @endif + @includeWhen(! $toggleIcon, 'form-components::partials.leading-addons') - placeholder="{{ $placeholder }}" + except(['type', 'aria-describedby'])->whereDoesntStartWith(['wire:model', 'x-model'])->class($inputClass()) }} + x-date-picker:input + wire:ignore - @if ($value && ! $hasBoundModel()) value="{{ $value }}" @endif + {{ $extraAttributes ?? '' }} + /> - {!! $ariaDescribedBy() !!} - @if ($hasErrorsAndShow($name)) - aria-invalid="true" + @if ($isClearable()) +
    +
    + +
    +
    + {{ $after ?? '' }} @endif - /> + @includeWhen(! $isClearable(), 'form-components::partials.trailing-addons') +
    - @if ($clearable) -
    - -
    - @else - @include('form-components::partials.trailing-addons') - @endif + {{ $end ?? '' }}
    diff --git a/resources/views/components/inputs/input.blade.php b/resources/views/components/inputs/input.blade.php index 0d06169..853cae5 100644 --- a/resources/views/components/inputs/input.blade.php +++ b/resources/views/components/inputs/input.blade.php @@ -1,20 +1,11 @@ -
    +
    @include('form-components::partials.leading-addons') except('aria-describedby')->class($inputClass()) }} - {!! $ariaDescribedBy() !!} - {{ $extraAttributes }} - - @if ($name) name="{{ $name }}" @endif - @if ($id) id="{{ $id }}" @endif + @include('form-components::components.inputs.partials.attributes') type="{{ $type }}" @if (! is_null($value) && ! $hasBoundModel()) value="{{ $value }}" @endif - - @if ($hasErrorsAndShow($name)) - aria-invalid="true" - @endif /> @include('form-components::partials.trailing-addons') diff --git a/resources/views/components/inputs/partials/attributes.blade.php b/resources/views/components/inputs/partials/attributes.blade.php new file mode 100644 index 0000000..2862ff3 --- /dev/null +++ b/resources/views/components/inputs/partials/attributes.blade.php @@ -0,0 +1,8 @@ +{{ $attributes->except('aria-describedby')->class($inputClass()) }} +@if ($name) name="{{ $name }}" @endif +@if ($id) id="{{ $id }}" @endif +@if ($hasErrorsAndShow($name)) + aria-invalid="true" +@endif +{!! $ariaDescribedBy() !!} +{{ $extraAttributes ?? '' }} diff --git a/resources/views/components/inputs/partials/leading-addon.blade.php b/resources/views/components/inputs/partials/leading-addon.blade.php new file mode 100644 index 0000000..a293434 --- /dev/null +++ b/resources/views/components/inputs/partials/leading-addon.blade.php @@ -0,0 +1,3 @@ +class('leading-addon') }}> + {{ $slot }} + diff --git a/resources/views/components/inputs/partials/no-options.blade.php b/resources/views/components/inputs/partials/no-options.blade.php index d2822d1..821c786 100644 --- a/resources/views/components/inputs/partials/no-options.blade.php +++ b/resources/views/components/inputs/partials/no-options.blade.php @@ -1,18 +1,8 @@ -@props([ - 'type' => 'custom', - 'search' => null, - 'noResultsText' => null, - 'noOptionsText' => null, - 'name' => null, -]) - -
  • class(["{$type}-select-option relative select-no-results"]) }} +
  • class('custom-select__no-results') }} + role="presentation" + data-placeholder="true" + wire:ignore > -
    -
    - {{ $search ? $noResultsText : $noOptionsText }} -
    -
    + {{ $slot }}
  • diff --git a/resources/views/components/inputs/partials/password-toggle.blade.php b/resources/views/components/inputs/partials/password-toggle.blade.php new file mode 100644 index 0000000..d7c8bc5 --- /dev/null +++ b/resources/views/components/inputs/partials/password-toggle.blade.php @@ -0,0 +1,15 @@ + diff --git a/resources/views/components/inputs/partials/select-option.blade.php b/resources/views/components/inputs/partials/select-option.blade.php new file mode 100644 index 0000000..d1db92b --- /dev/null +++ b/resources/views/components/inputs/partials/select-option.blade.php @@ -0,0 +1,15 @@ +@if ($optionIsOptGroup($option)) + + @foreach ($optionChildren($option) as $child) + @include('form-components::components.inputs.partials.select-option', ['option' => $child]) + @endforeach + +@else + +@endif diff --git a/resources/views/components/inputs/partials/trailing-addon.blade.php b/resources/views/components/inputs/partials/trailing-addon.blade.php new file mode 100644 index 0000000..6f74679 --- /dev/null +++ b/resources/views/components/inputs/partials/trailing-addon.blade.php @@ -0,0 +1,3 @@ +class('trailing-addon') }}> + {{ $slot }} + diff --git a/resources/views/components/inputs/password.blade.php b/resources/views/components/inputs/password.blade.php index 8ce7fde..d182d33 100644 --- a/resources/views/components/inputs/password.blade.php +++ b/resources/views/components/inputs/password.blade.php @@ -1,49 +1,23 @@ -
    @include('form-components::partials.leading-addons') merge(['class' => $inputClass()]) }} - {!! $ariaDescribedBy() !!} - {{ $extraAttributes }} + @include('form-components::components.inputs.partials.attributes') - @if ($name) name="{{ $name }}" @endif - @if ($id) id="{{ $id }}" @endif + @if (! is_null($value) && ! $hasBoundModel()) value="{{ $value }}" @endif @if ($showToggle) x-bind:type="show ? 'text' : 'password'" @else type="password" @endif - - @if ($value && ! $hasBoundModel()) value="{{ $value }}" @endif - - @if ($hasErrorsAndShow($name)) - aria-invalid="true" - @endif /> - @if ($showToggle) -
    $hasErrorsAndShow($name), - 'border-slate-300 group-focus:border-blue-300' => ! $hasErrorsAndShow($name), - ]) - x-cloak - > - - - + @includeWhen($showToggle, 'form-components::components.inputs.partials.password-toggle') - - - -
    - @endif + @includeWhen(! $showToggle, 'form-components::partials.trailing-addons')
    diff --git a/resources/views/components/inputs/select.blade.php b/resources/views/components/inputs/select.blade.php index 64d5a15..f1ef21c 100644 --- a/resources/views/components/inputs/select.blade.php +++ b/resources/views/components/inputs/select.blade.php @@ -1,24 +1,14 @@ -
    +
    @include('form-components::partials.leading-addons') - {{ $slot }} - @foreach ($options as $key => $label) - + @foreach ($options as $option) + @include('form-components::components.inputs.partials.select-option', ['option' => $option]) @endforeach {{ $append ?? '' }} diff --git a/resources/views/components/inputs/textarea.blade.php b/resources/views/components/inputs/textarea.blade.php index 775c79c..1c8dcf8 100644 --- a/resources/views/components/inputs/textarea.blade.php +++ b/resources/views/components/inputs/textarea.blade.php @@ -1,15 +1,37 @@ -
    +{{--
    --}} +{{-- @include('form-components::partials.leading-addons')--}} + +{{-- --}} + +{{-- @include('form-components::partials.trailing-addons')--}} +{{--
    --}} + +{{-- we add an x-data directive to the container to ensure our resize directive is in an alpine scope so it will run --}} +
    @include('form-components::partials.leading-addons') - @include('form-components::partials.trailing-addons') diff --git a/resources/views/components/inputs/tree-select-option.blade.php b/resources/views/components/inputs/tree-select-option.blade.php index 22f1e57..8fc9d2d 100644 --- a/resources/views/components/inputs/tree-select-option.blade.php +++ b/resources/views/components/inputs/tree-select-option.blade.php @@ -1,102 +1,75 @@ @aware([ - 'name' => '', - 'multiple' => false, - 'showCheckbox' => false, - 'childrenField' => 'children', - 'valueField' => 'id', - 'labelField' => 'name', - 'selectedLabelField' => 'name', + 'valueField' => 'value', + 'labelField' => 'label', 'disabledField' => 'disabled', + 'childrenField' => 'children', + 'optionSelectedIcon' => null, + 'hasChildIcon' => false, ]) -
  • $disabled, - 'has-children' => $hasChildren, - ]) - x-bind:class="{ 'has-focus': hasFocus, 'selected': optionSelected() }" - x-bind:aria-selected="optionSelected() ? 'true' : 'false'" - tabindex="-1" - id="treeSelect{{ $name }}Option-{{ $value }}" - data-level="{{ $level }}" -> -
    - {{-- arrow --}} -
    $hasChildren, - ]) - > - @if ($hasChildren) - - @endif -
    - - {{-- label --}} -
    ! $disabled, - ]) - > - {{-- checkbox --}} - @if ($showCheckbox) -
    - -
    +
  • +
    class('custom-select__option tree-select__option') }} + style="--level: {{ $level }};" + :disabled="{{ \Illuminate\Support\Js::from($optionIsDisabled($disabledField)) }}" + x-bind:class="{ + {{-- $treeSelectOption magic doesn't play nicely with class binding on ajax refresh for some reason, we just use __context for now... --}} + 'custom-select__option--active': __context.isActiveEl($el), + 'custom-select__option--selected': __context.isSelectedEl($el), + 'custom-select__option--disabled': __context.isDisabledEl($el) || (! $treeSelect.canSelectMore && ! __context.isSelectedEl($el)), + }" + > +
    + @if ($hasChildIcon) + @endif - {{-- label --}} -
    - @if ($slot->isNotEmpty()) - {{ $slot }} + + @isset($optionTemplate) + {{ $optionTemplate }} @else - {{ $label }} - @endif -
    + {{ $optionLabel($labelField) }} + @endisset +
    + + @if ($optionSelectedIcon) + {{-- if we don't render this in a conditional that checks if the element is connected to the DOM, Alpine will throw an error from x-show... --}} + + @endif
    - @if ($hasChildren) -
    -
      - @foreach ($children as $child) - - @endforeach -
    -
    + @foreach ($optionChildren($childrenField) as $child) + + @isset($optionTemplate) + {{ $optionTemplate }} + @endisset + + @endforeach + @endif
  • diff --git a/resources/views/components/inputs/tree-select.blade.php b/resources/views/components/inputs/tree-select.blade.php index c618d9e..759a933 100644 --- a/resources/views/components/inputs/tree-select.blade.php +++ b/resources/views/components/inputs/tree-select.blade.php @@ -1,101 +1,90 @@ -
    -
    class(['relative rounded-md focus:outline-none'])->except(['tabindex', 'data-name']) }} - x-bind:class="{ 'focus:border-blue-300 focus:ring-opacity-50 focus:ring-4 focus:ring-blue-400': ! open }" - tabindex="0" - data-name="{{ \Illuminate\Support\Str::slug($name) }}" - @if ($hasLivewire()) wire:ignore.self @endif - {{ $extraAttributes }} - > - {{-- menu --}} -
    -
    -
      - @if ($slot->isNotEmpty()) - {{ $slot }} - @else - @forelse ($options as $option) - - @empty - - @endforelse - @endif +
      - @endunless -
    + @if ($livewireSearch) + __wire: @this, + @endif - @if ($livewireSearch) - - @endif -
    -
    + @if ($hasWireModel()) + __value: @entangle($attributes->wire('model')), + @elseif ($hasXModel()) + __value: {{ $attributes->first('x-model') }}, + @else + __value: {{ \Illuminate\Support\Js::from($value) }}, + @endif + + __config: {{ $config() }}, + })" + x-id="() => ['fc-tree-select-button', 'fc-tree-select-options', 'fc-tree-select-label', 'fc-tree-select-search']" + wire:ignore.self + + @if ($name) name="{{ $name }}" @endif + @if ($multiple) data-multiple @endif + @if ($searchable) searchable @endif + @if ($clearable) clearable @endif + @if ($livewireSearch) livewire-search="{{ $livewireSearch }}" @endif + by="{{ $valueField }}" + class="{{ $containerClass() }}" + + {{ $attributes->except(['class'])->whereDoesntStartWith(['x-model', 'wire:model']) }} + {{ $extraAttributes ?? '' }} - {{-- trigger --}} - @include('form-components::partials.select.select-trigger', ['type' => 'tree']) + @if ($hasXModel()) + {{ $attributes->whereStartsWith('x-model') }} + x-modelable="__value" + @endif +> + {{-- trigger --}} + @include('form-components::partials.select.select-trigger', ['type' => 'tree']) - {{-- selected value (mostly for non-livewire forms --}} - @unless ($hasWireModel() || $hasXModel()) - @if ($multiple) - - @else - + {{-- menu --}} +
    + @if ($searchable) + + @endif + +
      + @foreach ($options as $option) + + @isset($optionTemplate) + {{ $optionTemplate }} + @endisset + + @endforeach + + + + {{ $slot }} +
    + + @if ($livewireSearch) + + @endif
    diff --git a/resources/views/components/label.blade.php b/resources/views/components/label.blade.php index 7925448..9b5cb91 100644 --- a/resources/views/components/label.blade.php +++ b/resources/views/components/label.blade.php @@ -1,9 +1,8 @@ @if ($hasLabel($slot)) -