diff --git a/.github/workflows/tag-patch-release.yml b/.github/workflows/tag-patch-release.yml new file mode 100644 index 00000000..c90c2a58 --- /dev/null +++ b/.github/workflows/tag-patch-release.yml @@ -0,0 +1,26 @@ +name: Tag patch release + +on: + # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_dispatch + workflow_dispatch: + inputs: + latest_local_sha: + description: The latest local sha + required: true + type: string + +permissions: {} + +jobs: + tagpatchrelease: + name: Tag patch release + # Only run cron on the tractorcow-farm account + if: (github.event_name == 'schedule' && github.repository_owner == 'tractorcow-farm') || (github.event_name != 'schedule') + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Tag release + uses: silverstripe/gha-tag-release@v2 + with: + latest_local_sha: ${{ inputs.latest_local_sha }} diff --git a/.github/workflows/update-js.yml b/.github/workflows/update-js.yml index 0c323f3b..64e101c0 100644 --- a/.github/workflows/update-js.yml +++ b/.github/workflows/update-js.yml @@ -2,9 +2,9 @@ name: Update JS on: workflow_dispatch: - # Run on a schedule of once per quarter + # At 4:20 AM UTC, on day 1 of the month, only in March and September schedule: - - cron: '20 4 1 */3 *' + - cron: '20 4 1 3,9 *' permissions: {} diff --git a/.sass-lint.yml b/.sass-lint.yml deleted file mode 100644 index 261030ac..00000000 --- a/.sass-lint.yml +++ /dev/null @@ -1,179 +0,0 @@ -# sass-lint config to match the AirBNB style guide -files: - include: - # This covers linting when running locally - - 'client/src/**/*.scss' - # This covers linting when running via Github actions - - '**/silverstripe-fluent/client/src/**/*.scss' -options: - formatter: stylish - merge-default-rules: false -rules: - # Warnings - # Things that require actual refactoring are marked as warnings - class-name-format: - - 1 - - convention: hyphenatedbem - placeholder-name-format: - - 1 - - convention: hyphenatedlowercase - nesting-depth: - - 1 - - max-depth: 3 - no-ids: 1 - no-important: 1 - no-misspelled-properties: - - 1 - - extra-properties: - - "-moz-border-radius-topleft" - - "-moz-border-radius-topright" - - "-moz-border-radius-bottomleft" - - "-moz-border-radius-bottomright" - variable-name-format: - - 1 - - allow-leading-underscore: true - convention: hyphenatedlowercase - no-extends: 1 - - # Warnings: these things are preferential rather than mandatory - no-css-comments: 1 - - # Errors - # Things that can be easily fixed are marked as errors - indentation: - - 2 - - size: 2 - final-newline: - - 2 - - include: true - no-trailing-whitespace: 2 - border-zero: - - 2 - - convention: '0' - brace-style: - - 2 - - allow-single-line: true - clean-import-paths: - - 2 - - filename-extension: false - leading-underscore: false - no-debug: 2 - no-empty-rulesets: 2 - no-invalid-hex: 2 - no-mergeable-selectors: 2 - # no-qualifying-elements: - # - 1 - # - allow-element-with-attribute: false - # allow-element-with-class: false - # allow-element-with-id: false - no-trailing-zero: 2 - no-url-protocols: 2 - quotes: - - 2 - - style: double - space-after-bang: - - 2 - - include: false - space-after-colon: - - 2 - - include: true - space-after-comma: - - 2 - - include: true - space-before-bang: - - 2 - - include: true - space-before-brace: - - 2 - - include: true - space-before-colon: 2 - space-between-parens: - - 2 - - include: false - trailing-semicolon: 2 - url-quotes: 2 - zero-unit: 2 - single-line-per-selector: 2 - one-declaration-per-line: 2 - empty-line-between-blocks: - - 2 - - ignore-single-line-rulesets: true - - - # Missing rules - # There are no sass-lint rules for the following AirBNB style items, but thess - # - Put comments on their own line - # - Put property delcarations before mixins - - # Disabled rules - - # These are other rules that we may wish to consider using in the future - # They are not part of the AirBNB CSS standard but they would introduce some strictness - # bem-depth: 0 - # variable-for-property: 0 - # no-transition-all: 0 - # hex-length: - # - 1 - # - style: short - # hex-notation: - # - 1 - # - style: lowercase - # property-units: - # - 1 - # - global: - # - ch - # - em - # - ex - # - rem - # - cm - # - in - # - mm - # - pc - # - pt - # - px - # - q - # - vh - # - vw - # - vmin - # - vmax - # - deg - # - grad - # - rad - # - turn - # - ms - # - s - # - Hz - # - kHz - # - dpi - # - dpcm - # - dppx - # - '%' - # per-property: {} - # force-attribute-nesting: 1 - # force-element-nesting: 1 - # force-pseudo-nesting: 1 - # function-name-format: - # - 1 - # - allow-leading-underscore: true - # convention: hyphenatedlowercase - # no-color-literals: 1 - # no-duplicate-properties: 1 - # mixin-name-format: - # - 1 - # - allow-leading-underscore: true - # convention: hyphenatedlowercase - # shorthand-values: - # - 1 - # - allowed-shorthands: - # - 1 - # - 2 - # - 3 - # leading-zero: - # - 1 - # - include: false - # no-vendor-prefixes: - # - 1 - # - additional-identifiers: [] - # excluded-identifiers: [] - # placeholder-in-extend: 1 - # no-color-keywords: 2 diff --git a/.stylelintrc.js b/.stylelintrc.js new file mode 100644 index 00000000..ef7353b7 --- /dev/null +++ b/.stylelintrc.js @@ -0,0 +1 @@ +module.exports = require('@silverstripe/eslint-config/.stylelintrc'); diff --git a/client/dist/styles/fluent.css b/client/dist/styles/fluent.css index ec04e554..5c8bffad 100644 --- a/client/dist/styles/fluent.css +++ b/client/dist/styles/fluent.css @@ -1 +1 @@ -.cms-menu.collapsed .cms-menu-list{float:left}.cms-menu.collapsed .cms-fluent-selector .text{display:none}.cms-menu.collapsed .cms-fluent-selector-locales{width:100%}.cms-menu.collapsed .cms-fluent-selector-locales .full-title{display:none}.cms-menu.collapsed .cms-fluent-selector-locales .short-title{display:block}.cms-tree.jstree .status-fluentinvisible>a{color:#566b8d}.cms-fluent-selector{display:block;height:auto;line-height:1.5;overflow:visible;padding:5px;position:relative}.cms-fluent-selector:before{color:#fff;position:absolute;top:50%;line-height:0;right:24px;width:0;pointer-events:none}.cms-panel-layout.collapsed .cms-fluent-selector:before{right:36px}.cms-fluent-selector .cms-fluent-selector-locales{background-color:#368b39;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzgyOEE0NzQ3NjQ4MTFFN0IyMEZBRTZGODdBRkExOUUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzgyOEE0NzM3NjQ4MTFFN0IyMEZBRTZGODdBRkExOUUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDg0Q0M3NjFERDUxMTFFMjlERTBCQjc0MjE1M0Y0OTgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDg0Q0M3NjJERDUxMTFFMjlERTBCQjc0MjE1M0Y0OTgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7EmuTKAAACLElEQVR42qyVz0tVQRTH5/1SC6QUCpIwKILACCsSgyBcuHJVCNKmH4uCIDctokXUQrJtBO1yEQhSgUFFtPIPqE1BaCJIES3UXr9MSyxvnxPfS5dh7n33hV/4cN+9c+adc2bOnClEUXTCOXcDmmHN/VMBNsDPwPcVuK15kcsSDuaidL2C1ZSxFdgGLosyPkryZVEtKULTW+iCR9AdxwNNsBF+QaOrJbzMK6IRaIQmUVEUJWiBVmiAy7Jfgh15Moh1GG5Cg9Z+WdlY1HdgUuP7XT1KZBDL9uSh960TTnrfvufJIORgWoNX9P5E75Pr5cA0pD0Yh3Y4FrAxB9vzOFhIKcO9MmqGdykOdmvjQ1TiTS562/IVRmAWNun9NbR7dlYIz2A1UdpJ/YZRi7CqiD6qVOO0z8N7uK4D9z9aTDqYUq33wUS0PvpUTqS3B2bgBfTkrHKzfQz7oD90CiyDLwmPw1qegRzRrcEh2VvmiwGbqg1ehc8qzWSJndW+/NCf+XouuzN6jqc5cOqK1m9OeU7aoCOlTAfVu75BN/RmOTA2K9rhwIGZ8Saa3RZVmumB7F76Dope3X6Ai3Ap0cZN17xL5yksQCuMaZ7pfqjZxRRgq5bFekzRy6JfLdp0RKe1Cw7qaSd+ly6i4BLl4RbM6vfpQP9yao7BJaqlAzAAU9AHF7zxc3AcptOWKIujNe7uNFULf1tqtirwBna6+rVczmFk3fKulqRUz2UJ9/4IMAAbOzRApe01NQAAAABJRU5ErkJggg==);background-position:6px center;background-repeat:none;background-size:12px;border-radius:5px;border:0 none;color:#fff;padding:5px 21px 5px 24px;width:100%}.cms-panel-layout.collapsed .cms-fluent-selector .cms-fluent-selector-locales{color:rgba(0,0,0,0);padding:2px}.cms-panel-layout.collapsed .cms-fluent-selector .cms-fluent-selector-locales>option{color:#fff}.fluent-badge{color:#fff;margin-left:5px}.fluent-badge--default{background-color:#008a00}.fluent-badge--invisible{background-color:#9b2828}.fluent-badge--localised{background-color:#660ff2}.fluent__localised-field .font-icon-translatable{color:#660ff2;top:2px;position:relative;margin-right:3px}.cms .ss-ui-action-tabset.ss-tabset.fluent-actions-menu{margin-left:5px}.cms .ss-ui-action-tabset.ss-tabset.fluent-actions-menu .popover-actions-simulate .ui-tabs-anchor{font-size:1em;color:#303b4d}.cms .ss-ui-action-tabset.ss-tabset.fluent-actions-menu .popover-actions-simulate .ui-tabs-anchor:before{margin-right:6px;font-size:1.5rem}.cms .ss-ui-action-tabset.ss-tabset.fluent-actions-menu .popover-actions-simulate .ui-tabs-anchor:after,.cms .ss-ui-action-tabset.ss-tabset.fluent-actions-menu .popover-actions-simulate .ui-tabs-anchor:hover:after,.cms .ss-ui-action-tabset.ss-tabset.fluent-actions-menu .popover-actions-simulate .ui-tabs-anchor:active:after{display:none !important}.cms .ss-ui-action-tabset.ss-tabset.fluent-actions-menu .tab-pane{padding-top:0;max-width:500px}.cms .ss-ui-action-tabset.ss-tabset.fluent-actions-menu .tab-pane .action-description{font-size:.9em;line-height:1em;display:block !important;margin:0;padding:0 11px 8px 11px;border-bottom:1px solid #ccc;color:#999}.cms .ss-ui-action-tabset.ss-tabset.fluent-actions-menu .tab-pane .action-description:last-child{border-bottom:0 none}.action-group-COPY_FROM .action-menu__toggle:before,.action-group-COPY_TO .action-menu__toggle:before{font-family:inherit !important;line-height:1em;font-size:1em}.action-group-COPY_FROM .action-menu__toggle:before{content:"Copy from" !important}.action-group-COPY_TO .action-menu__toggle:before{content:"Copy to" !important}.fluent-visible-column .badge{font-size:.8em;padding:3px 5px} +.cms-menu.collapsed .cms-menu-list{float:left}.cms-menu.collapsed .cms-fluent-selector .text{display:none}.cms-menu.collapsed .cms-fluent-selector-locales{width:100%}.cms-menu.collapsed .cms-fluent-selector-locales .full-title{display:none}.cms-menu.collapsed .cms-fluent-selector-locales .short-title{display:block}.cms-tree.jstree .status-fluentinvisible>a{color:#566b8d}.cms-fluent-selector{display:block;height:auto;line-height:1.5;overflow:visible;padding:5px;position:relative}.cms-fluent-selector:before{color:#fff;position:absolute;top:50%;line-height:0;right:24px;width:0;pointer-events:none}.cms-panel-layout.collapsed .cms-fluent-selector:before{right:36px}.cms-fluent-selector .cms-fluent-selector-locales{background-color:#368b39;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzgyOEE0NzQ3NjQ4MTFFN0IyMEZBRTZGODdBRkExOUUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzgyOEE0NzM3NjQ4MTFFN0IyMEZBRTZGODdBRkExOUUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDg0Q0M3NjFERDUxMTFFMjlERTBCQjc0MjE1M0Y0OTgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDg0Q0M3NjJERDUxMTFFMjlERTBCQjc0MjE1M0Y0OTgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7EmuTKAAACLElEQVR42qyVz0tVQRTH5/1SC6QUCpIwKILACCsSgyBcuHJVCNKmH4uCIDctokXUQrJtBO1yEQhSgUFFtPIPqE1BaCJIES3UXr9MSyxvnxPfS5dh7n33hV/4cN+9c+adc2bOnClEUXTCOXcDmmHN/VMBNsDPwPcVuK15kcsSDuaidL2C1ZSxFdgGLosyPkryZVEtKULTW+iCR9AdxwNNsBF+QaOrJbzMK6IRaIQmUVEUJWiBVmiAy7Jfgh15Moh1GG5Cg9Z+WdlY1HdgUuP7XT1KZBDL9uSh960TTnrfvufJIORgWoNX9P5E75Pr5cA0pD0Yh3Y4FrAxB9vzOFhIKcO9MmqGdykOdmvjQ1TiTS562/IVRmAWNun9NbR7dlYIz2A1UdpJ/YZRi7CqiD6qVOO0z8N7uK4D9z9aTDqYUq33wUS0PvpUTqS3B2bgBfTkrHKzfQz7oD90CiyDLwmPw1qegRzRrcEh2VvmiwGbqg1ehc8qzWSJndW+/NCf+XouuzN6jqc5cOqK1m9OeU7aoCOlTAfVu75BN/RmOTA2K9rhwIGZ8Saa3RZVmumB7F76Dope3X6Ai3Ap0cZN17xL5yksQCuMaZ7pfqjZxRRgq5bFekzRy6JfLdp0RKe1Cw7qaSd+ly6i4BLl4RbM6vfpQP9yao7BJaqlAzAAU9AHF7zxc3AcptOWKIujNe7uNFULf1tqtirwBna6+rVczmFk3fKulqRUz2UJ9/4IMAAbOzRApe01NQAAAABJRU5ErkJggg==);background-position:6px center;background-repeat:none;background-size:12px;border-radius:5px;border:0 none;color:#fff;padding:5px 21px 5px 24px;width:100%}.cms-panel-layout.collapsed .cms-fluent-selector .cms-fluent-selector-locales{color:rgba(0,0,0,0);padding:2px}.cms-panel-layout.collapsed .cms-fluent-selector .cms-fluent-selector-locales>option{color:#fff}.fluent-badge{color:#fff;margin-left:5px}.fluent-badge--default{background-color:#008a00}.fluent-badge--invisible{background-color:#9b2828}.fluent-badge--localised{background-color:#660ff2}.fluent__localised-field .font-icon-translatable{color:#660ff2;top:2px;position:relative;margin-right:3px}.cms .ss-ui-action-tabset.ss-tabset.fluent-actions-menu{margin-left:5px}.cms .ss-ui-action-tabset.ss-tabset.fluent-actions-menu .popover-actions-simulate .ui-tabs-anchor{font-size:1em;color:#303b4d}.cms .ss-ui-action-tabset.ss-tabset.fluent-actions-menu .popover-actions-simulate .ui-tabs-anchor:before{margin-right:6px;font-size:1.5rem}.cms .ss-ui-action-tabset.ss-tabset.fluent-actions-menu .popover-actions-simulate .ui-tabs-anchor:after,.cms .ss-ui-action-tabset.ss-tabset.fluent-actions-menu .popover-actions-simulate .ui-tabs-anchor:hover:after,.cms .ss-ui-action-tabset.ss-tabset.fluent-actions-menu .popover-actions-simulate .ui-tabs-anchor:active:after{display:none !important}.cms .ss-ui-action-tabset.ss-tabset.fluent-actions-menu .tab-pane{padding-top:0;max-width:500px}.cms .ss-ui-action-tabset.ss-tabset.fluent-actions-menu .tab-pane .action-description{font-size:.9em;line-height:1em;display:block !important;margin:0;padding:0 11px 8px;border-bottom:1px solid #ccc;color:#999}.cms .ss-ui-action-tabset.ss-tabset.fluent-actions-menu .tab-pane .action-description:last-child{border-bottom:0 none}.action-group-COPY_FROM .action-menu__toggle:before,.action-group-COPY_TO .action-menu__toggle:before{font-family:inherit !important;line-height:1em;font-size:1em}.action-group-COPY_FROM .action-menu__toggle:before{content:"Copy from" !important}.action-group-COPY_TO .action-menu__toggle:before{content:"Copy to" !important}.fluent-visible-column .badge{font-size:.8em;padding:3px 5px} diff --git a/client/src/styles/fluent.scss b/client/src/styles/fluent.scss index 5cd2065b..5ae9267c 100644 --- a/client/src/styles/fluent.scss +++ b/client/src/styles/fluent.scss @@ -51,7 +51,7 @@ $fluent-color-localised: rgb(102, 15, 242); position: relative; &:before { - color: white; + color: #fff; position: absolute; top: 50%; line-height: 0; @@ -72,7 +72,7 @@ $fluent-color-localised: rgb(102, 15, 242); background-size: 12px; border-radius: 5px; border: 0 none; - color: white; + color: #fff; padding: 5px 21px 5px 24px; width: 100%; @@ -82,7 +82,7 @@ $fluent-color-localised: rgb(102, 15, 242); padding: 2px; > option { - color: white; + color: #fff; } } } @@ -146,7 +146,7 @@ $fluent-color-localised: rgb(102, 15, 242); line-height: 1em; display: block !important;// sass-lint:disable-line no-important margin: 0; - padding: 0 11px 8px 11px; + padding: 0 11px 8px; border-bottom: 1px solid #ccc; color: #999; diff --git a/docs/en/migrating-from-single-language.md b/docs/en/migrating-from-single-language.md index 6fce063c..5137e43d 100644 --- a/docs/en/migrating-from-single-language.md +++ b/docs/en/migrating-from-single-language.md @@ -4,12 +4,14 @@ In case you want to add fluent to an existing site to add multi language functio ## Install fluent -use composer to install fluent, see [installation](installation.md) +Use composer to install fluent, see [installation](installation.md) ## Configure fluent -* add locales -You can either do this in the backend, or for the first setup you can utitlise `default_records` to add the locales to the db. +* Add locales + +You can either do this in the backend, or for the first setup you can utitlise `default_records` to add the locales to +the db. A fluent.yml might look like: ``` @@ -33,32 +35,121 @@ TractorCow\Fluent\Model\Locale: When you run `dev/build?flush` again, this adds the records to the database if the locales table is still empty. -## Publish available pages in your default locale +## Populating initial localised content for existing Pages and DataObjects in your default locale -Now your site is broken, cause no pages have been published and added as translated page in your default locale. -You can either publish all pages manually or use [publishall](https://docs.silverstripe.org/en/4/developer_guides/debugging/url_variable_tools/#building-and-publishing-urls) to publish all pages in bulk. -If you run `/admin/pages/publishall` in your browser your site will be fixed again and you can start adding translated content. +Now your site is broken because nothing has been published and added as translated data in your default locale. You can +either manually localise all DataObjects & Pages manually or use one of the automation options below. ### Automated tools for localisation -`InitialPageLocalisation` dev task can be used to either only localise or localise & publish your pages. -This dev task can be run either via CLI or queued as a job if Queued jobs module is installed. - -Localise only example - -``` -dev/tasks/initial-page-localisation-task -``` - -Localise & publish example - -``` -dev/tasks/initial-page-localisation-task publish=1 -``` - -Localisation in batches can be done by using the `limit` option. -Example below will localise & publish five pages on each run. - -``` -dev/tasks/initial-page-localisation-task publish=1&limit=5 -``` +#### From the CMS (SiteTree only) + +Use Silverstripe's +built-in [publishall](https://docs.silverstripe.org/en/4/developer_guides/debugging/url_variable_tools/#building-and-publishing-urls) +tool to publish all Pages in bulk. +Run `/admin/pages/publishall` in your browser and your site will be fixed again and you can start adding translated +content. + +_This method will work with Pages only (not localised DataObjects)._ + +#### Commandline or Queued Jobs (SiteTree and DataObjects) + +The `InitialPageLocalisation` and `InitialDataObjectLocalisationTask` dev tasks may be used to localise and, optionally, +publish your `Versioned` data (including Pages) from the commandline or queued as a job (if the Queued Jobs module is installed). + +`InitialPageLocalisation` - localise all `SiteTree` objects (Pages) + +`InitialDataObjectLocalisationTask` - localise all Fluent-enabled DataObjects (excluding `SiteTree`) + +1. Example: Localise all Pages (default, without publishing) + + ``` + dev/tasks/initial-page-localisation-task + ``` + +2. Example: Localise & publish all Pages + + ``` + dev/tasks/initial-page-localisation-task publish=1 + ``` + +3. Example: Localising Pages in batches can be done by using the `limit` option. + This will localise & publish five pages on each run. + + ``` + dev/tasks/initial-page-localisation-task publish=1&limit=5 + ``` + +4. Example: All the same functionality is available for localising all DataObjects, including `Versioned` and non-Versioned classes + + ``` + dev/tasks/initial-dataobject-localisation-task + ``` + or + + ``` + dev/tasks/initial-dataobject-localisation-task publish=1&limit=5 + ``` + +#### Customize your own initialisation dev task + +Perhaps you want to be more selective in how you initialise your localised content. +The `InitialDataObjectLocalisationTask` class can be easily extended to either list exactly which classes you want to +initially localise, or you can exclude specific classes from initialisation. + +1. **Initialise specific classes:** The following example will create a task which localises **_ONLY_** `BlogPost` +pages, `Testimonial` objects, _and their subclasses (if any)_. + + ```php + class CustomLocalisationTask extends InitialDataObjectLocalisationTask + { + /** + * @var string + */ + private static $segment = 'custom-localisation-initialisation-task'; + + /** + * @var string + */ + protected $title = 'Custom localisation initialisation'; + + /** + * @var string[] + */ + protected array $include_only_classes = [ + \SilverStripe\Blog\Model\BlogPost::class, + \AcmeCo\Model\Testimonial::class + ]; + + } + ``` + +2. **Initialise all DataObjects but exclude some:** The following example will create a task which localises **_ALL_** +DataObjects **_except_** `BlogPost` pages, `Testimonial` objects, _and their subclasses (if any)_. + + ```php + class CustomLocalisationTask extends InitialDataObjectLocalisationTask + { + /** + * @var string + */ + private static $segment = 'custom-localisation-initialisation-task'; + + /** + * @var string + */ + protected $title = 'Custom localisation initialisation'; + + /** + * @var string[] + */ + protected array $exclude_classes = [ + \SilverStripe\Blog\Model\BlogPost::class, + \AcmeCo\Model\Testimonial::class + ]; + + } + ``` + +3. **One or the other:** You may specify `$include_only_classes` OR `$exclude_classes` - not both. +If `$include_only_classes` is not an empty array, `$exclude_classes` will be ignored. diff --git a/lang/da.yml b/lang/da.yml index 43a9f7f4..8743b9b2 100644 --- a/lang/da.yml +++ b/lang/da.yml @@ -2,9 +2,7 @@ da: TractorCow\Fluent\Control\LocaleAdmin: MENUTITLE: Sprog TractorCow\Fluent\Extension\FluentBadgeExtension: - BadgeDefault: '' - BadgeInvisible: '' - BadgeLocalised: '' + BadgeDefault: 'Standard sprog' TractorCow\Fluent\Extension\FluentExtension: FLUENT_ICON_TOOLTIP: 'Dette felt kan oversættes' TractorCow\Fluent\Extension\FluentFilteredExtension: @@ -12,12 +10,14 @@ da: LOCALEFILTEREDHELP: 'Denne side er ikke synlig på dette sprog' LOCALEFILTEREDSHORT: Filteret TAB_LOCALES: Sprog + TractorCow\Fluent\Extension\FluentIsolatedExtension: + has_one_Locale: Sprog TractorCow\Fluent\Extension\FluentSiteTreeExtension: LOCALECOPYANDPUBLISH: 'Kopier & udgiv' LOCALECOPYTODRAFT: 'Kopier til kladde' LOCALESTATUSFLUENTINVISIBLE: 'Denne side er ikke synlig på dette sprog indtil den er tilføjet og udgivet.' - LOCALESTATUSFLUENTDRAFT: '' - LOCALESTATUSFLUENTINHERITED: '' + TractorCow\Fluent\Forms\VisibleLocalesColumn: + LocalesTitle: Sprog TractorCow\Fluent\Model\Domain: DEFAULT: 'Standard sprog' DEFAULT_NONE: (ingen) @@ -29,6 +29,9 @@ da: other: '{count} domæner' SINGULARNAME: Domæne UnsavedNotice: 'Du kan tilføje sprog efter du har gemt domænet.' + db_Domain: Domæne + has_many_Locales: Sprog + has_one_DefaultLocale: 'Standard sprog' TractorCow\Fluent\Model\FallbackLocale: LOCALE: Sprog PLURALNAME: 'Fald-tilbage sprog' @@ -36,18 +39,20 @@ da: one: 'Et fald-tilbage sprog' other: '{count} fald-tilbage sprog' SINGULARNAME: 'Fald-tilbage sprog' + has_one_Locale: Sprog TractorCow\Fluent\Model\Locale: - DEFAULT_NONE: (none) DOMAIN: Domæne FALLBACKS: 'Sprog at falde tilbage til' IS_DEFAULT: 'Dette er det globale standard sprog' IS_DEFAULT_DESCRIPTION: 'Bemærk: Per-domæne specifikke sprog can gives på Sprog fanen, og vil overskrive denne værdi for specifikke domæner.' LOCALE: Sprog LOCALE_TITLE: Titel - LOCALE_URL: 'URL Segment' PLURALNAME: Sprog PLURALS: one: 'Et sprog' other: '{count} sprog' SINGULARNAME: Sprog UnsavedNotice: 'Du kan tilføje fald-tilbage sprog når du har gemt dette sprog.' + db_Locale: Sprog + db_Title: Titel + has_one_Domain: Domæne diff --git a/lang/de.yml b/lang/de.yml index 70001530..431eb696 100644 --- a/lang/de.yml +++ b/lang/de.yml @@ -1,79 +1,121 @@ de: + SilverStripe\CMS\Controllers\CMSMain: + ARCHIVE: Archiv + SilverStripe\CMS\Model\SiteTree: + BUTTONPUBLISHED: Veröffentlicht + BUTTONSAVEPUBLISH: Öffentlich TractorCow\Fluent\Control\LocaleAdmin: MENUTITLE: Gebietsschemata TractorCow\Fluent\Extension\FluentBadgeExtension: - BadgeDefault: 'Standardgebietsschema' + BadgeDefault: Standardgebietsschema BadgeInvisible: 'Übersetzt nach {locale}' BadgeLocalised: '{type} ist nicht sichtbar in diesem Gebietsschema' TractorCow\Fluent\Extension\FluentExtension: - FLUENT_ICON_TOOLTIP: 'Übersetzbares Feld' COPY_FROM: 'In {locale} von kopieren:' COPY_TO: 'Von {locale} in kopieren:' + FLUENT_ICON_TOOLTIP: 'Übersetzbares Feld' + LOCALISED: Lokalisiert + Localise: Lokalisieren + NOSOURCE: 'Keine Quelle' + NOTLOCALISED: 'Nicht lokalisiert' + UnlocaliseTooltip: '{Name} aus dem aktuellen Gebietsschema entfernen' TractorCow\Fluent\Extension\FluentFilteredExtension: FILTERED_LOCALES: 'Wird in folgenden Gebietsschemata angezeigt' LOCALEFILTEREDHELP: 'Diese Seite ist nicht sichbar in diesem Gebietsschema' TAB_LOCALES: Gebietsschemata + many_many_FilteredLocales: 'Gefilterte Sprachen' + TractorCow\Fluent\Extension\FluentIsolatedExtension: + has_one_Locale: Standardgebietsschema TractorCow\Fluent\Extension\FluentSiteTreeExtension: LOCALECOPYANDPUBLISH: 'Kopieren & veröffentlichen' LOCALECOPYTODRAFT: 'Als Entwurf kopieren' LOCALESTATUSFLUENTDRAFT: 'Für dieses Gebietsschema wurde ein Entwurf erstellt. Veröffentlichte Inhalte können jedoch weiterhin von einem anderen geerbt werden. Verwenden Sie die bereitgestellte Aktion "Speichern und veröffentlichen", um diesen Inhalt für dieses Gebietsschema zu veröffentlichen.' LOCALESTATUSFLUENTINHERITED: 'Der Inhalt dieser Seite wird möglicherweise von einem anderen Gebietsschema geerbt. Wenn Sie eine unabhängige Kopie dieser Seite erstellen möchten, verwenden Sie bitte eine der bereitgestellten Aktionen "Kopieren".' - LOCALESTATUSFLUENTINVISIBLE: 'This page will not be visible in this locale until it has been published.' + LOCALESTATUSFLUENTUNKNOWN: 'Für diese Seite ist kein Inhalt verfügbar. Bitte lokalisieren Sie diese Seite oder stellen Sie ein Gebietsschema als Ersatz bereit.' + TractorCow\Fluent\Extension\FluentVersionedExtension: + DRAFT: Entwurf + LIVENO: Nein + LIVEYES: Ja + MODIFIED: Geändert + NOSOURCE: 'Keine Quelle' + NOTLOCALISED: 'Nicht lokalisiert' + PUBLISHED: Veröffentlicht + TractorCow\Fluent\Extension\Traits\FluentAdminTrait: + ArchiveNotice: "'{title}' und alle seine Lokalisierungen wurden gelöscht." + ClearAllNotice: 'Alle Übersetzungen sind entfern worden.' + CopyNotice: "'{title}' wurde in alle anderen Gebietsschemas kopiert." + DeleteNotice: '"{title}" und alle seine Lokalisierungen wurden gelöscht.' + HideNotice: "'{title}' wird in {locale} nicht mehr angezeigt." + Label_archiveFluent: 'Veröffentlichung zurücknehmen und archivieren (alle Sprachen)' + Label_clearFluent: "Alle ausser '{title}' löschen" + Label_copyFluent: "'{title}' in alle anderen Sprachen kopieren" + Label_deleteFluent: 'Löschen (alle Sprachen)' + Label_hideFluent: "In '{title}' verstecken" + Label_publishFluent: 'Speichern & Veröffentlichen (alle Sprachen)' + Label_showFluent: "In '{title}' anzeigen" + Label_unpublishFluent: 'Veröffentlichung zurücknehmen (alle Sprachen)' + Localisation: Übersetzungen + PublishNotice: "'{title}' ist in allen Gebietsschemata veröffentlicht worden." + ShowNotice: "'{title}' ist nun in {locale} sichtbar" + UnpublishNotice: "Veröffentlichung '{title}' in allen Gebietsschemas enfernt." + TractorCow\Fluent\Extension\Traits\FluentBadgeTrait: + BadgeDraft: 'Als Entwurf in {locale} gespeichert' + BadgeLocalised: 'Übersetzt nach {locale}' + BadgePublished: 'In {locale} veröffentlicht' + BaggeInvisible: '{type} ist in dieser Sprache nicht sichtbar' + TractorCow\Fluent\Extension\Traits\FluentObjectTrait: + TAB_LOCALISATION: Übersetzungen + TractorCow\Fluent\Forms\DeleteAllLocalesAction: + Delete: 'Eintrag in allen Sprachen löschen' + TractorCow\Fluent\Forms\DeleteLocaleAction: + DELETE: 'In dieser Sprache löschen' + TractorCow\Fluent\Forms\LocaleToggleColumn: + DISPLAY_IN: 'Sichtbar?' + TractorCow\Fluent\Forms\PublishAction: + PUBLISH: 'In dieser Sprache veröffentlichen' + TractorCow\Fluent\Forms\SaveLocaleAction: + SAVE: 'In dieser Sprache speichern' + TractorCow\Fluent\Forms\UnpublishAction: + UNPUBLISH: 'In dieser Sprache die Veröffentlichung zurücknehmen' + TractorCow\Fluent\Forms\VisibleLocalesColumn: + LocalesTitle: Gebietsschemata TractorCow\Fluent\Model\Domain: - DEFAULT: 'Standardgebietsschema' - DEFAULT_NONE: '(keine)' - DOMAIN_HOSTNAME: 'Domain Hostname' + DEFAULT: Standardgebietsschema + DEFAULT_NONE: (keine) DOMAIN_LOCALES: Standardgebietsschema - PLURALNAME: Domains PLURALS: - one: 'Domain' + one: Domain other: '{count} Domains' - SINGULARNAME: Domain UnsavedNotice: 'Sie können Gebietsschemas hinzufügen, sobald Sie die Domain gespeichert haben.' + has_many_Locales: Gebietsschemata + has_one_DefaultLocale: Standardgebietsschema TractorCow\Fluent\Model\FallbackLocale: LOCALE: Standardgebietsschema - PLURALNAME: 'Fallback-Gebietsschemata' + PLURALNAME: Fallback-Gebietsschemata PLURALS: - one: 'Fallback-Gebietsschema' + one: Fallback-Gebietsschema other: '{count} Fallback-Gebietsschemata' - SINGULARNAME: 'Fallback-Gebietsschema' + SINGULARNAME: Fallback-Gebietsschema + db_Sort: Sortierung + has_one_Locale: Standardgebietsschema TractorCow\Fluent\Model\Locale: - DEFAULT_NONE: '(keine)' - DOMAIN: Domain - FALLBACKS: 'Fallback-Gebietsschemata' - IS_DEFAULT: 'This is the global default locale' + DEFAULT_NONE: (keine) + EDIT_LOCALE: 'Zugriff "{title}" ({locale})' + FALLBACKS: Fallback-Gebietsschemata IS_DEFAULT_DESCRIPTION: 'Hinweis: Das domänenspezifische Gebietsschema kann auf der Registerkarte "Gebietsschemas" zugewiesen werden und überschreibt diesen Wert für bestimmte Domänen.' LOCALE: Gebietsschema LOCALE_TITLE: Titel - LOCALE_URL: 'URL-Segment' + LOCALE_URL: URL-Segment + MULTI_LOCALE: 'Zugriff auf Mehr-Sprachen Aktionen (z.B. in allen Sprachen speichern)' PLURALNAME: Gebietsschemata PLURALS: - one: 'Gebietsschema' + one: Gebietsschema other: '{count} Gebietsschemata' SINGULARNAME: Gebietsschema + TIMEZONE: Zeitzone UnsavedNotice: 'Sie können Fallbacks hinzufügen, sobald Sie das Gebietsschema gespeichert haben.' - TractorCow\Fluent\Extension\Traits\FluentAdminTrait: - ClearAllNotice: 'Alle Übersetzungen sind entfern worden.' - CopyNotice: "'{title}' wurde in alle anderen Gebietsschemas kopiert." - UnpublishNotice: "Veröffentlichung '{title}' in allen Gebietsschemas enfernt." - ArchiveNotice: "'{title}' und alle seine Lokalisierungen wurden gelöscht." - ShowNotice: "'{title}' ist nun in {locale} sichtbar" - HideNotice: "'{title}' wird in {locale} nicht mehr angezeigt." - PublishNotice: "'{title}' ist in allen Gebietsschemata veröffentlicht worden." - Localisation: 'Übersetzungen' - Label_clearFluent: "Alle ausser '{title}' löschen" - Label_copyFluent: "'{title}' in alle anderen Sprachen kopieren" - Label_unpublishFluent: 'Veröffentlichung zurücknehmen (alle Sprachen)' - Label_archiveFluent: 'Veröffentlichungen zurücknehmen und archivieren (alle Sprachen)' - Label_publishFluent: 'Speichern & veröffentlichen (alle Sprachen)' - Label_deleteFluent: 'Löschen (alle Sprachen)' - Label_hideFluent: "In '{title}' verstecken" - Label_showFluent: "In '{title}' anzeigen" - - TractorCow\Fluent\Extension\Traits\FluentBadgeTrait: - BadgePublished: 'In {locale} veröffentlicht' - BadgeDraft: 'Als Entwurf in {locale} gespeichert' - BaggeInvisible: '{type} ist in dieser Sprache nicht sichtbar' - - TractorCow\Fluent\Extension\Traits\FluentObjectTrait: - TAB_LOCALISATION: 'Übersetzungen' + db_Locale: Standardgebietsschema + db_Sort: Sortierung + db_Timezone: Zeitzone + db_Title: Titel + db_URLSegment: URL-Segment diff --git a/lang/es.yml b/lang/es.yml new file mode 100644 index 00000000..e6428012 --- /dev/null +++ b/lang/es.yml @@ -0,0 +1,139 @@ +es: + SilverStripe\CMS\Controllers\CMSMain: + ARCHIVE: Archivar + SilverStripe\CMS\Model\SiteTree: + BUTTONPUBLISHED: Publicado + BUTTONSAVEPUBLISH: Publicar + TractorCow\Fluent\Control\LocaleAdmin: + MENUTITLE: 'Configuraciones regionales' + TractorCow\Fluent\Extension\FluentBadgeExtension: + BadgeDefault: 'Configuración regional por defecto' + BadgeInvisible: 'Localizado en {locale}' + BadgeLocalised: '{type} no es visible en esta configuración regional' + TractorCow\Fluent\Extension\FluentExtension: + COPY_FROM: 'Copiar a {locale} desde:' + COPY_TO: 'Copiar desde {locale} a:' + FLUENT_ICON_TOOLTIP: 'Campo traducible' + LOCALISED: Localizado + Localise: Localizar + NOSOURCE: 'Sin fuentes' + NOTLOCALISED: 'No localizado' + Unlocalise: Deslocalizar + UnlocaliseTooltip: 'Remover {name} de la configuración regional actual' + TractorCow\Fluent\Extension\FluentFilteredExtension: + FILTERED_LOCALES: 'Mostrar en las siguientes configuraciones regionales' + LOCALEFILTEREDHELP: 'Esta página no es visible en esta configuración regional' + TAB_LOCALES: 'Configuraciones regionales' + many_many_FilteredLocales: 'Configuraciones regionales filtradas' + TractorCow\Fluent\Extension\FluentIsolatedExtension: + has_one_Locale: 'Configuración regional' + TractorCow\Fluent\Extension\FluentSiteTreeExtension: + LOCALECOPYANDPUBLISH: 'Copiar y publicar' + LOCALECOPYTODRAFT: 'Copiar a borrador' + LOCALESTATUSFLUENTDRAFT: 'Un borrador ha sido creado para esta configuración local, sin embargo, el contenido publicado puede seguir siendo heredado de otra configuración regional. Para publicar este contenido para esta configuración regional, usa la acción "Guardar y publicar".' + LOCALESTATUSFLUENTINHERITED: 'El contenido de esta página puede estar heredando desde otra configuración regional. Si desea hacer una copia independiente de esta página, por favor use un de las acciones "Copiar" que se dan.' + LOCALESTATUSFLUENTINVISIBLE: 'Esta página no será visible en esta configuración local hasta que sea publicada.' + LOCALESTATUSFLUENTUNKNOWN: 'No hay contenido disponible para esta página. Por favor localize esta página o provea una configuración regional de respaldo.' + TractorCow\Fluent\Extension\FluentVersionedExtension: + DRAFT: Borrador + LIVEYES: Sí + MODIFIED: Modificado + NOSOURCE: 'Sin fuentes' + NOTLOCALISED: 'No localizado' + PUBLISHED: Publicado + TractorCow\Fluent\Extension\Traits\FluentAdminTrait: + ArchiveNotice: '"{title}" y todas sus configuraciones regionales fueron archivadas.' + ClearAllNotice: "Todas las configuraciones regionales se han limpiado para '{title}'." + CopyNotice: "Copiar '{title}' a todas las demás configuraciones regionales." + DeleteNotice: "'{title}' y todas sus configuraciones regionales se borraron." + HideNotice: "El registro '{title}' ahora está oculto en {locale}" + Label_archiveFluent: 'Despublicar y Archivar (todas las configuraciones regionales)' + Label_clearFluent: "Limpiar de todos exceptos '{title}'" + Label_copyFluent: "Copiar '{title}' a otras configuraciones locales" + Label_deleteFluent: 'Borrar (todas las configuraciones locales)' + Label_hideFluent: "Esconder de '{title}'" + Label_publishFluent: 'Guardar y Publicar (todas las configuraciones locales)' + Label_showFluent: "Mostrar en '{title}'" + Label_unpublishFluent: 'Despublicar (todas las configuraciones locales)' + Localisation: Localización + PublishNotice: "Publicado '{title}' para todas las configuraciones regionales." + ShowNotice: "El registro '{title}' es ahora visible en {locale}" + UnpublishNotice: "Se despublicó '{title}' de todas las configuraciones regionales" + TractorCow\Fluent\Extension\Traits\FluentBadgeTrait: + BadgeInherited: 'Heredado de {locale}' + BadgeLocalised: 'Localizado en {locale}' + BaggeInvisible: '{type} no tiene contenido disponible en {locale}, localizar el {type} o proveer una configuración regional de respaldo' + TractorCow\Fluent\Extension\Traits\FluentObjectTrait: + TAB_LOCALISATION: Localización + TractorCow\Fluent\Forms\DeleteAllLocalesAction: + Delete: 'Borrar registro de todas las configuraciones locales' + TractorCow\Fluent\Forms\DeleteLocaleAction: + DELETE: 'Borrar en esta configuración local' + TractorCow\Fluent\Forms\LocaleToggleColumn: + DISPLAY_IN: '¿Es visible?' + TractorCow\Fluent\Forms\PublishAction: + PUBLISH: 'Publicar en esta configuración regional' + TractorCow\Fluent\Forms\SaveLocaleAction: + SAVE: 'Guardar en esta configuración regional' + TractorCow\Fluent\Forms\UnpublishAction: + UNPUBLISH: 'Despublicar de esta configuración regional' + TractorCow\Fluent\Forms\VisibleLocalesColumn: + LocalesTitle: 'Configuraciones regionales' + TractorCow\Fluent\Model\Domain: + DEFAULT: 'Configuración regional por defecto' + DEFAULT_NONE: (ninguno) + DOMAIN_HOSTNAME: 'Nombre del host de dominio' + DOMAIN_LOCALES: 'Configuraciones regionales' + PLURALNAME: Dominios + PLURALS: + many: '{count} dominios' + one: 'Un dominio' + other: '{count} dominios' + SINGULARNAME: Dominio + UnsavedNotice: 'Puede agregar configuraciones regionales una vez que guarde el dominio.' + db_Domain: Dominio + has_many_Locales: 'Configuraciones regionales' + has_one_DefaultLocale: 'Configuración regional por defecto' + TractorCow\Fluent\Model\FallbackLocale: + LOCALE: 'Configuración regional' + PLURALNAME: 'Configuraciones regionales de respaldo' + PLURALS: + many: '{} configuraciones regionales de respaldo' + one: 'Una configuración regional de respaldo' + other: '{} configuraciones regionales de respaldo' + SINGULARNAME: 'Configuración regional de respaldo' + db_Sort: Ordenar + has_one_Locale: 'Configuración regional' + has_one_Parent: Padre + TractorCow\Fluent\Model\Locale: + DEFAULT_NONE: (ninguno) + DOMAIN: Dominio + EDIT_LOCALE: 'Acceder "{title}" ({locale})' + FALLBACKS: 'Configuraciones regionales de respaldo' + IS_DEFAULT: 'Esta es la configuración regional por defecto global' + IS_DEFAULT_DESCRIPTION: 'Nota: la configuración regional específica por dominio puede ser asignada en la pestaña Configuraciones regionales y sobreescribirá este valor para dominios específicos.' + LOCALE: 'Configuración regional' + LOCALE_TITLE: Título + LOCALE_URL: 'Segmento de URL' + MULTI_LOCALE: 'Acceso a acciones en múltiples configuraciones regionales (Ejemplo: guardar en todas las configuraciones regionales)' + PERMISSION: Localización + PLURALNAME: 'Configuraciones regionales' + PLURALS: + many: '{count} configuraciones regionales' + one: 'Una configuración regional' + other: '{count} configuraciones regionales' + SINGULARNAME: 'Configuración regional' + TIMEZONE: 'Huso horario' + USE_X_DEFAULT: 'Usar {code} como código de lenguaje SEO (tratar como global)' + USE_X_DEFAULT_DESCRIPTION: 'El uso de este código indica a los motores de búsqueda que esta es una página de destino global sin localizar' + UnsavedNotice: 'Puede agregar respaldos una vez que guarde la configuración regional.' + db_IsGlobalDefault: 'Es por defecto global' + db_Locale: 'Configuración regional' + db_Sort: Ordenar + db_Timezone: 'Huso horario' + db_Title: Título + db_URLSegment: 'Segmento de URL' + db_UseDefaultCode: 'Usar código por defecto' + has_many_FallbackLocales: 'Configuraciones regionales de respaldo' + has_one_Domain: Dominio + many_many_Fallbacks: Respaldos diff --git a/lang/fi.yml b/lang/fi.yml index 2ed9bde4..dcca1498 100644 --- a/lang/fi.yml +++ b/lang/fi.yml @@ -3,10 +3,10 @@ fi: BadgeHiddenHelp: 'Sivu on piilotettu tämän kielen osalta' BadgeHiddenShort: Piilotettu ChangeLocale: 'Vaihda kieltä' + DefaultLocale: 'Tämä on oletuskieli' + DefaultLocaleIs: 'Oletuskieli on' + EditingIn: 'Huomautus! Olet muokkaamassa kielellä' LocaleFilter: Kielisuodatin LocaleFilterDescription: 'Valitse kieli näyttääksesi tämän sivun/tietueen kyseisellä kielellä' LocaleMenuFilterDescription: 'Valitse kielet joilla tämä sivu/tietue näytetään valikoissa' TABLOCALES: Kielet - DefaultLocale: 'Tämä on oletuskieli' - DefaultLocaleIs: 'Oletuskieli on' - EditingIn: 'Huomautus! Olet muokkaamassa kielellä' diff --git a/lang/it.yml b/lang/it.yml index dc5d8766..fc510ae0 100644 --- a/lang/it.yml +++ b/lang/it.yml @@ -1,59 +1,116 @@ it: + SilverStripe\CMS\Controllers\CMSMain: + ARCHIVE: Archivia + SilverStripe\CMS\Model\SiteTree: + BUTTONPUBLISHED: Pubblicato + BUTTONSAVEPUBLISH: Pubblica TractorCow\Fluent\Control\LocaleAdmin: - MENUTITLE: Lingue + MENUTITLE: Localizzazione TractorCow\Fluent\Extension\FluentBadgeExtension: - BadgeDefault: 'Lingua di default' - BadgeInvisible: 'Localizzato in {locale}' - BadgeLocalised: '{type} non è visibile per questa lingua' + BadgeDefault: 'Lingua predefinita' + BadgeInvisible: 'Tradotto in {locale}' + BadgeLocalised: '{type} non è visibile in questa lingua' TractorCow\Fluent\Extension\FluentExtension: + COPY_FROM: 'Copia in {locale} da:' + COPY_TO: 'Copia da {locale} a:' FLUENT_ICON_TOOLTIP: 'Campo traducibile' + LOCALISED: Tradotto + Localise: Tradurre + NOSOURCE: 'Nessun originale' + NOTLOCALISED: 'Non tradotto' + Unlocalise: 'Elimina traduzione' + UnlocaliseTooltip: 'Togli {name} dalla lingua attiva' TractorCow\Fluent\Extension\FluentFilteredExtension: - FILTERED_LOCALES: 'Mostra nelle seguenti lingue' + FILTERED_LOCALES: 'Mostrare nelle seguenti lingue' LOCALEFILTEREDHELP: 'Questa pagina non è visibile in questa lingua' - TAB_LOCALES: Lingue + TAB_LOCALES: Localizzazione + TractorCow\Fluent\Extension\FluentIsolatedExtension: + has_one_Locale: Lingua TractorCow\Fluent\Extension\FluentSiteTreeExtension: - LOCALECOPYANDPUBLISH: 'Copia & pubblica' - LOCALECOPYTODRAFT: 'Copia in bozza' - LOCALESTATUSFLUENTDRAFT: 'È stata creata una bozza per questa lingua, tuttavia, il contenuto pubblicato potrebbe ancora essere ereditato da un altro. Per pubblicare questo contenuto per questa lingua, utilizza l''azione fornita "Salva e pubblica".' + LOCALECOPYANDPUBLISH: 'Salva e pubblica' + LOCALECOPYTODRAFT: 'Copia nella bozza' + LOCALESTATUSFLUENTDRAFT: 'Una bozza è stata creata per questa lingua ma il contenuto pubblicato può essere ancora quello di un''altra. Per pubblicare nuovo contenuto in questa lingua usare il pulsante "Salva e pubblica".' LOCALESTATUSFLUENTINHERITED: 'Il contenuto di questa pagina potrebbe essere ereditato da un''altra lingua. Se desideri creare una copia indipendente di questa pagina, utilizza una delle azioni "Copia" fornite.' - LOCALESTATUSFLUENTINVISIBLE: 'Questa pagina non sarà visibile in questa lingua fino a quando non sarà stata pubblicata.' + LOCALESTATUSFLUENTINVISIBLE: 'Questa pagina non sarà visibile in questa lingua fino a quando verrà pubblicata.' + LOCALESTATUSFLUENTUNKNOWN: 'Contenuto non disponibile per questa pagina. Localizzare la pagina o fornire una lingua alternativa.' + TractorCow\Fluent\Extension\FluentVersionedExtension: + DRAFT: Bozza + LIVEYES: Sì + MODIFIED: Modificato + NOSOURCE: 'Nessun originale' + NOTLOCALISED: 'Non tradotto' + PUBLISHED: Pubblicato + TractorCow\Fluent\Extension\Traits\FluentAdminTrait: + ArchiveNotice: "Archiviato '{title}' e tutte le sue traduzioni." + ClearAllNotice: "Tutte le traduzioni sono state eliminate per '{title}'." + CopyNotice: "'{title}' copiato in tutte le altre lingue." + DeleteNotice: "Eliminato '{title}' e tutte le sue traduzioni." + Localisation: Localizzazione + PublishNotice: "'{title}' pubblicato in tutte le lingue." + UnpublishNotice: "'{title}' nascosto in tutte le lingue." + TractorCow\Fluent\Extension\Traits\FluentBadgeTrait: + BadgeLocalised: 'Tradotto in {locale}' + TractorCow\Fluent\Extension\Traits\FluentObjectTrait: + TAB_LOCALISATION: Localizzazione + TractorCow\Fluent\Forms\DeleteAllLocalesAction: + Delete: 'Elimina i dati da tutte le lingue' + TractorCow\Fluent\Forms\DeleteLocaleAction: + DELETE: 'Elimina da questa lingua' + TractorCow\Fluent\Forms\LocaleToggleColumn: + DISPLAY_IN: 'Visibile?' + TractorCow\Fluent\Forms\PublishAction: + PUBLISH: 'Pubblica in questa lingua' + TractorCow\Fluent\Forms\SaveLocaleAction: + SAVE: 'Salva in questa lingua' + TractorCow\Fluent\Forms\UnpublishAction: + UNPUBLISH: 'Nascondi in questa lingua' + TractorCow\Fluent\Forms\VisibleLocalesColumn: + LocalesTitle: Localizzazione TractorCow\Fluent\Model\Domain: - DEFAULT: 'Lingua di default' - DEFAULT_NONE: (nessuna) - DOMAIN_HOSTNAME: 'Nome host del dominio' + DEFAULT: 'Lingua predefinita' + DEFAULT_NONE: (nessuno) + DOMAIN_HOSTNAME: 'Host del Dominio' DOMAIN_LOCALES: Lingue PLURALNAME: Domini PLURALS: - one: 'Un dominio' - other: '{count} domini' + many: '{count} Domini' + one: 'Un Dominio' + other: '{count} Domini' SINGULARNAME: Dominio UnsavedNotice: 'Puoi aggiungere lingue una volta salvato il dominio.' + db_Domain: Dominio + has_many_Locales: Lingue + has_one_DefaultLocale: 'Lingua predefinita' TractorCow\Fluent\Model\FallbackLocale: - LOCALE: Lingue - PLURALNAME: 'Lingue di riserva' + LOCALE: Lingua + PLURALNAME: 'Lingue Alternative' PLURALS: - one: 'Una lingua di riserva' - other: '{count} lingue di riserva' - SINGULARNAME: 'Lingua di riserva' + many: '{count} Lingue Alternative' + one: 'Una Lingua Alternativa' + other: '{count} Lingue Alternative' + SINGULARNAME: 'Lingua Alternativa' + has_one_Locale: Lingua TractorCow\Fluent\Model\Locale: DEFAULT_NONE: (nessuna) DOMAIN: Dominio - FALLBACKS: 'Lingue di riserva' - IS_DEFAULT: 'Questa è la lingua predefinita globale' - IS_DEFAULT_DESCRIPTION: 'Nota: le impostazioni internazionali specifiche per dominio possono essere assegnate nella tab Lingue e sovrascriveranno questo valore per domini specifici.' + EDIT_LOCALE: 'Accesso a "{title}" ({locale})' + FALLBACKS: 'Lingue Alternative' + IS_DEFAULT: 'Questa è la lingua principale di default' + IS_DEFAULT_DESCRIPTION: 'Attenzione: nella scheda Lingue possono essere impostate lingue diverse per dominio e avranno la precedenza su questo valore nei domini specificati.' LOCALE: Lingua LOCALE_TITLE: Titolo LOCALE_URL: 'Segmento URL' + MULTI_LOCALE: 'Accesso ad azioni multilingua (per esempio Salva in tutte le lingue)' + PERMISSION: Localizzazione PLURALNAME: Lingue PLURALS: - one: 'Una lingua' - other: '{count} lingue' - SINGULARNAME: Lingue - UnsavedNotice: 'Puoi aggiungere lingue di riserva dopo aver salvato la lingua.' - TractorCow\Fluent\Extension\Traits\FluentAdminTrait: - ClearAllNotice: 'Tutte le localizzazioni sono state cancellate per ''{title}''.' - CopyNotice: 'Copiato ''{title}'' nelle altre lingue.' - DeleteNotice: 'Cancellato ''{title}'' e tutte le sue lingue.' - UnpublishNotice: 'Depubblicato ''{title}'' in tutte le lingue.' - ArchiveNotice: 'Archiviato ''{title}'' e tutte le sue lingue.' - PublishNotice: 'Pubblicato ''{title}'' in tutte le lingue.' + many: '{count} Lingue' + one: 'Una Lingua' + other: '{count} Lingue' + SINGULARNAME: Lingua + USE_X_DEFAULT: 'Usare {code} come codice lingua SEO (da considerare globale)' + USE_X_DEFAULT_DESCRIPTION: "L'uso di questo codice suggerisce ai motori di ricerca che questa è una pagina di destinazione globale non localizzata" + UnsavedNotice: 'Puoi aggiungere alternative una volta salvata la lingua.' + db_Locale: Lingua + db_Title: Titolo + has_one_Domain: Dominio diff --git a/lang/nl.yml b/lang/nl.yml new file mode 100644 index 00000000..0acb8e00 --- /dev/null +++ b/lang/nl.yml @@ -0,0 +1,113 @@ +nl: + SilverStripe\CMS\Controllers\CMSMain: + ARCHIVE: Archiveer + SilverStripe\CMS\Model\SiteTree: + BUTTONPUBLISHED: Gepubliceerd + BUTTONSAVEPUBLISH: Publiceer + TractorCow\Fluent\Control\LocaleAdmin: + MENUTITLE: Talen + TractorCow\Fluent\Extension\FluentBadgeExtension: + BadgeDefault: 'Standaard taal' + BadgeInvisible: 'Vertaald in {locale}' + BadgeLocalised: '{type} is niet zichtbaar in deze taal' + TractorCow\Fluent\Extension\FluentExtension: + COPY_FROM: 'Kopieer naar {locale} vanuit:' + COPY_TO: 'Kopieer vanuit {locale} naar:' + FLUENT_ICON_TOOLTIP: 'Vertaalbaar veld' + LOCALISED: Vertaald + Localise: Vertaal + NOSOURCE: 'Geen bron' + NOTLOCALISED: 'Niet vertaald' + Unlocalise: Niet-vertaalbaar + UnlocaliseTooltip: 'Verwijder {name} van huidige taal' + TractorCow\Fluent\Extension\FluentFilteredExtension: + FILTERED_LOCALES: 'Toon in de volgende talen' + LOCALEFILTEREDHELP: 'Deze pagina is niet zichtbaar in deze taal' + TAB_LOCALES: Vertalingen + TractorCow\Fluent\Extension\FluentIsolatedExtension: + has_one_Locale: Talen + TractorCow\Fluent\Extension\FluentSiteTreeExtension: + LOCALECOPYANDPUBLISH: 'Kopieer en publiceer' + LOCALECOPYTODRAFT: 'Kopieer naar concept' + LOCALESTATUSFLUENTDRAFT: 'Er is een concept klaargezet voor deze taal, maar de live inhoud kan nog steeds worden overgenomen van een andere. Gebruik de actie "Opslaan en publiceren" om deze vertaling te publiceren.' + LOCALESTATUSFLUENTINVISIBLE: 'Deze pagina is pas zichtbaar in deze taal, als deze gepubliceerd is.' + LOCALESTATUSFLUENTUNKNOWN: 'Er is geen inhoud beschikbaar voor deze pagina. Vertaal deze pagina of stel een taal in waarop teruggevallen kan worden.' + TractorCow\Fluent\Extension\FluentVersionedExtension: + DRAFT: Concept + LIVENO: Nee + LIVEYES: Ja + MODIFIED: Aangepast + NOSOURCE: 'Geen bron' + NOTLOCALISED: 'Niet vertaald' + PUBLISHED: Gepubliceerd + TractorCow\Fluent\Extension\Traits\FluentAdminTrait: + ArchiveNotice: "'{title}' is gearchiveerd bij alle talen" + ClearAllNotice: "Alle vertalingen zijn verwijderd voor '{title}'." + CopyNotice: "'{title}' is gekopieerd naar alle talen." + DeleteNotice: "'{title}' is verwijderd van alle talen" + Localisation: Vertalingen + PublishNotice: "'{title}' is gepubliceerd in alle talen." + UnpublishNotice: "'{title}' is ge-depubliceerd bij alle talen." + TractorCow\Fluent\Extension\Traits\FluentBadgeTrait: + BadgeLocalised: 'Vertaald in {locale}' + TractorCow\Fluent\Extension\Traits\FluentObjectTrait: + TAB_LOCALISATION: Vertalingen + TractorCow\Fluent\Forms\DeleteAllLocalesAction: + Delete: 'Verwijder item in alle talen' + TractorCow\Fluent\Forms\DeleteLocaleAction: + DELETE: 'Verwijder in deze taal' + TractorCow\Fluent\Forms\LocaleToggleColumn: + DISPLAY_IN: 'Zichtbaar?' + TractorCow\Fluent\Forms\PublishAction: + PUBLISH: 'Publiceer in deze taal' + TractorCow\Fluent\Forms\SaveLocaleAction: + SAVE: 'Opslaan in deze taal' + TractorCow\Fluent\Forms\UnpublishAction: + UNPUBLISH: 'Publicatie intrekken voor deze taal' + TractorCow\Fluent\Forms\VisibleLocalesColumn: + LocalesTitle: Vertalingen + TractorCow\Fluent\Model\Domain: + DEFAULT: 'Standaard taal' + DEFAULT_NONE: (geen) + DOMAIN_HOSTNAME: Domeinnaam + DOMAIN_LOCALES: Vertalingen + PLURALNAME: Domeinnamen + PLURALS: + one: 'Een domeinnaam' + other: '{count} domeinnamen' + SINGULARNAME: Domeinnaam + UnsavedNotice: 'Na het opslaan van de taal kunnen er domeinnamen toegevoegd worden' + db_Domain: Domeinnaam + has_many_Locales: Talen + has_one_DefaultLocale: 'Standaard taal' + TractorCow\Fluent\Model\FallbackLocale: + LOCALE: Talen + PLURALNAME: Terugval-taal + PLURALS: + one: Terugval-taal + other: '{count} terugval-talen' + SINGULARNAME: Terugval-taal + has_one_Locale: Talen + TractorCow\Fluent\Model\Locale: + DEFAULT_NONE: (geen) + DOMAIN: Domeinnaam + EDIT_LOCALE: 'Toegang "{title}" ({locale})' + FALLBACKS: Terugval-taal + IS_DEFAULT: 'Dit is de standaard taal' + IS_DEFAULT_DESCRIPTION: 'Let op: Per domein kan een taal worden gekozen (op het tabblad Talen) en overschrijft deze waarde voor dat specifieke domein.' + LOCALE: Talen + LOCALE_TITLE: Titel + LOCALE_URL: 'URL segment' + MULTI_LOCALE: 'Toegang tot multi-taal-mogelijkheden (zoals opslaan in alle talen)' + PERMISSION: Vertalingen + PLURALNAME: Talen + PLURALS: + one: Taal + other: '{count} Talen' + SINGULARNAME: Talen + USE_X_DEFAULT: 'Gebruik {code} als SEO taalcode (als site-standaard)' + USE_X_DEFAULT_DESCRIPTION: 'Het gebruik van deze code geeft aan zoekmachines aan dat dit een niet-vertaalde landingspagina is' + UnsavedNotice: 'Een terugval-taal kan ingesteld worden na het opslaan' + db_Locale: Talen + db_Title: Titel + has_one_Domain: Domeinnaam diff --git a/lang/pl.yml b/lang/pl.yml new file mode 100644 index 00000000..65dc3db5 --- /dev/null +++ b/lang/pl.yml @@ -0,0 +1,119 @@ +pl: + SilverStripe\CMS\Controllers\CMSMain: + ARCHIVE: Archiwum + SilverStripe\CMS\Model\SiteTree: + BUTTONPUBLISHED: Opublikowano + BUTTONSAVEPUBLISH: Publikuj + TractorCow\Fluent\Control\LocaleAdmin: + MENUTITLE: Języki + TractorCow\Fluent\Extension\FluentBadgeExtension: + BadgeDefault: 'Domyślny język' + BadgeInvisible: 'Przetłumaczono w {locale}' + BadgeLocalised: '{type} nie jest widoczny w tym języku' + TractorCow\Fluent\Extension\FluentExtension: + COPY_FROM: 'Skopiuj do {locale} z:' + COPY_TO: 'Skopiuj z {locale} do:' + FLUENT_ICON_TOOLTIP: 'Pole do przetłumaczenia' + LOCALISED: Przetłumaczone + Localise: Lokalizacja + NOSOURCE: 'Brak źródła' + NOTLOCALISED: 'Brak lokalizacji' + Unlocalise: Niezlokalizuj + UnlocaliseTooltip: 'Usuń {name} z bieżącego języka' + TractorCow\Fluent\Extension\FluentFilteredExtension: + FILTERED_LOCALES: 'Wyświetlaj w następujących lokalizacjach' + LOCALEFILTEREDHELP: 'Ta strona nie jest widoczna w tym języku' + TAB_LOCALES: Lokalizacje + TractorCow\Fluent\Extension\FluentIsolatedExtension: + has_one_Locale: Język + TractorCow\Fluent\Extension\FluentSiteTreeExtension: + LOCALECOPYANDPUBLISH: 'Kopiuj i publikuj' + LOCALECOPYTODRAFT: Kopiuj + LOCALESTATUSFLUENTDRAFT: 'Utworzono wersję roboczą dla tego języka, jednak opublikowana treść może nadal być dziedziczona z innej. Aby opublikować tę treść dla tej lokalizacji, użyj udostępnionej akcji „Zapisz i opublikuj”.' + LOCALESTATUSFLUENTINVISIBLE: 'Ta strona nie będzie widoczna w tej lokalizacji, dopóki nie zostanie opublikowana.' + LOCALESTATUSFLUENTUNKNOWN: 'Brak treści dla tej strony. Zlokalizuj tę stronę lub podaj zastępczą wersję regionalną.' + TractorCow\Fluent\Extension\FluentVersionedExtension: + DRAFT: Szkic + LIVENO: Nie + LIVEYES: Tak + MODIFIED: Zmodyfikowano + NOSOURCE: 'Brak źródła' + NOTLOCALISED: 'Nie określono' + PUBLISHED: Opublikowano + TractorCow\Fluent\Extension\Traits\FluentAdminTrait: + ArchiveNotice: 'Zarchiwizowany „{title}” i wszystkie jego lokalizacje.' + ClearAllNotice: 'Wszystkie lokalizacje zostały wyczyszczone dla „{title}”.' + CopyNotice: 'Skopiowano „{title}” do wszystkich innych lokalizacji.' + DeleteNotice: 'Usunięto „{title}” i wszystkie jego lokalizacje.' + Localisation: 'Lokalizacja, język' + PublishNotice: 'Opublikowano „{title}” we wszystkich lokalizacjach.' + UnpublishNotice: 'Nieopublikowany „{title}” we wszystkich językach.' + TractorCow\Fluent\Extension\Traits\FluentBadgeTrait: + BadgeLocalised: 'Przetłumaczono w {locale}' + TractorCow\Fluent\Extension\Traits\FluentObjectTrait: + TAB_LOCALISATION: 'Lokalizacja, język' + TractorCow\Fluent\Forms\DeleteAllLocalesAction: + Delete: 'Usuń wszędzie' + TractorCow\Fluent\Forms\DeleteLocaleAction: + DELETE: 'Usuń ten język' + TractorCow\Fluent\Forms\LocaleToggleColumn: + DISPLAY_IN: 'Widoczny?' + TractorCow\Fluent\Forms\PublishAction: + PUBLISH: 'Opublikuj w tym języku' + TractorCow\Fluent\Forms\SaveLocaleAction: + SAVE: 'Zapisz w tym języku' + TractorCow\Fluent\Forms\UnpublishAction: + UNPUBLISH: 'Cofnij publikację w tym języku' + TractorCow\Fluent\Forms\VisibleLocalesColumn: + LocalesTitle: Języki + TractorCow\Fluent\Model\Domain: + DEFAULT: 'Domyślny język' + DEFAULT_NONE: (brak) + DOMAIN_HOSTNAME: 'Nazwa hosta domeny' + DOMAIN_LOCALES: Języki + PLURALNAME: Domeny + PLURALS: + few: 'Domen {count}' + many: 'Domen {count}' + one: Domena + other: 'Domeny {count}' + SINGULARNAME: Domena + UnsavedNotice: 'Po zapisaniu domeny możesz dodać języki.' + db_Domain: Domena + has_many_Locales: Języki + has_one_DefaultLocale: 'Domyślny język' + TractorCow\Fluent\Model\FallbackLocale: + LOCALE: Język + PLURALNAME: 'Język zastępczy' + PLURALS: + few: 'Języków zastępczych {count}' + many: 'Języków zastępczych {count}' + one: 'Język zastępczy' + other: 'Język zastępczy {count}' + SINGULARNAME: 'Język zastępczy' + has_one_Locale: Język + TractorCow\Fluent\Model\Locale: + DEFAULT_NONE: (brak) + DOMAIN: Domena + EDIT_LOCALE: 'Uzyskaj dostęp do „{title}” ({locale})' + FALLBACKS: 'Języki zastępcze' + IS_DEFAULT: 'To jest globalne domyślne ustawienie regionalne' + IS_DEFAULT_DESCRIPTION: 'Uwaga: ustawienia regionalne dla poszczególnych domen można przypisać na karcie Ustawienia regionalne i zastąpią one tę wartość dla określonych domen.' + LOCALE: Język + LOCALE_TITLE: Tytuł + LOCALE_URL: URL + MULTI_LOCALE: 'Dostęp do działań w wielu lokalizacjach (np. zapisywanie we wszystkich lokalizacjach)' + PERMISSION: 'Lokalizacja, język' + PLURALNAME: Języki + PLURALS: + few: 'Lokalizacje, języki {count}' + many: 'Lokalizacji, języków {count}' + one: 'Lokalizacja, język' + other: 'Lokalizacje, języki {count}' + SINGULARNAME: Język + USE_X_DEFAULT: 'Użyj {code} jako kodu języka SEO (traktuj jako globalny)' + USE_X_DEFAULT_DESCRIPTION: 'Użycie tego kodu wskazuje wyszukiwarkom, że jest to nie-określona globalna strona docelowa' + UnsavedNotice: 'Po zapisaniu domeny możesz dodać języki.' + db_Locale: Język + db_Title: Tytuł + has_one_Domain: Domena diff --git a/lang/ru.yml b/lang/ru.yml index f2a07996..e5e013ac 100644 --- a/lang/ru.yml +++ b/lang/ru.yml @@ -1,6 +1,23 @@ ru: TractorCow\Fluent\Control\LocaleAdmin: MENUTITLE: Языки + TractorCow\Fluent\Extension\FluentBadgeExtension: + BadgeDefault: 'Стандартный язык' + TractorCow\Fluent\Extension\FluentFilteredExtension: + TAB_LOCALES: Языки + TractorCow\Fluent\Extension\FluentIsolatedExtension: + has_one_Locale: Язык + TractorCow\Fluent\Extension\FluentSiteTreeExtension: + LOCALECOPYANDPUBLISH: 'Скопировать и опубликовать' + LOCALECOPYTODRAFT: 'Скопировать в Черновик' + LOCALEDRAFTEDHELP: 'Черновая редакция перевода не опубликована' + LOCALEDRAFTEDSHORT: 'Язык в черновиках' + LOCALEINHERITEDHELP: 'Данные страницы унаследованы от резевного языка' + LOCALEINHERITEDSHORT: Унаследовано + LOCALESTATUSDRAFT: 'Черновая версия перевода была создана для этого языка, однако, опубликованное содержимое всё ещё на другом языке. Для публикации этого языка воспользуйтесь кнопкой "Сохранить и Опубликовать".' + LOCALESTATUSINHERITED: 'Данные страницы унаследованы от резевного языка. Если вы хотите сделать независимую копию страницы. Пожалуйста воскользуйтесь одной из кнопок "Скопировать".' + TractorCow\Fluent\Forms\VisibleLocalesColumn: + LocalesTitle: Языки TractorCow\Fluent\Model\Domain: DEFAULT: 'Стандартный язык' DEFAULT_NONE: '(не выбран)' @@ -12,6 +29,9 @@ ru: other: '{count} Доменов' SINGULARNAME: Домен UnsavedNotice: 'Вы можете добавить языки для домена как только его сохраните.' + db_Domain: Домен + has_many_Locales: Языки + has_one_DefaultLocale: 'Стандартный язык' TractorCow\Fluent\Model\FallbackLocale: LOCALE: Язык PLURALNAME: 'Резервные Языки' @@ -19,6 +39,7 @@ ru: one: 'Резервный Язык' other: '{count} Резервных Языков' SINGULARNAME: 'Резервный Язык' + has_one_Locale: Язык TractorCow\Fluent\Model\Locale: DEFAULT_NONE: '(не выбран)' DOMAIN: Домен @@ -33,12 +54,6 @@ ru: one: Язык other: '{count} Языков' SINGULARNAME: Язык - TractorCow\Fluent\Extension\FluentSiteTreeExtension: - LOCALECOPYTODRAFT: 'Скопировать в Черновик' - LOCALECOPYANDPUBLISH: 'Скопировать и опубликовать' - LOCALEDRAFTEDSHORT: 'Язык в черновиках' - LOCALEDRAFTEDHELP: 'Черновая редакция перевода не опубликована' - LOCALEINHERITEDSHORT: Унаследовано - LOCALEINHERITEDHELP: 'Данные страницы унаследованы от резевного языка' - LOCALESTATUSINHERITED: 'Данные страницы унаследованы от резевного языка. Если вы хотите сделать независимую копию страницы. Пожалуйста воскользуйтесь одной из кнопок "Скопировать".' - LOCALESTATUSDRAFT: 'Черновая версия перевода была создана для этого языка, однако, опубликованное содержимое всё ещё на другом языке. Для публикации этого языка воспользуйтесь кнопкой "Сохранить и Опубликовать".' + db_Locale: Язык + db_Title: Название + has_one_Domain: Домен diff --git a/lang/sl.yml b/lang/sl.yml index 19a05939..9bbb7c81 100644 --- a/lang/sl.yml +++ b/lang/sl.yml @@ -1,22 +1,85 @@ sl: + SilverStripe\CMS\Controllers\CMSMain: + ARCHIVE: Arhiv + SilverStripe\CMS\Model\SiteTree: + BUTTONPUBLISHED: Objavljeno + BUTTONSAVEPUBLISH: Objavi TractorCow\Fluent\Control\LocaleAdmin: MENUTITLE: Lokalizacije TractorCow\Fluent\Extension\FluentBadgeExtension: - BadgeDefault: 'Privzeto' + BadgeDefault: Privzeto BadgeInvisible: 'Lokalizirano v {locale}' BadgeLocalised: 'Tip {type} je skrit za to lokalizacijo' TractorCow\Fluent\Extension\FluentExtension: + COPY_FROM: 'Kopiraj v {locale} iz: ' + COPY_TO: 'Kopiraj iz {locale} v:' FLUENT_ICON_TOOLTIP: 'Lokalizirano polje' + LOCALISED: Lokalizirano + Localise: Lokaliziraj + NOSOURCE: (brez) + NOTLOCALISED: 'Ni lokalizirano' + Unlocalise: 'Odstrani lokalizacijo' + UnlocaliseTooltip: "Odstrani element '{name}' iz trenutne lokalizacije" TractorCow\Fluent\Extension\FluentFilteredExtension: FILTERED_LOCALES: 'Prikaži te lokalizacije' LOCALEFILTEREDHELP: 'Stran za to lokalizacijo ni vidna' TAB_LOCALES: Lokalizacije + many_many_FilteredLocales: 'Pofiltrirane lokalizacije' + TractorCow\Fluent\Extension\FluentIsolatedExtension: + has_one_Locale: Lokalizacija TractorCow\Fluent\Extension\FluentSiteTreeExtension: LOCALECOPYANDPUBLISH: 'Kopiraj in objavi' LOCALECOPYTODRAFT: 'Kopiraj v osnutek' LOCALESTATUSFLUENTDRAFT: 'Ustvarili smo osnutek strani za izbrano lokalizacijo, a je na strani lahko še vedno objavljena vsebina iz izvorne lokalizacije. Za objavo vsebine iz te lokalizacije kliknite "Kopiraj in objavi".' - LOCALESTATUSFLUENTINHERITED: 'Stran lahko prevzema vsebino iz druge lokalizacije. Če želite ustvariti nepovezano kopijo strani, uporabite eno od akcij kopiranja, ki so na voljo.' + LOCALESTATUSFLUENTINHERITED: 'Lahko, da je stran prevzela vsebino iz druge lokalizacije. Če želite ustvariti nepovezano kopijo strani, uporabite eno od akcij kopiranja, ki so na voljo.' LOCALESTATUSFLUENTINVISIBLE: 'Stran ne bo vidna dokler ne bo objavljena za to lokalizacijo.' + LOCALESTATUSFLUENTUNKNOWN: 'Vsebina za to stran ne obstaja. Lokalizirajte vsebino ali definirajte nadomestno lokalizacijo.' + TractorCow\Fluent\Extension\FluentVersionedExtension: + DRAFT: Osnutek + LIVENO: Ne + LIVEYES: Da + MODIFIED: Spremenjeno + NOSOURCE: (brez) + NOTLOCALISED: 'Ni lokalizirano' + PUBLISHED: Objavljeno + TractorCow\Fluent\Extension\Traits\FluentAdminTrait: + ArchiveNotice: "Stran '{title}' in njene lokalizacije so arhivirane." + ClearAllNotice: "Vse lokalizacije strani '{title}' so odstranjene." + CopyNotice: "Stran '{title}' je skopirana v vse ostale lokalizacije." + DeleteNotice: "Stran '{title}' je izbrisana in vse lokalizacije odstranjene." + HideNotice: "Zapis '{title}' je sedaj skrit v {locale}" + Label_archiveFluent: 'Umakni iz objave in arhiviraj (vse lokalizacije)' + Label_clearFluent: "Počisti iz vseh, razen iz '{title}'" + Label_copyFluent: "Skopiraj '{title}' v ostale lokalizacije" + Label_deleteFluent: 'Izbriši (vse lokalizacije)' + Label_hideFluent: "Skrij iz '{title}'" + Label_publishFluent: 'Shrani in objavi (vse lokalizacije)' + Label_showFluent: "Prikazano v '{title}'" + Label_unpublishFluent: 'Umakni iz objave (vse lokalizacije)' + Localisation: Lokalizacija + PublishNotice: "Vse lokalizacije strani '{title}' so objavljene." + ShowNotice: "Zapis '{title}' je sedaj viden v {locale}" + UnpublishNotice: "Vse lokalizacije strani '{title}' so umaknjene iz objave." + TractorCow\Fluent\Extension\Traits\FluentBadgeTrait: + BadgeInherited: 'Preneseno iz {locale}' + BadgeLocalised: 'Lokalizirano v {locale}' + BaggeInvisible: '{type} je brez vsebine v {locale}. Lokalizirajte {type} ali zagotovite nadomestno lokalizacijo.' + TractorCow\Fluent\Extension\Traits\FluentObjectTrait: + TAB_LOCALISATION: Lokalizacija + TractorCow\Fluent\Forms\DeleteAllLocalesAction: + Delete: 'Izbriši zapise v vseh lokalizacijah' + TractorCow\Fluent\Forms\DeleteLocaleAction: + DELETE: 'Izbriši to lokalizacijo' + TractorCow\Fluent\Forms\LocaleToggleColumn: + DISPLAY_IN: 'Vidno?' + TractorCow\Fluent\Forms\PublishAction: + PUBLISH: 'Objavi to lokalizacijo' + TractorCow\Fluent\Forms\SaveLocaleAction: + SAVE: 'Shrani to lokalizacijo' + TractorCow\Fluent\Forms\UnpublishAction: + UNPUBLISH: 'Umakni iz objave' + TractorCow\Fluent\Forms\VisibleLocalesColumn: + LocalesTitle: Lokalizacije TractorCow\Fluent\Model\Domain: DEFAULT: 'Privzeta lokalizacija' DEFAULT_NONE: (brez) @@ -24,35 +87,57 @@ sl: DOMAIN_LOCALES: Lokalizacije PLURALNAME: Domene PLURALS: - one: 'Domena' - two: '{count} domeni' few: '{count} domen' + one: Domena other: '{count} domen' + two: '{count} domeni' SINGULARNAME: Domena UnsavedNotice: 'Lokalizacije boste lahko dodajali, ko boste shranili domeno.' + db_Domain: Domena + has_many_Locales: Lokalizacije + has_one_DefaultLocale: 'Privzeta lokalizacija' TractorCow\Fluent\Model\FallbackLocale: LOCALE: Lokalizacija PLURALNAME: 'Nadomestne lokalizacije' PLURALS: - one: 'Nadomestna lokalizacija' - two: '{count} nadomestni lokalizaciji' few: '{count} nadomestnih lokalizacij' + one: 'Nadomestna lokalizacija' other: '{count} nadomestnih lokalizacij' + two: '{count} nadomestni lokalizaciji' SINGULARNAME: 'Nadomestna lokalizacija' + db_Sort: Razvrsti + has_one_Locale: Lokalizacija + has_one_Parent: Nadrejena TractorCow\Fluent\Model\Locale: DEFAULT_NONE: (brez) DOMAIN: Domena + EDIT_LOCALE: 'Dostop do "{title}" ({locale})' FALLBACKS: 'Nadomestne lokalizacije' - IS_DEFAULT: 'Splošno privzeta lokalizacija' - IS_DEFAULT_DESCRIPTION: 'Opomba: Lokalizacije, vezane na posamezno domeno, je mogoče nastaviti v zavihku Lokalizacije. V tem primeru bo specifična lokalizacija prevladala nad splošno privzeto.' + IS_DEFAULT: 'Privzeta (osnovna) lokalizacija' + IS_DEFAULT_DESCRIPTION: "Nastavitev, ki je z izbirnikom 'Domena' vezana na posamezno domeno, bo za tisto domeno prevladala nad splošno." LOCALE: Lokalizacija - LOCALE_TITLE: Naslov - LOCALE_URL: 'URL segment' + LOCALE_TITLE: Naziv + LOCALE_URL: 'Predpona URL' + MULTI_LOCALE: 'Dostop do paketnega urejanja lokalizacij, npr. shrani vse lokalizacije.' + PERMISSION: Lokalizacija PLURALNAME: Lokalizacije PLURALS: - one: 'Lokalizacija' - two: '{count} lokalizaciji' few: '{count} lokalizacij/e' + one: Lokalizacija other: '{count} lokalizacij/e' + two: '{count} lokalizaciji' SINGULARNAME: Lokalizacija + TIMEZONE: 'Časovni pas' + USE_X_DEFAULT: 'Uporabi kot privzeto ({code}) jezikovno kodo za SEO' + USE_X_DEFAULT_DESCRIPTION: 'S to izbiro boste iskalnikom nakazali, da je izbrana lokalizacija privzeta za vse situacije, ko specifična lokalizacija ni na voljo' UnsavedNotice: 'Nadomestne lokalizacije boste lahko dodali, ko boste shranili trenutno lokalizacijo.' + db_IsGlobalDefault: 'Privzeta (globalna)' + db_Locale: Lokalizacija + db_Sort: Razvrsti + db_Timezone: 'Časovni pas' + db_Title: Naziv + db_URLSegment: 'Predpona URL' + db_UseDefaultCode: 'Uporabi privzeto kodo' + has_many_FallbackLocales: 'Nadomestne lokalizacije' + has_one_Domain: Domena + many_many_Fallbacks: Nadomestne diff --git a/lang/sv.yml b/lang/sv.yml new file mode 100644 index 00000000..6ee2b818 --- /dev/null +++ b/lang/sv.yml @@ -0,0 +1,137 @@ +sv: + SilverStripe\CMS\Controllers\CMSMain: + ARCHIVE: Arkiv + SilverStripe\CMS\Model\SiteTree: + BUTTONPUBLISHED: Publicerad + BUTTONSAVEPUBLISH: Publicera + TractorCow\Fluent\Control\LocaleAdmin: + MENUTITLE: Språk + TractorCow\Fluent\Extension\FluentBadgeExtension: + BadgeDefault: 'Standard språk' + BadgeInvisible: 'Översatt till {locale}' + BadgeLocalised: '{type} är inte synligt på detta språk' + TractorCow\Fluent\Extension\FluentExtension: + COPY_FROM: 'Kopiera till {locale} från:' + COPY_TO: 'Kopiera från {locale} till:' + FLUENT_ICON_TOOLTIP: 'Översättningsbart fält' + LOCALISED: Översatt + Localise: Översätt + NOSOURCE: 'Ingen källa' + NOTLOCALISED: 'Inte översatt' + Unlocalise: 'Ta bort översättning' + UnlocaliseTooltip: 'Ta bort {name} från detta språk' + TractorCow\Fluent\Extension\FluentFilteredExtension: + FILTERED_LOCALES: 'Visa i följande språk' + LOCALEFILTEREDHELP: 'Denna sida är inte synlig på detta språk' + TAB_LOCALES: Språk + many_many_FilteredLocales: 'Filtrerade språk' + TractorCow\Fluent\Extension\FluentIsolatedExtension: + has_one_Locale: Språk + TractorCow\Fluent\Extension\FluentSiteTreeExtension: + LOCALECOPYANDPUBLISH: 'Kopiera & publicera' + LOCALECOPYTODRAFT: 'Kopiera till utkast' + LOCALESTATUSFLUENTDRAFT: 'Ett utkast hat skapats för detta språk, publicerat innehåll kan ändå vara ärvd från annat innehåll. Använd knappen "Spara & publicera" för att publicera innehållet för detta språk.' + LOCALESTATUSFLUENTINHERITED: 'Innehåll för denna sida kan vara ärvd från ett annat språk. Var god använd knappen "Kopiera" om du vill kopiera denna sida.' + LOCALESTATUSFLUENTINVISIBLE: 'Denna sida kommer inte att vara synlig på detta språk förrän den har publicerats.' + LOCALESTATUSFLUENTUNKNOWN: 'Inget innehåll tillgängligt för denna sida. Var god översätt denna sida eller ange ett språk som reserv.' + TractorCow\Fluent\Extension\FluentVersionedExtension: + DRAFT: Utkast + LIVENO: Nej + LIVEYES: Ja + MODIFIED: Ändrad + NOSOURCE: 'Ingen källa' + NOTLOCALISED: 'Inte översatt' + PUBLISHED: Publicerad + TractorCow\Fluent\Extension\Traits\FluentAdminTrait: + ArchiveNotice: "Arkiverade '{title}' och alla dess översättningar." + ClearAllNotice: "Alla översättningar har tömts för '{title}'." + CopyNotice: "Kopierade '{title}' till alla andra språk." + DeleteNotice: "Raderade '{title}' och alla dess översättningar." + HideNotice: "Raden '{title}' är nu gömd för språk {locale}" + Label_archiveFluent: 'Avpublicera och arkivera (alla språk)' + Label_clearFluent: "Töm från alla förutom '{title}'" + Label_copyFluent: "Kopiera '{title}' till andra språk" + Label_deleteFluent: 'Radera (alla språk)' + Label_hideFluent: "Göm från '{title}'" + Label_publishFluent: 'Spara och publicera (alla språk)' + Label_showFluent: "Visa i '{title}'" + Label_unpublishFluent: 'Avpublicera (alla språk)' + Localisation: Översättning + PublishNotice: "Publicerade '{title}' för alla språk." + ShowNotice: "Rad '{title}' är nu synlig i {locale}" + UnpublishNotice: "Avpublicerade '{title}' från alla språk." + TractorCow\Fluent\Extension\Traits\FluentBadgeTrait: + BadgeInherited: 'Ärvd från {locale}' + BadgeLocalised: 'Översatt till {locale}' + BaggeInvisible: '{type} har inget innehåll i {locale}, översätt {type} eller ange ett språk som reserv' + TractorCow\Fluent\Extension\Traits\FluentObjectTrait: + TAB_LOCALISATION: Översättning + TractorCow\Fluent\Forms\DeleteAllLocalesAction: + Delete: 'Radera rad i alla språk' + TractorCow\Fluent\Forms\DeleteLocaleAction: + DELETE: 'Radera i detta språk' + TractorCow\Fluent\Forms\LocaleToggleColumn: + DISPLAY_IN: 'Synlig?' + TractorCow\Fluent\Forms\PublishAction: + PUBLISH: 'Publicera i detta språk' + TractorCow\Fluent\Forms\SaveLocaleAction: + SAVE: 'Spara i detta språk' + TractorCow\Fluent\Forms\UnpublishAction: + UNPUBLISH: 'Avpublicera i detta språk' + TractorCow\Fluent\Forms\VisibleLocalesColumn: + LocalesTitle: Språk + TractorCow\Fluent\Model\Domain: + DEFAULT: 'Standard språk' + DEFAULT_NONE: (ingen) + DOMAIN_HOSTNAME: 'Domän Hostnamn' + DOMAIN_LOCALES: Språk + PLURALNAME: Domäner + PLURALS: + one: 'En Domän' + other: '{count} Domäner' + SINGULARNAME: Domän + UnsavedNotice: 'Du kan lägga till språk efter att du sparat domänen.' + db_Domain: Domän + has_many_Locales: Språk + has_one_DefaultLocale: 'Standard språk' + TractorCow\Fluent\Model\FallbackLocale: + LOCALE: Språk + PLURALNAME: 'Reserv språk' + PLURALS: + one: 'Standard språk' + other: '{count} Reserv språk' + SINGULARNAME: 'Reserv språk' + db_Sort: Sortera + has_one_Locale: Språk + has_one_Parent: Förälder + TractorCow\Fluent\Model\Locale: + DEFAULT_NONE: (ingen) + DOMAIN: Domän + EDIT_LOCALE: 'Öppna "{title}" ({locale})' + FALLBACKS: 'Reserv språk' + IS_DEFAULT: 'Detta är det globala standard språket' + IS_DEFAULT_DESCRIPTION: 'Notera: Domän specifika språl kan tilldelas via Språk tabben och ersätter detta värde för specifika domäner.' + LOCALE: Språk + LOCALE_TITLE: Titel + LOCALE_URL: 'URL Värde' + MULTI_LOCALE: 'Åtkomst till multi-språk åtgärder (t.ex. spara i alla språk)' + PERMISSION: Översättning + PLURALNAME: Språk + PLURALS: + one: 'Ett språk' + other: '{count} Språk' + SINGULARNAME: Språk + TIMEZONE: Tidszon + USE_X_DEFAULT: 'Använd {code} som SEO språkkod (använd som global)' + USE_X_DEFAULT_DESCRIPTION: 'Användning av denna kod berättar för sökmotorer att detta är en språkneutral global startsida' + UnsavedNotice: 'Du kan lägga till reserv språk efter att du sparat språket.' + db_IsGlobalDefault: 'Är global standard' + db_Locale: Språk + db_Sort: Sortera + db_Timezone: Tidszon + db_Title: Titel + db_URLSegment: 'URL värde' + db_UseDefaultCode: 'Använd standardkod' + has_many_FallbackLocales: 'Reserv språk' + has_one_Domain: Domän + many_many_Fallbacks: Reserv diff --git a/package.json b/package.json index bfb7b2ed..7f339f01 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "dev": "NODE_ENV=development webpack --progress", "watch": "NODE_ENV=development webpack --watch --progress", "css": "WEBPACK_CHILD=css npm run build", - "lint": "eslint client/src && sass-lint -v" + "lint": "eslint client/src && stylelint client/src" }, "repository": { "type": "git", @@ -27,8 +27,8 @@ }, "homepage": "https://github.com/tractorcow-farm/silverstripe-fluent", "devDependencies": { - "@silverstripe/eslint-config": "^1.0.0-alpha6", - "@silverstripe/webpack-config": "^2.0.0-alpha6", + "@silverstripe/eslint-config": "^1.3.0", + "@silverstripe/webpack-config": "^2.0.0", "webpack": "^5.74.0", "webpack-cli": "^5.0.0" }, diff --git a/src/Extension/FluentExtension.php b/src/Extension/FluentExtension.php index 260fb781..f329d74c 100644 --- a/src/Extension/FluentExtension.php +++ b/src/Extension/FluentExtension.php @@ -3,6 +3,7 @@ namespace TractorCow\Fluent\Extension; use LogicException; +use SilverStripe\i18n\i18n; use SilverStripe\Core\ClassInfo; use SilverStripe\Core\Config\Config; use SilverStripe\Core\Convert; @@ -247,7 +248,7 @@ public function getLocalisedFields($class = null) // List of DB fields $fields = DataObject::getSchema()->databaseFields($class, false); $filter = Config::inst()->get($class, 'translate', Config::UNINHERITED); - if ($filter === self::TRANSLATE_NONE || empty($fields)) { + if ($filter === FluentExtension::TRANSLATE_NONE || empty($fields)) { return $this->localisedFields[$class] = []; } @@ -273,7 +274,7 @@ protected function isFieldLocalised($field, $type, $class) { // Explicit per-table filter $filter = Config::inst()->get($class, 'translate', Config::UNINHERITED); - if ($filter === self::TRANSLATE_NONE) { + if ($filter === FluentExtension::TRANSLATE_NONE) { return false; } if ($filter && is_array($filter)) { @@ -405,7 +406,7 @@ protected function validateBaseConfig() $fluents = 0; $extensions = $this->owner->get_extensions(); foreach ($extensions as $extension) { - if (is_a($extension, self::class, true)) { + if (is_a($extension, FluentExtension::class, true)) { $fluents++; } } @@ -433,7 +434,7 @@ protected function validateChildConfig() $extensions = array_filter(array_values($extensions)); foreach ($extensions as $extension) { $extensionClass = Extension::get_classname_without_arguments($extension); - if (is_a($extensionClass, self::class, true)) { + if (is_a($extensionClass, FluentExtension::class, true)) { $name = get_class($this->owner); DB::alteration_message( "Invalid config: {$name} has FluentExtension, but this should be applied only on the base class", @@ -491,11 +492,11 @@ protected function augmentSQL(SQLSelect $query, DataQuery $dataQuery = null) // Resolve content inheritance (this drives what content is shown) $inheritanceMode = $this->getInheritanceMode(); - if ($inheritanceMode === self::INHERITANCE_MODE_EXACT) { + if ($inheritanceMode === FluentExtension::INHERITANCE_MODE_EXACT) { $joinAlias = $this->getLocalisedTable($this->owner->baseTable(), $locale->Locale); $where = sprintf('"%s"."ID" IS NOT NULL', $joinAlias); $query->addWhereAny($where); - } elseif ($inheritanceMode === self::INHERITANCE_MODE_FALLBACK) { + } elseif ($inheritanceMode === FluentExtension::INHERITANCE_MODE_FALLBACK) { $conditions = []; foreach ($locale->getChain() as $joinLocale) { @@ -582,11 +583,11 @@ protected function augmentSQL(SQLSelect $query, DataQuery $dataQuery = null) // Apply substitutions $localisedPredicate = str_replace($conditionSearch, $conditionReplace, $predicate); - + if (empty($localisedPredicate)) { continue; } - + $where[$index] = [ $localisedPredicate => $parameters ]; @@ -630,6 +631,32 @@ protected function onAfterWrite(): void $this->handleClassChanged(); } + /** + * If an object is duplicated also duplicate existing localised values from original to new object. + */ + public function onAfterDuplicate($original, $doWrite, $relations): void + { + $localisedTables = $this->owner->getLocalisedTables(); + foreach ($localisedTables as $tableName => $fields) { + // Target IDs + $fromID = $original->ID; + $toID = $this->owner->ID; + + // Get localised table + $localisedTable = $this->getLocalisedTable($tableName); + + // Remove existing translations from duplicated object + DB::prepared_query("DELETE FROM \"$localisedTable\" WHERE \"RecordID\" = ?", [$toID]); + + // Copy translations to duplicated object + $fields_str = '"' . implode('","', $fields) . '"'; + DB::prepared_query("INSERT INTO \"$localisedTable\" ( \"RecordID\", \"Locale\", $fields_str) + SELECT ? AS \"RecordID\", \"Locale\", $fields_str + FROM \"$localisedTable\" + WHERE \"RecordID\" = ?", [$toID, $fromID]); + } + } + /** * If an object is changed to another class, we should trigger localised copy * @@ -809,7 +836,7 @@ protected function localiseManipulationTable(&$manipulation, $table, $localeTabl */ public function getLocalisedTable($tableName, $locale = '') { - $localisedTable = $tableName . '_' . self::SUFFIX; + $localisedTable = $tableName . '_' . FluentExtension::SUFFIX; if ($locale) { $localisedTable .= '_' . $locale; } @@ -1115,6 +1142,25 @@ public function updateFluentCMSField(FormField $field) $field->setTitle($tooltip); } + /** + * Update preview link to null if the object isn't in the current locale + * and we can't fallback cleanly. + * + * @param ?string $link + */ + public function updatePreviewLink(&$link): void + { + $owner = $this->owner; + $locale = FluentState::singleton()->getLocale(); + if ($locale === null || $locale === '') { + return; + } + $info = $owner->LocaleInformation($locale); + if (!$info->getSourceLocale()) { + $link = null; + } + } + /** * Require that this record is saved in the given locale for it to be visible * @@ -1130,17 +1176,17 @@ protected function getInheritanceMode(): string // Detect legacy type if (is_bool($inheritanceMode)) { $inheritanceMode = $inheritanceMode - ? self::INHERITANCE_MODE_EXACT - : self::INHERITANCE_MODE_ANY; + ? FluentExtension::INHERITANCE_MODE_EXACT + : FluentExtension::INHERITANCE_MODE_ANY; } if (!in_array($inheritanceMode, [ - self::INHERITANCE_MODE_EXACT, - self::INHERITANCE_MODE_FALLBACK, - self::INHERITANCE_MODE_ANY, + FluentExtension::INHERITANCE_MODE_EXACT, + FluentExtension::INHERITANCE_MODE_FALLBACK, + FluentExtension::INHERITANCE_MODE_ANY, ])) { // Default mode - $inheritanceMode = self::INHERITANCE_MODE_ANY; + $inheritanceMode = FluentExtension::INHERITANCE_MODE_ANY; } return $inheritanceMode; @@ -1255,10 +1301,10 @@ protected function updateLocalisationTabColumns(&$summaryColumns) } if ($object->RecordLocale()->IsDraft()) { - return _t(self::class . '.LOCALISED', 'Localised'); + return _t(FluentExtension::class . '.LOCALISED', 'Localised'); } - return _t(self::class . '.NOTLOCALISED', 'Not localised'); + return _t(FluentExtension::class . '.NOTLOCALISED', 'Not localised'); } ]; @@ -1275,7 +1321,7 @@ protected function updateLocalisationTabColumns(&$summaryColumns) return $sourceLocale->getLongTitle(); } - return _t(self::class . '.NOSOURCE', 'No source'); + return _t(FluentExtension::class . '.NOSOURCE', 'No source'); } ]; } diff --git a/src/Extension/FluentFilteredExtension.php b/src/Extension/FluentFilteredExtension.php index 79836aa0..5d59a6ac 100644 --- a/src/Extension/FluentFilteredExtension.php +++ b/src/Extension/FluentFilteredExtension.php @@ -119,7 +119,7 @@ protected function augmentSQL(SQLSelect $query, DataQuery $dataQuery = null) } $table = $this->owner->baseTable(); - $filteredLocalesTable = $table . '_' . self::SUFFIX; + $filteredLocalesTable = $table . '_' . FluentFilteredExtension::SUFFIX; $query->addInnerJoin( $filteredLocalesTable, diff --git a/src/Extension/FluentSiteTreeExtension.php b/src/Extension/FluentSiteTreeExtension.php index 47df6b95..9500de72 100644 --- a/src/Extension/FluentSiteTreeExtension.php +++ b/src/Extension/FluentSiteTreeExtension.php @@ -151,7 +151,10 @@ public function updateLink(&$link, &$action, &$relativeLink) return; } - // Prefix with domain + // Prefix with domain, making sure trailing slash is normalised correctly. + if ($link === '/' || $link === '') { + $link = Controller::config()->get('add_trailing_slash') ? '/' : ''; + } $link = Controller::join_links($domain->Link(), $link); } diff --git a/src/Extension/FluentVersionedExtension.php b/src/Extension/FluentVersionedExtension.php index 64c7c366..d6e4bf49 100644 --- a/src/Extension/FluentVersionedExtension.php +++ b/src/Extension/FluentVersionedExtension.php @@ -93,7 +93,7 @@ class FluentVersionedExtension extends FluentExtension implements Resettable * This is different from the above cache which caches the result per object - each array (keyed by locale & table) * will have ALL object IDs for that locale & table. * - * static::$idsInLocaleCache[ $locale ][ $table(.self::SUFFIX_LIVE) ][ $objectId ] = $objectId + * static::$idsInLocaleCache[ $locale ][ $table(.FluentVersionedExtension::SUFFIX_LIVE) ][ $objectId ] = $objectId * * @var int[][][] */ @@ -116,7 +116,7 @@ protected function augmentDatabase() // Must see versioned if ($extension instanceof Versioned) { $seenVersioned = true; - } elseif ($extension instanceof self) { + } elseif ($extension instanceof FluentVersionedExtension) { if (!$seenVersioned) { throw new LogicException( "FluentVersionedExtension must be added AFTER Versioned extension. Check " @@ -132,8 +132,8 @@ protected function augmentDatabase() protected function augmentDatabaseDontRequire($localisedTable) { DB::dont_require_table($localisedTable); - DB::dont_require_table($localisedTable . self::SUFFIX_LIVE); - DB::dont_require_table($localisedTable . self::SUFFIX_VERSIONS); + DB::dont_require_table($localisedTable . FluentVersionedExtension::SUFFIX_LIVE); + DB::dont_require_table($localisedTable . FluentVersionedExtension::SUFFIX_VERSIONS); } protected function augmentDatabaseRequireTable($localisedTable, $fields, $indexes) @@ -141,13 +141,13 @@ protected function augmentDatabaseRequireTable($localisedTable, $fields, $indexe DB::require_table($localisedTable, $fields, $indexes, false); // _Live record - DB::require_table($localisedTable . self::SUFFIX_LIVE, $fields, $indexes, false); + DB::require_table($localisedTable . FluentVersionedExtension::SUFFIX_LIVE, $fields, $indexes, false); // Merge fields and indexes with Fluent defaults $versionsFields = array_merge($this->defaultVersionsFields, $fields); $versionsIndexes = array_merge($indexes, $this->defaultVersionsIndexes); - DB::require_table($localisedTable . self::SUFFIX_VERSIONS, $versionsFields, $versionsIndexes, false); + DB::require_table($localisedTable . FluentVersionedExtension::SUFFIX_VERSIONS, $versionsFields, $versionsIndexes, false); } /** @@ -209,7 +209,7 @@ protected function rewriteVersionedTables(SQLSelect $query, array $tables, Local foreach ($tables as $tableName => $fields) { // Rename to _Versions suffixed versions $localisedTable = $this->getLocalisedTable($tableName); - $query->renameTable($localisedTable, $localisedTable . self::SUFFIX_VERSIONS); + $query->renameTable($localisedTable, $localisedTable . FluentVersionedExtension::SUFFIX_VERSIONS); // Add the chain of locale fallbacks $this->addLocaleFallbackChain($query, $tableName, $locale); @@ -229,7 +229,7 @@ protected function addLocaleFallbackChain(SQLSelect $query, $tableName, Locale $ foreach ($locale->getChain() as $joinLocale) { $joinAlias = $this->getLocalisedTable($tableName, $joinLocale->Locale); - $versionTable = $baseTable . self::SUFFIX_VERSIONS; + $versionTable = $baseTable . FluentVersionedExtension::SUFFIX_VERSIONS; $query->setJoinFilter( $joinAlias, @@ -250,7 +250,7 @@ protected function renameLocalisedTables(SQLSelect $query, array $tables) { foreach ($tables as $table => $fields) { $localisedTable = $this->getLocalisedTable($table); - $query->renameTable($localisedTable, $localisedTable . self::SUFFIX_LIVE); + $query->renameTable($localisedTable, $localisedTable . FluentVersionedExtension::SUFFIX_LIVE); } } @@ -295,13 +295,13 @@ protected function augmentWrite(&$manipulation) $includedTables = $this->getLocalisedTables(); foreach ($includedTables as $table => $localisedFields) { // Localise both _Versions and _Live writes - foreach ([self::SUFFIX_LIVE, self::SUFFIX_VERSIONS] as $suffix) { + foreach ([FluentVersionedExtension::SUFFIX_LIVE, FluentVersionedExtension::SUFFIX_VERSIONS] as $suffix) { $versionedTable = $table . $suffix; $localisedTable = $this->getLocalisedTable($table) . $suffix; // Add extra case for "Version" column when localising Versions $localisedVersionFields = $localisedFields; - if ($suffix === self::SUFFIX_VERSIONS) { + if ($suffix === FluentVersionedExtension::SUFFIX_VERSIONS) { $localisedVersionFields = array_merge( $localisedVersionFields, array_keys($this->defaultVersionsFields) @@ -332,7 +332,7 @@ protected function getDeleteTableTarget($tableName, $locale = '') // Rewrite to _Live when deleting from live / unpublishing $table = parent::getDeleteTableTarget($tableName, $locale); if (Versioned::get_stage() === Versioned::LIVE) { - $table .= self::SUFFIX_LIVE; + $table .= FluentVersionedExtension::SUFFIX_LIVE; } return $table; } @@ -482,7 +482,7 @@ protected function isLocalisedInStage($stage, $locale = null) $baseTable = $this->owner->baseTable(); $table = $this->getLocalisedTable($baseTable); if ($stage === Versioned::LIVE) { - $table .= self::SUFFIX_LIVE; + $table .= FluentVersionedExtension::SUFFIX_LIVE; } // Check for a cached item in the full list of all objects. These are populated optimistically. @@ -529,7 +529,7 @@ public static function reset() */ protected function onPrepopulateTreeDataCache($recordList = null, array $options = []) { - if (!Config::inst()->get(self::class, 'prepopulate_localecontent_cache')) { + if (!Config::inst()->get(FluentVersionedExtension::class, 'prepopulate_localecontent_cache')) { return; } @@ -539,7 +539,7 @@ protected function onPrepopulateTreeDataCache($recordList = null, array $options return; } - self::prepoulateIdsInLocale(FluentState::singleton()->getLocale(), $this->owner->baseClass()); + FluentVersionedExtension::prepoulateIdsInLocale(FluentState::singleton()->getLocale(), $this->owner->baseClass()); } /** @@ -558,7 +558,7 @@ public static function prepoulateIdsInLocale($locale, $dataObjectClass, $populat $table = $dataObject->getLocalisedTable($dataObject->baseTable()); // If we already have items then we've been here before... - if (isset(self::$idsInLocaleCache[$locale][$table])) { + if (isset(FluentVersionedExtension::$idsInLocaleCache[$locale][$table])) { return; } @@ -567,7 +567,7 @@ public static function prepoulateIdsInLocale($locale, $dataObjectClass, $populat $tables[] = $table; } if ($populateLive) { - $tables[] = $table . self::SUFFIX_LIVE; + $tables[] = $table . FluentVersionedExtension::SUFFIX_LIVE; } // Populate both the draft and live stages @@ -581,8 +581,8 @@ public static function prepoulateIdsInLocale($locale, $dataObjectClass, $populat $ids = $result->column('RecordID'); // We need to execute ourselves as the param is lost from the subSelect - self::$idsInLocaleCache[$locale][$table] = array_combine($ids, $ids); - self::$idsInLocaleCache[$locale][$table][static::CACHE_COMPLETE] = true; + FluentVersionedExtension::$idsInLocaleCache[$locale][$table] = array_combine($ids, $ids); + FluentVersionedExtension::$idsInLocaleCache[$locale][$table][static::CACHE_COMPLETE] = true; } } @@ -598,18 +598,18 @@ protected function updateLocalisationTabColumns(&$summaryColumns) $recordLocale = $object->RecordLocale(); if ($recordLocale->getStagesDiffer()) { - return _t(self::class . '.MODIFIED', 'Modified'); + return _t(FluentVersionedExtension::class . '.MODIFIED', 'Modified'); } if ($recordLocale->IsPublished(true)) { - return _t(self::class . '.PUBLISHED', 'Published'); + return _t(FluentVersionedExtension::class . '.PUBLISHED', 'Published'); } if ($recordLocale->IsDraft()) { - return _t(self::class . '.DRAFT', 'Draft'); + return _t(FluentVersionedExtension::class . '.DRAFT', 'Draft'); } - return _t(self::class . '.NOTLOCALISED', 'Not localised'); + return _t(FluentVersionedExtension::class . '.NOTLOCALISED', 'Not localised'); } ]; @@ -626,7 +626,7 @@ protected function updateLocalisationTabColumns(&$summaryColumns) return $sourceLocale->getLongTitle(); } - return _t(self::class . '.NOSOURCE', 'No source'); + return _t(FluentVersionedExtension::class . '.NOSOURCE', 'No source'); } ]; @@ -638,8 +638,8 @@ protected function updateLocalisationTabColumns(&$summaryColumns) } return $object->RecordLocale()->IsPublished() - ? _t(self::class . '.LIVEYES', 'Yes') - : _t(self::class . '.LIVENO', 'No'); + ? _t(FluentVersionedExtension::class . '.LIVEYES', 'Yes') + : _t(FluentVersionedExtension::class . '.LIVENO', 'No'); } ]; } @@ -1008,4 +1008,52 @@ protected function setVersionCacheItem(string $class, string $stage, string $loc // Internally store nulls as 0 $this->versionsCache[$class][$stage][$locale][$key] = $value ?: 0; } + + /** + * If an object is duplicated also duplicate existing localised values from original to new object. + */ + public function onAfterDuplicate($original, $doWrite, $relations): void + { + parent::onAfterDuplicate($original, $doWrite, $relations); + + $localisedTables = $this->owner->getLocalisedTables(); + foreach ($localisedTables as $tableName => $fields) { + // Target IDs + $fromID = $original->ID; + $toID = $this->owner->ID; + + // Get localised table + $localisedTable = $this->getLocalisedTable($tableName) . FluentVersionedExtension::SUFFIX_VERSIONS; + + // Remove existing translation versions from duplicated object + DB::prepared_query("DELETE FROM \"$localisedTable\" WHERE \"RecordID\" = ?", [$toID]); + + // Copy translations to duplicated object + $localisedFields = array_merge(['Locale', 'Version'], $fields); + $fields_str = '"' . implode('","', $localisedFields) . '"'; + + // Copy all versions of localised object + DB::prepared_query("INSERT INTO \"$localisedTable\" ( \"RecordID\", $fields_str) + SELECT ? AS \"RecordID\", $fields_str + FROM \"$localisedTable\" + WHERE \"RecordID\" = ?", [$toID, $fromID]); + + // Also copy versions of base record + $versionsTableName = $tableName . FluentVersionedExtension::SUFFIX_VERSIONS; + + // Remove existing versions from duplicated object, created by onBeforeWrite + DB::prepared_query("DELETE FROM \"$versionsTableName\" WHERE \"RecordID\" = ?", [$toID]); + + // Dynamicaly select the current database, which will be a temporary database in case of unit tests + $currentDB = DB::query('SELECT DATABASE() as DB')->column('DB')[0]; + + // Copy all versions of base record, todo: optimize to only copy needed versions + $fields = DB::query("SELECT \"COLUMN_NAME\" FROM \"INFORMATION_SCHEMA\".\"COLUMNS\" WHERE \"TABLE_SCHEMA\" = '$currentDB' AND \"TABLE_NAME\" = '$versionsTableName' AND \"COLUMN_NAME\" NOT IN('ID','RecordID')"); + $fields_str = '"' . implode('","', $fields->column()) . '"'; + DB::prepared_query("INSERT INTO \"$versionsTableName\" ( \"RecordID\", $fields_str) + SELECT ? AS \"RecordID\", $fields_str + FROM \"$versionsTableName\" + WHERE \"RecordID\" = ?", [$toID, $fromID]); + } + } } diff --git a/src/Extension/Traits/FluentAdminTrait.php b/src/Extension/Traits/FluentAdminTrait.php index 269cf5e7..63da66a3 100644 --- a/src/Extension/Traits/FluentAdminTrait.php +++ b/src/Extension/Traits/FluentAdminTrait.php @@ -107,7 +107,7 @@ protected function updateFluentActions( // Add menu button $moreOptions = Tab::create( 'FluentMenuOptions', - _t(__TRAIT__ . '.Localisation', 'Localisation') + _t('TractorCow\Fluent\Extension\Traits\FluentAdminTrait.Localisation', 'Localisation') ); $moreOptions->addExtraClass('popover-actions-simulate'); $rootTabSet->push($moreOptions); @@ -117,7 +117,7 @@ protected function updateFluentActions( FormAction::create( 'clearFluent', _t( - __TRAIT__ . '.Label_clearFluent', + 'TractorCow\Fluent\Extension\Traits\FluentAdminTrait.Label_clearFluent', "Clear from all except '{title}'", [ 'title' => $locale->getTitle() @@ -129,7 +129,7 @@ protected function updateFluentActions( FormAction::create( 'copyFluent', _t( - __TRAIT__ . '.Label_copyFluent', + 'TractorCow\Fluent\Extension\Traits\FluentAdminTrait.Label_copyFluent', "Copy '{title}' to other locales", [ 'title' => $locale->getTitle() @@ -144,7 +144,7 @@ protected function updateFluentActions( FormAction::create( 'unpublishFluent', _t( - __TRAIT__ . '.Label_unpublishFluent', + 'TractorCow\Fluent\Extension\Traits\FluentAdminTrait.Label_unpublishFluent', 'Unpublish (all locales)' ) )->addExtraClass('btn-secondary') @@ -153,7 +153,7 @@ protected function updateFluentActions( FormAction::create( 'archiveFluent', _t( - __TRAIT__ . '.Label_archiveFluent', + 'TractorCow\Fluent\Extension\Traits\FluentAdminTrait.Label_archiveFluent', 'Unpublish and Archive (all locales)' ) )->addExtraClass('btn-outline-danger') @@ -162,7 +162,7 @@ protected function updateFluentActions( FormAction::create( 'publishFluent', _t( - __TRAIT__ . '.Label_publishFluent', + 'TractorCow\Fluent\Extension\Traits\FluentAdminTrait.Label_publishFluent', 'Save & Publish (all locales)' ) )->addExtraClass('btn-primary') @@ -172,7 +172,7 @@ protected function updateFluentActions( FormAction::create( 'deleteFluent', _t( - __TRAIT__ . '.Label_deleteFluent', + 'TractorCow\Fluent\Extension\Traits\FluentAdminTrait.Label_deleteFluent', 'Delete (all locales)' ) )->addExtraClass('btn-outline-danger') @@ -187,7 +187,7 @@ protected function updateFluentActions( FormAction::create( 'hideFluent', _t( - __TRAIT__ . '.Label_hideFluent', + 'TractorCow\Fluent\Extension\Traits\FluentAdminTrait.Label_hideFluent', "Hide from '{title}'", [ 'title' => $locale->getTitle() @@ -200,7 +200,7 @@ protected function updateFluentActions( FormAction::create( 'showFluent', _t( - __TRAIT__ . '.Label_showFluent', + 'TractorCow\Fluent\Extension\Traits\FluentAdminTrait.Label_showFluent', "Show in '{title}'", [ 'title' => $locale->getTitle() @@ -256,7 +256,7 @@ public function clearFluent($data, $form) }); $message = _t( - __TRAIT__ . '.ClearAllNotice', + 'TractorCow\Fluent\Extension\Traits\FluentAdminTrait.ClearAllNotice', "All localisations have been cleared for '{title}'.", ['title' => $record->Title] ); @@ -292,7 +292,7 @@ public function copyFluent($data, $form) if ($locale->ID == $originalLocale->ID) { return; } - + if ($record->hasExtension(Versioned::class)) { $record->writeToStage(Versioned::DRAFT); } else { @@ -302,7 +302,7 @@ public function copyFluent($data, $form) }); $message = _t( - __TRAIT__ . '.CopyNotice', + 'TractorCow\Fluent\Extension\Traits\FluentAdminTrait.CopyNotice', "Copied '{title}' to all other locales.", ['title' => $record->Title] ); @@ -336,7 +336,7 @@ public function unpublishFluent($data, $form) }); $message = _t( - __TRAIT__ . '.UnpublishNotice', + 'TractorCow\Fluent\Extension\Traits\FluentAdminTrait.UnpublishNotice', "Unpublished '{title}' from all locales.", ['title' => $record->Title] ); @@ -386,7 +386,7 @@ public function archiveFluent($data, $form) $policy->delete($record); $message = _t( - __TRAIT__ . '.ArchiveNotice', + 'TractorCow\Fluent\Extension\Traits\FluentAdminTrait.ArchiveNotice', "Archived '{title}' and all of its localisations.", ['title' => $record->Title] ); @@ -434,7 +434,7 @@ public function deleteFluent($data, $form) $policy->delete($record); $message = _t( - __TRAIT__ . '.DeleteNotice', + 'TractorCow\Fluent\Extension\Traits\FluentAdminTrait.DeleteNotice', "Deleted '{title}' and all of its localisations.", ['title' => $record->Title] ); @@ -478,7 +478,7 @@ public function publishFluent($data, $form) }); $message = _t( - __TRAIT__ . '.PublishNotice', + 'TractorCow\Fluent\Extension\Traits\FluentAdminTrait.PublishNotice', "Published '{title}' across all locales.", ['title' => $record->Title] ); @@ -508,7 +508,7 @@ public function showFluent($data, $form) $record->FilteredLocales()->add($locale); $message = _t( - __TRAIT__ . '.ShowNotice', + 'TractorCow\Fluent\Extension\Traits\FluentAdminTrait.ShowNotice', "Record '{title}' is now visible in {locale}", [ 'title' => $record->Title, @@ -541,7 +541,7 @@ public function hideFluent($data, $form) $record->FilteredLocales()->remove($locale); $message = _t( - __TRAIT__ . '.HideNotice', + 'TractorCow\Fluent\Extension\Traits\FluentAdminTrait.HideNotice', "Record '{title}' is now hidden in {locale}", [ 'title' => $record->Title, diff --git a/src/Extension/Traits/FluentBadgeTrait.php b/src/Extension/Traits/FluentBadgeTrait.php index f47d7802..339b7612 100644 --- a/src/Extension/Traits/FluentBadgeTrait.php +++ b/src/Extension/Traits/FluentBadgeTrait.php @@ -75,7 +75,7 @@ protected function generateBadgeHTML( // If the object has been localised in the current locale, show a "localised" state $badgeClasses[] = 'fluent-badge--default'; $tooltip = _t( - __TRAIT__ . '.BadgeLocalised', + 'TractorCow\Fluent\Extension\Traits\FluentBadgeTrait.BadgeLocalised', 'Localised in {locale}', [ 'locale' => $locale->getTitle() @@ -85,7 +85,7 @@ protected function generateBadgeHTML( // If object is inheriting content from another locale show the source $badgeClasses[] = 'fluent-badge--localised'; $tooltip = _t( - __TRAIT__ . '.BadgeInherited', + 'TractorCow\Fluent\Extension\Traits\FluentBadgeTrait.BadgeInherited', 'Inherited from {locale}', [ 'locale' => $info->getSourceLocale()->getTitle() @@ -96,7 +96,7 @@ protected function generateBadgeHTML( // by either localising or seting up a locale fallback $badgeClasses[] = 'fluent-badge--invisible'; $tooltip = _t( - __TRAIT__ . '.BaggeInvisible', + 'TractorCow\Fluent\Extension\Traits\FluentBadgeTrait.BaggeInvisible', '{type} has no available content in {locale}, localise the {type} or provide a locale fallback', [ 'type' => $record->i18n_singular_name(), diff --git a/src/Extension/Traits/FluentObjectTrait.php b/src/Extension/Traits/FluentObjectTrait.php index 2efd805e..6404732e 100644 --- a/src/Extension/Traits/FluentObjectTrait.php +++ b/src/Extension/Traits/FluentObjectTrait.php @@ -28,7 +28,7 @@ trait FluentObjectTrait * Add additional columns to localisation table * * @param $summaryColumns - * @see FluentObjectTrait::updateFluentCMSFields() + * @see self::updateFluentCMSFields() */ abstract protected function updateLocalisationTabColumns(&$summaryColumns); @@ -165,7 +165,7 @@ protected function updateFluentCMSFields(FieldList $fields) $fields ->fieldByName('Root.Locales') - ->setTitle(_t(__TRAIT__ . '.TAB_LOCALISATION', 'Localisation')); + ->setTitle(_t('TractorCow\Fluent\Extension\Traits\FluentObjectTrait.TAB_LOCALISATION', 'Localisation')); } else { $fields->push($gridField); } diff --git a/src/Forms/CopyLocaleAction.php b/src/Forms/CopyLocaleAction.php index 69103ea0..4a9bd727 100644 --- a/src/Forms/CopyLocaleAction.php +++ b/src/Forms/CopyLocaleAction.php @@ -166,7 +166,7 @@ public function getGroup($gridField, $record, $columnName) { $hasGroup = parent::getGroup($gridField, $record, $columnName); if ($hasGroup) { - return $this->isTo ? self::COPY_TO : self::COPY_FROM; + return $this->isTo ? CopyLocaleAction::COPY_TO : CopyLocaleAction::COPY_FROM; } return null; } diff --git a/src/Forms/LocaleToggleColumn.php b/src/Forms/LocaleToggleColumn.php index 6c4a88ef..4d950ed2 100644 --- a/src/Forms/LocaleToggleColumn.php +++ b/src/Forms/LocaleToggleColumn.php @@ -26,7 +26,7 @@ class LocaleToggleColumn implements GridField_SaveHandler, GridField_ColumnProvi public function augmentColumns($gridField, &$columns) { // Add "enabled in" column - if (in_array(self::COLUMN_NAME, $columns)) { + if (in_array(LocaleToggleColumn::COLUMN_NAME, $columns)) { return; } @@ -37,10 +37,10 @@ public function augmentColumns($gridField, &$columns) $columns, $localeIndex + 1, 0, - [self::COLUMN_NAME] + [LocaleToggleColumn::COLUMN_NAME] ); } else { - $columns[] = self::COLUMN_NAME; + $columns[] = LocaleToggleColumn::COLUMN_NAME; } } @@ -49,7 +49,7 @@ public function augmentColumns($gridField, &$columns) */ public function getColumnsHandled($gridField) { - return [self::COLUMN_NAME]; + return [LocaleToggleColumn::COLUMN_NAME]; } /** @@ -60,7 +60,7 @@ public function getColumnsHandled($gridField) */ public function getColumnContent($gridField, $locale, $columnName) { - if ($columnName !== self::COLUMN_NAME) { + if ($columnName !== LocaleToggleColumn::COLUMN_NAME) { return null; } @@ -96,8 +96,8 @@ public function handleSave(GridField $gridField, DataObjectInterface $record) $value = $gridField->Value(); // Keys for this value will be list of locales to enable - $enabledLocales = isset($value[self::COLUMN_NAME]) - ? array_keys($value[self::COLUMN_NAME]) + $enabledLocales = isset($value[LocaleToggleColumn::COLUMN_NAME]) + ? array_keys($value[LocaleToggleColumn::COLUMN_NAME]) : []; /** @var DataObject|FluentFilteredExtension $record */ @@ -112,7 +112,7 @@ protected function getFieldName(GridField $grid, Locale $locale) return sprintf( '%s[%s][%s]', $grid->getName(), - self::COLUMN_NAME, + LocaleToggleColumn::COLUMN_NAME, $locale->ID ); } diff --git a/src/Middleware/InitStateMiddleware.php b/src/Middleware/InitStateMiddleware.php index 72d4a046..59925e1d 100644 --- a/src/Middleware/InitStateMiddleware.php +++ b/src/Middleware/InitStateMiddleware.php @@ -70,11 +70,6 @@ public function getIsFrontend(HTTPRequest $request) } } - // If using the CMS preview, do not treat the site as frontend - if ($request->getVar('CMSPreview')) { - return false; - } - return true; } diff --git a/src/Model/CachableModel.php b/src/Model/CachableModel.php index 2e295a86..c97bdb10 100644 --- a/src/Model/CachableModel.php +++ b/src/Model/CachableModel.php @@ -2,7 +2,6 @@ namespace TractorCow\Fluent\Model; -use SilverStripe\Control\Director; use SilverStripe\Control\HTTPRequest; use SilverStripe\Core\ClassInfo; use SilverStripe\Core\Config\Config; diff --git a/src/Model/LocalDateTime.php b/src/Model/LocalDateTime.php index 932ae1c2..746900af 100644 --- a/src/Model/LocalDateTime.php +++ b/src/Model/LocalDateTime.php @@ -40,7 +40,7 @@ public function getTimezone(): ?string * @param string|null $timezone * @return $this */ - public function setTimezone(?string $timezone): self + public function setTimezone(?string $timezone): LocalDateTime { if ($timezone && !in_array($timezone, timezone_identifiers_list())) { throw new InvalidArgumentException("Invalid timezone {$timezone}"); @@ -90,7 +90,7 @@ public function setValue($value, $record = null, $markChanged = true) */ public function getLocalValue(): string { - return $this->Format(self::ISO_DATETIME); + return $this->Format(LocalDateTime::ISO_DATETIME); } /** Assign a value that's already in the current locale diff --git a/src/Model/Locale.php b/src/Model/Locale.php index ff6e1247..8185db41 100644 --- a/src/Model/Locale.php +++ b/src/Model/Locale.php @@ -253,7 +253,7 @@ public function getBadgeLabel() public function getHrefLang() { if ($this->UseDefaultCode) { - return self::X_DEFAULT; + return Locale::X_DEFAULT; } return strtolower(i18n::convert_rfc1766($this->Locale)); } @@ -307,7 +307,7 @@ public function getCMSFields() )), CheckboxField::create( 'UseDefaultCode', - _t(__CLASS__ . '.USE_X_DEFAULT', 'Use {code} as SEO language code (treat as global)', ['code' => self::X_DEFAULT]) + _t(__CLASS__ . '.USE_X_DEFAULT', 'Use {code} as SEO language code (treat as global)', ['code' => Locale::X_DEFAULT]) ) ->setDescription(_t( __CLASS__ . '.USE_X_DEFAULT_DESCRIPTION', @@ -580,12 +580,27 @@ public function getBaseURL() if ($append) { // Append locale url segment - $base = Controller::join_links($base, $this->getURLSegment(), '/'); + $base = Controller::join_links($base, $this->getURLSegment()); } + // Normalise trailing slash + // Can't use Controller::normaliseTrailingSlash() because that doesn't + // take locale domains into account + $base = rtrim($base, '/') . (Controller::config()->get('add_trailing_slash') ? '/' : ''); + return $base; } + /** + * Absolute base url + * + * @return false|string + */ + public function getAbsoluteBaseURL() + { + return Director::absoluteURL($this->getBaseURL()); + } + /** * Get other locales that appear alongside this (including self) * @@ -630,7 +645,7 @@ public function RecordLocale() */ public function getLocaleEditPermission() { - $prefix = self::CMS_ACCESS_FLUENT_LOCALE; + $prefix = Locale::CMS_ACCESS_FLUENT_LOCALE; return "{$prefix}{$this->Locale}"; } @@ -640,7 +655,7 @@ public function providePermissions() $category = _t(__CLASS__ . '.PERMISSION', 'Localisation'); $permissions = [ // @todo - Actually implement this check on those actions - self::CMS_ACCESS_MULTI_LOCALE => [ + Locale::CMS_ACCESS_MULTI_LOCALE => [ 'name' => _t( __CLASS__ . '.MULTI_LOCALE', 'Access to multi-locale actions (E.g. save in all locales)' diff --git a/src/Task/InitialDataObjectLocalisationTask.php b/src/Task/InitialDataObjectLocalisationTask.php new file mode 100644 index 00000000..a8897e73 --- /dev/null +++ b/src/Task/InitialDataObjectLocalisationTask.php @@ -0,0 +1,287 @@ +exclude_classes`. + * @var string[] + */ + protected $include_only_classes = []; + + /** + * When extending this class, you may choose to exclude these specific classes. + * This is IGNORED if `$this->include_only_classes` is not empty. + * @var string[] + */ + protected $exclude_classes = [ + SiteTree::class + ]; + + /** + * @param HTTPRequest $request + * @return void + * @throws \ReflectionException + * @throws \SilverStripe\ORM\ValidationException + */ + public function run($request) + { + if (!Director::is_cli()) { + echo '
' . PHP_EOL; + } + + $publish = (bool)$request->getVar('publish'); + $limit = (int)$request->getVar('limit'); + + $total_results = [ + 'localisable' => 0, + 'localised' => 0, + 'publishable' => 0, + 'published' => 0, + ]; + + /** @var Locale $globalLocale */ + $globalLocale = Locale::get() + ->filter(['IsGlobalDefault' => 1]) + ->sort('ID', 'ASC') + ->first(); + + if (!$globalLocale) { + echo 'Please set global locale first!' . PHP_EOL; + + return; + } + + if ($this->include_only_classes && is_array($this->include_only_classes)) { + $classesWithFluent = $this->include_only_classes; + foreach ($this->include_only_classes as $key => $dataClass) { + if (!$this->isClassNamePermitted($dataClass)) { + echo sprintf('ERROR: `%s` does not have FluentExtension installed. Continuing without it...', $dataClass) . PHP_EOL; + unset($classesWithFluent[$key]); + } + } + } else { + $dataClasses = static::getDirectSubclassesRecursivelyFor(DataObject::class); + $classesWithFluent = $this->filterPermittedClassesRecursively($dataClasses); + } + + foreach ($classesWithFluent as $classWithFluent) { + if (!$this->isClassNamePermitted($classWithFluent)) { + continue; + } + + $results = $this->doLocaliseClass($classWithFluent, $globalLocale, $limit, $publish); + foreach ($results as $key => $value) { + $total_results[$key] += $value; + } + + echo sprintf('Processing %s objects...', $classWithFluent) . PHP_EOL; + echo sprintf('└─ Localised %d of %d objects.', $results['localised'], $results['localisable']) . PHP_EOL; + if ($results['publishable']) { + echo sprintf('└─ Published %d of %d objects.', $results['published'], $results['publishable']) . PHP_EOL; + } + } + + echo PHP_EOL; + echo sprintf('Completed %d classes.', count($classesWithFluent)) . PHP_EOL; + echo sprintf('└─ Localised %d of %d objects in total.', $total_results['localised'], $total_results['localisable']) . PHP_EOL; + echo PHP_EOL; + + if ($total_results['publishable']) { + echo sprintf('└─ Published %d of %d objects in total.', $total_results['published'], $total_results['publishable']) . PHP_EOL; + echo PHP_EOL; + } + + if (!Director::is_cli()) { + echo ''; + } + } + + /** + * @param $className + * @param $globalLocale + * @param $limit + * @param $publish + * @return array{localisable: int, localised: int, publishable: int, published: int} + * @throws \SilverStripe\ORM\ValidationException + */ + protected function doLocaliseClass($className, $globalLocale, $limit, $publish): array + { + $dataObjectIDs = FluentState::singleton()->withState(static function (FluentState $state) use ($className, $limit): array { + $state->setLocale(null); + $dataObjects = $className::get()->sort('ID', 'ASC'); + + if ($limit > 0) { + $dataObjects = $dataObjects->limit($limit); + } + + return $dataObjects->column('ID'); + }); + + return FluentState::singleton()->withState( + static function (FluentState $state) use ($className, $globalLocale, $publish, $dataObjectIDs): array { + $state->setLocale($globalLocale->Locale); + $return = [ + 'localisable' => 0, + 'localised' => 0, + 'publishable' => 0, + 'published' => 0, + ]; + + foreach ($dataObjectIDs as $dataObjectID) { + /** @var DataObject|FluentExtension $dataObject */ + $dataObject = $className::get()->byID($dataObjectID); + $return['localisable'] += 1; + + if (!$dataObject->hasExtension(FluentVersionedExtension::class)) { + if ($dataObject->existsInLocale()) { + continue; + } + $dataObject->write(); + $return['localised'] += 1; + continue; + } + + // We have versioned data, so start tracking how many have been published + $return['publishable'] += 1; + + /** @var DataObject|Versioned|FluentVersionedExtension $dataObject */ + if ($dataObject->isDraftedInLocale()) { + continue; + } + $dataObject->writeToStage(Versioned::DRAFT); + + $return['localised'] += 1; + + if (!$publish) { + continue; + } + + // Check if the base record was published - if not then we don't need to publish + // as this would leak draft content, we only want to publish pages which were published + // before Fluent module was added + $dataObjectID = $dataObject->ID; + $isBaseRecordPublished = FluentState::singleton()->withState( + static function (FluentState $state) use ($className, $dataObjectID): bool { + $state->setLocale(null); + $page = $className::get_by_id($dataObjectID); + + if ($page === null) { + return false; + } + + return $page->isPublished(); + } + ); + + if (!$isBaseRecordPublished) { + continue; + } + + $dataObject->publishRecursive(); + $return['published'] += 1; + } + + return $return; + } + ); + } + + /** + * @param string $className + * @return array[] + * @throws \ReflectionException + */ + protected static function getDirectSubclassesRecursivelyFor(string $className): array + { + $directSubclasses = []; + foreach (ClassInfo::subclassesFor($className, false) as $subclassName) { + $actualParentClass = get_parent_class($subclassName); + if ($className === $actualParentClass) { + $directSubclasses[$subclassName] = static::getDirectSubclassesRecursivelyFor($subclassName); + } + } + + return $directSubclasses; + } + + /** + * @param array $classes + * @return array + */ + protected function filterPermittedClassesRecursively(array $classes): array + { + $permittedClasses = []; + foreach ($classes as $parentClassName => $subclassNames) { + if ($this->isClassNamePermitted($parentClassName)) { + $permittedClasses[] = $parentClassName; + // We will skip all subclasses since the ORM will automatically + // pull them in when this parent is referenced + continue; + } + + $permittedClasses = array_merge($permittedClasses, $this->filterPermittedClassesRecursively($subclassNames)); + } + + return $permittedClasses; + } + + /** + * @param string $className + * @return bool + */ + protected function isClassNamePermitted(string $className): bool + { + // Do a simple (inexpensive) text comparison against the exclusion list before we create an object + if (!$this->include_only_classes && is_array($this->exclude_classes) && in_array($className, $this->exclude_classes)) { + return false; + } + + /** @var DataObject $dataObject */ + $dataObject = singleton($className); + + // Now we'll do a full comparison against the exclusion list + // This important step will, for example, match (refuse) a BlogPost if Page is listed as excluded + if (is_array($this->exclude_classes)) { + foreach ($this->exclude_classes as $excluded_class) { + if ($dataObject instanceof $excluded_class) { + return false; + } + } + } + + return $dataObject->hasExtension(FluentExtension::class); + } +} diff --git a/src/Task/InitialPageLocalisationTask.php b/src/Task/InitialPageLocalisationTask.php index 393f8e37..d39bd7bc 100644 --- a/src/Task/InitialPageLocalisationTask.php +++ b/src/Task/InitialPageLocalisationTask.php @@ -3,14 +3,8 @@ namespace TractorCow\Fluent\Task; use SilverStripe\CMS\Model\SiteTree; -use SilverStripe\Control\HTTPRequest; -use SilverStripe\Dev\BuildTask; -use SilverStripe\Versioned\Versioned; -use TractorCow\Fluent\Extension\FluentSiteTreeExtension; -use TractorCow\Fluent\Model\Locale; -use TractorCow\Fluent\State\FluentState; -class InitialPageLocalisationTask extends BuildTask +class InitialPageLocalisationTask extends InitialDataObjectLocalisationTask { /** * @var string @@ -20,93 +14,34 @@ class InitialPageLocalisationTask extends BuildTask /** * @var string */ - protected $title = 'Initial page localisation'; + protected $title = 'Initial SiteTree localisation'; /** * @var string */ - protected $description = 'Intended for projects which already have some pages when Fluent module is added.' . - ' This dev task will localise / publish all pages in the default locale. Locale setup has to be done before running this task.' . - ' Pages which are not published will not be published, only localised. Pages which are already localised will be skipped.'; + protected $description = 'Intended for projects which already have some Pages when Fluent module is added.' . + ' This dev task will localise / publish all Pages in the default locale. Locale setup has to be done before running this task.' . + ' Pass limit=N to limit number of records to localise. Pass publish=1 to force publishing of localised Pages.' . + ' Regardless, Pages which were not already published will not be published, only localised. Pages which were already localised will always be skipped.'; /** - * @param HTTPRequest $request + * @var string[] */ - public function run($request) - { - $publish = (bool) $request->getVar('publish'); - $limit = (int) $request->getVar('limit'); - - $globalLocale = Locale::get() - ->filter(['IsGlobalDefault' => 1]) - ->sort('ID', 'ASC') - ->first(); - - if (!$globalLocale) { - echo 'Please set global locale first!' . PHP_EOL; - - return; - } - - $pageIds = FluentState::singleton()->withState(static function (FluentState $state) use ($limit): array { - $state->setLocale(null); - $pages = SiteTree::get()->sort('ID', 'ASC'); - - if ($limit > 0) { - $pages = $pages->limit($limit); - } - - return $pages->column('ID'); - }); - - $localised = FluentState::singleton()->withState( - static function (FluentState $state) use ($globalLocale, $pageIds, $publish): int { - $state->setLocale($globalLocale->Locale); - $localised = 0; - - foreach ($pageIds as $pageId) { - /** @var SiteTree|FluentSiteTreeExtension $page */ - $page = SiteTree::get()->byID($pageId); - - if ($page->isDraftedInLocale()) { - continue; - } - - $page->writeToStage(Versioned::DRAFT); - $localised += 1; + protected $include_only_classes = [ + SiteTree::class + ]; - if (!$publish) { - continue; - } - - // Check if the base record was published - if not then we don't need to publish - // as this would leak draft content, we only want to publish pages which were published - // before Fluent module was added - $pageId = $page->ID; - $isBaseRecordPublished = FluentState::singleton()->withState( - static function (FluentState $state) use ($pageId): bool { - $state->setLocale(null); - $page = SiteTree::get_by_id($pageId); - - if ($page === null) { - return false; - } - - return $page->isPublished(); - } - ); - - if (!$isBaseRecordPublished) { - continue; - } - - $page->publishRecursive(); - } - - return $localised; - } - ); + /** + * @var string[] + */ + protected $exclude_classes = []; - echo sprintf('Localised %d pages.', $localised) . PHP_EOL; + /** + * Soft dependency on CMS module + * @return bool + */ + function isEnabled(): bool + { + return class_exists(SiteTree::class) && parent::isEnabled(); } } diff --git a/tests/php/Extension/FluentSiteTreeExtensionTest.php b/tests/php/Extension/FluentSiteTreeExtensionTest.php index aa0e1d97..b166f31f 100644 --- a/tests/php/Extension/FluentSiteTreeExtensionTest.php +++ b/tests/php/Extension/FluentSiteTreeExtensionTest.php @@ -75,8 +75,8 @@ public function testGetLocaleInformation() $this->assertEquals('English (New Zealand)', $result->getTitle()); $this->assertEquals('English', $result->getLanguageNative()); $this->assertEquals('en', $result->getLanguage()); - $this->assertEquals(Controller::normaliseTrailingSlash('/newzealand/a-page/'), $result->getLink()); - $this->assertEquals(Controller::normaliseTrailingSlash('http://mocked/newzealand/a-page/'), $result->getAbsoluteLink()); + $this->assertEquals($this->normaliseTrailingSlash('/newzealand/a-page/'), $result->getLink()); + $this->assertEquals($this->normaliseTrailingSlash('http://mocked/newzealand/a-page/'), $result->getAbsoluteLink()); $this->assertEquals('link', $result->getLinkingMode()); $this->assertEquals('newzealand', $result->getURLSegment()); }); @@ -180,7 +180,7 @@ function (FluentState $newState) use ($domain, $locale, $prefixDisabled, $pageNa /** @var Page|FluentSiteTreeExtension $page */ $page = $this->objFromFixture(Page::class, $pageName); - $this->assertEquals(Controller::normaliseTrailingSlash($url), $page->Link()); + $this->assertEquals($this->normaliseTrailingSlash($url), $page->Link()); } ); } @@ -562,4 +562,17 @@ public function localeFallbackProvider(): array ], ]; } + + /** + * Normalises a test URL's trailing slash, but ignores complexities + * such as whether the domain host in the UR matches Director::host() + */ + private function normaliseTrailingSlash(string $testURL): string + { + if ($testURL === '/' || $testURL === '') { + return '/'; + } + $slash = Controller::config()->get('add_trailing_slash') ? '/' : ''; + return (rtrim($testURL, '/')) . $slash; + } } diff --git a/tests/php/Middleware/InitStateMiddlewareTest.php b/tests/php/Middleware/InitStateMiddlewareTest.php index c2decf57..3989c35b 100644 --- a/tests/php/Middleware/InitStateMiddlewareTest.php +++ b/tests/php/Middleware/InitStateMiddlewareTest.php @@ -35,7 +35,8 @@ public function isFrontendProvider() ['/', [], true], ['foo', [], true], ['my-blog/my-post', [], true], - ['my-blog/my-post', ['CMSPreview' => 1], false], + // CMS preview is front-end, and if there's no localised copy the PreviewLink will be null + ['my-blog/my-post', ['CMSPreview' => 1], true], ]; } } diff --git a/yarn.lock b/yarn.lock index 5a5c73ea..4a590991 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1004,11 +1004,36 @@ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== +"@csstools/css-parser-algorithms@^2.6.3": + version "2.6.3" + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz#b5e7eb2bd2a42e968ef61484f1490a8a4148a8eb" + integrity sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA== + +"@csstools/css-tokenizer@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz#3d47e101ad48d815a4bdce8159fb5764f087f17a" + integrity sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g== + +"@csstools/media-query-list-parser@^2.1.11": + version "2.1.11" + resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz#465aa42f268599729350e305e1ae14a30c1daf51" + integrity sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA== + +"@csstools/selector-specificity@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz#63085d2995ca0f0e55aa8b8a07d69bfd48b844fe" + integrity sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA== + "@discoveryjs/json-ext@0.5.7", "@discoveryjs/json-ext@^0.5.0": version "0.5.7" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== +"@dual-bundle/import-meta-resolve@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#519c1549b0e147759e7825701ecffd25e5819f7b" + integrity sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg== + "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -1118,12 +1143,12 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.8": +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== @@ -1313,10 +1338,10 @@ resolved "https://registry.yarnpkg.com/@sect/modernizr-loader/-/modernizr-loader-1.0.5.tgz#512afc60c715cd658fdffab244123661e1339083" integrity sha512-L8y2BTVeLtdSe1XzBcD2DOlc+7fR7Z/uNdhsKvf3d3x3gmEKz9sfl2wJ3VzFhEd+a/O6qgacuhbziphG2p4s8g== -"@silverstripe/eslint-config@^1.0.0-alpha6": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@silverstripe/eslint-config/-/eslint-config-1.1.0.tgz#3bf3d233b4ccfec4eeca362a621968ba2f70af59" - integrity sha512-7Y3zjAQzNyWceDDvd+cK0NdeI7MP0LJdL7JeF+JUBOmT14hOaBWvGrmcQLmYhZb2sTwh6JEgQI0+9ExVr/60nQ== +"@silverstripe/eslint-config@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@silverstripe/eslint-config/-/eslint-config-1.3.0.tgz#fa88f47cacd6103f6b759d81e1d86f9e93799413" + integrity sha512-Q3+sQKO1ysyMLhJ91kOl2LqJhQICfHFeqMx09EH0xx3dRHgjsQvqHIzVWEzPkM/l7D79m+Ma/WBnon30S7TVlA== dependencies: eslint "^8.26.0" eslint-config-airbnb "^19.0.4" @@ -1325,11 +1350,17 @@ eslint-plugin-jsx-a11y "^6.6.1" eslint-plugin-react "^7.31.10" eslint-webpack-plugin "^3.2.0" - -"@silverstripe/webpack-config@^2.0.0-alpha6": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@silverstripe/webpack-config/-/webpack-config-2.0.2.tgz#7a69eeae39b8b576afad93d1b8119c6feac90530" - integrity sha512-RWz/ge/J8nadUZadf9uqv1/P9jxvlqEekcLnpYXsTNvJflePXeyYujEMBxi0P7MBAiVTWVn+UT/C6eTcgxYSlQ== + stylelint "^16.3.1" + stylelint-config-recommended "^14.0.0" + stylelint-config-recommended-scss "^14.0.0" + stylelint-config-sass-guidelines "^11.1.0" + stylelint-config-standard "^36.0.0" + stylelint-scss "^6.2.1" + +"@silverstripe/webpack-config@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@silverstripe/webpack-config/-/webpack-config-2.1.0.tgz#9d6409498126db766299fa40f209f618515932a4" + integrity sha512-8rE2K3AXkIP6crDTBXdHz/3hiNVp2XpINkWGDBKzvMS6sGRcVTluPs12BdOXYo1aUZEeqDk9QYOLLGGgZxnOdw== dependencies: "@babel/core" "^7.19.6" "@babel/preset-env" "^7.19.4" @@ -1353,7 +1384,6 @@ postcss-loader "^7.0.1" resolve-url-loader "^5.0.0" sass "^1.55.0" - sass-lint "^1.13.1" sass-loader "^13.1.0" webpack "^5.74.0" webpack-bundle-analyzer "^4.7.0" @@ -1562,13 +1592,6 @@ acorn-import-assertions@^1.9.0: resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== -acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" - integrity sha512-AU7pnZkguthwBjKgCg6998ByQNIMjbuDQZ8bb78QAFZwPfmKia8AIzgY/gWgqCjnht8JLdXmB4YxA0KaV60ncQ== - dependencies: - acorn "^3.0.4" - acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -1579,17 +1602,12 @@ acorn-walk@^8.0.0: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== -acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - integrity sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw== - -acorn@^5.5.0: - version "5.7.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" - integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== +acorn@^8.0.4, acorn@^8.7.1: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== -acorn@^8.0.4, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: +acorn@^8.8.2, acorn@^8.9.0: version "8.11.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== @@ -1631,11 +1649,6 @@ ajv-formats@^2.1.1: dependencies: ajv "^8.0.0" -ajv-keywords@^1.0.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" - integrity sha512-vuBv+fm2s6cqUyey2A7qYcvsik+GMDJsw8BARP2sDE76cqmaZVarsvHf7Vx6VJ0Xk8gLl+u3MoAPf6gKzJefeA== - ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" @@ -1648,14 +1661,6 @@ ajv-keywords@^5.1.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^4.7.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" - integrity sha512-I/bSHSNEcFFqXLf91nchoNB9D1Kie3QKcWdchYUaoIg1+1bdWDkdfdlvdIOJbi9U8xR0y+MWc5D+won9v95WlQ== - dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" - ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -1676,30 +1681,25 @@ ajv@^8.0.0, ajv@^8.9.0: require-from-string "^2.0.2" uri-js "^4.2.2" -ansi-escapes@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" - integrity sha512-wiXutNjDUlNEDWHcYH3jtZUhd3c4/VojassD8zHdHCY13xbZy2XbW+NKQwA0tWGBVzDA9qEzYwfoSsWmviidhw== - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== - -ansi-regex@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" - integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== +ajv@^8.0.1: + version "8.16.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.16.0.tgz#22e2a92b94f005f7e0f9c9d39652ef0b8f6f0cb4" + integrity sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw== + dependencies: + fast-deep-equal "^3.1.3" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.4.1" ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== ansi-styles@^3.2.1: version "3.2.1" @@ -1741,13 +1741,6 @@ are-we-there-yet@^3.0.0: delegates "^1.0.0" readable-stream "^3.6.0" -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" @@ -1780,6 +1773,11 @@ array-includes@^3.1.6, array-includes@^3.1.7: get-intrinsic "^1.2.4" is-string "^1.0.7" +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + array.prototype.findlast@^1.2.4: version "1.2.5" resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" @@ -1804,7 +1802,17 @@ array.prototype.findlastindex@^1.2.3: es-object-atoms "^1.0.0" es-shim-unscopables "^1.0.2" -array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: +array.prototype.flat@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.flat@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== @@ -1869,6 +1877,11 @@ ast-types-flow@^0.0.8: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + autoprefixer@^10.4.13: version "10.4.19" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.19.tgz#ad25a856e82ee9d7898c59583c1afeb3fa65f89f" @@ -1937,6 +1950,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +balanced-match@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9" + integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -1981,6 +1999,13 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + browserslist@^4.21.10, browserslist@^4.22.2, browserslist@^4.23.0: version "4.23.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" @@ -2038,18 +2063,6 @@ call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: get-intrinsic "^1.2.4" set-function-length "^1.2.1" -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - integrity sha512-UJiE1otjXPF5/x+T3zTnSFiTOEmJoGTD9HmBoxnCUwho61a2eSNn/VwtwuIBDAo2SEOv1AJ7ARI5gCmohFLu/g== - dependencies: - callsites "^0.2.0" - -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - integrity sha512-Zv4Dns9IbXXmPkgRRUjAaJQgfN4xX5p6+RQFhWUqscdvvK2xK/ZL8b3IXIJsj+4sD+f24NwnWy2BY8AJ82JB0A== - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -2065,17 +2078,6 @@ caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001599: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001603.tgz#605046a5bdc95ba4a92496d67e062522dce43381" integrity sha512-iL2iSS0eDILMb9n5yKQoTBim9jMZ0Yrk8g0N9K7UzYyWnfIKzXBZD5ngpM37ZcL/cv0Mli8XtVMRYMQAfFpi5Q== -chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -2125,11 +2127,6 @@ cidr-regex@^3.1.1: dependencies: ip-regex "^4.1.0" -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== - clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" @@ -2143,13 +2140,6 @@ cli-columns@^4.0.0: string-width "^4.2.3" strip-ansi "^6.0.1" -cli-cursor@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" - integrity sha512-25tABq090YNKkF6JH7lcwO0zFJTRke4Jcq9iX2nr/Sz0Cjjv4gckmwlW6Ty/aoyFd6z3ysR2hMGC2GFugmBo6A== - dependencies: - restore-cursor "^1.0.1" - cli-table3@^0.6.2: version "0.6.4" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.4.tgz#d1c536b8a3f2e7bec58f67ac9e5769b1b30088b0" @@ -2159,11 +2149,6 @@ cli-table3@^0.6.2: optionalDependencies: "@colors/colors" "1.5.0" -cli-width@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" - integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== - cliui@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" @@ -2194,16 +2179,6 @@ cmd-shim@^5.0.0: dependencies: mkdirp-infer-owner "^2.0.0" -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -2233,6 +2208,11 @@ color-support@^1.1.3: resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== +colord@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== + colorette@^2.0.14: version "2.0.20" resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" @@ -2256,7 +2236,7 @@ commander@^10.0.1: resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== -commander@^2.20.0, commander@^2.8.1: +commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -2281,16 +2261,6 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -concat-stream@^1.4.6: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - confusing-browser-globals@^1.0.10: version "1.0.11" resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" @@ -2323,11 +2293,6 @@ core-js@^3.26.0: resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.36.1.tgz#c97a7160ebd00b2de19e62f4bbd3406ab720e578" integrity sha512-BTvUrwxVBezj5SZ3f10ImnX2oRByMxql3EimVqMysepbC9EeMUOpLwdy6Eoili2x6E4kf+ZUB5k/+Jv55alPfA== -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - cosmiconfig@^8.3.5: version "8.3.6" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" @@ -2338,6 +2303,16 @@ cosmiconfig@^8.3.5: parse-json "^5.2.0" path-type "^4.0.0" +cosmiconfig@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" + integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== + dependencies: + env-paths "^2.2.1" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -2347,6 +2322,11 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +css-functions-list@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.2.tgz#9a54c6dd8416ed25c1079cd88234e927526c1922" + integrity sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ== + css-loader@^6.7.1: version "6.10.0" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.10.0.tgz#7c172b270ec7b833951b52c348861206b184a4b7" @@ -2361,19 +2341,19 @@ css-loader@^6.7.1: postcss-value-parser "^4.2.0" semver "^7.5.4" +css-tree@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" + integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== + dependencies: + mdn-data "2.0.30" + source-map-js "^1.0.1" + cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -d@1, d@^1.0.1, d@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.2.tgz#2aefd554b81981e7dccf72d6842ae725cb17e5de" - integrity sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw== - dependencies: - es5-ext "^0.10.64" - type "^2.7.2" - damerau-levenshtein@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" @@ -2418,13 +2398,6 @@ debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3: dependencies: ms "2.1.2" -debug@^2.1.1: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -2432,6 +2405,13 @@ debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.3.4: + version "4.3.5" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" + integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== + dependencies: + ms "2.1.2" + debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -2447,7 +2427,7 @@ decode-uri-component@^0.4.1: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.4.1.tgz#2ac4859663c704be22bf7db760a1494a49ab2cc5" integrity sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ== -deep-is@^0.1.3, deep-is@~0.1.3: +deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== @@ -2468,7 +2448,7 @@ define-data-property@^1.0.1, define-data-property@^1.1.4: es-errors "^1.3.0" gopd "^1.0.1" -define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -2500,13 +2480,12 @@ diff@^5.1.0: resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== -doctrine@^1.2.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg== +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: - esutils "^2.0.2" - isarray "^1.0.0" + path-type "^4.0.0" doctrine@^2.1.0: version "2.1.0" @@ -2567,7 +2546,7 @@ entities@~3.0.1: resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== -env-paths@^2.2.0: +env-paths@^2.2.0, env-paths@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== @@ -2589,7 +2568,7 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2: +es-abstract@^1.20.4, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2: version "1.23.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== @@ -2710,73 +2689,12 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.62, es5-ext@^0.10.64, es5-ext@~0.10.14: - version "0.10.64" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.64.tgz#12e4ffb48f1ba2ea777f1fcdd1918ef73ea21714" - integrity sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - esniff "^2.0.1" - next-tick "^1.1.0" - -es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-map@^0.1.3: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" - integrity sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A== - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-set "~0.1.5" - es6-symbol "~3.1.1" - event-emitter "~0.3.5" - -es6-set@~0.1.5: - version "0.1.6" - resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.6.tgz#5669e3b2aa01d61a50ba79964f733673574983b8" - integrity sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw== - dependencies: - d "^1.0.1" - es5-ext "^0.10.62" - es6-iterator "~2.0.3" - es6-symbol "^3.1.3" - event-emitter "^0.3.5" - type "^2.7.2" - -es6-symbol@^3.1.1, es6-symbol@^3.1.3, es6-symbol@~3.1.1: - version "3.1.4" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.4.tgz#f4e7d28013770b4208ecbf3e0bf14d3bcb557b8c" - integrity sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg== - dependencies: - d "^1.0.2" - ext "^1.7.0" - -es6-weak-map@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" - integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== - dependencies: - d "1" - es5-ext "^0.10.46" - es6-iterator "^2.0.3" - es6-symbol "^3.1.1" - escalade@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== @@ -2786,16 +2704,6 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escope@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" - integrity sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ== - dependencies: - es6-map "^0.1.3" - es6-weak-map "^2.0.1" - esrecurse "^4.1.0" - estraverse "^4.1.1" - eslint-config-airbnb-base@^15.0.0: version "15.0.0" resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" @@ -2932,45 +2840,6 @@ eslint-webpack-plugin@^3.2.0: normalize-path "^3.0.0" schema-utils "^4.0.0" -eslint@^2.7.0: - version "2.13.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-2.13.1.tgz#e4cc8fa0f009fb829aaae23855a29360be1f6c11" - integrity sha512-29PFGeV6lLQrPaPHeCkjfgLRQPFflDiicoNZOw+c/JkaQ0Am55yUICdYZbmCiM+DSef+q7oCercimHvjNI0GAw== - dependencies: - chalk "^1.1.3" - concat-stream "^1.4.6" - debug "^2.1.1" - doctrine "^1.2.2" - es6-map "^0.1.3" - escope "^3.6.0" - espree "^3.1.6" - estraverse "^4.2.0" - esutils "^2.0.2" - file-entry-cache "^1.1.1" - glob "^7.0.3" - globals "^9.2.0" - ignore "^3.1.2" - imurmurhash "^0.1.4" - inquirer "^0.12.0" - is-my-json-valid "^2.10.0" - is-resolvable "^1.0.0" - js-yaml "^3.5.1" - json-stable-stringify "^1.0.0" - levn "^0.3.0" - lodash "^4.0.0" - mkdirp "^0.5.0" - optionator "^0.8.1" - path-is-absolute "^1.0.0" - path-is-inside "^1.0.1" - pluralize "^1.2.1" - progress "^1.1.8" - require-uncached "^1.0.2" - shelljs "^0.6.0" - strip-json-comments "~1.0.1" - table "^3.7.8" - text-table "~0.2.0" - user-home "^2.0.0" - eslint@^8.26.0: version "8.57.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" @@ -3015,24 +2884,6 @@ eslint@^8.26.0: strip-ansi "^6.0.1" text-table "^0.2.0" -esniff@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" - integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== - dependencies: - d "^1.0.1" - es5-ext "^0.10.62" - event-emitter "^0.3.5" - type "^2.7.2" - -espree@^3.1.6: - version "3.5.4" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" - integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== - dependencies: - acorn "^5.5.0" - acorn-jsx "^3.0.0" - espree@^9.6.0, espree@^9.6.1: version "9.6.1" resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" @@ -3042,11 +2893,6 @@ espree@^9.6.0, espree@^9.6.1: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - esquery@^1.4.2: version "1.5.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" @@ -3054,17 +2900,16 @@ esquery@^1.4.2: dependencies: estraverse "^5.1.0" -esrecurse@^4.1.0, esrecurse@^4.3.0: +esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" -estraverse@^4.1.1, estraverse@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== +estraverse@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: version "5.3.0" @@ -3076,24 +2921,11 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -event-emitter@^0.3.5, event-emitter@~0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== - dependencies: - d "1" - es5-ext "~0.10.14" - events@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - integrity sha512-MsG3prOVw1WtLXAZbM3KiYtooKR1LvxHh3VHsVtIy0uiUu8usxgB/94DP2HxtD/661lLdB6yzQ09lGJSQr6nkg== - exponential-backoff@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" @@ -3104,29 +2936,33 @@ expose-loader@^4.0.0: resolved "https://registry.yarnpkg.com/expose-loader/-/expose-loader-4.1.0.tgz#9c6d55d24e3ac0e5d50ee5dc7930d564fc475d48" integrity sha512-oLAesnzerwDGGADzBMnu0LPqqnlVz6e2V9lTa+/4X6VeW9W93x/nJpw05WBrcIdbqXm/EdnEQpiVDFFiQXuNfg== -ext@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" - integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== - dependencies: - type "^2.7.2" - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-glob@^3.2.9, fast-glob@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -fastest-levenshtein@^1.0.12: +fastest-levenshtein@^1.0.12, fastest-levenshtein@^1.0.16: version "1.0.16" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== @@ -3138,22 +2974,6 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -figures@^1.3.5: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - integrity sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ== - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -file-entry-cache@^1.1.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-1.3.1.tgz#44c61ea607ae4be9c1402f41f44270cbfe334ff8" - integrity sha512-JyVk7P0Hvw6uEAwH4Y0j+rZMvaMWvLBYRmRGAF2S6jKTycf0mMDcC7d21Y2KyrKJk3XI8YghSsk5KmRdbvg0VQ== - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -3161,6 +2981,13 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +file-entry-cache@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-9.0.0.tgz#4478e7ceaa5191fa9676a2daa7030211c31b1e7e" + integrity sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw== + dependencies: + flat-cache "^5.0.0" + file@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/file/-/file-0.2.2.tgz#c3dfd8f8cf3535ae455c2b423c2e52635d76b4d3" @@ -3173,6 +3000,13 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + filter-obj@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-5.1.0.tgz#5bd89676000a713d7db2e197f660274428e524ed" @@ -3210,16 +3044,6 @@ find-up@^6.3.0: locate-path "^7.1.0" path-exists "^5.0.0" -flat-cache@^1.2.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" - integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== - dependencies: - circular-json "^0.3.1" - graceful-fs "^4.1.2" - rimraf "~2.6.2" - write "^0.2.1" - flat-cache@^3.0.4: version "3.2.0" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" @@ -3229,12 +3053,20 @@ flat-cache@^3.0.4: keyv "^4.5.3" rimraf "^3.0.2" +flat-cache@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-5.0.0.tgz#26c4da7b0f288b408bb2b506b2cb66c240ddf062" + integrity sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ== + dependencies: + flatted "^3.3.1" + keyv "^4.5.4" + flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -flatted@^3.2.9: +flatted@^3.2.9, flatted@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== @@ -3251,22 +3083,6 @@ fraction.js@^4.3.7: resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== -front-matter@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-2.1.2.tgz#f75983b9f2f413be658c93dfd7bd8ce4078f5cdb" - integrity sha512-wH9JJVUi/MUfRpSvYWltdC9FGFZdkcc2H7US7Sp3iYihXTpYWWEL7ZUHMBicA9MsFBR/EatSbYN5EtCaytfiNA== - dependencies: - js-yaml "^3.4.6" - -fs-extra@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" - integrity sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^3.0.0" - universalify "^0.1.0" - fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" @@ -3318,20 +3134,6 @@ gauge@^4.0.3: strip-ansi "^6.0.1" wide-align "^1.1.5" -generate-function@^2.0.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" - integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== - dependencies: - is-property "^1.0.2" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - integrity sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ== - dependencies: - is-property "^1.0.0" - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -3362,6 +3164,13 @@ get-symbol-description@^1.0.2: es-errors "^1.3.0" get-intrinsic "^1.2.4" +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + glob-parent@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" @@ -3369,19 +3178,23 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.0, glob@^7.0.3, glob@^7.1.3, glob@^7.1.4: +glob@^7.1.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.4: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -3404,17 +3217,21 @@ glob@^8.0.1: minimatch "^5.0.1" once "^1.3.0" -glob@~7.1.1: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" globals@^11.1.0: version "11.12.0" @@ -3428,11 +3245,6 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" -globals@^9.2.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== - globalthis@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" @@ -3440,21 +3252,22 @@ globalthis@^1.0.3: dependencies: define-properties "^1.1.3" -globule@^1.0.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.4.tgz#7c11c43056055a75a6e68294453c17f2796170fb" - integrity sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg== +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: - glob "~7.1.1" - lodash "^4.17.21" - minimatch "~3.0.2" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" -gonzales-pe-sl@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/gonzales-pe-sl/-/gonzales-pe-sl-4.2.3.tgz#6a868bc380645f141feeb042c6f97fcc71b59fe6" - integrity sha512-EdOTnR11W0edkA1xisx4UYtobMSTYj+UNyffW3/b9LziI7RpmHiBIqMs+VL43LrCbiPcLQllCxyzqOB+l5RTdQ== - dependencies: - minimist "1.1.x" +globjoin@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" + integrity sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg== gopd@^1.0.1: version "1.0.1" @@ -3463,11 +3276,16 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.10, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6: +graceful-fs@^4.1.2, graceful-fs@^4.2.11: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== +graceful-fs@^4.2.10, graceful-fs@^4.2.4, graceful-fs@^4.2.6: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + graphemer@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" @@ -3480,13 +3298,6 @@ gzip-size@^6.0.0: dependencies: duplexer "^0.1.2" -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== - dependencies: - ansi-regex "^2.0.0" - has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" @@ -3550,6 +3361,11 @@ html-escaper@^2.0.2: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== +html-tags@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" + integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== + http-cache-semantics@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" @@ -3603,12 +3419,7 @@ ignore-walk@^5.0.1: dependencies: minimatch "^5.0.1" -ignore@^3.1.2: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== - -ignore@^5.2.0: +ignore@^5.2.0, ignore@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== @@ -3665,15 +3476,15 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@~2.0.3: +inherits@2, inherits@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== ini@^3.0.0, ini@^3.0.1: version "3.0.1" @@ -3693,25 +3504,6 @@ init-package-json@^3.0.2: validate-npm-package-license "^3.0.4" validate-npm-package-name "^4.0.0" -inquirer@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" - integrity sha512-bOetEz5+/WpgaW4D1NYOk1aD+JCqRjqu/FwRFgnIfiP7FC/zinsrfyO1vlS3nyH/R7S0IH3BIHBu4DBIDSqiGQ== - dependencies: - ansi-escapes "^1.1.0" - ansi-regex "^2.0.0" - chalk "^1.0.0" - cli-cursor "^1.0.1" - cli-width "^2.0.0" - figures "^1.3.5" - lodash "^4.3.0" - readline2 "^1.0.1" - run-async "^0.1.0" - rx-lite "^3.1.2" - string-width "^1.0.1" - strip-ansi "^3.0.0" - through "^2.3.6" - internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" @@ -3826,18 +3618,6 @@ is-finalizationregistry@^1.0.2: dependencies: call-bind "^1.0.2" -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -3867,22 +3647,6 @@ is-map@^2.0.3: resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== -is-my-ip-valid@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.1.tgz#f7220d1146257c98672e6fba097a9f3f2d348442" - integrity sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg== - -is-my-json-valid@^2.10.0: - version "2.20.6" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.20.6.tgz#a9d89e56a36493c77bda1440d69ae0dc46a08387" - integrity sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw== - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - is-my-ip-valid "^1.0.0" - jsonpointer "^5.0.0" - xtend "^4.0.0" - is-negative-zero@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" @@ -3917,11 +3681,6 @@ is-plain-object@^5.0.0: resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== -is-property@^1.0.0, is-property@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g== - is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" @@ -3930,11 +3689,6 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== - is-set@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" @@ -3988,11 +3742,6 @@ is-weakset@^2.0.3: call-bind "^1.0.7" get-intrinsic "^1.2.4" -isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - isarray@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" @@ -4047,14 +3796,6 @@ jiti@^1.20.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@^3.5.4: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -4107,16 +3848,6 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz#52d4361b47d49168bcc4e564189a42e5a7439454" - integrity sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg== - dependencies: - call-bind "^1.0.5" - isarray "^2.0.5" - jsonify "^0.0.1" - object-keys "^1.1.1" - json-stringify-nice@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" @@ -4134,29 +3865,20 @@ json5@^2.1.2, json5@^2.2.3: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonfile@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" - integrity sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" - integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== - jsonparse@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== -jsonpointer@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" - integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== +"jsx-ast-utils@^2.4.1 || ^3.0.0": + version "3.3.3" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" + integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== + dependencies: + array-includes "^3.1.5" + object.assign "^4.1.3" -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: +jsx-ast-utils@^3.3.5: version "3.3.5" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== @@ -4176,7 +3898,7 @@ just-diff@^5.0.1: resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.2.0.tgz#60dca55891cf24cd4a094e33504660692348a241" integrity sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw== -keyv@^4.5.3: +keyv@^4.5.3, keyv@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== @@ -4188,10 +3910,10 @@ kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -known-css-properties@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.3.0.tgz#a3d135bbfc60ee8c6eacf2f7e7e6f2d4755e49a4" - integrity sha512-QMQcnKAiQccfQTqtBh/qwquGZ2XK/DXND1jrcN9M8gMMy99Gwla7GQjndVUsEqIaRyP6bsFRuhwRj5poafBGJQ== +known-css-properties@^0.31.0: + version "0.31.0" + resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.31.0.tgz#5c8d9d8777b3ca09482b2397f6a241e5d69a1023" + integrity sha512-sBPIUGTNF0czz0mwGGUoKKJC8Q7On1GPbCSFPfyEsfHb2DyBG0Y4QtV+EVWpINSaiGKZblDNuF5AezxSgOhesQ== language-subtag-registry@^0.3.20: version "0.3.22" @@ -4205,14 +3927,6 @@ language-tags@^1.0.9: dependencies: language-subtag-registry "^0.3.20" -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -4386,27 +4100,22 @@ locate-path@^7.1.0: dependencies: p-locate "^6.0.0" -lodash.capitalize@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" - integrity sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw== - lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== -lodash.kebabcase@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" - integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== - lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash@^4.0.0, lodash@^4.17.21, lodash@^4.3.0: +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== + +lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -4470,20 +4179,43 @@ markdown-it@^13.0.1: mdurl "^1.0.1" uc.micro "^1.0.5" +mathml-tag-names@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" + integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== + +mdn-data@2.0.30: + version "2.0.30" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" + integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== + mdurl@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== +meow@^13.2.0: + version "13.2.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-13.2.0.tgz#6b7d63f913f984063b3cc261b6e8800c4cd3474f" + integrity sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA== + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" - integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4, micromatch@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" + integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" micromatch@^4.0.5: version "4.0.5" @@ -4513,7 +4245,13 @@ mini-css-extract-plugin@^2.6.1: schema-utils "^4.0.0" tapable "^2.2.1" -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -4527,22 +4265,14 @@ minimatch@^5.0.1, minimatch@^5.1.0: dependencies: brace-expansion "^2.0.1" -minimatch@~3.0.2: - version "3.0.8" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" - integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== - dependencies: - brace-expansion "^1.1.7" - -minimist@1.1.x: - version "1.1.3" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" - integrity sha512-2RbeLaM/Hbo9vJ1+iRrxzfDnX9108qb2m923U+s+Ot2eMey0IYGdSjzHmvtg2XsxoCuMnzOMw7qc573RvnLgwg== +minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -minimist@^1.2.0, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +minimist@^1.2.6: + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== minipass-collect@^1.0.2: version "1.0.2" @@ -4620,7 +4350,7 @@ mkdirp-infer-owner@^2.0.0: infer-owner "^1.0.4" mkdirp "^1.0.3" -mkdirp@0.5.6, mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@0.5.6: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== @@ -4650,11 +4380,6 @@ mrmime@^2.0.0: resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.0.tgz#151082a6e06e59a9a39b46b3e14d5cfe92b3abb4" integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -4665,11 +4390,6 @@ ms@^2.0.0, ms@^2.1.1, ms@^2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -mute-stream@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" - integrity sha512-EbrziT4s8cWPmzr47eYVW3wimS4HsvlnV5ri1xw1aR6JQo/OrJX5rkl32K/QQHdxeabJETtfeaROGhd8W7uBgg== - mute-stream@~0.0.4: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" @@ -4695,11 +4415,6 @@ neo-async@^2.6.2: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - node-gyp@^9.0.0, node-gyp@^9.1.0: version "9.4.1" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.1.tgz#8a1023e0d6766ecb52764cc3a734b36ff275e185" @@ -4932,12 +4647,7 @@ npmlog@^6.0.0, npmlog@^6.0.2: gauge "^4.0.3" set-blocking "^2.0.0" -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== - -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -5015,28 +4725,11 @@ once@^1.3.0: dependencies: wrappy "1" -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - integrity sha512-GZ+g4jayMqzCRMgB2sol7GiCLjKfS1PINkjmx8spcKce1LiVqcbQreXwqs2YAFXC6R03VIG28ZS31t8M866v6A== - opener@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - optionator@^0.9.3: version "0.9.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" @@ -5049,11 +4742,6 @@ optionator@^0.9.3: prelude-ls "^1.2.1" type-check "^0.4.0" -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== - p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -5176,11 +4864,6 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-is-inside@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== - path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" @@ -5201,6 +4884,11 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" @@ -5220,11 +4908,6 @@ pkg-dir@^7.0.0: dependencies: find-up "^6.3.0" -pluralize@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" - integrity sha512-TH+BeeL6Ct98C7as35JbZLf8lgsRzlNJb5gklRIGHKaPkGl1esOKBc5ALUMd+q08Sr6tiEKM+Icbsxg5vuhMKQ== - possible-typed-array-names@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" @@ -5254,6 +4937,11 @@ postcss-loader@^7.0.1: jiti "^1.20.0" semver "^7.5.4" +postcss-media-query-parser@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" + integrity sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig== + postcss-modules-extract-imports@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" @@ -5282,6 +4970,21 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" +postcss-resolve-nested-selector@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" + integrity sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw== + +postcss-safe-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz#6273d4e5149e286db5a45bc6cf6eafcad464014a" + integrity sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg== + +postcss-scss@^4.0.9: + version "4.0.9" + resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-4.0.9.tgz#a03c773cd4c9623cb04ce142a52afcec74806685" + integrity sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A== + postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: version "6.0.16" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz#3b88b9f5c5abd989ef4e2fc9ec8eedd34b20fb04" @@ -5290,12 +4993,20 @@ postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selecto cssesc "^3.0.0" util-deprecate "^1.0.2" +postcss-selector-parser@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz#49694cb4e7c649299fea510a29fa6577104bcf53" + integrity sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.2.14, postcss@^8.4.18, postcss@^8.4.33: +postcss@^8.2.14, postcss@^8.4.18, postcss@^8.4.33, postcss@^8.4.38: version "8.4.38" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== @@ -5309,26 +5020,11 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== - proc-log@^2.0.0, proc-log@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -progress@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" - integrity sha512-UdA8mJ4weIkUBO224tIarHzuHs4HuYiJvsuGT7j/SPQiUJVjYvNDBIPa0hAorduOfjGohB/qHWRa/lrrWX/mXw== - promise-all-reject-late@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" @@ -5446,19 +5142,6 @@ read@1, read@^1.0.7, read@~1.0.7: dependencies: mute-stream "~0.0.4" -readable-stream@^2.2.2: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" @@ -5485,15 +5168,6 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -readline2@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" - integrity sha512-8/td4MmwUB6PkZUbV25uKz7dfrmjYWxsW8DVfibWdlHRk/l/DfHKn4pU+dfcoGLFgWOdyGCzINRQD7jn+Bv+/g== - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - mute-stream "0.0.5" - rechoir@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" @@ -5587,14 +5261,6 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -require-uncached@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - integrity sha512-Xct+41K3twrbBHdxAgMoOS+cNcoqIjfM2/VxBF4LL2hVph7YsF8VSKyQ3BDFZwEVbok9yeDl2le/qo0S77WG2w== - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - requirejs@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/requirejs/-/requirejs-2.3.6.tgz#e5093d9601c2829251258c0b9445d4d19fa9e7c9" @@ -5607,11 +5273,6 @@ resolve-cwd@^3.0.0: dependencies: resolve-from "^5.0.0" -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - integrity sha512-kT10v4dhrlLNcnO084hEjvXCI1wUG9qZLoz2RogxqDQQYy7IxjI/iMUkOtQTNEh6rzHxvdQWHsJyel1pKOVCxg== - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -5651,14 +5312,6 @@ resolve@^2.0.0-next.5: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -restore-cursor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" - integrity sha512-reSjH4HuiFlxlaBaFCiS6O76ZGG2ygKoSlCsipKdaZuKSPx/+bt9mULkn4l0asVzbEfQQmXRg6Wp6gv6m0wElw== - dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" - retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" @@ -5676,20 +5329,6 @@ rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" -rimraf@~2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -run-async@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" - integrity sha512-qOX+w+IxFgpUpJfkv2oGN0+ExPs68F4sZHfaRRx4dDexAQkG83atugKVEylyT5ARees3HBbfmuvnjbrd8j9Wjw== - dependencies: - once "^1.3.0" - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -5697,11 +5336,6 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rx-lite@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" - integrity sha512-1I1+G2gteLB8Tkt8YI1sJvSIfa0lWuRtC8GjvtyPBcLSF5jBCCJJqKrpER5JU5r6Bhe+i9/pK3VMuUcXu0kdwQ== - safe-array-concat@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" @@ -5712,16 +5346,15 @@ safe-array-concat@^1.1.2: has-symbols "^1.0.3" isarray "^2.0.5" -safe-buffer@^5.1.0, safe-buffer@~5.2.0: +safe-buffer@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - safe-regex-test@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" @@ -5736,26 +5369,6 @@ safe-regex-test@^1.0.3: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sass-lint@^1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/sass-lint/-/sass-lint-1.13.1.tgz#5fd2b2792e9215272335eb0f0dc607f61e8acc8f" - integrity sha512-DSyah8/MyjzW2BWYmQWekYEKir44BpLqrCFsgs9iaWiVTcwZfwXHF586hh3D1n+/9ihUNMfd8iHAyb9KkGgs7Q== - dependencies: - commander "^2.8.1" - eslint "^2.7.0" - front-matter "2.1.2" - fs-extra "^3.0.1" - glob "^7.0.0" - globule "^1.0.0" - gonzales-pe-sl "^4.2.3" - js-yaml "^3.5.4" - known-css-properties "^0.3.0" - lodash.capitalize "^4.1.0" - lodash.kebabcase "^4.0.0" - merge "^1.2.0" - path-is-absolute "^1.0.0" - util "^0.10.3" - sass-loader@^13.1.0: version "13.3.3" resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-13.3.3.tgz#60df5e858788cffb1a3215e5b92e9cba61e7e133" @@ -5856,12 +5469,16 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shelljs@^0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.6.1.tgz#ec6211bed1920442088fe0f70b2837232ed2c8a8" - integrity sha512-B1vvzXQlJ77SURr3SIUQ/afh+LwecDKAVKE1wqkBlr2PCHoZDaF6MFD+YX1u9ddQjR4z2CKx1tdqvS2Xfs5h1A== +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" -side-channel@^1.0.4, side-channel@^1.0.6: +side-channel@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== @@ -5876,6 +5493,11 @@ signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + sirv@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.4.tgz#5dd9a725c578e34e449f332703eb2a74e46a29b0" @@ -5885,10 +5507,19 @@ sirv@^2.0.3: mrmime "^2.0.0" totalist "^3.0.0" -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - integrity sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw== +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" smart-buffer@^4.2.0: version "4.2.0" @@ -5912,7 +5543,7 @@ socks@^2.6.2: ip-address "^9.0.5" smart-buffer "^4.2.0" -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.0: +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== @@ -5966,11 +5597,6 @@ sprintf-js@^1.1.3: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - ssri@^9.0.0, ssri@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" @@ -5978,15 +5604,6 @@ ssri@^9.0.0, ssri@^9.0.1: dependencies: minipass "^3.1.1" -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -5996,14 +5613,6 @@ string-width@^1.0.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - string.prototype.matchall@^4.0.10: version "4.0.11" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" @@ -6057,27 +5666,6 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== - dependencies: - ansi-regex "^3.0.0" - strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -6085,6 +5673,13 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-ansi@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -6100,15 +5695,90 @@ strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strip-json-comments@~1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" - integrity sha512-AOPG8EBc5wAikaG1/7uFCNFJwnKOuQwFTpYBdTW6OvWHeZBQBrAA/amefHGrEiOnCPcLFZK6FUPtWVKpQVIRgg== +stylelint-config-recommended-scss@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-14.0.0.tgz#d3482c9817dada80b5ec01685b38fc8af8f7263f" + integrity sha512-HDvpoOAQ1RpF+sPbDOT2Q2/YrBDEJDnUymmVmZ7mMCeNiFSdhRdyGEimBkz06wsN+HaFwUh249gDR+I9JR7Onw== + dependencies: + postcss-scss "^4.0.9" + stylelint-config-recommended "^14.0.0" + stylelint-scss "^6.0.0" -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== +stylelint-config-recommended@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-14.0.0.tgz#b395c7014838d2aaca1755eebd914d0bb5274994" + integrity sha512-jSkx290CglS8StmrLp2TxAppIajzIBZKYm3IxT89Kg6fGlxbPiTiyH9PS5YUuVAFwaJLl1ikiXX0QWjI0jmgZQ== + +stylelint-config-sass-guidelines@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-11.1.0.tgz#0106f3ec4991a598823b55841bf45fce63268c8c" + integrity sha512-mVE3UmN8MlshK4Gb3eYk6f8tw9DkQ9yjMF4W9krlmpaNZpSXOdh13AL0sU7l/9l4Pnpt4KMobNNIRI0tJl56Cw== + dependencies: + postcss-scss "^4.0.9" + stylelint-scss "^6.2.1" + +stylelint-config-standard@^36.0.0: + version "36.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-36.0.0.tgz#6704c044d611edc12692d4a5e37b039a441604d4" + integrity sha512-3Kjyq4d62bYFp/Aq8PMKDwlgUyPU4nacXsjDLWJdNPRUgpuxALu1KnlAHIj36cdtxViVhXexZij65yM0uNIHug== + dependencies: + stylelint-config-recommended "^14.0.0" + +stylelint-scss@^6.0.0, stylelint-scss@^6.2.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-6.3.1.tgz#eb56f23f4d3e0896647365ab1681653a00bdbc2b" + integrity sha512-w/czBoWUZxJNk5fBRPODcXSN4qcPv3WHjTSSpFovVY+TE3MZTMR0yRlbmaDYrm8tTWHvpwQAuEBZ0lk2wwkboQ== + dependencies: + known-css-properties "^0.31.0" + postcss-media-query-parser "^0.2.3" + postcss-resolve-nested-selector "^0.1.1" + postcss-selector-parser "^6.1.0" + postcss-value-parser "^4.2.0" + +stylelint@^16.3.1: + version "16.6.1" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-16.6.1.tgz#84735aca2bb5cde535572b7a9b878d2ec983a570" + integrity sha512-yNgz2PqWLkhH2hw6X9AweV9YvoafbAD5ZsFdKN9BvSDVwGvPh+AUIrn7lYwy1S7IHmtFin75LLfX1m0D2tHu8Q== + dependencies: + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" + "@csstools/media-query-list-parser" "^2.1.11" + "@csstools/selector-specificity" "^3.1.1" + "@dual-bundle/import-meta-resolve" "^4.1.0" + balanced-match "^2.0.0" + colord "^2.9.3" + cosmiconfig "^9.0.0" + css-functions-list "^3.2.2" + css-tree "^2.3.1" + debug "^4.3.4" + fast-glob "^3.3.2" + fastest-levenshtein "^1.0.16" + file-entry-cache "^9.0.0" + global-modules "^2.0.0" + globby "^11.1.0" + globjoin "^0.1.4" + html-tags "^3.3.1" + ignore "^5.3.1" + imurmurhash "^0.1.4" + is-plain-object "^5.0.0" + known-css-properties "^0.31.0" + mathml-tag-names "^2.1.3" + meow "^13.2.0" + micromatch "^4.0.7" + normalize-path "^3.0.0" + picocolors "^1.0.1" + postcss "^8.4.38" + postcss-resolve-nested-selector "^0.1.1" + postcss-safe-parser "^7.0.0" + postcss-selector-parser "^6.1.0" + postcss-value-parser "^4.2.0" + resolve-from "^5.0.0" + string-width "^4.2.3" + strip-ansi "^7.1.0" + supports-hyperlinks "^3.0.0" + svg-tags "^1.0.0" + table "^6.8.2" + write-file-atomic "^5.0.1" supports-color@^5.3.0: version "5.5.0" @@ -6117,7 +5787,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.1.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -6131,22 +5801,34 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" +supports-hyperlinks@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz#c711352a5c89070779b4dad54c05a2f14b15c94b" + integrity sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -table@^3.7.8: - version "3.8.3" - resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" - integrity sha512-RZuzIOtzFbprLCE0AXhkI0Xi42ZJLZhCC+qkwuMLf/Vjz3maWpA8gz1qMdbmNoI9cOROT2Am/DxeRyXenrL11g== +svg-tags@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" + integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== + +table@^6.8.2: + version "6.8.2" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58" + integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA== dependencies: - ajv "^4.7.0" - ajv-keywords "^1.0.0" - chalk "^1.1.1" - lodash "^4.0.0" - slice-ansi "0.0.4" - string-width "^2.0.0" + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: version "2.2.1" @@ -6191,11 +5873,6 @@ text-table@^0.2.0, text-table@~0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - tiny-relative-date@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" @@ -6240,23 +5917,11 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== - dependencies: - prelude-ls "~1.1.2" - type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -type@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" - integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== - typed-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" @@ -6301,11 +5966,6 @@ typed-array-length@^1.0.6: is-typed-array "^1.1.13" possible-typed-array-names "^1.0.0" -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" @@ -6363,11 +6023,6 @@ unique-slug@^3.0.0: dependencies: imurmurhash "^0.1.4" -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - update-browserslist-db@^1.0.13: version "1.0.13" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" @@ -6376,7 +6031,7 @@ update-browserslist-db@^1.0.13: escalade "^3.1.1" picocolors "^1.0.0" -uri-js@^4.2.2: +uri-js@^4.2.2, uri-js@^4.4.1: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== @@ -6391,25 +6046,11 @@ url@^0.11.0: punycode "^1.4.1" qs "^6.11.2" -user-home@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" - integrity sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ== - dependencies: - os-homedir "^1.0.0" - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@^0.10.3: - version "0.10.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" - integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== - dependencies: - inherits "2.0.3" - validate-npm-package-license@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -6582,6 +6223,13 @@ which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: gopd "^1.0.1" has-tostringtag "^1.0.2" +which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -6601,11 +6249,6 @@ wildcard@^2.0.0: resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== -word-wrap@~1.2.3: - version "1.2.5" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== - wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -6628,23 +6271,19 @@ write-file-atomic@^4.0.0, write-file-atomic@^4.0.1: imurmurhash "^0.1.4" signal-exit "^3.0.7" -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - integrity sha512-CJ17OoULEKXpA5pef3qLj5AxTJ6mSt7g84he2WIskKwqFO4T97d5V7Tadl0DYDk7qyUOQD5WlUlOMChaYrhxeA== +write-file-atomic@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" + integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== dependencies: - mkdirp "^0.5.1" + imurmurhash "^0.1.4" + signal-exit "^4.0.1" ws@^7.3.1: version "7.5.9" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -xtend@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - y18n@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"