diff --git a/.circleci/config.yml b/.circleci/config.yml index 666a9564a..8a756b3de 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -64,6 +64,12 @@ jobs: - run: name: Test - Mustache Spans command: npm run test:mustache-syntax + - run: + name: Test - Definition Lists + command: npm run test:definition-lists + - run: + name: Test - Variables + command: npm run test:variables - run: name: Test - Routes command: npm run test:route diff --git a/.github/actions/limit-pull-requests/action.yml b/.github/actions/limit-pull-requests/action.yml new file mode 100644 index 000000000..413fa0624 --- /dev/null +++ b/.github/actions/limit-pull-requests/action.yml @@ -0,0 +1,103 @@ +name: Limit pull requests +description: > + Limit the number of open pull requests to the repository created by a user +author: ZhongRuoyu (from Homebrew repository) +branding: + icon: alert-triangle + color: yellow + +inputs: + token: + description: GitHub token + required: false + default: ${{ github.token }} + except-users: + description: The users exempted from the limit, one per line + required: false + # https://docs.github.com/en/graphql/reference/enums#commentauthorassociation + except-author-associations: + description: The author associations exempted from the limit, one per line + required: false + comment-limit: + description: > + Post the comment when the user's number of open pull requests exceeds this + number and `comment` is not empty + required: true + default: "10" + comment: + description: The comment to post when the limit is reached + required: false + close-limit: + description: > + Close the pull request when the user's number of open pull requests + exceeds this number and `close` is set to `true` + required: true + default: "50" + close: + description: Whether to close the pull request when the limit is reached + required: true + default: "false" + +runs: + using: composite + steps: + - name: Check the number of pull requests + id: count-pull-requests + run: | + # If the user is exempted, assume they have no pull requests. + if grep -Fiqx '${{ github.actor }}' <<<"$EXCEPT_USERS"; then + echo "::notice::@${{ github.actor }} is exempted from the limit." + echo "count=0" >>"$GITHUB_OUTPUT" + exit 0 + fi + if grep -Fiqx '${{ github.event.pull_request.author_association }}' <<<"$EXCEPT_AUTHOR_ASSOCIATIONS"; then + echo "::notice::@{{ github.actor }} is a ${{ github.event.pull_request.author_association }} exempted from the limit." + echo "count=0" >>"$GITHUB_OUTPUT" + exit 0 + fi + + count="$( + gh api \ + --method GET \ + --header 'Accept: application/vnd.github+json' \ + --header 'X-GitHub-Api-Version: 2022-11-28' \ + --field state=open \ + --paginate \ + '/repos/{owner}/{repo}/pulls' | + jq \ + --raw-output \ + --arg USER '${{ github.actor }}' \ + 'map(select(.user.login == $USER)) | length' + )" + echo "::notice::@${{ github.actor }} has $count open pull request(s)." + echo "count=$count" >>"$GITHUB_OUTPUT" + env: + GH_REPO: ${{ github.repository }} + GH_TOKEN: ${{ inputs.token }} + EXCEPT_USERS: ${{ inputs.except-users }} + EXCEPT_AUTHOR_ASSOCIATIONS: ${{ inputs.except-author-associations }} + shell: bash + + - name: Comment on pull request + if: > + fromJSON(steps.count-pull-requests.outputs.count) > fromJSON(inputs.comment-limit) && + inputs.comment != '' + run: | + gh pr comment '${{ github.event.pull_request.number }}' \ + --body="${COMMENT_BODY}" + env: + GH_REPO: ${{ github.repository }} + GH_TOKEN: ${{ inputs.token }} + COMMENT_BODY: ${{ inputs.comment }} + shell: bash + + - name: Close pull request + if: > + fromJSON(steps.count-pull-requests.outputs.count) > fromJSON(inputs.close-limit) && + inputs.close == 'true' + run: | + gh pr close '${{ github.event.pull_request.number }}' + env: + GH_REPO: ${{ github.repository }} + GH_TOKEN: ${{ inputs.token }} + shell: bash diff --git a/.github/workflows/pr-check.yml b/.github/workflows/pr-check.yml new file mode 100644 index 000000000..e5adb2561 --- /dev/null +++ b/.github/workflows/pr-check.yml @@ -0,0 +1,29 @@ +name: PR Check +on: pull_request_target +env: + GH_REPO: ${{ github.repository }} + GH_NO_UPDATE_NOTIFIER: 1 + GH_PROMPT_DISABLED: 1 +permissions: + contents: read + issues: write + pull-requests: write + statuses: write +jobs: + limit-pull-requests: + if: always() && github.repository_owner == 'naturalcrit' + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name : Run limit-pull-requests action + uses: ./.github/actions/limit-pull-requests + with: + except-users: | + dependabot + comment-limit: 3 + comment: | + Hi, thanks for your contribution to the Homebrewery! You already have >=3 open pull requests. Consider completing some of your existing PRs before opening new ones. Thanks! + close-limit: 5 + close: false diff --git a/changelog.md b/changelog.md index e86c2ea0f..18c3205f7 100644 --- a/changelog.md +++ b/changelog.md @@ -84,7 +84,70 @@ pre { ## changelog For a full record of development, visit our [Github Page](https://github.com/naturalcrit/homebrewery). -### Wednesday 21/2/2024 - v3.11.0 +### Monday 18/3/2024 - v3.12.0 +{{taskList + +##### 5e-Cleric + +* [x] Fix language-specific hyphenation on print page + +Fixes issue [#3294](https://github.com/naturalcrit/homebrewery/issues/3294) + +* [x] Upgrade Font-Awesome to v6.51 + +* [x] Allow downloaded files to be uploaded via {{openSans **NEW {{fa,fa-plus-square}} → FROM UPLOAD {{fa,fa-upload}}**}} + +##### G-Ambatte + +* [x] Fix an edge case crash with empty documents + +Fixes issue [#3315](https://github.com/naturalcrit/homebrewery/issues/3315) + +* [x] Brews on the user page can be searched by tag; clicking a tag adds it to the filter + +Fixes issue [#3164](https://github.com/naturalcrit/homebrewery/issues/3164) + +* [x] Add *DiceFont* icons {{df,d20-20}} `{{df,icon-name}}` + +##### abquintic + +* [x] Fix ^super^ and ^^sub^^ highlighting in the text editor + +* [x] Add new syntax for multiline Definition Lists: + + +``` +Term +::Definition 1 +::Definition 2 +with more text +``` + +produces: + +Term +::Definition 1 +::Definition 2 +with more text + +Fixes issue [#2340](https://github.com/naturalcrit/homebrewery/issues/2340) + +##### RKuerten : +* [x] Fix monster stat block backgrounds on print page + +Fixes issue [#3275](https://github.com/naturalcrit/homebrewery/issues/3275) + +* [x] Added new text editor theme: "Darkvision". + +##### calculuschild, G-Ambatte, 5e-Cleric + +* [x] Codebase and UI cleanup +}} + +\page + + +### Friday 21/2/2024 - v3.11.0 {{taskList ##### Gazook89 @@ -166,14 +229,16 @@ Fixes issue [1488](https://github.com/naturalcrit/homebrewery/issues/1488) Fixes issues [2510](https://github.com/naturalcrit/homebrewery/issues/2510), [2975](https://github.com/naturalcrit/homebrewery/issues/2975) -* [x] New Variables syntax. See below for details. +* [x] Brew Variables }} +\ + {{wide ### Brew Variable Syntax -You may already be familiar with `[link](url)` and `![image](url)` syntax. We have expanded this to include a third `$[variable](text)` syntax. All three of these syntaxes now share a common set of features: +You may already be familiar with `[link](url)` and `![image](url)` synax. We have expanded this to include a third `$[variable](text)` syntax. All three of these syntaxes now share a common set of features: {{varSyntaxTable | syntax | description | @@ -1512,7 +1577,7 @@ myStyle {color: black} ### Sunday, 29/05/2016 - v2.1.0 - Finally added a syntax for doing spell lists. A bit in-depth about why this took so long. Essentially I'm running out of syntax to use in stardard Markdown. There are too many unique elements in the PHB-style to be mapped. I solved this earlier by stacking certain elements together (eg. an `
` before a `blockquote` turns it into moster state block), but those are getting unweildly. I would like to simply wrap these in `div`s with classes, but unfortunately Markdown stops processing when within HTML blocks. To get around this I wrote my own override to the Markdown parser and lexer to process Markdown within a simple div class wrapper. This should open the door for more unique syntaxes in the future. Big step! - Override Ctrl+P (and cmd+P) to launch to the print page. Many people try to just print either the editing or share page to get a PDF. While this dones;t make much sense, I do get a ton of issues about it. So now if you try to do this, it'll just bring you imediately to the print page. Everybody wins! -- The onboarding flow has also been confusing a few users (Homepage -> new -> save -> edit page). If you edit the Homepage text now, a Call to Action to save your work will pop-up. +- The onboarding flow has also been confusing a few users (Homepage → new → save → edit page). If you edit the Homepage text now, a Call to Action to save your work will pop-up. - Added a 'Recently Edited' and 'Recently Viewed' nav item to the edit and share page respectively. Each will remember the last 8 items you edited or viewed and when you viewed it. Makes use of the new title attribute of brews to easy navigatation. - Paragraphs now indent properly after lists (thanks u/slitjen!) diff --git a/client/homebrew/brewRenderer/brewRenderer.less b/client/homebrew/brewRenderer/brewRenderer.less index 17aa146fb..0406cad29 100644 --- a/client/homebrew/brewRenderer/brewRenderer.less +++ b/client/homebrew/brewRenderer/brewRenderer.less @@ -14,6 +14,28 @@ box-shadow : 1px 4px 14px #000000; } } + + &::-webkit-scrollbar { + width: 20px; + &:horizontal{ + height: 20px; + width:auto; + } + &-thumb { + background: linear-gradient(90deg, #d3c1af 15px, #00000000 15px); + &:horizontal{ + background: linear-gradient(0deg, #d3c1af 15px, #00000000 15px); + } + } + &-corner { + visibility: hidden; + } + } + + + + + } .pane { position : relative; } .pageInfo { diff --git a/client/homebrew/editor/editor.jsx b/client/homebrew/editor/editor.jsx index 4f3ef44f5..f5c1766a8 100644 --- a/client/homebrew/editor/editor.jsx +++ b/client/homebrew/editor/editor.jsx @@ -5,6 +5,7 @@ const createClass = require('create-react-class'); const _ = require('lodash'); const cx = require('classnames'); const dedent = require('dedent-tabs').default; +const Markdown = require('../../../shared/naturalcrit/markdown.js'); const CodeEditor = require('naturalcrit/codeEditor/codeEditor.jsx'); const SnippetBar = require('./snippetbar/snippetbar.jsx'); @@ -81,7 +82,7 @@ const Editor = createClass({ updateEditorSize : function() { if(this.refs.codeEditor) { let paneHeight = this.refs.main.parentNode.clientHeight; - paneHeight -= SNIPPETBAR_HEIGHT + 1; + paneHeight -= SNIPPETBAR_HEIGHT; this.refs.codeEditor.codeMirror.setSize(null, paneHeight); } }, @@ -151,12 +152,19 @@ const Editor = createClass({ // definition lists if(line.includes('::')){ - const regex = /^([^\n]*?)::([^\n]*)(?:\n|$)/ym; + if(/^:*$/.test(line) == true){ return }; + const regex = /^([^\n]*?:?\s?)(::[^\n]*)(?:\n|$)/ymd; // the `d` flag, for match indices, throws an ESLint error. let match; while ((match = regex.exec(line)) != null){ - codeMirror.markText({ line: lineNumber, ch: line.indexOf(match[0]) }, { line: lineNumber, ch: line.indexOf(match[0]) + match[0].length }, { className: 'define' }); - codeMirror.markText({ line: lineNumber, ch: line.indexOf(match[1]) }, { line: lineNumber, ch: line.indexOf(match[1]) + match[1].length }, { className: 'term' }); - codeMirror.markText({ line: lineNumber, ch: line.indexOf(match[2]) }, { line: lineNumber, ch: line.indexOf(match[2]) + match[2].length }, { className: 'definition' }); + codeMirror.markText({ line: lineNumber, ch: match.indices[0][0] }, { line: lineNumber, ch: match.indices[0][1] }, { className: 'dl-highlight' }); + codeMirror.markText({ line: lineNumber, ch: match.indices[1][0] }, { line: lineNumber, ch: match.indices[1][1] }, { className: 'dt-highlight' }); + codeMirror.markText({ line: lineNumber, ch: match.indices[2][0] }, { line: lineNumber, ch: match.indices[2][1] }, { className: 'dd-highlight' }); + const ddIndex = match.indices[2][0]; + let colons = /::/g; + let colonMatches = colons.exec(match[2]); + if(colonMatches !== null){ + codeMirror.markText({ line: lineNumber, ch: colonMatches.index + ddIndex }, { line: lineNumber, ch: colonMatches.index + colonMatches[0].length + ddIndex }, { className: 'dl-colon-highlight'} ) + } } } @@ -212,6 +220,34 @@ const Editor = createClass({ endCh = match.index+match[0].length; codeMirror.markText({ line: lineNumber, ch: 0 }, { line: lineNumber, ch: endCh }, { className: 'block' }); } + + // Emojis + if(line.match(/:[^\s:]+:/g)) { + let startIndex = line.indexOf(':'); + const emojiRegex = /:[^\s:]+:/gy; + + while (startIndex >= 0) { + emojiRegex.lastIndex = startIndex; + let match = emojiRegex.exec(line); + if (match) { + let tokens = Markdown.marked.lexer(match[0]); + tokens = tokens[0].tokens.filter(t => t.type == 'emoji') + if (!tokens.length) + return; + + let startPos = { line: lineNumber, ch: match.index }; + let endPos = { line: lineNumber, ch: match.index + match[0].length }; + + // Iterate over conflicting marks and clear them + var marks = codeMirror.findMarks(startPos, endPos); + marks.forEach(function(marker) { + marker.clear(); + }); + codeMirror.markText(startPos, endPos, { className: 'emoji' }); + } + startIndex = line.indexOf(':', Math.max(startIndex + 1, emojiRegex.lastIndex)); + } + } } }); }); diff --git a/client/homebrew/editor/editor.less b/client/homebrew/editor/editor.less index b165f91db..f8dc249d6 100644 --- a/client/homebrew/editor/editor.less +++ b/client/homebrew/editor/editor.less @@ -43,6 +43,16 @@ font-weight : bold; color : green; } + .emoji:not(.cm-comment) { + margin-left : 2px; + color : #360034; + background : #ffc8ff; + border-radius : 6px; + font-weight : bold; + padding-bottom : 1px; + outline-offset : -2px; + outline : solid 2px #ff96fc; + } .superscript:not(.cm-comment) { font-weight : bold; color : goldenrod; @@ -55,6 +65,16 @@ vertical-align : sub; font-size : 0.9em; } + .dl-highlight { + &.dl-colon-highlight { + font-weight : bold; + color : #949494; + background : #E5E5E5; + border-radius : 3px; + } + &.dt-highlight { color : rgb(96, 117, 143); } + &.dd-highlight { color : rgb(97, 57, 178); } + } } .brewJump { diff --git a/client/homebrew/editor/snippetbar/snippetbar.less b/client/homebrew/editor/snippetbar/snippetbar.less index be6ebe11a..e0a24fac9 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.less +++ b/client/homebrew/editor/snippetbar/snippetbar.less @@ -130,6 +130,8 @@ height : 1.2em; margin-right : 8px; font-size : 1.2em; + min-width: 25px; + text-align: center; & ~ i { margin-right : 0; margin-left : 5px; @@ -138,7 +140,7 @@ &.font { height : auto; &::before { - font-size : 1.4em; + font-size : 1em; content : 'ABC'; } diff --git a/client/homebrew/homebrew.jsx b/client/homebrew/homebrew.jsx index a08a39ea0..8c82f33e7 100644 --- a/client/homebrew/homebrew.jsx +++ b/client/homebrew/homebrew.jsx @@ -76,7 +76,7 @@ const Homebrew = createClass({ } /> } /> } /> - } /> + } /> } /> } /> } /> diff --git a/client/homebrew/homebrew.less b/client/homebrew/homebrew.less index f4834a25c..828de796f 100644 --- a/client/homebrew/homebrew.less +++ b/client/homebrew/homebrew.less @@ -15,6 +15,23 @@ } &.listPage .content { overflow-y : scroll; + + &::-webkit-scrollbar { + width: 20px; + &:horizontal{ + height: 20px; + width:auto; + } + &-thumb { + background: linear-gradient(90deg, #d3c1af 15px, #00000000 15px); + &:horizontal{ + background: linear-gradient(0deg, #d3c1af 15px, #00000000 15px); + } + } + &-corner { + visibility: hidden; + } + } } } } \ No newline at end of file diff --git a/client/homebrew/pages/accountPage/accountPage.jsx b/client/homebrew/pages/accountPage/accountPage.jsx index d08832427..598683504 100644 --- a/client/homebrew/pages/accountPage/accountPage.jsx +++ b/client/homebrew/pages/accountPage/accountPage.jsx @@ -1,102 +1,82 @@ -const React = require('react'); -const createClass = require('create-react-class'); -const _ = require('lodash'); -const cx = require('classnames'); +const React = require('react'); const moment = require('moment'); - const UIPage = require('../basePages/uiPage/uiPage.jsx'); - -const Nav = require('naturalcrit/nav/nav.jsx'); -const Navbar = require('../../navbar/navbar.jsx'); - -const RecentNavItem = require('../../navbar/recent.navitem.jsx').both; -const Account = require('../../navbar/account.navitem.jsx'); -const NewBrew = require('../../navbar/newbrew.navitem.jsx'); -const HelpNavItem = require('../../navbar/help.navitem.jsx'); - const NaturalCritIcon = require('naturalcrit/svg/naturalcrit.svg.jsx'); let SAVEKEY = ''; -const AccountPage = createClass({ - displayName : 'AccountPage', - getDefaultProps : function() { - return { - brew : {}, - uiItems : {} - }; - }, - getInitialState : function() { - return { - uiItems : this.props.uiItems - }; - }, - componentDidMount : function(){ - if(!this.state.saveLocation && this.props.uiItems.username) { - SAVEKEY = `HOMEBREWERY-DEFAULT-SAVE-LOCATION-${this.props.uiItems.username}`; - let saveLocation = window.localStorage.getItem(SAVEKEY); - saveLocation = saveLocation ?? (this.state.uiItems.googleId ? 'GOOGLE-DRIVE' : 'HOMEBREWERY'); - this.makeActive(saveLocation); +const AccountPage = (props)=>{ + // destructure props and set state for save location + const { accountDetails, brew } = props; + const [saveLocation, setSaveLocation] = React.useState(''); + + // initialize save location from local storage based on user id + React.useEffect(()=>{ + if(!saveLocation && accountDetails.username) { + SAVEKEY = `HOMEBREWERY-DEFAULT-SAVE-LOCATION-${accountDetails.username}`; + // if no SAVEKEY in local storage, default save location to Google Drive if user has Google account. + let saveLocation = window.localStorage.getItem(SAVEKEY); + saveLocation = saveLocation ?? (accountDetails.googleId ? 'GOOGLE-DRIVE' : 'HOMEBREWERY'); + setActiveSaveLocation(saveLocation); } - }, + }, []); - makeActive : function(newSelection){ - if(this.state.saveLocation == newSelection) return; + const setActiveSaveLocation = (newSelection)=>{ + if(saveLocation === newSelection) return; window.localStorage.setItem(SAVEKEY, newSelection); - this.setState({ - saveLocation : newSelection - }); - }, + setSaveLocation(newSelection); + }; - renderButton : function(name, key, shouldRender=true){ - if(!shouldRender) return; - return ; - }, + // todo: should this be a set of radio buttons (well styled) since it's either/or choice? + const renderSaveLocationButton = (name, key, shouldRender = true)=>{ + if(!shouldRender) return null; + return ( + + ); + }; - renderNavItems : function() { - return - - - - - - - ; - }, + // render the entirety of the account page content + const renderAccountPage = ()=>{ + return ( + <> +
+

Account Information

+

Username: {accountDetails.username || 'No user currently logged in'}

+

Last Login: {moment(accountDetails.issued).format('dddd, MMMM Do YYYY, h:mm:ss a ZZ') || '-'}

+
+
+

Homebrewery Information

+

Brews on Homebrewery: {accountDetails.mongoCount}

+
+
+

Google Information

+

Linked to Google: {accountDetails.googleId ? 'YES' : 'NO'}

+ {accountDetails.googleId && ( +

+ Brews on Google Drive: {accountDetails.googleCount ?? ( + <> + Unable to retrieve files - follow these steps to renew your Google credentials. + + )} +

+ )} +
+
+

Default Save Location

+ {renderSaveLocationButton('Homebrewery', 'HOMEBREWERY')} + {renderSaveLocationButton('Google Drive', 'GOOGLE-DRIVE', accountDetails.googleId)} +
+ + ); + }; - renderUiItems : function() { - return <> -
-

Account Information

-

Username: {this.props.uiItems.username || 'No user currently logged in'}

-

Last Login: {moment(this.props.uiItems.issued).format('dddd, MMMM Do YYYY, h:mm:ss a ZZ') || '-'}

-
-
-

Homebrewery Information

-

Brews on Homebrewery: {this.props.uiItems.mongoCount}

-
-
-

Google Information

-

Linked to Google: {this.props.uiItems.googleId ? 'YES' : 'NO'}

- {this.props.uiItems.googleId && -

- Brews on Google Drive: {this.props.uiItems.googleCount ?? <>Unable to retrieve files - follow these steps to renew your Google credentials.} -

- } -
-
-

Default Save Location

- {this.renderButton('Homebrewery', 'HOMEBREWERY')} - {this.renderButton('Google Drive', 'GOOGLE-DRIVE', this.state.uiItems.googleId)} -
- ; - }, - - render : function(){ - return - {this.renderUiItems()} - ; - } -}); + // return the account page inside the base layout wrapper (with navbar etc). + return ( + + {renderAccountPage()} + ); +}; module.exports = AccountPage; diff --git a/client/homebrew/pages/errorPage/errorPage.jsx b/client/homebrew/pages/errorPage/errorPage.jsx index 33da05017..387a99b02 100644 --- a/client/homebrew/pages/errorPage/errorPage.jsx +++ b/client/homebrew/pages/errorPage/errorPage.jsx @@ -1,41 +1,25 @@ require('./errorPage.less'); -const React = require('react'); -const createClass = require('create-react-class'); -const _ = require('lodash'); -const cx = require('classnames'); - -const UIPage = require('../basePages/uiPage/uiPage.jsx'); - -const Markdown = require('../../../../shared/naturalcrit/markdown.js'); - +const React = require('react'); +const UIPage = require('../basePages/uiPage/uiPage.jsx'); +const Markdown = require('../../../../shared/naturalcrit/markdown.js'); const ErrorIndex = require('./errors/errorIndex.js'); -const ErrorPage = createClass({ - displayName : 'ErrorPage', +const ErrorPage = ({ brew })=>{ + // Retrieving the error text based on the brew's error code from ErrorIndex + const errorText = ErrorIndex({ brew })[brew.HBErrorCode.toString()] || ''; - getDefaultProps : function() { - return { - ver : '0.0.0', - errorId : '', - text : '# Oops \n We could not find a brew with that id. **Sorry!**', - error : {} - }; - }, - - render : function(){ - const errorText = ErrorIndex(this.props)[this.props.brew.HBErrorCode.toString()] || ''; - - return + return ( +
-

{`Error ${this.props.brew.status || '000'}`}

-

{this.props.brew.text || 'No error text'}

+

{`Error ${brew?.status || '000'}`}

+

{brew?.text || 'No error text'}


- ; - } -}); + + ); +}; module.exports = ErrorPage; diff --git a/client/homebrew/pages/errorPage/errors/errorIndex.js b/client/homebrew/pages/errorPage/errors/errorIndex.js index c2de04142..f9d52c109 100644 --- a/client/homebrew/pages/errorPage/errors/errorIndex.js +++ b/client/homebrew/pages/errorPage/errors/errorIndex.js @@ -73,9 +73,11 @@ const errorIndex = (props)=>{ **Properties** tab, and adding your username to the "invited authors" list. You can then try to access this document again. + : + **Brew Title:** ${props.brew.brewTitle || 'Unable to show title'} - **Current Authors:** ${props.brew.authors?.map((author)=>{return `${author}`;}).join(', ') || 'Unable to list authors'} + **Current Authors:** ${props.brew.authors?.map((author)=>{return `[${author}](/user/${author})`;}).join(', ') || 'Unable to list authors'} [Click here to be redirected to the brew's share page.](/share/${props.brew.shareId})`, @@ -86,9 +88,14 @@ const errorIndex = (props)=>{ You must be logged in to one of the accounts listed as an author of this brew. User is not logged in. Please log in [here](${loginUrl}). + : + **Brew Title:** ${props.brew.brewTitle || 'Unable to show title'} - **Current Authors:** ${props.brew.authors?.map((author)=>{return `${author}`;}).join(', ') || 'Unable to list authors'}`, + **Current Authors:** ${props.brew.authors?.map((author)=>{return `[${author}](/user/${author})`;}).join(', ') || 'Unable to list authors'} + + [Click here to be redirected to the brew's share page.](/share/${props.brew.shareId})`, + // Brew load error '05' : dedent` @@ -97,6 +104,8 @@ const errorIndex = (props)=>{ The server could not locate the Homebrewery document. It was likely deleted by its owner. + : + **Requested access:** ${props.brew.accessType} **Brew ID:** ${props.brew.brewId}`, @@ -113,6 +122,8 @@ const errorIndex = (props)=>{ An error occurred while attempting to remove the Homebrewery document. + : + **Brew ID:** ${props.brew.brewId}`, // Author delete error @@ -121,7 +132,21 @@ const errorIndex = (props)=>{ An error occurred while attempting to remove the user from the Homebrewery document author list! + : + **Brew ID:** ${props.brew.brewId}`, + + // Brew locked by Administrators error + '100' : dedent` + ## This brew has been locked. + + Please contact the Administrators to unlock this document. + + : + + **Brew ID:** ${props.brew.brewId} + + **Brew Title:** ${props.brew.brewTitle}`, }; }; diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index 981ad0126..deb476c2e 100644 --- a/client/homebrew/pages/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -47,6 +47,19 @@ const SharePage = createClass({ this.props.brew.shareId; }, + renderEditLink : function(){ + if(!this.props.brew.editId) return; + + let editLink = this.props.brew.editId; + if(this.props.brew.googleId && !this.props.brew.stubbed) { + editLink = this.props.brew.googleId + editLink; + } + + return + edit + ; + }, + render : function(){ return
@@ -64,13 +77,14 @@ const SharePage = createClass({ source - + view - + {this.renderEditLink()} + download - + clone to new diff --git a/package-lock.json b/package-lock.json index 29ea015b6..79f4e34f7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,28 +1,28 @@ { "name": "homebrewery", - "version": "3.11.0", + "version": "3.12.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "homebrewery", - "version": "3.11.0", + "version": "3.12.0", "hasInstallScript": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.24.0", - "@babel/plugin-transform-runtime": "^7.24.0", - "@babel/preset-env": "^7.24.0", - "@babel/preset-react": "^7.23.3", - "@googleapis/drive": "^8.7.0", + "@babel/core": "^7.24.5", + "@babel/plugin-transform-runtime": "^7.24.3", + "@babel/preset-env": "^7.24.5", + "@babel/preset-react": "^7.24.1", + "@googleapis/drive": "^8.8.0", "body-parser": "^1.20.2", - "classnames": "^2.3.2", + "classnames": "^2.5.1", "codemirror": "^5.65.6", "cookie-parser": "^1.4.6", "create-react-class": "^15.7.0", "dedent-tabs": "^0.10.3", "expr-eval": "^2.0.2", - "express": "^4.18.3", + "express": "^4.19.2", "express-async-handler": "^1.2.0", "express-static-gzip": "2.1.7", "fs-extra": "11.2.0", @@ -31,26 +31,27 @@ "less": "^3.13.1", "lodash": "^4.17.21", "marked": "11.2.0", + "marked-emoji": "^1.4.0", "marked-extended-tables": "^1.0.8", "marked-gfm-heading-id": "^3.1.3", "marked-smartypants-lite": "^1.0.2", "markedLegacy": "npm:marked@^0.3.19", "moment": "^2.30.1", - "mongoose": "^8.2.1", + "mongoose": "^8.3.3", "nanoid": "3.3.4", "nconf": "^0.12.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", "react-frame-component": "^4.1.3", - "react-router-dom": "6.22.3", + "react-router-dom": "6.23.0", "sanitize-filename": "1.6.3", - "superagent": "^8.1.2", + "superagent": "^9.0.2", "vitreum": "git+https://git@github.com/calculuschild/vitreum.git" }, "devDependencies": { "eslint": "^8.57.0", - "eslint-plugin-jest": "^27.9.0", - "eslint-plugin-react": "^7.34.0", + "eslint-plugin-jest": "^28.5.0", + "eslint-plugin-react": "^7.34.1", "jest": "^29.7.0", "jest-expect-message": "^1.1.3", "postcss-less": "^6.0.0", @@ -58,7 +59,7 @@ "stylelint-config-recess-order": "^4.6.0", "stylelint-config-recommended": "^13.0.0", "stylelint-stylistic": "^0.4.3", - "supertest": "^6.3.4" + "supertest": "^7.0.0" }, "engines": { "node": "^20.8.x", @@ -87,40 +88,40 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", - "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", + "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.5", "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.0", - "@babel/parser": "^7.24.0", + "@babel/helper-module-transforms": "^7.24.5", + "@babel/helpers": "^7.24.5", + "@babel/parser": "^7.24.5", "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", - "@babel/types": "^7.24.0", + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -141,13 +142,13 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", + "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.5", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -155,13 +156,13 @@ } }, "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -205,18 +206,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", - "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.5.tgz", + "integrity": "sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.24.5", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-replace-supers": "^7.24.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-split-export-declaration": "^7.24.5", "semver": "^6.3.1" }, "engines": { @@ -243,9 +244,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz", + "integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -289,37 +290,37 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.5.tgz", + "integrity": "sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==", "dependencies": { - "@babel/types": "^7.23.0" + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", + "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.24.3", + "@babel/helper-simple-access": "^7.24.5", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/helper-validator-identifier": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -340,9 +341,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", - "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", + "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==", "engines": { "node": ">=6.9.0" } @@ -364,12 +365,12 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", + "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { @@ -380,11 +381,11 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", + "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -402,28 +403,28 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", + "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", + "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", "engines": { "node": ">=6.9.0" } @@ -450,35 +451,36 @@ } }, "node_modules/@babel/helpers": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.0.tgz", - "integrity": "sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", + "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", "dependencies": { "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz", - "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", + "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -486,12 +488,27 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", - "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.5.tgz", + "integrity": "sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", + "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -501,13 +518,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", - "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", + "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.23.3" + "@babel/plugin-transform-optional-chaining": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -517,12 +534,12 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", - "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", + "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -613,11 +630,11 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", - "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", + "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -627,11 +644,11 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", - "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", + "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -663,11 +680,11 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", + "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -801,11 +818,11 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", - "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", + "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -815,12 +832,12 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", - "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz", + "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-remap-async-to-generator": "^7.22.20", "@babel/plugin-syntax-async-generators": "^7.8.4" }, @@ -832,12 +849,12 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", - "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz", + "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==", "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-module-imports": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-remap-async-to-generator": "^7.22.20" }, "engines": { @@ -848,11 +865,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", - "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", + "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -862,11 +879,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", - "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.5.tgz", + "integrity": "sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -876,12 +893,12 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", - "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", + "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -891,12 +908,12 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", - "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", + "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.4", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -907,17 +924,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", - "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.5.tgz", + "integrity": "sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-plugin-utils": "^7.24.5", + "@babel/helper-replace-supers": "^7.24.1", + "@babel/helper-split-export-declaration": "^7.24.5", "globals": "^11.1.0" }, "engines": { @@ -928,12 +945,12 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", - "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", + "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.15" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/template": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -943,11 +960,11 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", - "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.5.tgz", + "integrity": "sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -957,12 +974,12 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", - "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", + "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -972,11 +989,11 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", - "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", + "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -986,11 +1003,11 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", - "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", + "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -1001,12 +1018,12 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", - "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", + "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1016,11 +1033,11 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", - "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", + "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1031,11 +1048,11 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", - "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", + "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { @@ -1046,13 +1063,13 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", - "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", + "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1062,11 +1079,11 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", - "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", + "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -1077,11 +1094,11 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", - "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", + "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1091,11 +1108,11 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", - "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", + "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -1106,11 +1123,11 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", - "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", + "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1120,12 +1137,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", - "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", + "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", "dependencies": { "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1135,12 +1152,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", - "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", + "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", "dependencies": { "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-simple-access": "^7.22.5" }, "engines": { @@ -1151,13 +1168,13 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz", - "integrity": "sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", + "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { @@ -1168,12 +1185,12 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", - "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", + "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", "dependencies": { "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1198,11 +1215,11 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", - "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", + "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1212,11 +1229,11 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", - "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", + "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -1227,11 +1244,11 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", - "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", + "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -1242,15 +1259,14 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.0.tgz", - "integrity": "sha512-y/yKMm7buHpFFXfxVFS4Vk1ToRJDilIa6fKRioB9Vjichv58TDGXTvqV0dN7plobAmTW5eSEGXDngE+Mm+uO+w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.5.tgz", + "integrity": "sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==", "dependencies": { - "@babel/compat-data": "^7.23.5", "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.23.3" + "@babel/plugin-transform-parameters": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -1260,12 +1276,12 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", - "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", + "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1275,11 +1291,11 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", - "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", + "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -1290,11 +1306,11 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", - "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.5.tgz", + "integrity": "sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, @@ -1306,11 +1322,11 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", - "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.5.tgz", + "integrity": "sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -1320,12 +1336,12 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", - "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", + "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1335,13 +1351,13 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", - "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.5.tgz", + "integrity": "sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.5", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1352,11 +1368,11 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", - "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", + "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1366,11 +1382,11 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz", - "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz", + "integrity": "sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1380,15 +1396,15 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz", - "integrity": "sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", + "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/types": "^7.22.15" + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/types": "^7.23.4" }, "engines": { "node": ">=6.9.0" @@ -1412,12 +1428,12 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz", - "integrity": "sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.1.tgz", + "integrity": "sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1427,11 +1443,11 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", - "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", + "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1442,11 +1458,11 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", - "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", + "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1456,15 +1472,15 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.0.tgz", - "integrity": "sha512-zc0GA5IitLKJrSfXlXmp8KDqLrnGECK7YRfQBmEKg1NmBOQ7e+KuclBEKJgzifQeUYLdNiAw4B4bjyvzWVLiSA==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.3.tgz", + "integrity": "sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==", "dependencies": { - "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-module-imports": "^7.24.3", "@babel/helper-plugin-utils": "^7.24.0", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", "semver": "^6.3.1" }, "engines": { @@ -1475,11 +1491,11 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", - "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", + "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1489,11 +1505,11 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", - "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", + "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { @@ -1504,11 +1520,11 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", - "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", + "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1518,11 +1534,11 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", - "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", + "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1532,11 +1548,11 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", - "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.5.tgz", + "integrity": "sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -1546,11 +1562,11 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", - "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", + "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1560,12 +1576,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", - "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", + "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1575,12 +1591,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", - "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", + "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1590,12 +1606,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", - "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", + "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1605,25 +1621,26 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.0.tgz", - "integrity": "sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.5.tgz", + "integrity": "sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ==", "dependencies": { - "@babel/compat-data": "^7.23.5", + "@babel/compat-data": "^7.24.4", "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.23.3", - "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-assertions": "^7.24.1", + "@babel/plugin-syntax-import-attributes": "^7.24.1", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -1635,58 +1652,58 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.9", - "@babel/plugin-transform-async-to-generator": "^7.23.3", - "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.4", - "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.4", - "@babel/plugin-transform-classes": "^7.23.8", - "@babel/plugin-transform-computed-properties": "^7.23.3", - "@babel/plugin-transform-destructuring": "^7.23.3", - "@babel/plugin-transform-dotall-regex": "^7.23.3", - "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.4", - "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.4", - "@babel/plugin-transform-for-of": "^7.23.6", - "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.4", - "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", - "@babel/plugin-transform-member-expression-literals": "^7.23.3", - "@babel/plugin-transform-modules-amd": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.9", - "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-arrow-functions": "^7.24.1", + "@babel/plugin-transform-async-generator-functions": "^7.24.3", + "@babel/plugin-transform-async-to-generator": "^7.24.1", + "@babel/plugin-transform-block-scoped-functions": "^7.24.1", + "@babel/plugin-transform-block-scoping": "^7.24.5", + "@babel/plugin-transform-class-properties": "^7.24.1", + "@babel/plugin-transform-class-static-block": "^7.24.4", + "@babel/plugin-transform-classes": "^7.24.5", + "@babel/plugin-transform-computed-properties": "^7.24.1", + "@babel/plugin-transform-destructuring": "^7.24.5", + "@babel/plugin-transform-dotall-regex": "^7.24.1", + "@babel/plugin-transform-duplicate-keys": "^7.24.1", + "@babel/plugin-transform-dynamic-import": "^7.24.1", + "@babel/plugin-transform-exponentiation-operator": "^7.24.1", + "@babel/plugin-transform-export-namespace-from": "^7.24.1", + "@babel/plugin-transform-for-of": "^7.24.1", + "@babel/plugin-transform-function-name": "^7.24.1", + "@babel/plugin-transform-json-strings": "^7.24.1", + "@babel/plugin-transform-literals": "^7.24.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.1", + "@babel/plugin-transform-member-expression-literals": "^7.24.1", + "@babel/plugin-transform-modules-amd": "^7.24.1", + "@babel/plugin-transform-modules-commonjs": "^7.24.1", + "@babel/plugin-transform-modules-systemjs": "^7.24.1", + "@babel/plugin-transform-modules-umd": "^7.24.1", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", - "@babel/plugin-transform-numeric-separator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.24.0", - "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.4", - "@babel/plugin-transform-optional-chaining": "^7.23.4", - "@babel/plugin-transform-parameters": "^7.23.3", - "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.4", - "@babel/plugin-transform-property-literals": "^7.23.3", - "@babel/plugin-transform-regenerator": "^7.23.3", - "@babel/plugin-transform-reserved-words": "^7.23.3", - "@babel/plugin-transform-shorthand-properties": "^7.23.3", - "@babel/plugin-transform-spread": "^7.23.3", - "@babel/plugin-transform-sticky-regex": "^7.23.3", - "@babel/plugin-transform-template-literals": "^7.23.3", - "@babel/plugin-transform-typeof-symbol": "^7.23.3", - "@babel/plugin-transform-unicode-escapes": "^7.23.3", - "@babel/plugin-transform-unicode-property-regex": "^7.23.3", - "@babel/plugin-transform-unicode-regex": "^7.23.3", - "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/plugin-transform-new-target": "^7.24.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", + "@babel/plugin-transform-numeric-separator": "^7.24.1", + "@babel/plugin-transform-object-rest-spread": "^7.24.5", + "@babel/plugin-transform-object-super": "^7.24.1", + "@babel/plugin-transform-optional-catch-binding": "^7.24.1", + "@babel/plugin-transform-optional-chaining": "^7.24.5", + "@babel/plugin-transform-parameters": "^7.24.5", + "@babel/plugin-transform-private-methods": "^7.24.1", + "@babel/plugin-transform-private-property-in-object": "^7.24.5", + "@babel/plugin-transform-property-literals": "^7.24.1", + "@babel/plugin-transform-regenerator": "^7.24.1", + "@babel/plugin-transform-reserved-words": "^7.24.1", + "@babel/plugin-transform-shorthand-properties": "^7.24.1", + "@babel/plugin-transform-spread": "^7.24.1", + "@babel/plugin-transform-sticky-regex": "^7.24.1", + "@babel/plugin-transform-template-literals": "^7.24.1", + "@babel/plugin-transform-typeof-symbol": "^7.24.5", + "@babel/plugin-transform-unicode-escapes": "^7.24.1", + "@babel/plugin-transform-unicode-property-regex": "^7.24.1", + "@babel/plugin-transform-unicode-regex": "^7.24.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.1", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", "core-js-compat": "^3.31.0", "semver": "^6.3.1" }, @@ -1711,16 +1728,16 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz", - "integrity": "sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.1.tgz", + "integrity": "sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-transform-react-display-name": "^7.23.3", - "@babel/plugin-transform-react-jsx": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-transform-react-display-name": "^7.24.1", + "@babel/plugin-transform-react-jsx": "^7.23.4", "@babel/plugin-transform-react-jsx-development": "^7.22.5", - "@babel/plugin-transform-react-pure-annotations": "^7.23.3" + "@babel/plugin-transform-react-pure-annotations": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1735,9 +1752,9 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", - "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz", + "integrity": "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1759,18 +1776,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz", - "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", + "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.5", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/parser": "^7.24.5", + "@babel/types": "^7.24.5", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1779,12 +1796,12 @@ } }, "node_modules/@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", + "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.1", + "@babel/helper-validator-identifier": "^7.24.5", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1884,9 +1901,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.3.0.tgz", - "integrity": "sha512-v3oplH6FYCULtFuCeqyuTd9D2WKO937Dxdq+GmHOLL72TTRriLxz2VLlNfkZRsvj6PKnOPAtuT6dwrs/pA5DvA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, "dependencies": { "eslint-visitor-keys": "^3.3.0" @@ -1967,9 +1984,9 @@ } }, "node_modules/@googleapis/drive": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@googleapis/drive/-/drive-8.7.0.tgz", - "integrity": "sha512-XAi6kfySIU4H3ivX2DpzTDce5UhNke5NxEWCL6tySEdcVqx+cmXJmkMqwfOAHJalEB5s9PPfdLBU29Xd5XlLSQ==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@googleapis/drive/-/drive-8.8.0.tgz", + "integrity": "sha512-EOZ9GZCOUdej9PJVnkai7qu5RPyFLYse8FlpgijzfnZPOACXWFf4XOFuAuMcMw4Zue8xPhAPHu1qYcy8u362Xw==", "dependencies": { "googleapis-common": "^7.0.0" }, @@ -2773,9 +2790,9 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "engines": { "node": ">=6.0.0" } @@ -2786,18 +2803,18 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@mongodb-js/saslprep": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.4.tgz", - "integrity": "sha512-8zJ8N1x51xo9hwPh6AWnKdLGEC5N3lDa6kms1YHmFBoRhTpJR6HG8wWk0td1MVCu9cD4YBrvjZEtd5Obw0Fbnw==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.5.tgz", + "integrity": "sha512-XLNOMH66KhJzUJNwT/qlMnS4WsNDWD5ASdyaSH3EtK+F4r/CFGa3jT4GNi4mfOitGvWXtdLgQJkQjxSVrio+jA==", "dependencies": { "sparse-bitfield": "^3.0.3" } @@ -2838,9 +2855,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.3.tgz", - "integrity": "sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.16.0.tgz", + "integrity": "sha512-Quz1KOffeEf/zwkCBM3kBtH4ZoZ+pT3xIXBG4PPW/XFtDP7EGhtTiC2+gpL9GnR7+Qdet5Oa6cYSvwKYg6kN9Q==", "engines": { "node": ">=14.0.0" } @@ -2944,9 +2961,9 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "node_modules/@types/minimist": { @@ -2968,9 +2985,9 @@ "dev": true }, "node_modules/@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, "node_modules/@types/stack-utils": { @@ -3008,16 +3025,16 @@ "dev": true }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.58.0.tgz", - "integrity": "sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.58.0", - "@typescript-eslint/visitor-keys": "5.58.0" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -3025,12 +3042,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.58.0.tgz", - "integrity": "sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -3038,21 +3055,22 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.58.0.tgz", - "integrity": "sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.58.0", - "@typescript-eslint/visitor-keys": "5.58.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -3064,6 +3082,15 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -3076,10 +3103,25 @@ "node": ">=10" } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -3098,51 +3140,28 @@ "dev": true }, "node_modules/@typescript-eslint/utils": { - "version": "5.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.58.0.tgz", - "integrity": "sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.58.0", - "@typescript-eslint/types": "5.58.0", - "@typescript-eslint/typescript-estree": "5.58.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" + "eslint": "^7.0.0 || ^8.0.0" } }, "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { @@ -3158,9 +3177,9 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -3179,16 +3198,16 @@ "dev": true }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.58.0.tgz", - "integrity": "sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.58.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -3774,12 +3793,12 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", - "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz", + "integrity": "sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==", "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.5.0", + "@babel/helper-define-polyfill-provider": "^0.6.1", "semver": "^6.3.1" }, "peerDependencies": { @@ -3787,23 +3806,23 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", - "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0", - "core-js-compat": "^3.34.0" + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", - "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz", + "integrity": "sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0" + "@babel/helper-define-polyfill-provider": "^0.6.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -4267,9 +4286,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "funding": [ { "type": "opencollective", @@ -4285,8 +4304,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, @@ -4307,9 +4326,9 @@ } }, "node_modules/bson": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-6.2.0.tgz", - "integrity": "sha512-ID1cI+7bazPDyL9wYy9GaQ8gEEohWvcUl/Yf0dIdutJxnmInEEyCsb4awy/OiBfall7zBA179Pahi3vCdFze3Q==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.6.0.tgz", + "integrity": "sha512-BVINv2SgcMjL4oYbBuCQTpE3/VKOSxrOA8Cj/wQP7izSzlBGVomdm+TcUd0Pzy0ytLSSDweCKQ6X3f5veM5LQA==", "engines": { "node": ">=16.20.1" } @@ -4454,9 +4473,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001570", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz", - "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==", + "version": "1.0.30001599", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001599.tgz", + "integrity": "sha512-LRAQHZ4yT1+f9LemSMeqdMpMxZcc4RMWdj4tiFe3G8tNkWK+E58g+/tzotb5cU6TbcVJLr4fySiAW7XmxQvZQA==", "funding": [ { "type": "opencollective", @@ -4576,9 +4595,9 @@ } }, "node_modules/classnames": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", - "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, "node_modules/cliui": { "version": "8.0.1", @@ -4817,11 +4836,11 @@ } }, "node_modules/core-js-compat": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.0.tgz", - "integrity": "sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==", + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz", + "integrity": "sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==", "dependencies": { - "browserslist": "^4.22.2" + "browserslist": "^4.23.0" }, "funding": { "type": "opencollective", @@ -5444,9 +5463,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.612", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.612.tgz", - "integrity": "sha512-dM8BMtXtlH237ecSMnYdYuCkib2QHq0kpWfUnavjdYsyr/6OsAwg5ZGUfnQ9KD1Ga4QgB2sqXlB2NT8zy2GnVg==" + "version": "1.4.711", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.711.tgz", + "integrity": "sha512-hRg81qzvUEibX2lDxnFlVCHACa+LtrCPIsWAxo161LDYIB3jauf57RGsMZV9mvGwE98yGH06icj3zBEoOkxd/w==" }, "node_modules/elliptic": { "version": "6.5.4", @@ -5730,19 +5749,19 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "27.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz", - "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==", + "version": "28.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.5.0.tgz", + "integrity": "sha512-6np6DGdmNq/eBbA7HOUNV8fkfL86PYwBfwyb8n23FXgJNTR8+ot3smRHjza9LGsBBZRypK3qyF79vMjohIL8eQ==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "^5.10.0" + "@typescript-eslint/utils": "^6.0.0 || ^7.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0", - "eslint": "^7.0.0 || ^8.0.0", + "@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0", + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0", "jest": "*" }, "peerDependenciesMeta": { @@ -5755,9 +5774,9 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.34.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.0.tgz", - "integrity": "sha512-MeVXdReleBTdkz/bvcQMSnCXGi+c9kvy51IpinjnJgutl3YTHWsDdke7Z1ufZpGfDG8xduBDKyjtB9JH1eBKIQ==", + "version": "7.34.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", + "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", "dev": true, "dependencies": { "array-includes": "^3.1.7", @@ -6132,16 +6151,16 @@ "integrity": "sha512-4EMSHGOPSwAfBiibw3ndnP0AvjDWLsMvGOvWEZ2F96IGk0bIVdjQisOHxReSkE13mHcfbuCiXw+G4y0zv6N8Eg==" }, "node_modules/express": { - "version": "4.18.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.3.tgz", - "integrity": "sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -6186,9 +6205,9 @@ } }, "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "engines": { "node": ">= 0.6" } @@ -6498,14 +6517,13 @@ } }, "node_modules/formidable": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", - "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz", + "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==", "dependencies": { "dezalgo": "^1.0.4", "hexoid": "^1.0.0", - "once": "^1.4.0", - "qs": "^6.11.0" + "once": "^1.4.0" }, "funding": { "url": "https://ko-fi.com/tunnckoCore/commissions" @@ -9820,9 +9838,9 @@ } }, "node_modules/kareem": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", - "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", + "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", "engines": { "node": ">=12.0.0" } @@ -10127,6 +10145,14 @@ "node": ">= 18" } }, + "node_modules/marked-emoji": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/marked-emoji/-/marked-emoji-1.4.0.tgz", + "integrity": "sha512-/2TJfGzXpiBBq+X3akHHbTrAjZPJDwR+7FV6SyQLECnQEfaoVkrpKZJzHhPTAq3Sl/A1l2frMT0u6b38VBBlNg==", + "peerDependencies": { + "marked": ">=4 <13" + } + }, "node_modules/marked-extended-tables": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/marked-extended-tables/-/marked-extended-tables-1.0.8.tgz", @@ -10529,13 +10555,13 @@ } }, "node_modules/mongoose": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.2.1.tgz", - "integrity": "sha512-UgZZbXSJH0pdU936qj3FyVI+sBsMoGowFnL5R/RYrA50ayn6+ZYdVr8ehsRgNxRcMYwoNld5XzHIfkFRJTePEw==", + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.3.3.tgz", + "integrity": "sha512-3kSk0db9DM2tLttCdS6WNRqewPleamFEa4Vz/Qldc0dB4Zow/FiZxb9GExHTJjBZQ9T2xiGleQ3GzRrES3hhsA==", "dependencies": { - "bson": "^6.2.0", - "kareem": "2.5.1", - "mongodb": "6.3.0", + "bson": "^6.5.0", + "kareem": "2.6.3", + "mongodb": "6.5.0", "mpath": "0.9.0", "mquery": "5.0.0", "ms": "2.1.3", @@ -10607,12 +10633,12 @@ } }, "node_modules/mongoose/node_modules/mongodb": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.3.0.tgz", - "integrity": "sha512-tt0KuGjGtLUhLoU263+xvQmPHEGTw5LbcNC73EoFRYgSHwZt5tsoJC110hDyO1kjQzpgNrpdcSza9PknWN4LrA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.5.0.tgz", + "integrity": "sha512-Fozq68InT+JKABGLqctgtb8P56pRrJFkbhW0ux+x1mdHeyinor8oNzJqwLjV/t5X5nJGfTlluxfyMnOXNggIUA==", "dependencies": { - "@mongodb-js/saslprep": "^1.1.0", - "bson": "^6.2.0", + "@mongodb-js/saslprep": "^1.1.5", + "bson": "^6.4.0", "mongodb-connection-string-url": "^3.0.0" }, "engines": { @@ -11919,9 +11945,9 @@ } }, "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dependencies": { "loose-envify": "^1.1.0" }, @@ -11930,15 +11956,15 @@ } }, "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "dependencies": { "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" + "scheduler": "^0.23.2" }, "peerDependencies": { - "react": "^18.2.0" + "react": "^18.3.1" } }, "node_modules/react-frame-component": { @@ -11958,11 +11984,11 @@ "dev": true }, "node_modules/react-router": { - "version": "6.22.3", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.3.tgz", - "integrity": "sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ==", + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.23.0.tgz", + "integrity": "sha512-wPMZ8S2TuPadH0sF5irFGjkNLIcRvOSaEe7v+JER8508dyJumm6XZB1u5kztlX0RVq6AzRVndzqcUh6sFIauzA==", "dependencies": { - "@remix-run/router": "1.15.3" + "@remix-run/router": "1.16.0" }, "engines": { "node": ">=14.0.0" @@ -11972,12 +11998,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.22.3", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.3.tgz", - "integrity": "sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw==", + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.23.0.tgz", + "integrity": "sha512-Q9YaSYvubwgbal2c9DJKfx6hTNoBp3iJDsl+Duva/DwxoJH+OTXkxGpql4iUK2sla/8z4RpjAm6EWx1qUDuopQ==", "dependencies": { - "@remix-run/router": "1.15.3", - "react-router": "6.22.3" + "@remix-run/router": "1.16.0", + "react-router": "6.23.0" }, "engines": { "node": ">=14.0.0" @@ -12159,9 +12185,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/regenerator-transform": { "version": "0.15.2", @@ -12505,9 +12531,9 @@ } }, "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dependencies": { "loose-envify": "^1.1.0" } @@ -13580,34 +13606,22 @@ } }, "node_modules/superagent": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", - "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", + "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", "dependencies": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.4", "debug": "^4.3.4", "fast-safe-stringify": "^2.1.1", "form-data": "^4.0.0", - "formidable": "^2.1.2", + "formidable": "^3.5.1", "methods": "^1.1.2", "mime": "2.6.0", - "qs": "^6.11.0", - "semver": "^7.3.8" + "qs": "^6.11.0" }, "engines": { - "node": ">=6.4.0 <13 || >=14" - } - }, - "node_modules/superagent/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "node": ">=14.18.0" } }, "node_modules/superagent/node_modules/mime": { @@ -13621,36 +13635,17 @@ "node": ">=4.0.0" } }, - "node_modules/superagent/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/superagent/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/supertest": { - "version": "6.3.4", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz", - "integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.0.0.tgz", + "integrity": "sha512-qlsr7fIC0lSddmA3tzojvzubYxvlGtzumcdHgPwbFWMISQwL22MhM2Y3LNt+6w9Yyx7559VW5ab70dgphm8qQA==", "dev": true, "dependencies": { "methods": "^1.1.2", - "superagent": "^8.1.2" + "superagent": "^9.0.1" }, "engines": { - "node": ">=6.4.0" + "node": ">=14.18.0" } }, "node_modules/supports-color": { @@ -13995,26 +13990,23 @@ "utf8-byte-length": "^1.0.1" } }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, "node_modules/tty-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", @@ -14144,9 +14136,9 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, "node_modules/typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.4.tgz", + "integrity": "sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==", "dev": true, "peer": true, "bin": { @@ -14154,7 +14146,7 @@ "tsserver": "bin/tsserver" }, "engines": { - "node": ">=12.20" + "node": ">=14.17" } }, "node_modules/umd": { diff --git a/package.json b/package.json index e0c65e306..ced448158 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "homebrewery", "description": "Create authentic looking D&D homebrews using only markdown", - "version": "3.11.0", + "version": "3.12.0", "engines": { "npm": "^10.2.x", "node": "^20.8.x" @@ -27,10 +27,12 @@ "test:dev": "jest --verbose --watch", "test:basic": "jest tests/markdown/basic.test.js --verbose", "test:variables": "jest tests/markdown/variables.test.js --verbose", - "test:mustache-syntax": "jest '.*(mustache-syntax).*' --verbose --noStackTrace", - "test:mustache-syntax:inline": "jest '.*(mustache-syntax).*' -t '^Inline:.*' --verbose --noStackTrace", - "test:mustache-syntax:block": "jest '.*(mustache-syntax).*' -t '^Block:.*' --verbose --noStackTrace", - "test:mustache-syntax:injection": "jest '.*(mustache-syntax).*' -t '^Injection:.*' --verbose --noStackTrace", + "test:mustache-syntax": "jest \".*(mustache-syntax).*\" --verbose --noStackTrace", + "test:mustache-syntax:inline": "jest \".*(mustache-syntax).*\" -t '^Inline:.*' --verbose --noStackTrace", + "test:mustache-syntax:block": "jest \".*(mustache-syntax).*\" -t '^Block:.*' --verbose --noStackTrace", + "test:mustache-syntax:injection": "jest \".*(mustache-syntax).*\" -t '^Injection:.*' --verbose --noStackTrace", + "test:definition-lists": "jest tests/markdown/definition-lists.test.js --verbose --noStackTrace", + "test:emojis": "jest tests/markdown/emojis.test.js --verbose --noStackTrace", "test:route": "jest tests/routes/static-pages.test.js --verbose", "phb": "node scripts/phb.js", "prod": "set NODE_ENV=production && npm run build", @@ -80,19 +82,19 @@ ] }, "dependencies": { - "@babel/core": "^7.24.0", - "@babel/plugin-transform-runtime": "^7.24.0", - "@babel/preset-env": "^7.24.0", - "@babel/preset-react": "^7.23.3", - "@googleapis/drive": "^8.7.0", + "@babel/core": "^7.24.5", + "@babel/plugin-transform-runtime": "^7.24.3", + "@babel/preset-env": "^7.24.5", + "@babel/preset-react": "^7.24.1", + "@googleapis/drive": "^8.8.0", "body-parser": "^1.20.2", - "classnames": "^2.3.2", + "classnames": "^2.5.1", "codemirror": "^5.65.6", "cookie-parser": "^1.4.6", "create-react-class": "^15.7.0", "dedent-tabs": "^0.10.3", "expr-eval": "^2.0.2", - "express": "^4.18.3", + "express": "^4.19.2", "express-async-handler": "^1.2.0", "express-static-gzip": "2.1.7", "fs-extra": "11.2.0", @@ -101,26 +103,27 @@ "less": "^3.13.1", "lodash": "^4.17.21", "marked": "11.2.0", + "marked-emoji": "^1.4.0", "marked-extended-tables": "^1.0.8", "marked-gfm-heading-id": "^3.1.3", "marked-smartypants-lite": "^1.0.2", "markedLegacy": "npm:marked@^0.3.19", "moment": "^2.30.1", - "mongoose": "^8.2.1", + "mongoose": "^8.3.3", "nanoid": "3.3.4", "nconf": "^0.12.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", "react-frame-component": "^4.1.3", - "react-router-dom": "6.22.3", + "react-router-dom": "6.23.0", "sanitize-filename": "1.6.3", - "superagent": "^8.1.2", + "superagent": "^9.0.2", "vitreum": "git+https://git@github.com/calculuschild/vitreum.git" }, "devDependencies": { "eslint": "^8.57.0", - "eslint-plugin-jest": "^27.9.0", - "eslint-plugin-react": "^7.34.0", + "eslint-plugin-jest": "^28.5.0", + "eslint-plugin-react": "^7.34.1", "jest": "^29.7.0", "jest-expect-message": "^1.1.3", "postcss-less": "^6.0.0", @@ -128,6 +131,6 @@ "stylelint-config-recess-order": "^4.6.0", "stylelint-config-recommended": "^13.0.0", "stylelint-stylistic": "^0.4.3", - "supertest": "^6.3.4" + "supertest": "^7.0.0" } } diff --git a/scripts/project.json b/scripts/project.json index 4c769660f..c384ae1de 100644 --- a/scripts/project.json +++ b/scripts/project.json @@ -25,6 +25,7 @@ "codemirror/addon/edit/closetag.js", "codemirror/addon/edit/trailingspace.js", "codemirror/addon/selection/active-line.js", + "codemirror/addon/hint/show-hint.js", "moment", "superagent" ] diff --git a/server.js b/server.js index cb58f9bd3..39224bb88 100644 --- a/server.js +++ b/server.js @@ -7,6 +7,14 @@ DB.connect(config).then(()=>{ // before launching server const PORT = process.env.PORT || config.get('web_port') || 8000; server.app.listen(PORT, ()=>{ - console.log(`server on port: ${PORT}`); + const reset = '\x1b[0m'; // Reset to default style + const bright = '\x1b[1m'; // Bright (bold) style + const cyan = '\x1b[36m'; // Cyan color + const underline = '\x1b[4m'; // Underlined style + + console.log(`\n\tserver started at: ${new Date().toLocaleString()}`); + console.log(`\tserver on port: ${PORT}`); + console.log(`\t${bright + cyan}Open in browser: ${reset}${underline + bright + cyan}http://localhost:${PORT}${reset}\n\n`) + }); }); diff --git a/server/app.js b/server/app.js index ebb18bb96..d203a0ed0 100644 --- a/server/app.js +++ b/server/app.js @@ -24,9 +24,9 @@ const { splitTextStyleAndMetadata } = require('../shared/helpers.js'); const sanitizeBrew = (brew, accessType)=>{ brew._id = undefined; brew.__v = undefined; - if(accessType !== 'edit'){ + if(accessType !== 'edit' && accessType !== 'shareAuthor') { brew.editId = undefined; - } + } return brew; }; @@ -308,7 +308,6 @@ app.get('/new/:id', asyncHandler(getBrew('share')), (req, res, next)=>{ //Share Page app.get('/share/:id', asyncHandler(getBrew('share')), asyncHandler(async (req, res, next)=>{ const { brew } = req; - req.ogMeta = { ...defaultMetaTags, title : req.brew.title || 'Untitled Brew', description : req.brew.description || 'No description.', @@ -327,7 +326,8 @@ app.get('/share/:id', asyncHandler(getBrew('share')), asyncHandler(async (req, r await HomebrewModel.increaseView({ shareId: brew.shareId }); } }; - sanitizeBrew(req.brew, 'share'); + + brew.authors.includes(req.account?.username) ? sanitizeBrew(req.brew, 'shareAuthor') : sanitizeBrew(req.brew, 'share'); splitTextStyleAndMetadata(req.brew); return next(); })); @@ -373,7 +373,7 @@ app.get('/account', asyncHandler(async (req, res, next)=>{ console.log(err); }); - data.uiItems = { + data.accountDetails = { username : req.account.username, issued : req.account.issued, googleId : Boolean(req.account.googleId), diff --git a/server/googleActions.js b/server/googleActions.js index a5ff61d62..16537d603 100644 --- a/server/googleActions.js +++ b/server/googleActions.js @@ -7,7 +7,9 @@ const config = require('./config.js'); let serviceAuth; if(!config.get('service_account')){ - console.log('No Google Service Account in config files - Google Drive integration will not be available.'); + const reset = '\x1b[0m'; // Reset to default style + const yellow = '\x1b[33m'; // yellow color + console.warn(`\n${yellow}No Google Service Account in config files - Google Drive integration will not be available.${reset}`); } else { const keys = typeof(config.get('service_account')) == 'string' ? JSON.parse(config.get('service_account')) : @@ -18,7 +20,7 @@ if(!config.get('service_account')){ serviceAuth.scopes = ['https://www.googleapis.com/auth/drive']; } catch (err) { console.warn(err); - console.log('Please make sure the Google Service Account is set up properly in your config files.'); + console.warn('Please make sure the Google Service Account is set up properly in your config files.'); } } diff --git a/server/homebrew.api.js b/server/homebrew.api.js index 20e13ec71..e73a704a8 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -54,6 +54,10 @@ const api = { }); stub = stub?.toObject(); + if(stub?.lock?.locked && accessType != 'edit') { + throw { HBErrorCode: '100', code: stub.lock.code, message: stub.lock.message, brewId: stub.shareId, brewTitle: stub.title }; + } + // If there is a google id, try to find the google brew if(!stubOnly && (googleId || stub?.googleId)) { let googleError; @@ -79,9 +83,9 @@ const api = { if(accessType === 'edit' && (authorsExist && !(isAuthor || isInvited))) { const accessError = { name: 'Access Error', status: 401 }; if(req.account){ - throw { ...accessError, message: 'User is not an Author', HBErrorCode: '03', authors: stub.authors, brewTitle: stub.title, shareId: stub.shareId }; + throw { ...accessError, message: 'User is not an Author', HBErrorCode: '03', authors: stub.authors, brewTitle: stub.title, shareId: stub.shareId}; } - throw { ...accessError, message: 'User is not logged in', HBErrorCode: '04', authors: stub.authors, brewTitle: stub.title }; + throw { ...accessError, message: 'User is not logged in', HBErrorCode: '04', authors: stub.authors, brewTitle: stub.title, shareId: stub.shareId}; } // If after all of that we still don't have a brew, throw an exception diff --git a/server/homebrew.api.spec.js b/server/homebrew.api.spec.js index 55a8c414f..8a4748e38 100644 --- a/server/homebrew.api.spec.js +++ b/server/homebrew.api.spec.js @@ -117,7 +117,7 @@ describe('Tests for api', ()=>{ id : '123456789012345678901234567890123abcdefghijkl' } }); - + expect(googleId).toEqual('123456789012345678901234567890123'); expect(id).toEqual('abcdefghijkl'); }); @@ -128,7 +128,7 @@ describe('Tests for api', ()=>{ id : '123456789012345678901234567890123abcdefghij' } }); - + expect(googleId).toEqual('123456789012345678901234567890123'); expect(id).toEqual('abcdefghij'); }); @@ -298,6 +298,18 @@ describe('Tests for api', ()=>{ expect(model.get).toHaveBeenCalledWith({ shareId: '1' }); expect(google.getGoogleBrew).toHaveBeenCalledWith('2', '1', 'share'); }); + + it('access is denied to a locked brew', async()=>{ + const lockBrew = { title: 'test brew', shareId: '1', lock: { locked: true, code: 404, message: 'brew locked' } }; + model.get = jest.fn(()=>toBrewPromise(lockBrew)); + api.getId = jest.fn(()=>({ id: '1', googleId: undefined })); + + const fn = api.getBrew('share', false); + const req = { brew: {} }; + const next = jest.fn(); + + await expect(fn(req, null, next)).rejects.toEqual({ 'HBErrorCode': '100', 'brewId': '1', 'brewTitle': 'test brew', 'code': 404, 'message': 'brew locked' }); + }); }); describe('mergeBrewText', ()=>{ diff --git a/shared/naturalcrit/codeEditor/autocompleteEmoji.js b/shared/naturalcrit/codeEditor/autocompleteEmoji.js new file mode 100644 index 000000000..73e08de57 --- /dev/null +++ b/shared/naturalcrit/codeEditor/autocompleteEmoji.js @@ -0,0 +1,82 @@ +const diceFont = require('../../../themes/fonts/iconFonts/diceFont.js'); +const elderberryInn = require('../../../themes/fonts/iconFonts/elderberryInn.js'); +const fontAwesome = require('../../../themes/fonts/iconFonts/fontAwesome.js'); + +const emojis = { + ...diceFont, + ...elderberryInn, + ...fontAwesome +}; + +const showAutocompleteEmoji = function(CodeMirror, editor) { + CodeMirror.commands.autocomplete = function(editor) { + editor.showHint({ + completeSingle : false, + hint : function(editor) { + const cursor = editor.getCursor(); + const line = cursor.line; + const lineContent = editor.getLine(line); + const start = lineContent.lastIndexOf(':', cursor.ch - 1) + 1; + const end = cursor.ch; + const currentWord = lineContent.slice(start, end); + + + const list = Object.keys(emojis).filter(function(emoji) { + return emoji.toLowerCase().indexOf(currentWord.toLowerCase()) >= 0; + }).sort((a, b)=>{ + const lowerA = a.replace(/\d+/g, function(match) { // Temporarily convert any numbers in emoji string + return match.padStart(4, '0'); // to 4-digits, left-padded with 0's, to aid in + }).toLowerCase(); // sorting numbers, i.e., "d6, d10, d20", not "d10, d20, d6" + const lowerB = b.replace(/\d+/g, function(match) { // Also make lowercase for case-insensitive alpha sorting + return match.padStart(4, '0'); + }).toLowerCase(); + + if(lowerA < lowerB) + return -1; + return 1; + }).map(function(emoji) { + return { + text : `${emoji}:`, // Text to output to editor when option is selected + render : function(element, self, data) { // How to display the option in the dropdown + const div = document.createElement('div'); + div.innerHTML = ` ${emoji}`; + element.appendChild(div); + } + }; + }); + + return { + list : list.length ? list : [], + from : CodeMirror.Pos(line, start), + to : CodeMirror.Pos(line, end) + }; + } + }); + }; + + editor.on('inputRead', function(instance, change) { + const cursor = editor.getCursor(); + const line = editor.getLine(cursor.line); + + // Get the text from the start of the line to the cursor + const textToCursor = line.slice(0, cursor.ch); + + // Do not autosuggest emojis in curly span/div/injector properties + if(line.includes('{')) { + const curlyToCursor = textToCursor.slice(textToCursor.indexOf(`{`)); + const curlySpanRegex = /{(?=((?:[:=](?:"[\w,\-()#%. ]*"|[\w\-()#%.]*)|[^"':={}\s]*)*))\1$/g; + + if(curlySpanRegex.test(curlyToCursor)) + return; + } + + // Check if the text ends with ':xyz' + if(/:[^\s:]+$/.test(textToCursor)) { + CodeMirror.commands.autocomplete(editor); + } + }); +}; + +module.exports = { + showAutocompleteEmoji +}; \ No newline at end of file diff --git a/shared/naturalcrit/codeEditor/codeEditor.jsx b/shared/naturalcrit/codeEditor/codeEditor.jsx index a5232a42b..b034d1ca9 100644 --- a/shared/naturalcrit/codeEditor/codeEditor.jsx +++ b/shared/naturalcrit/codeEditor/codeEditor.jsx @@ -5,6 +5,7 @@ const createClass = require('create-react-class'); const _ = require('lodash'); const cx = require('classnames'); const closeTag = require('./close-tag'); +const autoCompleteEmoji = require('./autocompleteEmoji'); let CodeMirror; if(typeof window !== 'undefined'){ @@ -36,6 +37,8 @@ if(typeof window !== 'undefined'){ //XML code folding is a requirement of the auto-closing tag feature and is not enabled require('codemirror/addon/fold/xml-fold.js'); require('codemirror/addon/edit/closetag.js'); + //Autocompletion + require('codemirror/addon/hint/show-hint.js'); const foldCode = require('./fold-code'); foldCode.registerHomebreweryHelper(CodeMirror); @@ -177,7 +180,10 @@ const CodeEditor = createClass({ // return el; // } }); + + // Add custom behaviors (auto-close curlies and auto-complete emojis) closeTag.autoCloseCurlyBraces(CodeMirror, this.codeMirror); + autoCompleteEmoji.showAutocompleteEmoji(CodeMirror, this.codeMirror); // Note: codeMirror passes a copy of itself in this callback. cm === this.codeMirror. Either one works. this.codeMirror.on('change', (cm)=>{this.props.onChange(cm.getValue());}); @@ -436,7 +442,7 @@ const CodeEditor = createClass({ render : function(){ return <> - +
; } diff --git a/shared/naturalcrit/codeEditor/codeEditor.less b/shared/naturalcrit/codeEditor/codeEditor.less index 80af543d9..349166248 100644 --- a/shared/naturalcrit/codeEditor/codeEditor.less +++ b/shared/naturalcrit/codeEditor/codeEditor.less @@ -2,6 +2,11 @@ @import (less) 'codemirror/addon/fold/foldgutter.css'; @import (less) 'codemirror/addon/search/matchesonscrollbar.css'; @import (less) 'codemirror/addon/dialog/dialog.css'; +@import (less) 'codemirror/addon/hint/show-hint.css'; + +//Icon fonts included so they can appear in emoji autosuggest dropdown +@import (less) './themes/fonts/iconFonts/diceFont.less'; +@import (less) './themes/fonts/iconFonts/elderberryInn.less'; @keyframes sourceMoveAnimation { 50% {background-color: red; color: white;} @@ -17,13 +22,24 @@ text-shadow: none; font-weight: 600; color: grey; -} + } .sourceMoveFlash .CodeMirror-line{ animation-name: sourceMoveAnimation; animation-duration: 0.4s; } + .CodeMirror-vscrollbar { + &::-webkit-scrollbar { + width: 20px; + } + &::-webkit-scrollbar-thumb { + width: 20px; + background: linear-gradient(90deg, #858585 15px, #808080 15px); + } + } + + //.cm-tab { // background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAQAAACOs/baAAAARUlEQVR4nGJgIAG8JkXxUAcCtDWemcGR1lY4MvgzCEKY7jSBjgxBDAG09UEQzAe0AMwMHrSOAwEGRtpaMIwAAAAA//8DAG4ID9EKs6YqAAAAAElFTkSuQmCC) no-repeat right; //} @@ -34,3 +50,8 @@ // } //} } + +.emojiPreview { + font-size: 1.5em; + line-height: 1.2em; +} \ No newline at end of file diff --git a/shared/naturalcrit/markdown.js b/shared/naturalcrit/markdown.js index 09f810907..05518b695 100644 --- a/shared/naturalcrit/markdown.js +++ b/shared/naturalcrit/markdown.js @@ -4,6 +4,13 @@ const Marked = require('marked'); const MarkedExtendedTables = require('marked-extended-tables'); const { markedSmartypantsLite: MarkedSmartypantsLite } = require('marked-smartypants-lite'); const { gfmHeadingId: MarkedGFMHeadingId } = require('marked-gfm-heading-id'); +const { markedEmoji: MarkedEmojis } = require('marked-emoji'); + +//Icon fonts included so they can appear in emoji autosuggest dropdown +const diceFont = require('../../themes/fonts/iconFonts/diceFont.js'); +const elderberryInn = require('../../themes/fonts/iconFonts/elderberryInn.js'); +const fontAwesome = require('../../themes/fonts/iconFonts/fontAwesome.js'); + const MathParser = require('expr-eval').Parser; const renderer = new Marked.Renderer(); const tokenizer = new Marked.Tokenizer(); @@ -50,7 +57,7 @@ renderer.html = function (html) { return html; }; -// Don't wrap {{ Divs or {{ empty Spans in

tags +// Don't wrap {{ Spans alone on a line, or {{ Divs in

tags renderer.paragraph = function(text){ let match; if(text.startsWith('`${key}="${value}"`).join(' ')}` : ''}` + + `>${this.parser.parseInline(token.tokens)}`; // parseInline to turn child tokens into HTML } }; @@ -149,13 +163,13 @@ const mustacheDivs = { if(match) { //Find closing delimiter let blockCount = 0; - let tags = ''; + let tags = {}; let endTags = 0; let endToken = 0; let delim; while (delim = blockRegex.exec(match[0])?.[0].trim()) { - if(!tags) { - tags = `${processStyleTags(delim.substring(2))}`; + if(_.isEmpty(tags)) { + tags = processStyleTags(delim.substring(2)); endTags = delim.length + src.indexOf(delim); } if(delim.startsWith('{{')) { @@ -183,7 +197,14 @@ const mustacheDivs = { } }, renderer(token) { - return `

`${key}="${value}"`).join(' ')}` : ''}` + + `>${this.parser.parse(token.tokens)}
`; // parse to turn child tokens into HTML } }; @@ -199,23 +220,39 @@ const mustacheInjectInline = { if(!lastToken || lastToken.type == 'mustacheInjectInline') return false; - const tags = `${processStyleTags(match[1])}`; + const tags = processStyleTags(match[1]); lastToken.originalType = lastToken.type; lastToken.type = 'mustacheInjectInline'; - lastToken.tags = tags; + lastToken.injectedTags = tags; return { - type : 'text', // Should match "name" above + type : 'mustacheInjectInline', // Should match "name" above raw : match[0], // Text to consume from the source text : '' }; } }, renderer(token) { + if(!token.originalType){ + return; + } token.type = token.originalType; const text = this.parser.parseInline([token]); - const openingTag = /(<[^\s<>]+)([^\n<>]*>.*)/s.exec(text); + const originalTags = extractHTMLStyleTags(text); + const injectedTags = token.injectedTags; + const tags = { + id : injectedTags.id || originalTags.id || null, + classes : [originalTags.classes, injectedTags.classes].join(' ').trim() || null, + styles : [originalTags.styles, injectedTags.styles].join(' ').trim() || null, + attributes : Object.assign(originalTags.attributes ?? {}, injectedTags.attributes ?? {}) + }; + const openingTag = /(<[^\s<>]+)[^\n<>]*(>.*)/s.exec(text); if(openingTag) { - return `${openingTag[1]} class="${token.tags}${openingTag[2]}`; + return `${openingTag[1]}` + + `${tags.classes ? ` class="${tags.classes}"` : ''}` + + `${tags.id ? ` id="${tags.id}"` : ''}` + + `${tags.styles ? ` style="${tags.styles}"` : ''}` + + `${!_.isEmpty(tags.attributes) ? ` ${Object.entries(tags.attributes).map(([key, value])=>`${key}="${value}"`).join(' ')}` : ''}` + + `${openingTag[2]}`; // parse to turn child tokens into HTML } return text; } @@ -235,7 +272,7 @@ const mustacheInjectBlock = { return false; lastToken.originalType = 'mustacheInjectBlock'; - lastToken.tags = `${processStyleTags(match[1])}`; + lastToken.injectedTags = processStyleTags(match[1]); return { type : 'mustacheInjectBlock', // Should match "name" above raw : match[0], // Text to consume from the source @@ -249,9 +286,22 @@ const mustacheInjectBlock = { } token.type = token.originalType; const text = this.parser.parse([token]); - const openingTag = /(<[^\s<>]+)([^\n<>]*>.*)/s.exec(text); + const originalTags = extractHTMLStyleTags(text); + const injectedTags = token.injectedTags; + const tags = { + id : injectedTags.id || originalTags.id || null, + classes : [originalTags.classes, injectedTags.classes].join(' ').trim() || null, + styles : [originalTags.styles, injectedTags.styles].join(' ').trim() || null, + attributes : Object.assign(originalTags.attributes ?? {}, injectedTags.attributes ?? {}) + }; + const openingTag = /(<[^\s<>]+)[^\n<>]*(>.*)/s.exec(text); if(openingTag) { - return `${openingTag[1]} class="${token.tags}${openingTag[2]}`; + return `${openingTag[1]}` + + `${tags.classes ? ` class="${tags.classes}"` : ''}` + + `${tags.id ? ` id="${tags.id}"` : ''}` + + `${tags.styles ? ` style="${tags.styles}"` : ''}` + + `${!_.isEmpty(tags.attributes) ? ` ${Object.entries(tags.attributes).map(([key, value])=>`${key}="${value}"`).join(' ')}` : ''}` + + `${openingTag[2]}`; // parse to turn child tokens into HTML } return text; } @@ -294,25 +344,34 @@ const superSubScripts = { } }; -const definitionLists = { - name : 'definitionLists', +const definitionListsSingleLine = { + name : 'definitionListsSingleLine', level : 'block', - start(src) { return src.match(/^.*?::.*/m)?.index; }, // Hint to Marked.js to stop and check for a match + start(src) { return src.match(/\n[^\n]*?::[^\n]*/m)?.index; }, // Hint to Marked.js to stop and check for a match tokenizer(src, tokens) { const regex = /^([^\n]*?)::([^\n]*)(?:\n|$)/ym; let match; let endIndex = 0; const definitions = []; while (match = regex.exec(src)) { - definitions.push({ - dt : this.lexer.inlineTokens(match[1].trim()), - dd : this.lexer.inlineTokens(match[2].trim()) - }); + const originalLine = match[0]; // This line and below to handle conflict with emojis + let firstLine = originalLine; // Remove in V4 when definitionListsInline updated to + this.lexer.inlineTokens(firstLine.trim()) // require spaces around `::` + .filter((t)=>t.type == 'emoji') + .map((emoji)=>firstLine = firstLine.replace(emoji.raw, 'x'.repeat(emoji.raw.length))); + + const newMatch = /^([^\n]*?)::([^\n]*)(?:\n|$)/ym.exec(firstLine); + if(newMatch) { + definitions.push({ + dt : this.lexer.inlineTokens(originalLine.slice(0, newMatch[1].length).trim()), + dd : this.lexer.inlineTokens(originalLine.slice(newMatch[1].length + 2).trim()) + }); + } // End of emoji hack. endIndex = regex.lastIndex; } if(definitions.length) { return { - type : 'definitionLists', + type : 'definitionListsSingleLine', raw : src.slice(0, endIndex), definitions }; @@ -326,6 +385,51 @@ const definitionLists = { } }; +const definitionListsMultiLine = { + name : 'definitionListsMultiLine', + level : 'block', + start(src) { return src.match(/\n[^\n]*\n::/m)?.index; }, // Hint to Marked.js to stop and check for a match + tokenizer(src, tokens) { + const regex = /(\n?\n?(?!::)[^\n]+?(?=\n::))|\n::(.(?:.|\n)*?(?=(?:\n::)|(?:\n\n)|$))/y; + let match; + let endIndex = 0; + const definitions = []; + while (match = regex.exec(src)) { + if(match[1]) { + if(this.lexer.blockTokens(match[1].trim())[0]?.type !== 'paragraph') // DT must not be another block-level token besides

+ break; + definitions.push({ + dt : this.lexer.inlineTokens(match[1].trim()), + dds : [] + }); + } + if(match[2] && definitions.length) { + definitions[definitions.length - 1].dds.push( + this.lexer.inlineTokens(match[2].trim().replace(/\s/g, ' ')) + ); + } + endIndex = regex.lastIndex; + } + if(definitions.length) { + return { + type : 'definitionListsMultiLine', + raw : src.slice(0, endIndex), + definitions + }; + } + }, + renderer(token) { + let returnVal = `

`; + token.definitions.forEach((def)=>{ + const dds = def.dds.map((s)=>{ + return `\n
${this.parser.parseInline(s).trim()}
`; + }).join(''); + returnVal += `
${this.parser.parseInline(def.dt)}
${dds}\n`; + }); + returnVal = returnVal.trim(); + return `${returnVal}
`; + } +}; //v=====--------------------< Variable Handling >-------------------=====v// 242 lines const replaceVar = function(input, hoist=false, allowUnresolved=false) { @@ -571,11 +675,29 @@ function MarkedVariables() { }; //^=====--------------------< Variable Handling >-------------------=====^// +// Emoji options +// To add more icon fonts, need to do these things +// 1) Add the font file as .woff2 to themes/fonts/iconFonts folder +// 2) Create a .less file mapping CSS class names to the font character +// 3) Create a .js file mapping Autosuggest names to CSS class names +// 4) Import the .less file into shared/naturalcrit/codeEditor/codeEditor.less +// 5) Import the .less file into themes/V3/blank.style.less +// 6) Import the .js file to shared/naturalcrit/codeEditor/autocompleteEmoji.js and add to `emojis` object +// 7) Import the .js file here to markdown.js, and add to `emojis` object below +const MarkedEmojiOptions = { + emojis : { + ...diceFont, + ...elderberryInn, + ...fontAwesome + }, + renderer : (token)=>`` +}; + Marked.use(MarkedVariables()); -Marked.use({ extensions: [mustacheSpans, mustacheDivs, mustacheInjectInline, definitionLists, superSubScripts] }); +Marked.use({ extensions: [definitionListsMultiLine, definitionListsSingleLine, superSubScripts, mustacheSpans, mustacheDivs, mustacheInjectInline] }); Marked.use(mustacheInjectBlock); Marked.use({ renderer: renderer, tokenizer: tokenizer, mangle: false }); -Marked.use(MarkedExtendedTables(), MarkedGFMHeadingId(), MarkedSmartypantsLite()); +Marked.use(MarkedExtendedTables(), MarkedGFMHeadingId(), MarkedSmartypantsLite(), MarkedEmojis(MarkedEmojiOptions)); const nonWordAndColonTest = /[^\w:]/g; const cleanUrl = function (sanitize, base, href) { @@ -642,15 +764,45 @@ const processStyleTags = (string)=>{ //TODO: can we simplify to just split on commas? const tags = string.match(/(?:[^, ":=]+|[:=](?:"[^"]*"|))+/g); - const id = _.remove(tags, (tag)=>tag.startsWith('#')).map((tag)=>tag.slice(1))[0]; - const classes = _.remove(tags, (tag)=>(!tag.includes(':')) && (!tag.includes('='))); - const attributes = _.remove(tags, (tag)=>(tag.includes('='))).map((tag)=>tag.replace(/="?([^"]*)"?/g, '="$1"')); - const styles = tags?.length ? tags.map((tag)=>tag.replace(/:"?([^"]*)"?/g, ':$1;').trim()) : []; + const id = _.remove(tags, (tag)=>tag.startsWith('#')).map((tag)=>tag.slice(1))[0] || null; + const classes = _.remove(tags, (tag)=>(!tag.includes(':')) && (!tag.includes('='))).join(' ') || null; + const attributes = _.remove(tags, (tag)=>(tag.includes('='))).map((tag)=>tag.replace(/="?([^"]*)"?/g, '="$1"')) + ?.filter((attr)=>!attr.startsWith('class="') && !attr.startsWith('style="') && !attr.startsWith('id="')) + .reduce((obj, attr)=>{ + let [key, value] = attr.split('='); + value = value.replace(/"/g, ''); + obj[key] = value; + return obj; + }, {}) || null; + const styles = tags?.length ? tags.map((tag)=>tag.replace(/:"?([^"]*)"?/g, ':$1;').trim()).join(' ') : null; - return `${classes?.length ? ` ${classes.join(' ')}` : ''}"` + - `${id ? ` id="${id}"` : ''}` + - `${styles?.length ? ` style="${styles.join(' ')}"` : ''}` + - `${attributes?.length ? ` ${attributes.join(' ')}` : ''}`; + return { + id : id, + classes : classes, + styles : styles, + attributes : _.isEmpty(attributes) ? null : attributes + }; +}; + +const extractHTMLStyleTags = (htmlString)=>{ + const id = htmlString.match(/id="([^"]*)"/)?.[1] || null; + const classes = htmlString.match(/class="([^"]*)"/)?.[1] || null; + const styles = htmlString.match(/style="([^"]*)"/)?.[1] || null; + const attributes = htmlString.match(/[a-zA-Z]+="[^"]*"/g) + ?.filter((attr)=>!attr.startsWith('class="') && !attr.startsWith('style="') && !attr.startsWith('id="')) + .reduce((obj, attr)=>{ + let [key, value] = attr.split('='); + value = value.replace(/"/g, ''); + obj[key] = value; + return obj; + }, {}) || null; + + return { + id : id, + classes : classes, + styles : styles, + attributes : _.isEmpty(attributes) ? null : attributes + }; }; const globalVarsList = {}; diff --git a/tests/markdown/definition-lists.test.js b/tests/markdown/definition-lists.test.js new file mode 100644 index 000000000..9f5025d73 --- /dev/null +++ b/tests/markdown/definition-lists.test.js @@ -0,0 +1,91 @@ +/* eslint-disable max-lines */ + +const Markdown = require('naturalcrit/markdown.js'); + +describe('Inline Definition Lists', ()=>{ + test('No Term 1 Definition', function() { + const source = ':: My First Definition\n\n'; + const rendered = Markdown.render(source).trim(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('
My First Definition
\n
'); + }); + + test('Single Definition Term', function() { + const source = 'My term :: My First Definition\n\n'; + const rendered = Markdown.render(source).trim(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('
My term
My First Definition
\n
'); + }); + + test('Multiple Definition Terms', function() { + const source = 'Term 1::Definition of Term 1\nTerm 2::Definition of Term 2\n\n'; + const rendered = Markdown.render(source).trim(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('
Term 1
Definition of Term 1
\n
Term 2
Definition of Term 2
\n
'); + }); +}); + +describe('Multiline Definition Lists', ()=>{ + test('Single Term, Single Definition', function() { + const source = 'Term 1\n::Definition 1\n\n'; + const rendered = Markdown.render(source).trim(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('
Term 1
\n
Definition 1
'); + }); + + test('Single Term, Plural Definitions', function() { + const source = 'Term 1\n::Definition 1\n::Definition 2\n\n'; + const rendered = Markdown.render(source).trim(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('
Term 1
\n
Definition 1
\n
Definition 2
'); + }); + + test('Multiple Term, Single Definitions', function() { + const source = 'Term 1\n::Definition 1\n\nTerm 2\n::Definition 1\n\n'; + const rendered = Markdown.render(source).trim(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('
Term 1
\n
Definition 1
\n
Term 2
\n
Definition 1
'); + }); + + test('Multiple Term, Plural Definitions', function() { + const source = 'Term 1\n::Definition 1\n::Definition 2\n\nTerm 2\n::Definition 1\n::Definition 2\n\n'; + const rendered = Markdown.render(source).trim(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('
Term 1
\n
Definition 1
\n
Definition 2
\n
Term 2
\n
Definition 1
\n
Definition 2
'); + }); + + test('Single Term, Single multi-line definition', function() { + const source = 'Term 1\n::Definition 1\nand more and\nmore and more\n\n'; + const rendered = Markdown.render(source).trim(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('
Term 1
\n
Definition 1 and more and more and more
'); + }); + + test('Single Term, Plural multi-line definitions', function() { + const source = 'Term 1\n::Definition 1\nand more and more\n::Definition 2\nand more\nand more\n::Definition 3\n\n'; + const rendered = Markdown.render(source).trim(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('
Term 1
\n
Definition 1 and more and more
\n
Definition 2 and more and more
\n
Definition 3
'); + }); + + test('Multiple Term, Single multi-line definition', function() { + const source = 'Term 1\n::Definition 1\nand more and more\n\nTerm 2\n::Definition 1\n::Definition 2\n\n'; + const rendered = Markdown.render(source).trim(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('
Term 1
\n
Definition 1 and more and more
\n
Term 2
\n
Definition 1
\n
Definition 2
'); + }); + + test('Multiple Term, Single multi-line definition, followed by an inline dl', function() { + const source = 'Term 1\n::Definition 1\nand more and more\n\nTerm 2\n::Definition 1\n::Definition 2\n\n::Inline Definition (no term)'; + const rendered = Markdown.render(source).trim(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('
Term 1
\n
Definition 1 and more and more
\n
Term 2
\n
Definition 1
\n
Definition 2
Inline Definition (no term)
\n
'); + }); + + test('Multiple Term, Single multi-line definition, followed by paragraph', function() { + const source = 'Term 1\n::Definition 1\nand more and more\n\nTerm 2\n::Definition 1\n::Definition 2\n\nParagraph'; + const rendered = Markdown.render(source).trim(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('
Term 1
\n
Definition 1 and more and more
\n
Term 2
\n
Definition 1
\n
Definition 2

Paragraph

'); + }); + + test('Block Token cannot be the Term of a multi-line definition', function() { + const source = '## Header\n::Definition 1 of a single-line DL\n::Definition 1 of another single-line DL'; + const rendered = Markdown.render(source).trim(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('\n
Definition 1 of a single-line DL
\n
Definition 1 of another single-line DL
\n
'); + }); + + test('Inline DL has priority over Multiline', function() { + const source = 'Term 1 :: Inline definition 1\n:: Inline definition 2 (no DT)'; + const rendered = Markdown.render(source).trim(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('
Term 1
Inline definition 1
\n
Inline definition 2 (no DT)
\n
'); + }); +}); diff --git a/tests/markdown/emojis.test.js b/tests/markdown/emojis.test.js new file mode 100644 index 000000000..a4abbc6a4 --- /dev/null +++ b/tests/markdown/emojis.test.js @@ -0,0 +1,58 @@ +const Markdown = require('naturalcrit/markdown.js'); +const dedent = require('dedent-tabs').default; + +// Marked.js adds line returns after closing tags on some default tokens. +// This removes those line returns for comparison sake. +String.prototype.trimReturns = function(){ + return this.replace(/\r?\n|\r/g, ''); +}; + +const emoji = 'df_d12_2'; + +describe(`When emojis/icons are active`, ()=>{ + it('when a word is between two colons (:word:), and a matching emoji exists, it is rendered as an emoji', function() { + const source = `:${emoji}:`; + const rendered = Markdown.render(source).trimReturns(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`

`); + }); + + it('when a word is between two colons (:word:), and no matching emoji exists, it is not parsed', function() { + const source = `:invalid:`; + const rendered = Markdown.render(source).trimReturns(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`

:invalid:

`); + }); + + it('two valid emojis with no whitespace are prioritized over definition lists', function() { + const source = `:${emoji}::${emoji}:`; + const rendered = Markdown.render(source).trimReturns(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`

`); + }); + + it('definition lists that are not also part of an emoji can coexist with normal emojis', function() { + const source = `definition :: term ${emoji}::${emoji}:`; + const rendered = Markdown.render(source).trimReturns(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`
definition
term df_d12_2:
`); + }); + + it('A valid emoji is compatible with curly injectors', function() { + const source = `:${emoji}:{color:blue,myClass}`; + const rendered = Markdown.render(source).trimReturns(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`

`); + }); + + it('Emojis are not parsed inside of curly span CSS blocks', function() { + const source = `{{color:${emoji} text}}`; + const rendered = Markdown.render(source).trimReturns(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`text`); + }); + + it('Emojis are not parsed inside of curly div CSS blocks', function() { + const source = dedent`{{color:${emoji} + text + }}`; + const rendered = Markdown.render(source).trimReturns(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`

text

`); + }); + + // another test of the editor to confirm an autocomplete menu opens +}); \ No newline at end of file diff --git a/tests/markdown/mustache-syntax.test.js b/tests/markdown/mustache-syntax.test.js index 835bcc575..b32876353 100644 --- a/tests/markdown/mustache-syntax.test.js +++ b/tests/markdown/mustache-syntax.test.js @@ -130,8 +130,8 @@ describe('Inline: When using the Inline syntax {{ }}', ()=>{ describe(`Block: When using the Block syntax {{tags\\ntext\\n}}`, ()=>{ it('Renders a div with text only', function() { const source = dedent`{{ - text - }}`; + text + }}`; const rendered = Markdown.render(source).trimReturns(); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`

text

`); }); @@ -139,14 +139,14 @@ describe(`Block: When using the Block syntax {{tags\\ntext\\n}}`, ()=>{ it('Renders an empty div', function() { const source = dedent`{{ - }}`; + }}`; const rendered = Markdown.render(source).trimReturns(); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`
`); }); it('Renders a single paragraph with opening and closing brackets', function() { const source = dedent`{{ - }}`; + }}`; const rendered = Markdown.render(source).trimReturns(); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`

{{}}

`); }); @@ -154,79 +154,79 @@ describe(`Block: When using the Block syntax {{tags\\ntext\\n}}`, ()=>{ it('Renders a div with a single class', function() { const source = dedent`{{cat - }}`; + }}`; const rendered = Markdown.render(source).trimReturns(); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`
`); }); it('Renders a div with a single class and text', function() { const source = dedent`{{cat - Sample text. - }}`; + Sample text. + }}`; const rendered = Markdown.render(source).trimReturns(); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`

Sample text.

`); }); it('Renders a div with two classes and text', function() { const source = dedent`{{cat,dog - Sample text. - }}`; + Sample text. + }}`; const rendered = Markdown.render(source).trimReturns(); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`

Sample text.

`); }); it('Renders a div with a style and text', function() { const source = dedent`{{color:red - Sample text. - }}`; + Sample text. + }}`; const rendered = Markdown.render(source).trimReturns(); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`

Sample text.

`); }); it('Renders a div with a style that has a string variable, and text', function() { const source = dedent`{{--stringVariable:"'string'" - Sample text. - }}`; + Sample text. + }}`; const rendered = Markdown.render(source).trimReturns(); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`

Sample text.

`); }); it('Renders a div with a style that has a string variable, and text', function() { const source = dedent`{{--stringVariable:"'string'" - Sample text. - }}`; + Sample text. + }}`; const rendered = Markdown.render(source).trimReturns(); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`

Sample text.

`); }); it('Renders a div with a class, style and text', function() { const source = dedent`{{cat,color:red - Sample text. - }}`; + Sample text. + }}`; const rendered = Markdown.render(source).trimReturns(); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`

Sample text.

`); }); it('Renders a div with an ID, class, style and text (different order)', function() { const source = dedent`{{color:red,cat,#dog - Sample text. - }}`; + Sample text. + }}`; const rendered = Markdown.render(source).trimReturns(); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`

Sample text.

`); }); it('Renders a div with a single ID', function() { const source = dedent`{{#cat,#dog - Sample text. - }}`; + Sample text. + }}`; const rendered = Markdown.render(source).trimReturns(); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`

Sample text.

`); }); it('Renders a div with an ID, class, style and text, and a variable assignment', function() { const source = dedent`{{color:red,cat,#dog,a="b and c",d="e" - Sample text. - }}`; + Sample text. + }}`; const rendered = Markdown.render(source).trimReturns(); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`

Sample text.

`); }); @@ -243,61 +243,91 @@ describe(`Block: When using the Block syntax {{tags\\ntext\\n}}`, ()=>{ describe('Injection: When an injection tag follows an element', ()=>{ // FIXME: Most of these fail because injections currently replace attributes, rather than append to. Or just minor extra whitespace issues. describe('and that element is an inline-block', ()=>{ - it.failing('Renders a span "text" with no injection', function() { + it('Renders a span "text" with no injection', function() { const source = '{{ text}}{}'; const rendered = Markdown.render(source); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('text'); }); - it.failing('Renders a span "text" with injected Class name', function() { + it('Renders a span "text" with injected Class name', function() { const source = '{{ text}}{ClassName}'; const rendered = Markdown.render(source); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('text'); }); - it.failing('Renders a span "text" with injected attribute', function() { + it('Renders a span "text" with injected attribute', function() { const source = '{{ text}}{a="b and c"}'; const rendered = Markdown.render(source); - expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('text'); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('text'); }); - it.failing('Renders a span "text" with injected style', function() { + it('Renders a span "text" with injected style', function() { const source = '{{ text}}{color:red}'; const rendered = Markdown.render(source); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('text'); }); - it.failing('Renders a span "text" with injected style using a string variable', function() { + it('Renders a span "text" with injected style using a string variable', function() { const source = `{{ text}}{--stringVariable:"'string'"}`; const rendered = Markdown.render(source); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`text`); }); - it.failing('Renders a span "text" with two injected styles', function() { + it('Renders a span "text" with two injected styles', function() { const source = '{{ text}}{color:red,background:blue}'; const rendered = Markdown.render(source); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('text'); }); - it.failing('Renders an emphasis element with injected Class name', function() { + it('Renders a span "text" with its own ID, overwritten with an injected ID', function() { + const source = '{{#oldId text}}{#newId}'; + const rendered = Markdown.render(source); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('text'); + }); + + it('Renders a span "text" with its own attributes, overwritten with an injected attribute, plus a new one', function() { + const source = '{{attrA="old",attrB="old" text}}{attrA="new",attrC="new"}'; + const rendered = Markdown.render(source); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('text'); + }); + + it('Renders a span "text" with its own attributes, overwritten with an injected attribute, ignoring "class", "style", and "id"', function() { + const source = '{{attrA="old",attrB="old" text}}{attrA="new",attrC="new",class="new",style="new",id="new"}'; + const rendered = Markdown.render(source); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('text'); + }); + + it('Renders a span "text" with its own styles, appended with injected styles', function() { + const source = '{{color:blue,height:10px text}}{width:10px,color:red}'; + const rendered = Markdown.render(source); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('text'); + }); + + it('Renders a span "text" with its own classes, appended with injected classes', function() { + const source = '{{classA,classB text}}{classA,classC}'; + const rendered = Markdown.render(source); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('text'); + }); + + it('Renders an emphasis element with injected Class name', function() { const source = '*emphasis*{big}'; const rendered = Markdown.render(source).trimReturns(); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('

emphasis

'); }); - it.failing('Renders a code element with injected style', function() { + it('Renders a code element with injected style', function() { const source = '`code`{background:gray}'; const rendered = Markdown.render(source).trimReturns(); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('

code

'); }); - it.failing('Renders an image element with injected style', function() { + it('Renders an image element with injected style', function() { const source = '![alt text](http://i.imgur.com/hMna6G0.png){position:absolute}'; const rendered = Markdown.render(source).trimReturns(); - expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('

homebrew mug

'); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('

alt text

'); }); - it.failing('Renders an element modified by only the first of two consecutive injections', function() { + it('Renders an element modified by only the first of two consecutive injections', function() { const source = '{{ text}}{color:red}{background:blue}'; const rendered = Markdown.render(source).trimReturns(); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('

text{background:blue}

'); @@ -306,61 +336,106 @@ describe('Injection: When an injection tag follows an element', ()=>{ it('Renders an image with added attributes', function() { const source = `![homebrew mug](https://i.imgur.com/hMna6G0.png) {position:absolute,bottom:20px,left:130px,width:220px,a="b and c",d=e}`; const rendered = Markdown.render(source).trimReturns(); - expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`

homebrew mug

`); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`

homebrew mug

`); }); }); describe('and that element is a block', ()=>{ - it.failing('renders a div "text" with no injection', function() { + it('renders a div "text" with no injection', function() { const source = '{{\ntext\n}}\n{}'; const rendered = Markdown.render(source).trimReturns(); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('

text

'); }); - it.failing('renders a div "text" with injected Class name', function() { + it('renders a div "text" with injected Class name', function() { const source = '{{\ntext\n}}\n{ClassName}'; const rendered = Markdown.render(source).trimReturns(); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('

text

'); }); - it.failing('renders a div "text" with injected style', function() { + it('renders a div "text" with injected style', function() { const source = '{{\ntext\n}}\n{color:red}'; const rendered = Markdown.render(source).trimReturns(); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('

text

'); }); - it.failing('renders a div "text" with two injected styles', function() { + it('renders a div "text" with two injected styles', function() { const source = dedent`{{ - text - }} - {color:red,background:blue}`; + text + }} + {color:red,background:blue}`; const rendered = Markdown.render(source).trimReturns(); - expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`

text

`); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`

text

`); }); - it.failing('renders a div "text" with injected variable string', function() { + it('renders a div "text" with injected variable string', function() { const source = dedent`{{ - text - }} - {--stringVariable:"'string'"}`; + text + }} + {--stringVariable:"'string'"}`; const rendered = Markdown.render(source).trimReturns(); - expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`

text

`); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`

text

`); }); - it.failing('renders an h2 header "text" with injected class name', function() { + it('Renders a span "text" with its own ID, overwritten with an injected ID', function() { + const source = dedent`{{#oldId + text + }} + {#newId}`; + const rendered = Markdown.render(source).trimReturns(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('

text

'); + }); + + it('Renders a span "text" with its own attributes, overwritten with an injected attribute, plus a new one', function() { + const source = dedent`{{attrA="old",attrB="old" + text + }} + {attrA="new",attrC="new"}`; + const rendered = Markdown.render(source).trimReturns(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('

text

'); + }); + + it('Renders a span "text" with its own attributes, overwritten with an injected attribute, ignoring "class", "style", and "id"', function() { + const source = dedent`{{attrA="old",attrB="old" + text + }} + {attrA="new",attrC="new",class="new",style="new",id="new"}`; + const rendered = Markdown.render(source).trimReturns(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('

text

'); + }); + + it('Renders a span "text" with its own styles, appended with injected styles', function() { + const source = dedent`{{color:blue,height:10px + text + }} + {width:10px,color:red}`; + const rendered = Markdown.render(source).trimReturns(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('

text

'); + }); + + it('Renders a span "text" with its own classes, appended with injected classes', function() { + const source = dedent`{{classA,classB + text + }} + {classA,classC}`; + const rendered = Markdown.render(source).trimReturns(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('

text

'); + }); + + it('renders an h2 header "text" with injected class name', function() { const source = dedent`## text - {ClassName}`; + {ClassName}`; const rendered = Markdown.render(source).trimReturns(); - expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('

text

'); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('

text

'); }); - it.failing('renders a table with injected class name', function() { + it('renders a table with injected class name', function() { const source = dedent`| Experience Points | Level | - |:------------------|:-----:| - | 0 | 1 | - | 300 | 2 | + |:------------------|:-----:| + | 0 | 1 | + | 300 | 2 | - {ClassName}`; + {ClassName}`; const rendered = Markdown.render(source).trimReturns(); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`
Experience PointsLevel
01
3002
`); }); @@ -376,23 +451,23 @@ describe('Injection: When an injection tag follows an element', ()=>{ // expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`...`); // FIXME: expect this to be injected into
    ? Currently injects into last
  • // }); - it.failing('renders an h2 header "text" with injected class name, and "secondInjection" as regular text on the next line.', function() { + it('renders an h2 header "text" with injected class name, and "secondInjection" as regular text on the next line.', function() { const source = dedent`## text {ClassName} {secondInjection}`; const rendered = Markdown.render(source).trimReturns(); - expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('

    text

    {secondInjection}

    '); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('

    text

    {secondInjection}

    '); }); - it.failing('renders a div nested into another div, the inner with class=innerDiv and the other class=outerDiv', function() { + it('renders a div nested into another div, the inner with class=innerDiv and the other class=outerDiv', function() { const source = dedent`{{ - outer text - {{ - inner text - }} - {innerDiv} - }} - {outerDiv}`; + outer text + {{ + inner text + }} + {innerDiv} + }} + {outerDiv}`; const rendered = Markdown.render(source).trimReturns(); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe('

    outer text

    inner text

    '); }); diff --git a/tests/markdown/variables.test.js b/tests/markdown/variables.test.js index c909dafec..e6018e19f 100644 --- a/tests/markdown/variables.test.js +++ b/tests/markdown/variables.test.js @@ -329,7 +329,7 @@ describe('Normal Links and Images', ()=>{ const source = `![alt text](url){width:100px}`; const rendered = Markdown.render(source).trimReturns(); expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(dedent` -

    alt text

    `.trimReturns()); +

    alt text

    `.trimReturns()); }); it('Renders normal links', function() { diff --git a/themes/V3/5ePHB/snippets/coverpage.gen.js b/themes/V3/5ePHB/snippets/coverpage.gen.js index 865269f92..b662aaaa6 100644 --- a/themes/V3/5ePHB/snippets/coverpage.gen.js +++ b/themes/V3/5ePHB/snippets/coverpage.gen.js @@ -149,8 +149,6 @@ module.exports = { ![](/assets/naturalCritLogoWhite.svg) Homebrewery.Naturalcrit.com - }} - - \page`; + }}`; } }; diff --git a/themes/V3/5ePHB/style.less b/themes/V3/5ePHB/style.less index ed3e8604c..f000fec15 100644 --- a/themes/V3/5ePHB/style.less +++ b/themes/V3/5ePHB/style.less @@ -1,6 +1,4 @@ -@import (less) './themes/fonts/5e/fonts.less'; @import (less) './themes/assets/assets.less'; -@import (less) './themes/fonts/icon fonts/font-icons.less'; :root { //Colors @@ -532,21 +530,19 @@ .page:has(.frontCover) { columns : 1; text-align : center; - &::after { all : unset; } + &::after { display : none; } h1 { margin-top : 1.2cm; margin-bottom : 0; font-family : 'NodestoCapsCondensed'; font-size : 2.245cm; font-weight : normal; - line-height : 0.85em; + line-height : 1.9cm; color : white; text-shadow : unset; text-transform : uppercase; - filter : drop-shadow(0 0 1.5px black) drop-shadow(0 0 0 black) - drop-shadow(0 0 0 black) drop-shadow(0 0 0 black) - drop-shadow(0 0 0 black) drop-shadow(0 0 0 black) - drop-shadow(0 0 0 black) drop-shadow(0 0 0 black); + -webkit-text-stroke: 0.2cm black; + paint-order:stroke; } h2 { font-family : 'NodestoCapsCondensed'; @@ -554,10 +550,8 @@ font-weight : normal; color : white; letter-spacing : 0.1cm; - filter : drop-shadow(0 0 1px black) drop-shadow(0 0 0 black) - drop-shadow(0 0 0 black) drop-shadow(0 0 0 black) - drop-shadow(0 0 0 black) drop-shadow(0 0 0 black) - drop-shadow(0 0 0 black) drop-shadow(0 0 0 black); + -webkit-text-stroke: 0.14cm black; + paint-order:stroke; } hr { position : relative; @@ -603,10 +597,8 @@ font-size : 0.496cm; color : white; text-align : center; - filter : drop-shadow(0 0 0.7px black) drop-shadow(0 0 0 black) - drop-shadow(0 0 0 black) drop-shadow(0 0 0 black) - drop-shadow(0 0 0 black) drop-shadow(0 0 0 black) - drop-shadow(0 0 0 black) drop-shadow(0 0 0 black); + -webkit-text-stroke: 0.1cm black; + paint-order:stroke; } .logo { position : absolute; @@ -626,14 +618,14 @@ .page:has(.insideCover) { columns : 1; text-align : center; - &::after { all : unset; } + &::after { display : none; } h1 { margin-top : 1.2cm; margin-bottom : 0; font-family : 'NodestoCapsCondensed'; font-size : 2.1cm; font-weight : normal; - line-height : 0.85em; + line-height : 1.785cm; text-transform : uppercase; } h2 { @@ -672,7 +664,7 @@ padding : 2.25cm 1.3cm 2cm 1.3cm; color : #FFFFFF; columns : 1; - &::after { all : unset; } + &::after { display : none; } .columnWrapper { width : 7.6cm; } .backCover { position : absolute; @@ -688,7 +680,7 @@ margin-bottom : 0.3cm; font-family : 'NodestoCapsCondensed'; font-size : 1.35cm; - line-height : 0.95em; + line-height : 1.28cm; color : #ED1C24; text-align : center; } @@ -714,7 +706,7 @@ p { font-family : 'Overpass'; font-size : 0.332cm; - line-height : 1.5em; + line-height : 0.35cm; } hr + p { margin-top : 0.6cm; @@ -739,10 +731,10 @@ font-family : 'NodestoCapsWide'; font-size : 0.4cm; line-height : 1em; + line-height : 1.28cm; color : #FFFFFF; text-align : center; text-indent : 0; - letter-spacing : 0.08em; } } } @@ -782,7 +774,7 @@ margin-left : auto; font-family : 'Overpass'; font-size : 0.45cm; - line-height : 1.1em; + line-height : 0.495cm; } } diff --git a/themes/V3/Blank/snippets.js b/themes/V3/Blank/snippets.js index 122666055..272368665 100644 --- a/themes/V3/Blank/snippets.js +++ b/themes/V3/Blank/snippets.js @@ -326,27 +326,27 @@ module.exports = [ gen : dedent`{{font-family:CodeLight Dummy Text}}` }, { - name : 'Scaly Sans Remake', + name : 'Scaly Sans', icon : 'font ScalySansRemake', gen : dedent`{{font-family:ScalySansRemake Dummy Text}}` }, { - name : 'Book Insanity Remake', + name : 'Book Insanity', icon : 'font BookInsanityRemake', gen : dedent`{{font-family:BookInsanityRemake Dummy Text}}` }, { - name : 'Mr Eaves Remake', + name : 'Mr Eaves', icon : 'font MrEavesRemake', gen : dedent`{{font-family:MrEavesRemake Dummy Text}}` }, { - name: 'Solbera Imitation Remake', + name: 'Solbera Imitation', icon: 'font SolberaImitationRemake', gen: dedent`{{font-family:SolberaImitationRemake Dummy Text}}` }, { - name: 'Scaly Sans Small Caps Remake', + name: 'Scaly Sans Small Caps', icon: 'font ScalySansSmallCapsRemake', gen: dedent`{{font-family:ScalySansSmallCapsRemake Dummy Text}}` }, diff --git a/themes/V3/Blank/style.less b/themes/V3/Blank/style.less index 3e5b2290f..31af3769b 100644 --- a/themes/V3/Blank/style.less +++ b/themes/V3/Blank/style.less @@ -1,5 +1,7 @@ @import (less) './themes/fonts/5e/fonts.less'; @import (less) './themes/assets/assets.less'; +@import (less) './themes/fonts/iconFonts/elderberryInn.less'; +@import (less) './themes/fonts/iconFonts/diceFont.less'; :root { //Colors diff --git a/themes/fonts/5e/dicefont.less b/themes/fonts/5e/dicefont.less deleted file mode 100644 index 887a7c27c..000000000 --- a/themes/fonts/5e/dicefont.less +++ /dev/null @@ -1,118 +0,0 @@ -/* - Icon Font: dicefont -*/ -@font-face { - font-family: 'DiceFont'; - src: url('../../../fonts/5e/dicefont.woff2') format('woff2'), - url('../../../fonts/5e/dicefont.woff') format('woff'); - font-weight: normal; - font-style: normal; -} - -.df { - display: inline-block; - font-family: 'DiceFont'; - font-style: normal; - font-weight: normal; - font-variant: normal; - line-height: 1; - text-decoration: inherit; - text-rendering: optimizeLegibility; - text-transform: none; - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; - font-smooth: antialiased; - &.F:before { content: '\f190'; } - &.F-minus:before { content: '\f191'; } - &.F-plus:before { content: '\f192'; } - &.F-zero:before { content: '\f193'; } - &.d10:before { content: '\f194'; } - &.d10-0:before { content: '\f100'; } - &.d10-1:before { content: '\f101'; } - &.d10-10:before { content: '\f102'; } - &.d10-2:before { content: '\f103'; } - &.d10-3:before { content: '\f104'; } - &.d10-4:before { content: '\f105'; } - &.d10-5:before { content: '\f106'; } - &.d10-6:before { content: '\f107'; } - &.d10-7:before { content: '\f108'; } - &.d10-8:before { content: '\f109'; } - &.d10-9:before { content: '\f10a'; } - &.d12:before { content: '\f195'; } - &.d12-1:before { content: '\f10b'; } - &.d12-10:before { content: '\f10c'; } - &.d12-11:before { content: '\f10d'; } - &.d12-12:before { content: '\f10e'; } - &.d12-2:before { content: '\f10f'; } - &.d12-3:before { content: '\f110'; } - &.d12-4:before { content: '\f111'; } - &.d12-5:before { content: '\f112'; } - &.d12-6:before { content: '\f113'; } - &.d12-7:before { content: '\f114'; } - &.d12-8:before { content: '\f115'; } - &.d12-9:before { content: '\f116'; } - &.d2:before { content: '\f196'; } - &.d2-1:before { content: '\f117'; } - &.d2-2:before { content: '\f118'; } - &.d20:before { content: '\f197'; } - &.d20-1:before { content: '\f119'; } - &.d20-10:before { content: '\f11a'; } - &.d20-11:before { content: '\f11b'; } - &.d20-12:before { content: '\f11c'; } - &.d20-13:before { content: '\f11d'; } - &.d20-14:before { content: '\f11e'; } - &.d20-15:before { content: '\f11f'; } - &.d20-16:before { content: '\f120'; } - &.d20-17:before { content: '\f121'; } - &.d20-18:before { content: '\f122'; } - &.d20-19:before { content: '\f123'; } - &.d20-2:before { content: '\f124'; } - &.d20-20:before { content: '\f125'; } - &.d20-3:before { content: '\f126'; } - &.d20-4:before { content: '\f127'; } - &.d20-5:before { content: '\f128'; } - &.d20-6:before { content: '\f129'; } - &.d20-7:before { content: '\f12a'; } - &.d20-8:before { content: '\f12b'; } - &.d20-9:before { content: '\f12c'; } - &.d4:before { content: '\f198'; } - &.d4-1:before { content: '\f12d'; } - &.d4-2:before { content: '\f12e'; } - &.d4-3:before { content: '\f12f'; } - &.d4-4:before { content: '\f130'; } - &.d6:before { content: '\f199'; } - &.d6-1:before { content: '\f131'; } - &.d6-2:before { content: '\f132'; } - &.d6-3:before { content: '\f133'; } - &.d6-4:before { content: '\f134'; } - &.d6-5:before { content: '\f135'; } - &.d6-6:before { content: '\f136'; } - &.d8:before { content: '\f19a'; } - &.d8-1:before { content: '\f137'; } - &.d8-2:before { content: '\f138'; } - &.d8-3:before { content: '\f139'; } - &.d8-4:before { content: '\f13a'; } - &.d8-5:before { content: '\f13b'; } - &.d8-6:before { content: '\f13c'; } - &.d8-7:before { content: '\f13d'; } - &.d8-8:before { content: '\f13e'; } - &.dot-d6:before { content: '\f19b'; } - &.dot-d6-1:before { content: '\f13f'; } - &.dot-d6-2:before { content: '\f140'; } - &.dot-d6-3:before { content: '\f141'; } - &.dot-d6-4:before { content: '\f142'; } - &.dot-d6-5:before { content: '\f143'; } - &.dot-d6-6:before { content: '\f18f'; } - &.small-dot-d6-1:before { content: '\f183'; } - &.small-dot-d6-2:before { content: '\f184'; } - &.small-dot-d6-3:before { content: '\f185'; } - &.small-dot-d6-4:before { content: '\f186'; } - &.small-dot-d6-5:before { content: '\f187'; } - &.small-dot-d6-6:before { content: '\f188'; } - &.solid-small-dot-d6-1:before { content: '\f189'; } - &.solid-small-dot-d6-2:before { content: '\f18a'; } - &.solid-small-dot-d6-3:before { content: '\f18b'; } - &.solid-small-dot-d6-4:before { content: '\f18c'; } - &.solid-small-dot-d6-5:before { content: '\f18d'; } - &.solid-small-dot-d6-6:before { content: '\f18e'; } -} \ No newline at end of file diff --git a/themes/fonts/5e/dicefont.woff b/themes/fonts/5e/dicefont.woff deleted file mode 100644 index d6f54f38e..000000000 Binary files a/themes/fonts/5e/dicefont.woff and /dev/null differ diff --git a/themes/fonts/5e/fonts.less b/themes/fonts/5e/fonts.less index b59fe1671..8f089b51c 100644 --- a/themes/fonts/5e/fonts.less +++ b/themes/fonts/5e/fonts.less @@ -1,5 +1,3 @@ -@import url('./dicefont.less'); - /* Main Font, serif */ @font-face { font-family: BookInsanityRemake; diff --git a/themes/fonts/icon fonts/font-icons.less b/themes/fonts/icon fonts/font-icons.less deleted file mode 100644 index f8eb19f11..000000000 --- a/themes/fonts/icon fonts/font-icons.less +++ /dev/null @@ -1,224 +0,0 @@ -/* Main Font, serif */ -@font-face { - font-family : 'Eldeberry-Inn'; - font-style : normal; - font-weight : normal; - src : url('../../../fonts/icon fonts/Elderberry-Inn-Icons.woff2'); -} - -.page { - span.ei { - display : inline-block; - margin-right : 3px; - font-family : 'Eldeberry-Inn'; - line-height : 1; - vertical-align : baseline; - -moz-osx-font-smoothing : grayscale; - -webkit-font-smoothing : antialiased; - text-rendering : auto; - - &.book::before { content : '\E900'; } - &.screen::before { content : '\E901'; } - - /* Spell levels */ - &.spell-0::before { content : '\E902'; } - &.spell-1::before { content : '\E903'; } - &.spell-2::before { content : '\E904'; } - &.spell-3::before { content : '\E905'; } - &.spell-4::before { content : '\E906'; } - &.spell-5::before { content : '\E907'; } - &.spell-6::before { content : '\E908'; } - &.spell-7::before { content : '\E909'; } - &.spell-8::before { content : '\E90A'; } - &.spell-9::before { content : '\E90B'; } - - /* Damage types */ - &.acid::before { content : '\E90C'; } - &.bludgeoning::before { content : '\E90D'; } - &.cold::before { content : '\E90E'; } - &.fire::before { content : '\E90F'; } - &.force::before { content : '\E910'; } - &.lightning::before { content : '\E911'; } - &.necrotic::before { content : '\E912'; } - &.piercing::before { content : '\E914'; } - &.poison::before { content : '\E913'; } - &.psychic::before { content : '\E915'; } - &.radiant::before { content : '\E916'; } - &.slashing::before { content : '\E917'; } - &.thunder::before { content : '\E918'; } - - /* DnD Conditions */ - &.blinded::before { content : '\E919'; } - &.charmed::before { content : '\E91A'; } - &.deafened::before { content : '\E91B'; } - &.exhaust-1::before { content : '\E91C'; } - &.exhaust-2::before { content : '\E91D'; } - &.exhaust-3::before { content : '\E91E'; } - &.exhaust-4::before { content : '\E91F'; } - &.exhaust-5::before { content : '\E920'; } - &.exhaust-6::before { content : '\E921'; } - &.frightened::before { content : '\E922'; } - &.grappled::before { content : '\E923'; } - &.incapacitated::before { content : '\E924'; } - &.invisible::before { content : '\E926'; } - &.paralyzed::before { content : '\E927'; } - &.petrified::before { content : '\E928'; } - &.poisoned::before { content : '\E929'; } - &.prone::before { content : '\E92A'; } - &.restrained::before { content : '\E92B'; } - &.stunned::before { content : '\E92C'; } - &.unconscious::before { content : '\E925'; } - - /* Character Classes and Features */ - &.barbarian-rage::before { content : '\E92D'; } - &.barbarian-reckless-attack::before { content : '\E92E'; } - &.bardic-inspiration::before { content : '\E92F'; } - &.cleric-channel-divinity::before { content : '\E930'; } - &.druid-wild-shape::before { content : '\E931'; } - &.fighter-action-surge::before { content : '\E932'; } - &.fighter-second-wind::before { content : '\E933'; } - &.monk-flurry-blows::before { content : '\E934'; } - &.monk-patient-defense::before { content : '\E935'; } - &.monk-step-of-the-wind::before { content : '\E936'; } - &.monk-step-of-the-wind-2::before { content : '\E937'; } - &.monk-step-of-the-wind-3::before { content : '\E938'; } - &.monk-stunning-strike::before { content : '\E939'; } - &.monk-stunning-strike-2::before { content : '\E939'; } - &.paladin-divine-smite::before { content : '\E93B'; } - &.paladin-lay-on-hands::before { content : '\E93C'; } - &.barbarian-abilities::before { content : '\E93D'; } - &.barbarian::before { content : '\E93E'; } - &.bard-abilities::before { content : '\E93F'; } - &.bard::before { content : '\E940'; } - &.cleric-abilities::before { content : '\E941'; } - &.cleric::before { content : '\E942'; } - &.druid-abilities::before { content : '\E943'; } - &.druid::before { content : '\E944'; } - &.fighter-abilities::before { content : '\E945'; } - &.fighter::before { content : '\E946'; } - &.monk-abilities::before { content : '\E947'; } - &.monk::before { content : '\E948'; } - &.paladin-abilities::before { content : '\E949'; } - &.paladin::before { content : '\E94A'; } - &.ranger-abilities::before { content : '\E94B'; } - &.ranger::before { content : '\E94C'; } - &.rogue-abilities::before { content : '\E94D'; } - &.rogue::before { content : '\E94E'; } - &.sorcerer-abilities::before { content : '\E94F'; } - &.sorcerer::before { content : '\E950'; } - &.warlock-abilities::before { content : '\E951'; } - &.warlock::before { content : '\E952'; } - &.wizard-abilities::before { content : '\E953'; } - &.wizard::before { content : '\E954'; } - - /* Types of actions */ - &.movement::before { content : '\E955'; } - &.action::before { content : '\E956'; } - &.bonus-action::before { content : '\E957'; } - &.reaction::before { content : '\E958'; } - - /* SRD Spells */ - &.acid-arrow::before { content : '\E959'; } - &.action-1::before { content : '\E95A'; } - &.alter-self::before { content : '\E95B'; } - &.alter-self-2::before { content : '\E95C'; } - &.animal-friendship::before { content : '\E95E'; } - &.animate-dead::before { content : '\E95F'; } - &.animate-objects::before { content : '\E960'; } - &.animate-objects-2::before { content : '\E961'; } - &.bane::before { content : '\E962'; } - &.bless::before { content : '\E963'; } - &.blur::before { content : '\E964'; } - &.bonus::before { content : '\E965'; } - &.branding-smite::before { content : '\E966'; } - &.burning-hands::before { content : '\E967'; } - &.charm-person::before { content : '\E968'; } - &.chill-touch::before { content : '\E969'; } - &.cloudkill::before { content : '\E96A'; } - &.comprehend-languages::before { content : '\E96B'; } - &.cone-of-cold::before { content : '\E96C'; } - &.conjure-elemental::before { content : '\E96D'; } - &.conjure-minor-elemental::before { content : '\E96E'; } - &.control-water::before { content : '\E96F'; } - &.counterspell::before { content : '\E970'; } - &.cure-wounds::before { content : '\E971'; } - &.dancing-lights::before { content : '\E972'; } - &.darkness::before { content : '\E973'; } - &.detect-magic::before { content : '\E974'; } - &.disguise-self::before { content : '\E975'; } - &.disintegrate::before { content : '\E976'; } - &.dispel-evil-and-good::before { content : '\E977'; } - &.dispel-magic::before { content : '\E978'; } - &.dominate-monster::before { content : '\E979'; } - &.dominate-person::before { content : '\E97A'; } - &.eldritch-blast::before { content : '\E97B'; } - &.enlarge-reduce::before { content : '\E97C'; } - &.entangle::before { content : '\E97D'; } - &.faerie-fire::before { content : '\E97E'; } - &.faerie-fire2::before { content : '\E97F'; } - &.feather-fall::before { content : '\E980'; } - &.find-familiar::before { content : '\E981'; } - &.finger-of-death::before { content : '\E982'; } - &.fireball::before { content : '\E983'; } - &.floating-disk::before { content : '\E984'; } - &.fly::before { content : '\E985'; } - &.fog-cloud::before { content : '\E986'; } - &.gaseous-form::before { content : '\E987'; } - &.gaseous-form2::before { content : '\E988'; } - &.gentle-repose::before { content : '\E989'; } - &.gentle-repose2::before { content : '\E98A'; } - &.globe-of-invulnerability::before { content : '\E98B'; } - &.guiding-bolt::before { content : '\E98C'; } - &.healing-word::before { content : '\E98D'; } - &.heat-metal::before { content : '\E98E'; } - &.hellish-rebuke::before { content : '\E98F'; } - &.heroes-feast::before { content : '\E990'; } - &.heroism::before { content : '\E991'; } - &.hideous-laughter::before { content : '\E992'; } - &.identify::before { content : '\E993'; } - &.illusory-script::before { content : '\E994'; } - &.inflict-wounds::before { content : '\E995'; } - &.light::before { content : '\E996'; } - &.longstrider::before { content : '\E997'; } - &.mage-armor::before { content : '\E998'; } - &.mage-hand::before { content : '\E999'; } - &.magic-missile::before { content : '\E99A'; } - &.mass-cure-wounds::before { content : '\E99B'; } - &.mass-healing-word::before { content : '\E99C'; } - &.Mending::before { content : '\E99D'; } - &.message::before { content : '\E99E'; } - &.Minor-illusion::before { content : '\E99F'; } - &.movement1::before { content : '\E9A0'; } - &.polymorph::before { content : '\E9A1'; } - &.power-word-kill::before { content : '\E9A2'; } - &.power-word-stun::before { content : '\E9A3'; } - &.prayer-of-healing::before { content : '\E9A4'; } - &.prestidigitation::before { content : '\E9A5'; } - &.protection-from-evil-and-good::before { content : '\E9A6'; } - &.raise-read::before { content : '\E9A7'; } - &.raise-read2::before { content : '\E9A8'; } - &.reaction1::before { content : '\E9A9'; } - &.resurrection::before { content : '\E9AA'; } - &.resurrection2::before { content : '\E9AB'; } - &.revivify::before { content : '\E9AC'; } - &.revivify2::before { content : '\E9AD'; } - &.sacred-flame::before { content : '\E9AE'; } - &.sanctuary::before { content : '\E9AF'; } - &.scorching-ray::before { content : '\E9B0'; } - &.sending::before { content : '\E9B1'; } - &.shatter::before { content : '\E9B2'; } - &.shield::before { content : '\E9B3'; } - &.silent-image::before { content : '\E9B4'; } - &.sleep::before { content : '\E9B5'; } - &.speak-with-animals::before { content : '\E9B6'; } - &.telekinesis::before { content : '\E9B7'; } - &.true-strike::before { content : '\E9B8'; } - &.vicious-mockery::before { content : '\E9B9'; } - &.wall-of-fire::before { content : '\E9BA'; } - &.wall-of-force::before { content : '\E9BB'; } - &.wall-of-ice::before { content : '\E9BC'; } - &.wall-of-stone::before { content : '\E9BD'; } - &.wall-of-thorns::before { content : '\E9BE'; } - &.wish::before { content : '\E9BF'; } - } -} \ No newline at end of file diff --git a/themes/fonts/iconFonts/diceFont.js b/themes/fonts/iconFonts/diceFont.js new file mode 100644 index 000000000..6ac75ad26 --- /dev/null +++ b/themes/fonts/iconFonts/diceFont.js @@ -0,0 +1,96 @@ +const diceFont = { + 'df_f' : 'df F', + 'df_f_minus' : 'df F-minus', + 'df_f_plus' : 'df F-plus', + 'df_f_zero' : 'df F-zero', + 'df_d10' : 'df d10', + 'df_d10_1' : 'df d10-1', + 'df_d10_10' : 'df d10-10', + 'df_d10_2' : 'df d10-2', + 'df_d10_3' : 'df d10-3', + 'df_d10_4' : 'df d10-4', + 'df_d10_5' : 'df d10-5', + 'df_d10_6' : 'df d10-6', + 'df_d10_7' : 'df d10-7', + 'df_d10_8' : 'df d10-8', + 'df_d10_9' : 'df d10-9', + 'df_d12' : 'df d12', + 'df_d12_1' : 'df d12-1', + 'df_d12_10' : 'df d12-10', + 'df_d12_11' : 'df d12-11', + 'df_d12_12' : 'df d12-12', + 'df_d12_2' : 'df d12-2', + 'df_d12_3' : 'df d12-3', + 'df_d12_4' : 'df d12-4', + 'df_d12_5' : 'df d12-5', + 'df_d12_6' : 'df d12-6', + 'df_d12_7' : 'df d12-7', + 'df_d12_8' : 'df d12-8', + 'df_d12_9' : 'df d12-9', + 'df_d2' : 'df d2', + 'df_d2_1' : 'df d2-1', + 'df_d2_2' : 'df d2-2', + 'df_d20' : 'df d20', + 'df_d20_1' : 'df d20-1', + 'df_d20_10' : 'df d20-10', + 'df_d20_11' : 'df d20-11', + 'df_d20_12' : 'df d20-12', + 'df_d20_13' : 'df d20-13', + 'df_d20_14' : 'df d20-14', + 'df_d20_15' : 'df d20-15', + 'df_d20_16' : 'df d20-16', + 'df_d20_17' : 'df d20-17', + 'df_d20_18' : 'df d20-18', + 'df_d20_19' : 'df d20-19', + 'df_d20_2' : 'df d20-2', + 'df_d20_20' : 'df d20-20', + 'df_d20_3' : 'df d20-3', + 'df_d20_4' : 'df d20-4', + 'df_d20_5' : 'df d20-5', + 'df_d20_6' : 'df d20-6', + 'df_d20_7' : 'df d20-7', + 'df_d20_8' : 'df d20-8', + 'df_d20_9' : 'df d20-9', + 'df_d4' : 'df d4', + 'df_d4_1' : 'df d4-1', + 'df_d4_2' : 'df d4-2', + 'df_d4_3' : 'df d4-3', + 'df_d4_4' : 'df d4-4', + 'df_d6' : 'df d6', + 'df_d6_1' : 'df d6-1', + 'df_d6_2' : 'df d6-2', + 'df_d6_3' : 'df d6-3', + 'df_d6_4' : 'df d6-4', + 'df_d6_5' : 'df d6-5', + 'df_d6_6' : 'df d6-6', + 'df_d8' : 'df d8', + 'df_d8_1' : 'df d8-1', + 'df_d8_2' : 'df d8-2', + 'df_d8_3' : 'df d8-3', + 'df_d8_4' : 'df d8-4', + 'df_d8_5' : 'df d8-5', + 'df_d8_6' : 'df d8-6', + 'df_d8_7' : 'df d8-7', + 'df_d8_8' : 'df d8-8', + 'df_dot_d6' : 'df dot-d6', + 'df_dot_d6_1' : 'df dot-d6-1', + 'df_dot_d6_2' : 'df dot-d6-2', + 'df_dot_d6_3' : 'df dot-d6-3', + 'df_dot_d6_4' : 'df dot-d6-4', + 'df_dot_d6_5' : 'df dot-d6-5', + 'df_dot_d6_6' : 'df dot-d6-6', + 'df_small_dot_d6_1' : 'df small-dot-d6-1', + 'df_small_dot_d6_2' : 'df small-dot-d6-2', + 'df_small_dot_d6_3' : 'df small-dot-d6-3', + 'df_small_dot_d6_4' : 'df small-dot-d6-4', + 'df_small_dot_d6_5' : 'df small-dot-d6-5', + 'df_small_dot_d6_6' : 'df small-dot-d6-6', + 'df_solid_small_dot_d6_1' : 'df solid-small-dot-d6-1', + 'df_solid_small_dot_d6_2' : 'df solid-small-dot-d6-2', + 'df_solid_small_dot_d6_3' : 'df solid-small-dot-d6-3', + 'df_solid_small_dot_d6_4' : 'df solid-small-dot-d6-4', + 'df_solid_small_dot_d6_5' : 'df solid-small-dot-d6-5', + 'df_solid_small_dot_d6_6' : 'df solid-small-dot-d6-6' +}; + +module.exports = diceFont; \ No newline at end of file diff --git a/themes/fonts/iconFonts/diceFont.less b/themes/fonts/iconFonts/diceFont.less new file mode 100644 index 000000000..6fe226a05 --- /dev/null +++ b/themes/fonts/iconFonts/diceFont.less @@ -0,0 +1,114 @@ +/* Icon Font: diceFont */ +@font-face { + font-family : 'DiceFont'; + font-style : normal; + font-weight : normal; + src : url('../../../fonts/iconFonts/diceFont.woff2'); +} + +.df { + display : inline-block; + font-family : 'DiceFont'; + font-style : normal; + font-weight : normal; + font-variant : normal; + line-height : 1; + text-decoration : inherit; + text-transform : none; + text-rendering : optimizeLegibility; + -moz-osx-font-smoothing : grayscale; + -webkit-font-smoothing : antialiased; + &.F::before { content : '\f190'; } + &.F-minus::before { content : '\f191'; } + &.F-plus::before { content : '\f192'; } + &.F-zero::before { content : '\f193'; } + &.d10::before { content : '\f194'; } + &.d10-0::before { content : '\f100'; } + &.d10-1::before { content : '\f101'; } + &.d10-10::before { content : '\f102'; } + &.d10-2::before { content : '\f103'; } + &.d10-3::before { content : '\f104'; } + &.d10-4::before { content : '\f105'; } + &.d10-5::before { content : '\f106'; } + &.d10-6::before { content : '\f107'; } + &.d10-7::before { content : '\f108'; } + &.d10-8::before { content : '\f109'; } + &.d10-9::before { content : '\f10a'; } + &.d12::before { content : '\f195'; } + &.d12-1::before { content : '\f10b'; } + &.d12-10::before { content : '\f10c'; } + &.d12-11::before { content : '\f10d'; } + &.d12-12::before { content : '\f10e'; } + &.d12-2::before { content : '\f10f'; } + &.d12-3::before { content : '\f110'; } + &.d12-4::before { content : '\f111'; } + &.d12-5::before { content : '\f112'; } + &.d12-6::before { content : '\f113'; } + &.d12-7::before { content : '\f114'; } + &.d12-8::before { content : '\f115'; } + &.d12-9::before { content : '\f116'; } + &.d2::before { content : '\f196'; } + &.d2-1::before { content : '\f117'; } + &.d2-2::before { content : '\f118'; } + &.d20::before { content : '\f197'; } + &.d20-1::before { content : '\f119'; } + &.d20-10::before { content : '\f11a'; } + &.d20-11::before { content : '\f11b'; } + &.d20-12::before { content : '\f11c'; } + &.d20-13::before { content : '\f11d'; } + &.d20-14::before { content : '\f11e'; } + &.d20-15::before { content : '\f11f'; } + &.d20-16::before { content : '\f120'; } + &.d20-17::before { content : '\f121'; } + &.d20-18::before { content : '\f122'; } + &.d20-19::before { content : '\f123'; } + &.d20-2::before { content : '\f124'; } + &.d20-20::before { content : '\f125'; } + &.d20-3::before { content : '\f126'; } + &.d20-4::before { content : '\f127'; } + &.d20-5::before { content : '\f128'; } + &.d20-6::before { content : '\f129'; } + &.d20-7::before { content : '\f12a'; } + &.d20-8::before { content : '\f12b'; } + &.d20-9::before { content : '\f12c'; } + &.d4::before { content : '\f198'; } + &.d4-1::before { content : '\f12d'; } + &.d4-2::before { content : '\f12e'; } + &.d4-3::before { content : '\f12f'; } + &.d4-4::before { content : '\f130'; } + &.d6::before { content : '\f199'; } + &.d6-1::before { content : '\f131'; } + &.d6-2::before { content : '\f132'; } + &.d6-3::before { content : '\f133'; } + &.d6-4::before { content : '\f134'; } + &.d6-5::before { content : '\f135'; } + &.d6-6::before { content : '\f136'; } + &.d8::before { content : '\f19a'; } + &.d8-1::before { content : '\f137'; } + &.d8-2::before { content : '\f138'; } + &.d8-3::before { content : '\f139'; } + &.d8-4::before { content : '\f13a'; } + &.d8-5::before { content : '\f13b'; } + &.d8-6::before { content : '\f13c'; } + &.d8-7::before { content : '\f13d'; } + &.d8-8::before { content : '\f13e'; } + &.dot-d6::before { content : '\f19b'; } + &.dot-d6-1::before { content : '\f13f'; } + &.dot-d6-2::before { content : '\f140'; } + &.dot-d6-3::before { content : '\f141'; } + &.dot-d6-4::before { content : '\f142'; } + &.dot-d6-5::before { content : '\f143'; } + &.dot-d6-6::before { content : '\f18f'; } + &.small-dot-d6-1::before { content : '\f183'; } + &.small-dot-d6-2::before { content : '\f184'; } + &.small-dot-d6-3::before { content : '\f185'; } + &.small-dot-d6-4::before { content : '\f186'; } + &.small-dot-d6-5::before { content : '\f187'; } + &.small-dot-d6-6::before { content : '\f188'; } + &.solid-small-dot-d6-1::before { content : '\f189'; } + &.solid-small-dot-d6-2::before { content : '\f18a'; } + &.solid-small-dot-d6-3::before { content : '\f18b'; } + &.solid-small-dot-d6-4::before { content : '\f18c'; } + &.solid-small-dot-d6-5::before { content : '\f18d'; } + &.solid-small-dot-d6-6::before { content : '\f18e'; } +} \ No newline at end of file diff --git a/themes/fonts/5e/dicefont.woff2 b/themes/fonts/iconFonts/diceFont.woff2 similarity index 100% rename from themes/fonts/5e/dicefont.woff2 rename to themes/fonts/iconFonts/diceFont.woff2 diff --git a/themes/fonts/5e/dicefont_license.md b/themes/fonts/iconFonts/diceFont_license.md similarity index 100% rename from themes/fonts/5e/dicefont_license.md rename to themes/fonts/iconFonts/diceFont_license.md diff --git a/themes/fonts/iconFonts/elderberryInn.js b/themes/fonts/iconFonts/elderberryInn.js new file mode 100644 index 000000000..d23bca086 --- /dev/null +++ b/themes/fonts/iconFonts/elderberryInn.js @@ -0,0 +1,208 @@ +const elderberryInn = { + 'ei_book' : 'ei book', + 'ei_screen' : 'ei screen', + + /* Spell levels */ + 'ei_spell_0' : 'ei spell-0', + 'ei_spell_1' : 'ei spell-1', + 'ei_spell_2' : 'ei spell-2', + 'ei_spell_3' : 'ei spell-3', + 'ei_spell_4' : 'ei spell-4', + 'ei_spell_5' : 'ei spell-5', + 'ei_spell_6' : 'ei spell-6', + 'ei_spell_7' : 'ei spell-7', + 'ei_spell_8' : 'ei spell-8', + 'ei_spell_9' : 'ei spell-9', + + /* Damage types */ + 'ei_acid' : 'ei acid', + 'ei_bludgeoning' : 'ei bludgeoning', + 'ei_cold' : 'ei cold', + 'ei_fire' : 'ei fire', + 'ei_force' : 'ei force', + 'ei_lightning' : 'ei lightning', + 'ei_necrotic' : 'ei necrotic', + 'ei_piercing' : 'ei piercing', + 'ei_poison' : 'ei poison', + 'ei_psychic' : 'ei psychic', + 'ei_radiant' : 'ei radiant', + 'ei_slashing' : 'ei slashing', + 'ei_thunder' : 'ei thunder', + + /* DnD Donditions */ + 'ei_blinded' : 'ei blinded', + 'ei_charmed' : 'ei charmed', + 'ei_deafened' : 'ei deafened', + 'ei_exhaust1' : 'ei exhaust-1', + 'ei_blinded' : 'ei blinded', + 'ei_exhaust2' : 'ei exhaust-2', + 'ei_exhaust3' : 'ei exhaust-3', + 'ei_exhaust4' : 'ei exhaust-4', + 'ei_exhaust5' : 'ei exhaust-5', + 'ei_exhaust6' : 'ei exhaust-6', + 'ei_frightened' : 'ei frightened', + 'ei_grappled' : 'ei grappled', + 'ei_incapacitated' : 'ei incapacitated', + 'ei_invisible' : 'ei invisible', + 'ei_paralyzed' : 'ei paralyzed', + 'ei_petrified' : 'ei petrified', + 'ei_poisoned' : 'ei poisoned', + 'ei_prone' : 'ei prone', + 'ei_restrained' : 'ei restrained', + 'ei_stunned' : 'ei stunned', + 'ei_unconscious' : 'ei unconscious', + + /* Character Classes and Features */ + 'ei_barbarian_rage' : 'ei barbarian-rage', + 'ei_barbarian_reckless_attack' : 'ei barbarian-reckless-attack', + 'ei_bardic_inspiration' : 'ei bardic-inspiration', + 'ei_cleric_channel_divinity' : 'ei cleric-channel-divinity', + 'ei_druid_wild_shape' : 'ei druid-wild-shape', + 'ei_fighter_action_surge' : 'ei fighter-action-surge', + 'ei_fighter_second_wind' : 'ei fighter-second-wind', + 'ei_monk_flurry_blows' : 'ei monk-flurry-blows', + 'ei_monk_patient_defense' : 'ei monk-patient-defense', + 'ei_monk_step_of_the_wind' : 'ei monk-step-of-the-wind', + 'ei_monk_step_of_the_wind2' : 'ei monk-step-of-the-wind-2', + 'ei_monk_step_of_the_wind3' : 'ei monk-step-of-the-wind-3', + 'ei_monk_stunning_strike' : 'ei monk-stunning-strike', + 'ei_monk_stunning_strike2' : 'ei monk-stunning-strike-2', + 'ei_paladin_divine_smite' : 'ei paladin-divine-smite', + 'ei_paladin_lay_on_hands' : 'ei paladin-lay-on-hands', + 'ei_barbarian_abilities' : 'ei barbarian-abilities', + 'ei_barbarian' : 'ei barbarian', + 'ei_bard_abilities' : 'ei bard-abilities', + 'ei_bard' : 'ei bard', + 'ei_cleric_abilities' : 'ei cleric-abilities', + 'ei_cleric' : 'ei cleric', + 'ei_druid_abilities' : 'ei druid-abilities', + 'ei_druid' : 'ei druid', + 'ei_fighter_abilities' : 'ei fighter-abilities', + 'ei_fighter' : 'ei fighter', + 'ei_monk_abilities' : 'ei monk-abilities', + 'ei_monk' : 'ei monk', + 'ei_paladin_abilities' : 'ei paladin-abilities', + 'ei_paladin' : 'ei paladin', + 'ei_ranger_abilities' : 'ei ranger-abilities', + 'ei_ranger' : 'ei ranger', + 'ei_rogue_abilities' : 'ei rogue-abilities', + 'ei_rogue' : 'ei rogue', + 'ei_sorcerer_abilities' : 'ei sorcerer-abilities', + 'ei_sorcerer' : 'ei sorcerer', + 'ei_warlock_abilities' : 'ei warlock-abilities', + 'ei_warlock' : 'ei warlock', + 'ei_wizard_abilities' : 'ei wizard-abilities', + 'ei_wizard' : 'ei wizard', + + /* Types of actions */ + 'ei_movement' : 'ei movement', + 'ei_action' : 'ei action', + 'ei_bonus_action' : 'ei bonus-action', + 'ei_reaction' : 'ei reaction', + + /* SRD Spells */ + 'ei_acid_arrow' : 'ei acid-arrow', + 'ei_action1' : 'ei action-1', + 'ei_alter_self' : 'ei alter-self', + 'ei_alter_self2' : 'ei alter-self-2', + 'ei_animal_friendship' : 'ei animal-friendship', + 'ei_animate_dead' : 'ei animate-dead', + 'ei_animate_objects' : 'ei animate-objects', + 'ei_animate_objects2' : 'ei animate-objects-2', + 'ei_bane' : 'ei bane', + 'ei_bless' : 'ei bless', + 'ei_blur' : 'ei blur', + 'ei_bonus' : 'ei bonus', + 'ei_branding_smite' : 'ei branding-smite', + 'ei_burning_hands' : 'ei burning-hands', + 'ei_charm_person' : 'ei charm-person', + 'ei_chill_touch' : 'ei chill-touch', + 'ei_cloudkill' : 'ei cloudkill', + 'ei_comprehend_languages' : 'ei comprehend-languages', + 'ei_cone_of_cold' : 'ei cone-of-cold', + 'ei_conjure_elemental' : 'ei conjure-elemental', + 'ei_conjure_minor_elemental' : 'ei conjure-minor-elemental', + 'ei_control_water' : 'ei control-water', + 'ei_counterspell' : 'ei counterspell', + 'ei_cure_wounds' : 'ei cure-wounds', + 'ei_dancing_lights' : 'ei dancing-lights', + 'ei_darkness' : 'ei darkness', + 'ei_detect_magic' : 'ei detect-magic', + 'ei_disguise_self' : 'ei disguise-self', + 'ei_disintegrate' : 'ei disintegrate', + 'ei_dispel_evil_and_good' : 'ei dispel-evil-and-good', + 'ei_dispel_magic' : 'ei dispel-magic', + 'ei_dominate_monster' : 'ei dominate-monster', + 'ei_dominate_person' : 'ei dominate-person', + 'ei_eldritch_blast' : 'ei eldritch-blast', + 'ei_enlarge_reduce' : 'ei enlarge-reduce', + 'ei_entangle' : 'ei entangle', + 'ei_faerie_fire' : 'ei faerie-fire', + 'ei_faerie_fire2' : 'ei faerie-fire2', + 'ei_feather_fall' : 'ei feather-fall', + 'ei_find_familiar' : 'ei find-familiar', + 'ei_finger_of_death' : 'ei finger-of-death', + 'ei_fireball' : 'ei fireball', + 'ei_floating_disk' : 'ei floating-disk', + 'ei_fly' : 'ei fly', + 'ei_fog_cloud' : 'ei fog-cloud', + 'ei_gaseous_form' : 'ei gaseous-form', + 'ei_gaseous_form2' : 'ei gaseous-form2', + 'ei_gentle_repose' : 'ei gentle-repose', + 'ei_gentle_repose2' : 'ei gentle-repose2', + 'ei_globe_of_invulnerability' : 'ei globe-of-invulnerability', + 'ei_guiding_bolt' : 'ei guiding-bolt', + 'ei_healing_word' : 'ei healing-word', + 'ei_heat_metal' : 'ei heat-metal', + 'ei_hellish_rebuke' : 'ei hellish-rebuke', + 'ei_heroes_feast' : 'ei heroes-feast', + 'ei_heroism' : 'ei heroism', + 'ei_hideous_laughter' : 'ei hideous-laughter', + 'ei_identify' : 'ei identify', + 'ei_illusory_script' : 'ei illusory-script', + 'ei_inflict_wounds' : 'ei inflict-wounds', + 'ei_light' : 'ei light', + 'ei_longstrider' : 'ei longstrider', + 'ei_mage_armor' : 'ei mage-armor', + 'ei_mage_hand' : 'ei mage-hand', + 'ei_magic_missile' : 'ei magic-missile', + 'ei_mass_cure_wounds' : 'ei mass-cure-wounds', + 'ei_mass_healing_word' : 'ei mass-healing-word', + 'ei_mending' : 'ei _mending', + 'ei_message' : 'ei message', + 'ei_minor_illusion' : 'ei _minor-illusion', + 'ei_movement1' : 'ei movement1', + 'ei_polymorph' : 'ei polymorph', + 'ei_power_word_kill' : 'ei power-word-kill', + 'ei_power_word_stun' : 'ei power-word-stun', + 'ei_prayer_of_healing' : 'ei prayer-of-healing', + 'ei_prestidigitation' : 'ei prestidigitation', + 'ei_protection_from_evil_and_good' : 'ei protection-from-evil-and-good', + 'ei_raise_dead' : 'ei raise-dead', + 'ei_raise_dead2' : 'ei raise-dead2', + 'ei_reaction1' : 'ei reaction1', + 'ei_resurrection' : 'ei resurrection', + 'ei_resurrection2' : 'ei resurrection2', + 'ei_revivify' : 'ei revivify', + 'ei_revivify2' : 'ei revivify2', + 'ei_sacred_flame' : 'ei sacred-flame', + 'ei_sanctuary' : 'ei sanctuary', + 'ei_scorching_ray' : 'ei scorching-ray', + 'ei_sending' : 'ei sending', + 'ei_shatter' : 'ei shatter', + 'ei_shield' : 'ei shield', + 'ei_silent_image' : 'ei silent-image', + 'ei_sleep' : 'ei sleep', + 'ei_speak_with_animals' : 'ei speak-with-animals', + 'ei_telekinesis' : 'ei telekinesis', + 'ei_true_strike' : 'ei true-strike', + 'ei_vicious_mockery' : 'ei vicious-mockery', + 'ei_wall_of_fire' : 'ei wall-of-fire', + 'ei_wall_of_force' : 'ei wall-of-force', + 'ei_wall_of_ice' : 'ei wall-of-ice', + 'ei_wall_of_stone' : 'ei wall-of-stone', + 'ei_wall_of_thorns' : 'ei wall-of-thorns', + 'ei_wish' : 'ei wish' +}; + +module.exports = elderberryInn; \ No newline at end of file diff --git a/themes/fonts/iconFonts/elderberryInn.less b/themes/fonts/iconFonts/elderberryInn.less new file mode 100644 index 000000000..adabe5a81 --- /dev/null +++ b/themes/fonts/iconFonts/elderberryInn.less @@ -0,0 +1,222 @@ +/* Icon Font: Elderberry Inn */ +@font-face { + font-family : 'Elderberry-Inn'; + font-style : normal; + font-weight : normal; + src : url('../../../fonts/iconFonts/elderberryInn.woff2'); +} + +.ei { + display : inline-block; + margin-right : 3px; + font-family : 'Elderberry-Inn'; + line-height : 1; + vertical-align : baseline; + -moz-osx-font-smoothing : grayscale; + -webkit-font-smoothing : antialiased; + text-rendering : auto; + + &.book::before { content : '\E900'; } + &.screen::before { content : '\E901'; } + + /* Spell levels */ + &.spell-0::before { content : '\E902'; } + &.spell-1::before { content : '\E903'; } + &.spell-2::before { content : '\E904'; } + &.spell-3::before { content : '\E905'; } + &.spell-4::before { content : '\E906'; } + &.spell-5::before { content : '\E907'; } + &.spell-6::before { content : '\E908'; } + &.spell-7::before { content : '\E909'; } + &.spell-8::before { content : '\E90A'; } + &.spell-9::before { content : '\E90B'; } + + /* Damage types */ + &.acid::before { content : '\E90C'; } + &.bludgeoning::before { content : '\E90D'; } + &.cold::before { content : '\E90E'; } + &.fire::before { content : '\E90F'; } + &.force::before { content : '\E910'; } + &.lightning::before { content : '\E911'; } + &.necrotic::before { content : '\E912'; } + &.piercing::before { content : '\E913'; } + &.poison::before { content : '\E914'; } + &.psychic::before { content : '\E915'; } + &.radiant::before { content : '\E916'; } + &.slashing::before { content : '\E917'; } + &.thunder::before { content : '\E918'; } + + /* DnD Conditions */ + &.blinded::before { content : '\E919'; } + &.charmed::before { content : '\E91A'; } + &.deafened::before { content : '\E91B'; } + &.exhaust-1::before { content : '\E91C'; } + &.exhaust-2::before { content : '\E91D'; } + &.exhaust-3::before { content : '\E91E'; } + &.exhaust-4::before { content : '\E91F'; } + &.exhaust-5::before { content : '\E920'; } + &.exhaust-6::before { content : '\E921'; } + &.frightened::before { content : '\E922'; } + &.grappled::before { content : '\E923'; } + &.incapacitated::before { content : '\E924'; } + &.invisible::before { content : '\E926'; } + &.paralyzed::before { content : '\E927'; } + &.petrified::before { content : '\E928'; } + &.poisoned::before { content : '\E929'; } + &.prone::before { content : '\E92A'; } + &.restrained::before { content : '\E92B'; } + &.stunned::before { content : '\E92C'; } + &.unconscious::before { content : '\E925'; } + + /* Character Classes and Features */ + &.barbarian-rage::before { content : '\E92D'; } + &.barbarian-reckless-attack::before { content : '\E92E'; } + &.bardic-inspiration::before { content : '\E92F'; } + &.cleric-channel-divinity::before { content : '\E930'; } + &.druid-wild-shape::before { content : '\E931'; } + &.fighter-action-surge::before { content : '\E932'; } + &.fighter-second-wind::before { content : '\E933'; } + &.monk-flurry-blows::before { content : '\E934'; } + &.monk-patient-defense::before { content : '\E935'; } + &.monk-step-of-the-wind::before { content : '\E936'; } + &.monk-step-of-the-wind-2::before { content : '\E937'; } + &.monk-step-of-the-wind-3::before { content : '\E938'; } + &.monk-stunning-strike::before { content : '\E939'; } + &.monk-stunning-strike-2::before { content : '\E939'; } + &.paladin-divine-smite::before { content : '\E93B'; } + &.paladin-lay-on-hands::before { content : '\E93C'; } + &.barbarian-abilities::before { content : '\E93D'; } + &.barbarian::before { content : '\E93E'; } + &.bard-abilities::before { content : '\E93F'; } + &.bard::before { content : '\E940'; } + &.cleric-abilities::before { content : '\E941'; } + &.cleric::before { content : '\E942'; } + &.druid-abilities::before { content : '\E943'; } + &.druid::before { content : '\E944'; } + &.fighter-abilities::before { content : '\E945'; } + &.fighter::before { content : '\E946'; } + &.monk-abilities::before { content : '\E947'; } + &.monk::before { content : '\E948'; } + &.paladin-abilities::before { content : '\E949'; } + &.paladin::before { content : '\E94A'; } + &.ranger-abilities::before { content : '\E94B'; } + &.ranger::before { content : '\E94C'; } + &.rogue-abilities::before { content : '\E94D'; } + &.rogue::before { content : '\E94E'; } + &.sorcerer-abilities::before { content : '\E94F'; } + &.sorcerer::before { content : '\E950'; } + &.warlock-abilities::before { content : '\E951'; } + &.warlock::before { content : '\E952'; } + &.wizard-abilities::before { content : '\E953'; } + &.wizard::before { content : '\E954'; } + + /* Types of actions */ + &.movement::before { content : '\E955'; } + &.action::before { content : '\E956'; } + &.bonus-action::before { content : '\E957'; } + &.reaction::before { content : '\E958'; } + + /* SRD Spells */ + &.acid-arrow::before { content : '\E959'; } + &.action-1::before { content : '\E95A'; } + &.alter-self::before { content : '\E95B'; } + &.alter-self-2::before { content : '\E95C'; } + &.animal-friendship::before { content : '\E95E'; } + &.animate-dead::before { content : '\E95F'; } + &.animate-objects::before { content : '\E960'; } + &.animate-objects-2::before { content : '\E961'; } + &.bane::before { content : '\E962'; } + &.bless::before { content : '\E963'; } + &.blur::before { content : '\E964'; } + &.bonus::before { content : '\E965'; } + &.branding-smite::before { content : '\E966'; } + &.burning-hands::before { content : '\E967'; } + &.charm-person::before { content : '\E968'; } + &.chill-touch::before { content : '\E969'; } + &.cloudkill::before { content : '\E96A'; } + &.comprehend-languages::before { content : '\E96B'; } + &.cone-of-cold::before { content : '\E96C'; } + &.conjure-elemental::before { content : '\E96D'; } + &.conjure-minor-elemental::before { content : '\E96E'; } + &.control-water::before { content : '\E96F'; } + &.counterspell::before { content : '\E970'; } + &.cure-wounds::before { content : '\E971'; } + &.dancing-lights::before { content : '\E972'; } + &.darkness::before { content : '\E973'; } + &.detect-magic::before { content : '\E974'; } + &.disguise-self::before { content : '\E975'; } + &.disintegrate::before { content : '\E976'; } + &.dispel-evil-and-good::before { content : '\E977'; } + &.dispel-magic::before { content : '\E978'; } + &.dominate-monster::before { content : '\E979'; } + &.dominate-person::before { content : '\E97A'; } + &.eldritch-blast::before { content : '\E97B'; } + &.enlarge-reduce::before { content : '\E97C'; } + &.entangle::before { content : '\E97D'; } + &.faerie-fire::before { content : '\E97E'; } + &.faerie-fire2::before { content : '\E97F'; } + &.feather-fall::before { content : '\E980'; } + &.find-familiar::before { content : '\E981'; } + &.finger-of-death::before { content : '\E982'; } + &.fireball::before { content : '\E983'; } + &.floating-disk::before { content : '\E984'; } + &.fly::before { content : '\E985'; } + &.fog-cloud::before { content : '\E986'; } + &.gaseous-form::before { content : '\E987'; } + &.gaseous-form2::before { content : '\E988'; } + &.gentle-repose::before { content : '\E989'; } + &.gentle-repose2::before { content : '\E98A'; } + &.globe-of-invulnerability::before { content : '\E98B'; } + &.guiding-bolt::before { content : '\E98C'; } + &.healing-word::before { content : '\E98D'; } + &.heat-metal::before { content : '\E98E'; } + &.hellish-rebuke::before { content : '\E98F'; } + &.heroes-feast::before { content : '\E990'; } + &.heroism::before { content : '\E991'; } + &.hideous-laughter::before { content : '\E992'; } + &.identify::before { content : '\E993'; } + &.illusory-script::before { content : '\E994'; } + &.inflict-wounds::before { content : '\E995'; } + &.light::before { content : '\E996'; } + &.longstrider::before { content : '\E997'; } + &.mage-armor::before { content : '\E998'; } + &.mage-hand::before { content : '\E999'; } + &.magic-missile::before { content : '\E99A'; } + &.mass-cure-wounds::before { content : '\E99B'; } + &.mass-healing-word::before { content : '\E99C'; } + &.Mending::before { content : '\E99D'; } + &.message::before { content : '\E99E'; } + &.Minor-illusion::before { content : '\E99F'; } + &.movement1::before { content : '\E9A0'; } + &.polymorph::before { content : '\E9A1'; } + &.power-word-kill::before { content : '\E9A2'; } + &.power-word-stun::before { content : '\E9A3'; } + &.prayer-of-healing::before { content : '\E9A4'; } + &.prestidigitation::before { content : '\E9A5'; } + &.protection-from-evil-and-good::before { content : '\E9A6'; } + &.raise-dead::before { content : '\E9A7'; } + &.raise-dead2::before { content : '\E9A8'; } + &.reaction1::before { content : '\E9A9'; } + &.resurrection::before { content : '\E9AA'; } + &.resurrection2::before { content : '\E9AB'; } + &.revivify::before { content : '\E9AC'; } + &.revivify2::before { content : '\E9AD'; } + &.sacred-flame::before { content : '\E9AE'; } + &.sanctuary::before { content : '\E9AF'; } + &.scorching-ray::before { content : '\E9B0'; } + &.sending::before { content : '\E9B1'; } + &.shatter::before { content : '\E9B2'; } + &.shield::before { content : '\E9B3'; } + &.silent-image::before { content : '\E9B4'; } + &.sleep::before { content : '\E9B5'; } + &.speak-with-animals::before { content : '\E9B6'; } + &.telekinesis::before { content : '\E9B7'; } + &.true-strike::before { content : '\E9B8'; } + &.vicious-mockery::before { content : '\E9B9'; } + &.wall-of-fire::before { content : '\E9BA'; } + &.wall-of-force::before { content : '\E9BB'; } + &.wall-of-ice::before { content : '\E9BC'; } + &.wall-of-stone::before { content : '\E9BD'; } + &.wall-of-thorns::before { content : '\E9BE'; } + &.wish::before { content : '\E9BF'; } +} \ No newline at end of file diff --git a/themes/fonts/icon fonts/Elderberry-Inn-Icons.woff2 b/themes/fonts/iconFonts/elderberryInn.woff2 similarity index 100% rename from themes/fonts/icon fonts/Elderberry-Inn-Icons.woff2 rename to themes/fonts/iconFonts/elderberryInn.woff2 diff --git a/themes/fonts/iconFonts/fontAwesome.js b/themes/fonts/iconFonts/fontAwesome.js new file mode 100644 index 000000000..764bd5bc5 --- /dev/null +++ b/themes/fonts/iconFonts/fontAwesome.js @@ -0,0 +1,2054 @@ +const fontAwesome = { + // FONT-AWESOME SOLID + 'fas_0' : 'fas fa-0', + 'fas_1' : 'fas fa-1', + 'fas_2' : 'fas fa-2', + 'fas_3' : 'fas fa-3', + 'fas_4' : 'fas fa-4', + 'fas_5' : 'fas fa-5', + 'fas_6' : 'fas fa-6', + 'fas_7' : 'fas fa-7', + 'fas_8' : 'fas fa-8', + 'fas_9' : 'fas fa-9', + 'fas_a' : 'fas fa-a', + 'fas_address_book' : 'fas fa-address-book', + 'fas_address_card' : 'fas fa-address-card', + 'fas_align_center' : 'fas fa-align-center', + 'fas_align_justify' : 'fas fa-align-justify', + 'fas_align_left' : 'fas fa-align-left', + 'fas_align_right' : 'fas fa-align-right', + 'fas_anchor_circle_check' : 'fas fa-anchor-circle-check', + 'fas_anchor_circle_exclamation' : 'fas fa-anchor-circle-exclamation', + 'fas_anchor_circle_xmark' : 'fas fa-anchor-circle-xmark', + 'fas_anchor_lock' : 'fas fa-anchor-lock', + 'fas_anchor' : 'fas fa-anchor', + 'fas_angle_down' : 'fas fa-angle-down', + 'fas_angle_left' : 'fas fa-angle-left', + 'fas_angle_right' : 'fas fa-angle-right', + 'fas_angle_up' : 'fas fa-angle-up', + 'fas_angles_down' : 'fas fa-angles-down', + 'fas_angles_left' : 'fas fa-angles-left', + 'fas_angles_right' : 'fas fa-angles-right', + 'fas_angles_up' : 'fas fa-angles-up', + 'fas_ankh' : 'fas fa-ankh', + 'fas_apple_whole' : 'fas fa-apple-whole', + 'fas_archway' : 'fas fa-archway', + 'fas_arrow_down_1_9' : 'fas fa-arrow-down-1-9', + 'fas_arrow_down_9_1' : 'fas fa-arrow-down-9-1', + 'fas_arrow_down_a_z' : 'fas fa-arrow-down-a-z', + 'fas_arrow_down_long' : 'fas fa-arrow-down-long', + 'fas_arrow_down_short_wide' : 'fas fa-arrow-down-short-wide', + 'fas_arrow_down_up_across_line' : 'fas fa-arrow-down-up-across-line', + 'fas_arrow_down_up_lock' : 'fas fa-arrow-down-up-lock', + 'fas_arrow_down_wide_short' : 'fas fa-arrow-down-wide-short', + 'fas_arrow_down_z_a' : 'fas fa-arrow-down-z-a', + 'fas_arrow_down' : 'fas fa-arrow-down', + 'fas_arrow_left_long' : 'fas fa-arrow-left-long', + 'fas_arrow_left' : 'fas fa-arrow-left', + 'fas_arrow_pointer' : 'fas fa-arrow-pointer', + 'fas_arrow_right_arrow_left' : 'fas fa-arrow-right-arrow-left', + 'fas_arrow_right_from_bracket' : 'fas fa-arrow-right-from-bracket', + 'fas_arrow_right_long' : 'fas fa-arrow-right-long', + 'fas_arrow_right_to_bracket' : 'fas fa-arrow-right-to-bracket', + 'fas_arrow_right_to_city' : 'fas fa-arrow-right-to-city', + 'fas_arrow_right' : 'fas fa-arrow-right', + 'fas_arrow_rotate_left' : 'fas fa-arrow-rotate-left', + 'fas_arrow_rotate_right' : 'fas fa-arrow-rotate-right', + 'fas_arrow_trend_down' : 'fas fa-arrow-trend-down', + 'fas_arrow_trend_up' : 'fas fa-arrow-trend-up', + 'fas_arrow_turn_down' : 'fas fa-arrow-turn-down', + 'fas_arrow_turn_up' : 'fas fa-arrow-turn-up', + 'fas_arrow_up_1_9' : 'fas fa-arrow-up-1-9', + 'fas_arrow_up_9_1' : 'fas fa-arrow-up-9-1', + 'fas_arrow_up_a_z' : 'fas fa-arrow-up-a-z', + 'fas_arrow_up_from_bracket' : 'fas fa-arrow-up-from-bracket', + 'fas_arrow_up_from_ground_water' : 'fas fa-arrow-up-from-ground-water', + 'fas_arrow_up_from_water_pump' : 'fas fa-arrow-up-from-water-pump', + 'fas_arrow_up_long' : 'fas fa-arrow-up-long', + 'fas_arrow_up_right_dots' : 'fas fa-arrow-up-right-dots', + 'fas_arrow_up_right_from_square' : 'fas fa-arrow-up-right-from-square', + 'fas_arrow_up_short_wide' : 'fas fa-arrow-up-short-wide', + 'fas_arrow_up_wide_short' : 'fas fa-arrow-up-wide-short', + 'fas_arrow_up_z_a' : 'fas fa-arrow-up-z-a', + 'fas_arrow_up' : 'fas fa-arrow-up', + 'fas_arrows_down_to_line' : 'fas fa-arrows-down-to-line', + 'fas_arrows_down_to_people' : 'fas fa-arrows-down-to-people', + 'fas_arrows_left_right_to_line' : 'fas fa-arrows-left-right-to-line', + 'fas_arrows_left_right' : 'fas fa-arrows-left-right', + 'fas_arrows_rotate' : 'fas fa-arrows-rotate', + 'fas_arrows_spin' : 'fas fa-arrows-spin', + 'fas_arrows_split_up_and_left' : 'fas fa-arrows-split-up-and-left', + 'fas_arrows_to_circle' : 'fas fa-arrows-to-circle', + 'fas_arrows_to_dot' : 'fas fa-arrows-to-dot', + 'fas_arrows_to_eye' : 'fas fa-arrows-to-eye', + 'fas_arrows_turn_right' : 'fas fa-arrows-turn-right', + 'fas_arrows_turn_to_dots' : 'fas fa-arrows-turn-to-dots', + 'fas_arrows_up_down_left_right' : 'fas fa-arrows-up-down-left-right', + 'fas_arrows_up_down' : 'fas fa-arrows-up-down', + 'fas_arrows_up_to_line' : 'fas fa-arrows-up-to-line', + 'fas_asterisk' : 'fas fa-asterisk', + 'fas_at' : 'fas fa-at', + 'fas_atom' : 'fas fa-atom', + 'fas_audio_description' : 'fas fa-audio-description', + 'fas_austral_sign' : 'fas fa-austral-sign', + 'fas_award' : 'fas fa-award', + 'fas_b' : 'fas fa-b', + 'fas_baby_carriage' : 'fas fa-baby-carriage', + 'fas_baby' : 'fas fa-baby', + 'fas_backward_fast' : 'fas fa-backward-fast', + 'fas_backward_step' : 'fas fa-backward-step', + 'fas_backward' : 'fas fa-backward', + 'fas_bacon' : 'fas fa-bacon', + 'fas_bacteria' : 'fas fa-bacteria', + 'fas_bacterium' : 'fas fa-bacterium', + 'fas_bag_shopping' : 'fas fa-bag-shopping', + 'fas_bahai' : 'fas fa-bahai', + 'fas_baht_sign' : 'fas fa-baht-sign', + 'fas_ban_smoking' : 'fas fa-ban-smoking', + 'fas_ban' : 'fas fa-ban', + 'fas_bandage' : 'fas fa-bandage', + 'fas_bangladeshi_taka_sign' : 'fas fa-bangladeshi-taka-sign', + 'fas_barcode' : 'fas fa-barcode', + 'fas_bars_progress' : 'fas fa-bars-progress', + 'fas_bars_staggered' : 'fas fa-bars-staggered', + 'fas_bars' : 'fas fa-bars', + 'fas_baseball_bat_ball' : 'fas fa-baseball-bat-ball', + 'fas_baseball' : 'fas fa-baseball', + 'fas_basket_shopping' : 'fas fa-basket-shopping', + 'fas_basketball' : 'fas fa-basketball', + 'fas_bath' : 'fas fa-bath', + 'fas_battery_empty' : 'fas fa-battery-empty', + 'fas_battery_full' : 'fas fa-battery-full', + 'fas_battery_half' : 'fas fa-battery-half', + 'fas_battery_quarter' : 'fas fa-battery-quarter', + 'fas_battery_three_quarters' : 'fas fa-battery-three-quarters', + 'fas_bed_pulse' : 'fas fa-bed-pulse', + 'fas_bed' : 'fas fa-bed', + 'fas_beer_mug_empty' : 'fas fa-beer-mug-empty', + 'fas_bell_concierge' : 'fas fa-bell-concierge', + 'fas_bell_slash' : 'fas fa-bell-slash', + 'fas_bell' : 'fas fa-bell', + 'fas_bezier_curve' : 'fas fa-bezier-curve', + 'fas_bicycle' : 'fas fa-bicycle', + 'fas_binoculars' : 'fas fa-binoculars', + 'fas_biohazard' : 'fas fa-biohazard', + 'fas_bitcoin_sign' : 'fas fa-bitcoin-sign', + 'fas_blender_phone' : 'fas fa-blender-phone', + 'fas_blender' : 'fas fa-blender', + 'fas_blog' : 'fas fa-blog', + 'fas_bold' : 'fas fa-bold', + 'fas_bolt_lightning' : 'fas fa-bolt-lightning', + 'fas_bolt' : 'fas fa-bolt', + 'fas_bomb' : 'fas fa-bomb', + 'fas_bone' : 'fas fa-bone', + 'fas_bong' : 'fas fa-bong', + 'fas_book_atlas' : 'fas fa-book-atlas', + 'fas_book_bible' : 'fas fa-book-bible', + 'fas_book_bookmark' : 'fas fa-book-bookmark', + 'fas_book_journal_whills' : 'fas fa-book-journal-whills', + 'fas_book_medical' : 'fas fa-book-medical', + 'fas_book_open_reader' : 'fas fa-book-open-reader', + 'fas_book_open' : 'fas fa-book-open', + 'fas_book_quran' : 'fas fa-book-quran', + 'fas_book_skull' : 'fas fa-book-skull', + 'fas_book_tanakh' : 'fas fa-book-tanakh', + 'fas_book' : 'fas fa-book', + 'fas_bookmark' : 'fas fa-bookmark', + 'fas_border_all' : 'fas fa-border-all', + 'fas_border_none' : 'fas fa-border-none', + 'fas_border_top_left' : 'fas fa-border-top-left', + 'fas_bore_hole' : 'fas fa-bore-hole', + 'fas_bottle_droplet' : 'fas fa-bottle-droplet', + 'fas_bottle_water' : 'fas fa-bottle-water', + 'fas_bowl_food' : 'fas fa-bowl-food', + 'fas_bowl_rice' : 'fas fa-bowl-rice', + 'fas_bowling_ball' : 'fas fa-bowling-ball', + 'fas_box_archive' : 'fas fa-box-archive', + 'fas_box_open' : 'fas fa-box-open', + 'fas_box_tissue' : 'fas fa-box-tissue', + 'fas_box' : 'fas fa-box', + 'fas_boxes_packing' : 'fas fa-boxes-packing', + 'fas_boxes_stacked' : 'fas fa-boxes-stacked', + 'fas_braille' : 'fas fa-braille', + 'fas_brain' : 'fas fa-brain', + 'fas_brazilian_real_sign' : 'fas fa-brazilian-real-sign', + 'fas_bread_slice' : 'fas fa-bread-slice', + 'fas_bridge_circle_check' : 'fas fa-bridge-circle-check', + 'fas_bridge_circle_exclamation' : 'fas fa-bridge-circle-exclamation', + 'fas_bridge_circle_xmark' : 'fas fa-bridge-circle-xmark', + 'fas_bridge_lock' : 'fas fa-bridge-lock', + 'fas_bridge_water' : 'fas fa-bridge-water', + 'fas_bridge' : 'fas fa-bridge', + 'fas_briefcase_medical' : 'fas fa-briefcase-medical', + 'fas_briefcase' : 'fas fa-briefcase', + 'fas_broom_ball' : 'fas fa-broom-ball', + 'fas_broom' : 'fas fa-broom', + 'fas_brush' : 'fas fa-brush', + 'fas_bucket' : 'fas fa-bucket', + 'fas_bug_slash' : 'fas fa-bug-slash', + 'fas_bug' : 'fas fa-bug', + 'fas_bugs' : 'fas fa-bugs', + 'fas_building_circle_arrow_right' : 'fas fa-building-circle-arrow-right', + 'fas_building_circle_check' : 'fas fa-building-circle-check', + 'fas_building_circle_exclamation' : 'fas fa-building-circle-exclamation', + 'fas_building_circle_xmark' : 'fas fa-building-circle-xmark', + 'fas_building_columns' : 'fas fa-building-columns', + 'fas_building_flag' : 'fas fa-building-flag', + 'fas_building_lock' : 'fas fa-building-lock', + 'fas_building_ngo' : 'fas fa-building-ngo', + 'fas_building_shield' : 'fas fa-building-shield', + 'fas_building_un' : 'fas fa-building-un', + 'fas_building_user' : 'fas fa-building-user', + 'fas_building_wheat' : 'fas fa-building-wheat', + 'fas_building' : 'fas fa-building', + 'fas_bullhorn' : 'fas fa-bullhorn', + 'fas_bullseye' : 'fas fa-bullseye', + 'fas_burger' : 'fas fa-burger', + 'fas_burst' : 'fas fa-burst', + 'fas_bus_simple' : 'fas fa-bus-simple', + 'fas_bus' : 'fas fa-bus', + 'fas_business_time' : 'fas fa-business-time', + 'fas_c' : 'fas fa-c', + 'fas_cable_car' : 'fas fa-cable-car', + 'fas_cake_candles' : 'fas fa-cake-candles', + 'fas_calculator' : 'fas fa-calculator', + 'fas_calendar_check' : 'fas fa-calendar-check', + 'fas_calendar_day' : 'fas fa-calendar-day', + 'fas_calendar_days' : 'fas fa-calendar-days', + 'fas_calendar_minus' : 'fas fa-calendar-minus', + 'fas_calendar_plus' : 'fas fa-calendar-plus', + 'fas_calendar_week' : 'fas fa-calendar-week', + 'fas_calendar_xmark' : 'fas fa-calendar-xmark', + 'fas_calendar' : 'fas fa-calendar', + 'fas_camera_retro' : 'fas fa-camera-retro', + 'fas_camera_rotate' : 'fas fa-camera-rotate', + 'fas_camera' : 'fas fa-camera', + 'fas_campground' : 'fas fa-campground', + 'fas_candy_cane' : 'fas fa-candy-cane', + 'fas_cannabis' : 'fas fa-cannabis', + 'fas_capsules' : 'fas fa-capsules', + 'fas_car_battery' : 'fas fa-car-battery', + 'fas_car_burst' : 'fas fa-car-burst', + 'fas_car_on' : 'fas fa-car-on', + 'fas_car_rear' : 'fas fa-car-rear', + 'fas_car_side' : 'fas fa-car-side', + 'fas_car_tunnel' : 'fas fa-car-tunnel', + 'fas_car' : 'fas fa-car', + 'fas_caravan' : 'fas fa-caravan', + 'fas_caret_down' : 'fas fa-caret-down', + 'fas_caret_left' : 'fas fa-caret-left', + 'fas_caret_right' : 'fas fa-caret-right', + 'fas_caret_up' : 'fas fa-caret-up', + 'fas_carrot' : 'fas fa-carrot', + 'fas_cart_arrow_down' : 'fas fa-cart-arrow-down', + 'fas_cart_flatbed_suitcase' : 'fas fa-cart-flatbed-suitcase', + 'fas_cart_flatbed' : 'fas fa-cart-flatbed', + 'fas_cart_plus' : 'fas fa-cart-plus', + 'fas_cart_shopping' : 'fas fa-cart-shopping', + 'fas_cash_register' : 'fas fa-cash-register', + 'fas_cat' : 'fas fa-cat', + 'fas_cedi_sign' : 'fas fa-cedi-sign', + 'fas_cent_sign' : 'fas fa-cent-sign', + 'fas_certificate' : 'fas fa-certificate', + 'fas_chair' : 'fas fa-chair', + 'fas_chalkboard_user' : 'fas fa-chalkboard-user', + 'fas_chalkboard' : 'fas fa-chalkboard', + 'fas_champagne_glasses' : 'fas fa-champagne-glasses', + 'fas_charging_station' : 'fas fa-charging-station', + 'fas_chart_area' : 'fas fa-chart-area', + 'fas_chart_bar' : 'fas fa-chart-bar', + 'fas_chart_column' : 'fas fa-chart-column', + 'fas_chart_gantt' : 'fas fa-chart-gantt', + 'fas_chart_line' : 'fas fa-chart-line', + 'fas_chart_pie' : 'fas fa-chart-pie', + 'fas_chart_simple' : 'fas fa-chart-simple', + 'fas_check_double' : 'fas fa-check-double', + 'fas_check_to_slot' : 'fas fa-check-to-slot', + 'fas_check' : 'fas fa-check', + 'fas_cheese' : 'fas fa-cheese', + 'fas_chess_bishop' : 'fas fa-chess-bishop', + 'fas_chess_board' : 'fas fa-chess-board', + 'fas_chess_king' : 'fas fa-chess-king', + 'fas_chess_knight' : 'fas fa-chess-knight', + 'fas_chess_pawn' : 'fas fa-chess-pawn', + 'fas_chess_queen' : 'fas fa-chess-queen', + 'fas_chess_rook' : 'fas fa-chess-rook', + 'fas_chess' : 'fas fa-chess', + 'fas_chevron_down' : 'fas fa-chevron-down', + 'fas_chevron_left' : 'fas fa-chevron-left', + 'fas_chevron_right' : 'fas fa-chevron-right', + 'fas_chevron_up' : 'fas fa-chevron-up', + 'fas_child_combatant' : 'fas fa-child-combatant', + 'fas_child_dress' : 'fas fa-child-dress', + 'fas_child_reaching' : 'fas fa-child-reaching', + 'fas_child' : 'fas fa-child', + 'fas_children' : 'fas fa-children', + 'fas_church' : 'fas fa-church', + 'fas_circle_arrow_down' : 'fas fa-circle-arrow-down', + 'fas_circle_arrow_left' : 'fas fa-circle-arrow-left', + 'fas_circle_arrow_right' : 'fas fa-circle-arrow-right', + 'fas_circle_arrow_up' : 'fas fa-circle-arrow-up', + 'fas_circle_check' : 'fas fa-circle-check', + 'fas_circle_chevron_down' : 'fas fa-circle-chevron-down', + 'fas_circle_chevron_left' : 'fas fa-circle-chevron-left', + 'fas_circle_chevron_right' : 'fas fa-circle-chevron-right', + 'fas_circle_chevron_up' : 'fas fa-circle-chevron-up', + 'fas_circle_dollar_to_slot' : 'fas fa-circle-dollar-to-slot', + 'fas_circle_dot' : 'fas fa-circle-dot', + 'fas_circle_down' : 'fas fa-circle-down', + 'fas_circle_exclamation' : 'fas fa-circle-exclamation', + 'fas_circle_h' : 'fas fa-circle-h', + 'fas_circle_half_stroke' : 'fas fa-circle-half-stroke', + 'fas_circle_info' : 'fas fa-circle-info', + 'fas_circle_left' : 'fas fa-circle-left', + 'fas_circle_minus' : 'fas fa-circle-minus', + 'fas_circle_nodes' : 'fas fa-circle-nodes', + 'fas_circle_notch' : 'fas fa-circle-notch', + 'fas_circle_pause' : 'fas fa-circle-pause', + 'fas_circle_play' : 'fas fa-circle-play', + 'fas_circle_plus' : 'fas fa-circle-plus', + 'fas_circle_question' : 'fas fa-circle-question', + 'fas_circle_radiation' : 'fas fa-circle-radiation', + 'fas_circle_right' : 'fas fa-circle-right', + 'fas_circle_stop' : 'fas fa-circle-stop', + 'fas_circle_up' : 'fas fa-circle-up', + 'fas_circle_user' : 'fas fa-circle-user', + 'fas_circle_xmark' : 'fas fa-circle-xmark', + 'fas_circle' : 'fas fa-circle', + 'fas_city' : 'fas fa-city', + 'fas_clapperboard' : 'fas fa-clapperboard', + 'fas_clipboard_check' : 'fas fa-clipboard-check', + 'fas_clipboard_list' : 'fas fa-clipboard-list', + 'fas_clipboard_question' : 'fas fa-clipboard-question', + 'fas_clipboard_user' : 'fas fa-clipboard-user', + 'fas_clipboard' : 'fas fa-clipboard', + 'fas_clock_rotate_left' : 'fas fa-clock-rotate-left', + 'fas_clock' : 'fas fa-clock', + 'fas_clone' : 'fas fa-clone', + 'fas_closed_captioning' : 'fas fa-closed-captioning', + 'fas_cloud_arrow_down' : 'fas fa-cloud-arrow-down', + 'fas_cloud_arrow_up' : 'fas fa-cloud-arrow-up', + 'fas_cloud_bolt' : 'fas fa-cloud-bolt', + 'fas_cloud_meatball' : 'fas fa-cloud-meatball', + 'fas_cloud_moon_rain' : 'fas fa-cloud-moon-rain', + 'fas_cloud_moon' : 'fas fa-cloud-moon', + 'fas_cloud_rain' : 'fas fa-cloud-rain', + 'fas_cloud_showers_heavy' : 'fas fa-cloud-showers-heavy', + 'fas_cloud_showers_water' : 'fas fa-cloud-showers-water', + 'fas_cloud_sun_rain' : 'fas fa-cloud-sun-rain', + 'fas_cloud_sun' : 'fas fa-cloud-sun', + 'fas_cloud' : 'fas fa-cloud', + 'fas_clover' : 'fas fa-clover', + 'fas_code_branch' : 'fas fa-code-branch', + 'fas_code_commit' : 'fas fa-code-commit', + 'fas_code_compare' : 'fas fa-code-compare', + 'fas_code_fork' : 'fas fa-code-fork', + 'fas_code_merge' : 'fas fa-code-merge', + 'fas_code_pull_request' : 'fas fa-code-pull-request', + 'fas_code' : 'fas fa-code', + 'fas_coins' : 'fas fa-coins', + 'fas_colon_sign' : 'fas fa-colon-sign', + 'fas_comment_dollar' : 'fas fa-comment-dollar', + 'fas_comment_dots' : 'fas fa-comment-dots', + 'fas_comment_medical' : 'fas fa-comment-medical', + 'fas_comment_slash' : 'fas fa-comment-slash', + 'fas_comment_sms' : 'fas fa-comment-sms', + 'fas_comment' : 'fas fa-comment', + 'fas_comments_dollar' : 'fas fa-comments-dollar', + 'fas_comments' : 'fas fa-comments', + 'fas_compact_disc' : 'fas fa-compact-disc', + 'fas_compass_drafting' : 'fas fa-compass-drafting', + 'fas_compass' : 'fas fa-compass', + 'fas_compress' : 'fas fa-compress', + 'fas_computer_mouse' : 'fas fa-computer-mouse', + 'fas_computer' : 'fas fa-computer', + 'fas_cookie_bite' : 'fas fa-cookie-bite', + 'fas_cookie' : 'fas fa-cookie', + 'fas_copy' : 'fas fa-copy', + 'fas_copyright' : 'fas fa-copyright', + 'fas_couch' : 'fas fa-couch', + 'fas_cow' : 'fas fa-cow', + 'fas_credit_card' : 'fas fa-credit-card', + 'fas_crop_simple' : 'fas fa-crop-simple', + 'fas_crop' : 'fas fa-crop', + 'fas_cross' : 'fas fa-cross', + 'fas_crosshairs' : 'fas fa-crosshairs', + 'fas_crow' : 'fas fa-crow', + 'fas_crown' : 'fas fa-crown', + 'fas_crutch' : 'fas fa-crutch', + 'fas_cruzeiro_sign' : 'fas fa-cruzeiro-sign', + 'fas_cube' : 'fas fa-cube', + 'fas_cubes_stacked' : 'fas fa-cubes-stacked', + 'fas_cubes' : 'fas fa-cubes', + 'fas_d' : 'fas fa-d', + 'fas_database' : 'fas fa-database', + 'fas_delete_left' : 'fas fa-delete-left', + 'fas_democrat' : 'fas fa-democrat', + 'fas_desktop' : 'fas fa-desktop', + 'fas_dharmachakra' : 'fas fa-dharmachakra', + 'fas_diagram_next' : 'fas fa-diagram-next', + 'fas_diagram_predecessor' : 'fas fa-diagram-predecessor', + 'fas_diagram_project' : 'fas fa-diagram-project', + 'fas_diagram_successor' : 'fas fa-diagram-successor', + 'fas_diamond_turn_right' : 'fas fa-diamond-turn-right', + 'fas_diamond' : 'fas fa-diamond', + 'fas_dice_d20' : 'fas fa-dice-d20', + 'fas_dice_d6' : 'fas fa-dice-d6', + 'fas_dice_five' : 'fas fa-dice-five', + 'fas_dice_four' : 'fas fa-dice-four', + 'fas_dice_one' : 'fas fa-dice-one', + 'fas_dice_six' : 'fas fa-dice-six', + 'fas_dice_three' : 'fas fa-dice-three', + 'fas_dice_two' : 'fas fa-dice-two', + 'fas_dice' : 'fas fa-dice', + 'fas_disease' : 'fas fa-disease', + 'fas_display' : 'fas fa-display', + 'fas_divide' : 'fas fa-divide', + 'fas_dna' : 'fas fa-dna', + 'fas_dog' : 'fas fa-dog', + 'fas_dollar_sign' : 'fas fa-dollar-sign', + 'fas_dolly' : 'fas fa-dolly', + 'fas_dong_sign' : 'fas fa-dong-sign', + 'fas_door_closed' : 'fas fa-door-closed', + 'fas_door_open' : 'fas fa-door-open', + 'fas_dove' : 'fas fa-dove', + 'fas_down_left_and_up_right_to_center' : 'fas fa-down-left-and-up-right-to-center', + 'fas_down_long' : 'fas fa-down-long', + 'fas_download' : 'fas fa-download', + 'fas_dragon' : 'fas fa-dragon', + 'fas_draw_polygon' : 'fas fa-draw-polygon', + 'fas_droplet_slash' : 'fas fa-droplet-slash', + 'fas_droplet' : 'fas fa-droplet', + 'fas_drum_steelpan' : 'fas fa-drum-steelpan', + 'fas_drum' : 'fas fa-drum', + 'fas_drumstick_bite' : 'fas fa-drumstick-bite', + 'fas_dumbbell' : 'fas fa-dumbbell', + 'fas_dumpster_fire' : 'fas fa-dumpster-fire', + 'fas_dumpster' : 'fas fa-dumpster', + 'fas_dungeon' : 'fas fa-dungeon', + 'fas_e' : 'fas fa-e', + 'fas_ear_deaf' : 'fas fa-ear-deaf', + 'fas_ear_listen' : 'fas fa-ear-listen', + 'fas_earth_africa' : 'fas fa-earth-africa', + 'fas_earth_americas' : 'fas fa-earth-americas', + 'fas_earth_asia' : 'fas fa-earth-asia', + 'fas_earth_europe' : 'fas fa-earth-europe', + 'fas_earth_oceania' : 'fas fa-earth-oceania', + 'fas_egg' : 'fas fa-egg', + 'fas_eject' : 'fas fa-eject', + 'fas_elevator' : 'fas fa-elevator', + 'fas_ellipsis_vertical' : 'fas fa-ellipsis-vertical', + 'fas_ellipsis' : 'fas fa-ellipsis', + 'fas_envelope_circle_check' : 'fas fa-envelope-circle-check', + 'fas_envelope_open_text' : 'fas fa-envelope-open-text', + 'fas_envelope_open' : 'fas fa-envelope-open', + 'fas_envelope' : 'fas fa-envelope', + 'fas_envelopes_bulk' : 'fas fa-envelopes-bulk', + 'fas_equals' : 'fas fa-equals', + 'fas_eraser' : 'fas fa-eraser', + 'fas_ethernet' : 'fas fa-ethernet', + 'fas_euro_sign' : 'fas fa-euro-sign', + 'fas_exclamation' : 'fas fa-exclamation', + 'fas_expand' : 'fas fa-expand', + 'fas_explosion' : 'fas fa-explosion', + 'fas_eye_dropper' : 'fas fa-eye-dropper', + 'fas_eye_low_vision' : 'fas fa-eye-low-vision', + 'fas_eye_slash' : 'fas fa-eye-slash', + 'fas_eye' : 'fas fa-eye', + 'fas_f' : 'fas fa-f', + 'fas_face_angry' : 'fas fa-face-angry', + 'fas_face_dizzy' : 'fas fa-face-dizzy', + 'fas_face_flushed' : 'fas fa-face-flushed', + 'fas_face_frown_open' : 'fas fa-face-frown-open', + 'fas_face_frown' : 'fas fa-face-frown', + 'fas_face_grimace' : 'fas fa-face-grimace', + 'fas_face_grin_beam_sweat' : 'fas fa-face-grin-beam-sweat', + 'fas_face_grin_beam' : 'fas fa-face-grin-beam', + 'fas_face_grin_hearts' : 'fas fa-face-grin-hearts', + 'fas_face_grin_squint_tears' : 'fas fa-face-grin-squint-tears', + 'fas_face_grin_squint' : 'fas fa-face-grin-squint', + 'fas_face_grin_stars' : 'fas fa-face-grin-stars', + 'fas_face_grin_tears' : 'fas fa-face-grin-tears', + 'fas_face_grin_tongue_squint' : 'fas fa-face-grin-tongue-squint', + 'fas_face_grin_tongue_wink' : 'fas fa-face-grin-tongue-wink', + 'fas_face_grin_tongue' : 'fas fa-face-grin-tongue', + 'fas_face_grin_wide' : 'fas fa-face-grin-wide', + 'fas_face_grin_wink' : 'fas fa-face-grin-wink', + 'fas_face_grin' : 'fas fa-face-grin', + 'fas_face_kiss_beam' : 'fas fa-face-kiss-beam', + 'fas_face_kiss_wink_heart' : 'fas fa-face-kiss-wink-heart', + 'fas_face_kiss' : 'fas fa-face-kiss', + 'fas_face_laugh_beam' : 'fas fa-face-laugh-beam', + 'fas_face_laugh_squint' : 'fas fa-face-laugh-squint', + 'fas_face_laugh_wink' : 'fas fa-face-laugh-wink', + 'fas_face_laugh' : 'fas fa-face-laugh', + 'fas_face_meh_blank' : 'fas fa-face-meh-blank', + 'fas_face_meh' : 'fas fa-face-meh', + 'fas_face_rolling_eyes' : 'fas fa-face-rolling-eyes', + 'fas_face_sad_cry' : 'fas fa-face-sad-cry', + 'fas_face_sad_tear' : 'fas fa-face-sad-tear', + 'fas_face_smile_beam' : 'fas fa-face-smile-beam', + 'fas_face_smile_wink' : 'fas fa-face-smile-wink', + 'fas_face_smile' : 'fas fa-face-smile', + 'fas_face_surprise' : 'fas fa-face-surprise', + 'fas_face_tired' : 'fas fa-face-tired', + 'fas_fan' : 'fas fa-fan', + 'fas_faucet_drip' : 'fas fa-faucet-drip', + 'fas_faucet' : 'fas fa-faucet', + 'fas_fax' : 'fas fa-fax', + 'fas_feather_pointed' : 'fas fa-feather-pointed', + 'fas_feather' : 'fas fa-feather', + 'fas_ferry' : 'fas fa-ferry', + 'fas_file_arrow_down' : 'fas fa-file-arrow-down', + 'fas_file_arrow_up' : 'fas fa-file-arrow-up', + 'fas_file_audio' : 'fas fa-file-audio', + 'fas_file_circle_check' : 'fas fa-file-circle-check', + 'fas_file_circle_exclamation' : 'fas fa-file-circle-exclamation', + 'fas_file_circle_minus' : 'fas fa-file-circle-minus', + 'fas_file_circle_plus' : 'fas fa-file-circle-plus', + 'fas_file_circle_question' : 'fas fa-file-circle-question', + 'fas_file_circle_xmark' : 'fas fa-file-circle-xmark', + 'fas_file_code' : 'fas fa-file-code', + 'fas_file_contract' : 'fas fa-file-contract', + 'fas_file_csv' : 'fas fa-file-csv', + 'fas_file_excel' : 'fas fa-file-excel', + 'fas_file_export' : 'fas fa-file-export', + 'fas_file_image' : 'fas fa-file-image', + 'fas_file_import' : 'fas fa-file-import', + 'fas_file_invoice_dollar' : 'fas fa-file-invoice-dollar', + 'fas_file_invoice' : 'fas fa-file-invoice', + 'fas_file_lines' : 'fas fa-file-lines', + 'fas_file_medical' : 'fas fa-file-medical', + 'fas_file_pdf' : 'fas fa-file-pdf', + 'fas_file_pen' : 'fas fa-file-pen', + 'fas_file_powerpoint' : 'fas fa-file-powerpoint', + 'fas_file_prescription' : 'fas fa-file-prescription', + 'fas_file_shield' : 'fas fa-file-shield', + 'fas_file_signature' : 'fas fa-file-signature', + 'fas_file_video' : 'fas fa-file-video', + 'fas_file_waveform' : 'fas fa-file-waveform', + 'fas_file_word' : 'fas fa-file-word', + 'fas_file_zipper' : 'fas fa-file-zipper', + 'fas_file' : 'fas fa-file', + 'fas_fill_drip' : 'fas fa-fill-drip', + 'fas_fill' : 'fas fa-fill', + 'fas_film' : 'fas fa-film', + 'fas_filter_circle_dollar' : 'fas fa-filter-circle-dollar', + 'fas_filter_circle_xmark' : 'fas fa-filter-circle-xmark', + 'fas_filter' : 'fas fa-filter', + 'fas_fingerprint' : 'fas fa-fingerprint', + 'fas_fire_burner' : 'fas fa-fire-burner', + 'fas_fire_extinguisher' : 'fas fa-fire-extinguisher', + 'fas_fire_flame_curved' : 'fas fa-fire-flame-curved', + 'fas_fire_flame_simple' : 'fas fa-fire-flame-simple', + 'fas_fire' : 'fas fa-fire', + 'fas_fish_fins' : 'fas fa-fish-fins', + 'fas_fish' : 'fas fa-fish', + 'fas_flag_checkered' : 'fas fa-flag-checkered', + 'fas_flag_usa' : 'fas fa-flag-usa', + 'fas_flag' : 'fas fa-flag', + 'fas_flask_vial' : 'fas fa-flask-vial', + 'fas_flask' : 'fas fa-flask', + 'fas_floppy_disk' : 'fas fa-floppy-disk', + 'fas_florin_sign' : 'fas fa-florin-sign', + 'fas_folder_closed' : 'fas fa-folder-closed', + 'fas_folder_minus' : 'fas fa-folder-minus', + 'fas_folder_open' : 'fas fa-folder-open', + 'fas_folder_plus' : 'fas fa-folder-plus', + 'fas_folder_tree' : 'fas fa-folder-tree', + 'fas_folder' : 'fas fa-folder', + 'fas_font_awesome' : 'fas fa-font-awesome', + 'fas_font' : 'fas fa-font', + 'fas_football' : 'fas fa-football', + 'fas_forward_fast' : 'fas fa-forward-fast', + 'fas_forward_step' : 'fas fa-forward-step', + 'fas_forward' : 'fas fa-forward', + 'fas_franc_sign' : 'fas fa-franc-sign', + 'fas_frog' : 'fas fa-frog', + 'fas_futbol' : 'fas fa-futbol', + 'fas_g' : 'fas fa-g', + 'fas_gamepad' : 'fas fa-gamepad', + 'fas_gas_pump' : 'fas fa-gas-pump', + 'fas_gauge_high' : 'fas fa-gauge-high', + 'fas_gauge_simple_high' : 'fas fa-gauge-simple-high', + 'fas_gauge_simple' : 'fas fa-gauge-simple', + 'fas_gauge' : 'fas fa-gauge', + 'fas_gavel' : 'fas fa-gavel', + 'fas_gear' : 'fas fa-gear', + 'fas_gears' : 'fas fa-gears', + 'fas_gem' : 'fas fa-gem', + 'fas_genderless' : 'fas fa-genderless', + 'fas_ghost' : 'fas fa-ghost', + 'fas_gift' : 'fas fa-gift', + 'fas_gifts' : 'fas fa-gifts', + 'fas_glass_water_droplet' : 'fas fa-glass-water-droplet', + 'fas_glass_water' : 'fas fa-glass-water', + 'fas_glasses' : 'fas fa-glasses', + 'fas_globe' : 'fas fa-globe', + 'fas_golf_ball_tee' : 'fas fa-golf-ball-tee', + 'fas_gopuram' : 'fas fa-gopuram', + 'fas_graduation_cap' : 'fas fa-graduation-cap', + 'fas_greater_than_equal' : 'fas fa-greater-than-equal', + 'fas_greater_than' : 'fas fa-greater-than', + 'fas_grip_lines_vertical' : 'fas fa-grip-lines-vertical', + 'fas_grip_lines' : 'fas fa-grip-lines', + 'fas_grip_vertical' : 'fas fa-grip-vertical', + 'fas_grip' : 'fas fa-grip', + 'fas_group_arrows_rotate' : 'fas fa-group-arrows-rotate', + 'fas_guarani_sign' : 'fas fa-guarani-sign', + 'fas_guitar' : 'fas fa-guitar', + 'fas_gun' : 'fas fa-gun', + 'fas_h' : 'fas fa-h', + 'fas_hammer' : 'fas fa-hammer', + 'fas_hamsa' : 'fas fa-hamsa', + 'fas_hand_back_fist' : 'fas fa-hand-back-fist', + 'fas_hand_dots' : 'fas fa-hand-dots', + 'fas_hand_fist' : 'fas fa-hand-fist', + 'fas_hand_holding_dollar' : 'fas fa-hand-holding-dollar', + 'fas_hand_holding_droplet' : 'fas fa-hand-holding-droplet', + 'fas_hand_holding_hand' : 'fas fa-hand-holding-hand', + 'fas_hand_holding_heart' : 'fas fa-hand-holding-heart', + 'fas_hand_holding_medical' : 'fas fa-hand-holding-medical', + 'fas_hand_holding' : 'fas fa-hand-holding', + 'fas_hand_lizard' : 'fas fa-hand-lizard', + 'fas_hand_middle_finger' : 'fas fa-hand-middle-finger', + 'fas_hand_peace' : 'fas fa-hand-peace', + 'fas_hand_point_down' : 'fas fa-hand-point-down', + 'fas_hand_point_left' : 'fas fa-hand-point-left', + 'fas_hand_point_right' : 'fas fa-hand-point-right', + 'fas_hand_point_up' : 'fas fa-hand-point-up', + 'fas_hand_pointer' : 'fas fa-hand-pointer', + 'fas_hand_scissors' : 'fas fa-hand-scissors', + 'fas_hand_sparkles' : 'fas fa-hand-sparkles', + 'fas_hand_spock' : 'fas fa-hand-spock', + 'fas_hand' : 'fas fa-hand', + 'fas_handcuffs' : 'fas fa-handcuffs', + 'fas_hands_asl_interpreting' : 'fas fa-hands-asl-interpreting', + 'fas_hands_bound' : 'fas fa-hands-bound', + 'fas_hands_bubbles' : 'fas fa-hands-bubbles', + 'fas_hands_clapping' : 'fas fa-hands-clapping', + 'fas_hands_holding_child' : 'fas fa-hands-holding-child', + 'fas_hands_holding_circle' : 'fas fa-hands-holding-circle', + 'fas_hands_holding' : 'fas fa-hands-holding', + 'fas_hands_praying' : 'fas fa-hands-praying', + 'fas_hands' : 'fas fa-hands', + 'fas_handshake_angle' : 'fas fa-handshake-angle', + 'fas_handshake_simple_slash' : 'fas fa-handshake-simple-slash', + 'fas_handshake_simple' : 'fas fa-handshake-simple', + 'fas_handshake_slash' : 'fas fa-handshake-slash', + 'fas_handshake' : 'fas fa-handshake', + 'fas_hanukiah' : 'fas fa-hanukiah', + 'fas_hard_drive' : 'fas fa-hard-drive', + 'fas_hashtag' : 'fas fa-hashtag', + 'fas_hat_cowboy_side' : 'fas fa-hat-cowboy-side', + 'fas_hat_cowboy' : 'fas fa-hat-cowboy', + 'fas_hat_wizard' : 'fas fa-hat-wizard', + 'fas_head_side_cough_slash' : 'fas fa-head-side-cough-slash', + 'fas_head_side_cough' : 'fas fa-head-side-cough', + 'fas_head_side_mask' : 'fas fa-head-side-mask', + 'fas_head_side_virus' : 'fas fa-head-side-virus', + 'fas_heading' : 'fas fa-heading', + 'fas_headphones_simple' : 'fas fa-headphones-simple', + 'fas_headphones' : 'fas fa-headphones', + 'fas_headset' : 'fas fa-headset', + 'fas_heart_circle_bolt' : 'fas fa-heart-circle-bolt', + 'fas_heart_circle_check' : 'fas fa-heart-circle-check', + 'fas_heart_circle_exclamation' : 'fas fa-heart-circle-exclamation', + 'fas_heart_circle_minus' : 'fas fa-heart-circle-minus', + 'fas_heart_circle_plus' : 'fas fa-heart-circle-plus', + 'fas_heart_circle_xmark' : 'fas fa-heart-circle-xmark', + 'fas_heart_crack' : 'fas fa-heart-crack', + 'fas_heart_pulse' : 'fas fa-heart-pulse', + 'fas_heart' : 'fas fa-heart', + 'fas_helicopter_symbol' : 'fas fa-helicopter-symbol', + 'fas_helicopter' : 'fas fa-helicopter', + 'fas_helmet_safety' : 'fas fa-helmet-safety', + 'fas_helmet_un' : 'fas fa-helmet-un', + 'fas_highlighter' : 'fas fa-highlighter', + 'fas_hill_avalanche' : 'fas fa-hill-avalanche', + 'fas_hill_rockslide' : 'fas fa-hill-rockslide', + 'fas_hippo' : 'fas fa-hippo', + 'fas_hockey_puck' : 'fas fa-hockey-puck', + 'fas_holly_berry' : 'fas fa-holly-berry', + 'fas_horse_head' : 'fas fa-horse-head', + 'fas_horse' : 'fas fa-horse', + 'fas_hospital_user' : 'fas fa-hospital-user', + 'fas_hospital' : 'fas fa-hospital', + 'fas_hot_tub_person' : 'fas fa-hot-tub-person', + 'fas_hotdog' : 'fas fa-hotdog', + 'fas_hotel' : 'fas fa-hotel', + 'fas_hourglass_end' : 'fas fa-hourglass-end', + 'fas_hourglass_half' : 'fas fa-hourglass-half', + 'fas_hourglass_start' : 'fas fa-hourglass-start', + 'fas_hourglass' : 'fas fa-hourglass', + 'fas_house_chimney_crack' : 'fas fa-house-chimney-crack', + 'fas_house_chimney_medical' : 'fas fa-house-chimney-medical', + 'fas_house_chimney_user' : 'fas fa-house-chimney-user', + 'fas_house_chimney_window' : 'fas fa-house-chimney-window', + 'fas_house_chimney' : 'fas fa-house-chimney', + 'fas_house_circle_check' : 'fas fa-house-circle-check', + 'fas_house_circle_exclamation' : 'fas fa-house-circle-exclamation', + 'fas_house_circle_xmark' : 'fas fa-house-circle-xmark', + 'fas_house_crack' : 'fas fa-house-crack', + 'fas_house_fire' : 'fas fa-house-fire', + 'fas_house_flag' : 'fas fa-house-flag', + 'fas_house_flood_water_circle_arrow_right' : 'fas fa-house-flood-water-circle-arrow-right', + 'fas_house_flood_water' : 'fas fa-house-flood-water', + 'fas_house_laptop' : 'fas fa-house-laptop', + 'fas_house_lock' : 'fas fa-house-lock', + 'fas_house_medical_circle_check' : 'fas fa-house-medical-circle-check', + 'fas_house_medical_circle_exclamation' : 'fas fa-house-medical-circle-exclamation', + 'fas_house_medical_circle_xmark' : 'fas fa-house-medical-circle-xmark', + 'fas_house_medical_flag' : 'fas fa-house-medical-flag', + 'fas_house_medical' : 'fas fa-house-medical', + 'fas_house_signal' : 'fas fa-house-signal', + 'fas_house_tsunami' : 'fas fa-house-tsunami', + 'fas_house_user' : 'fas fa-house-user', + 'fas_house' : 'fas fa-house', + 'fas_hryvnia_sign' : 'fas fa-hryvnia-sign', + 'fas_hurricane' : 'fas fa-hurricane', + 'fas_i_cursor' : 'fas fa-i-cursor', + 'fas_i' : 'fas fa-i', + 'fas_ice_cream' : 'fas fa-ice-cream', + 'fas_icicles' : 'fas fa-icicles', + 'fas_icons' : 'fas fa-icons', + 'fas_id_badge' : 'fas fa-id-badge', + 'fas_id_card_clip' : 'fas fa-id-card-clip', + 'fas_id_card' : 'fas fa-id-card', + 'fas_igloo' : 'fas fa-igloo', + 'fas_image_portrait' : 'fas fa-image-portrait', + 'fas_image' : 'fas fa-image', + 'fas_images' : 'fas fa-images', + 'fas_inbox' : 'fas fa-inbox', + 'fas_indent' : 'fas fa-indent', + 'fas_indian_rupee_sign' : 'fas fa-indian-rupee-sign', + 'fas_industry' : 'fas fa-industry', + 'fas_infinity' : 'fas fa-infinity', + 'fas_info' : 'fas fa-info', + 'fas_italic' : 'fas fa-italic', + 'fas_j' : 'fas fa-j', + 'fas_jar_wheat' : 'fas fa-jar-wheat', + 'fas_jar' : 'fas fa-jar', + 'fas_jedi' : 'fas fa-jedi', + 'fas_jet_fighter_up' : 'fas fa-jet-fighter-up', + 'fas_jet_fighter' : 'fas fa-jet-fighter', + 'fas_joint' : 'fas fa-joint', + 'fas_jug_detergent' : 'fas fa-jug-detergent', + 'fas_k' : 'fas fa-k', + 'fas_kaaba' : 'fas fa-kaaba', + 'fas_key' : 'fas fa-key', + 'fas_keyboard' : 'fas fa-keyboard', + 'fas_khanda' : 'fas fa-khanda', + 'fas_kip_sign' : 'fas fa-kip-sign', + 'fas_kit_medical' : 'fas fa-kit-medical', + 'fas_kitchen_set' : 'fas fa-kitchen-set', + 'fas_kiwi_bird' : 'fas fa-kiwi-bird', + 'fas_l' : 'fas fa-l', + 'fas_land_mine_on' : 'fas fa-land-mine-on', + 'fas_landmark_dome' : 'fas fa-landmark-dome', + 'fas_landmark_flag' : 'fas fa-landmark-flag', + 'fas_landmark' : 'fas fa-landmark', + 'fas_language' : 'fas fa-language', + 'fas_laptop_code' : 'fas fa-laptop-code', + 'fas_laptop_file' : 'fas fa-laptop-file', + 'fas_laptop_medical' : 'fas fa-laptop-medical', + 'fas_laptop' : 'fas fa-laptop', + 'fas_lari_sign' : 'fas fa-lari-sign', + 'fas_layer_group' : 'fas fa-layer-group', + 'fas_leaf' : 'fas fa-leaf', + 'fas_left_long' : 'fas fa-left-long', + 'fas_left_right' : 'fas fa-left-right', + 'fas_lemon' : 'fas fa-lemon', + 'fas_less_than_equal' : 'fas fa-less-than-equal', + 'fas_less_than' : 'fas fa-less-than', + 'fas_life_ring' : 'fas fa-life-ring', + 'fas_lightbulb' : 'fas fa-lightbulb', + 'fas_lines_leaning' : 'fas fa-lines-leaning', + 'fas_link_slash' : 'fas fa-link-slash', + 'fas_link' : 'fas fa-link', + 'fas_lira_sign' : 'fas fa-lira-sign', + 'fas_list_check' : 'fas fa-list-check', + 'fas_list_ol' : 'fas fa-list-ol', + 'fas_list_ul' : 'fas fa-list-ul', + 'fas_list' : 'fas fa-list', + 'fas_litecoin_sign' : 'fas fa-litecoin-sign', + 'fas_location_arrow' : 'fas fa-location-arrow', + 'fas_location_crosshairs' : 'fas fa-location-crosshairs', + 'fas_location_dot' : 'fas fa-location-dot', + 'fas_location_pin_lock' : 'fas fa-location-pin-lock', + 'fas_location_pin' : 'fas fa-location-pin', + 'fas_lock_open' : 'fas fa-lock-open', + 'fas_lock' : 'fas fa-lock', + 'fas_locust' : 'fas fa-locust', + 'fas_lungs_virus' : 'fas fa-lungs-virus', + 'fas_lungs' : 'fas fa-lungs', + 'fas_m' : 'fas fa-m', + 'fas_magnet' : 'fas fa-magnet', + 'fas_magnifying_glass_arrow_right' : 'fas fa-magnifying-glass-arrow-right', + 'fas_magnifying_glass_chart' : 'fas fa-magnifying-glass-chart', + 'fas_magnifying_glass_dollar' : 'fas fa-magnifying-glass-dollar', + 'fas_magnifying_glass_location' : 'fas fa-magnifying-glass-location', + 'fas_magnifying_glass_minus' : 'fas fa-magnifying-glass-minus', + 'fas_magnifying_glass_plus' : 'fas fa-magnifying-glass-plus', + 'fas_magnifying_glass' : 'fas fa-magnifying-glass', + 'fas_manat_sign' : 'fas fa-manat-sign', + 'fas_map_location_dot' : 'fas fa-map-location-dot', + 'fas_map_location' : 'fas fa-map-location', + 'fas_map_pin' : 'fas fa-map-pin', + 'fas_map' : 'fas fa-map', + 'fas_marker' : 'fas fa-marker', + 'fas_mars_and_venus_burst' : 'fas fa-mars-and-venus-burst', + 'fas_mars_and_venus' : 'fas fa-mars-and-venus', + 'fas_mars_double' : 'fas fa-mars-double', + 'fas_mars_stroke_right' : 'fas fa-mars-stroke-right', + 'fas_mars_stroke_up' : 'fas fa-mars-stroke-up', + 'fas_mars_stroke' : 'fas fa-mars-stroke', + 'fas_mars' : 'fas fa-mars', + 'fas_martini_glass_citrus' : 'fas fa-martini-glass-citrus', + 'fas_martini_glass_empty' : 'fas fa-martini-glass-empty', + 'fas_martini_glass' : 'fas fa-martini-glass', + 'fas_mask_face' : 'fas fa-mask-face', + 'fas_mask_ventilator' : 'fas fa-mask-ventilator', + 'fas_mask' : 'fas fa-mask', + 'fas_masks_theater' : 'fas fa-masks-theater', + 'fas_mattress_pillow' : 'fas fa-mattress-pillow', + 'fas_maximize' : 'fas fa-maximize', + 'fas_medal' : 'fas fa-medal', + 'fas_memory' : 'fas fa-memory', + 'fas_menorah' : 'fas fa-menorah', + 'fas_mercury' : 'fas fa-mercury', + 'fas_message' : 'fas fa-message', + 'fas_meteor' : 'fas fa-meteor', + 'fas_microchip' : 'fas fa-microchip', + 'fas_microphone_lines_slash' : 'fas fa-microphone-lines-slash', + 'fas_microphone_lines' : 'fas fa-microphone-lines', + 'fas_microphone_slash' : 'fas fa-microphone-slash', + 'fas_microphone' : 'fas fa-microphone', + 'fas_microscope' : 'fas fa-microscope', + 'fas_mill_sign' : 'fas fa-mill-sign', + 'fas_minimize' : 'fas fa-minimize', + 'fas_minus' : 'fas fa-minus', + 'fas_mitten' : 'fas fa-mitten', + 'fas_mobile_button' : 'fas fa-mobile-button', + 'fas_mobile_retro' : 'fas fa-mobile-retro', + 'fas_mobile_screen_button' : 'fas fa-mobile-screen-button', + 'fas_mobile_screen' : 'fas fa-mobile-screen', + 'fas_mobile' : 'fas fa-mobile', + 'fas_money_bill_1_wave' : 'fas fa-money-bill-1-wave', + 'fas_money_bill_1' : 'fas fa-money-bill-1', + 'fas_money_bill_transfer' : 'fas fa-money-bill-transfer', + 'fas_money_bill_trend_up' : 'fas fa-money-bill-trend-up', + 'fas_money_bill_wave' : 'fas fa-money-bill-wave', + 'fas_money_bill_wheat' : 'fas fa-money-bill-wheat', + 'fas_money_bill' : 'fas fa-money-bill', + 'fas_money_bills' : 'fas fa-money-bills', + 'fas_money_check_dollar' : 'fas fa-money-check-dollar', + 'fas_money_check' : 'fas fa-money-check', + 'fas_monument' : 'fas fa-monument', + 'fas_moon' : 'fas fa-moon', + 'fas_mortar_pestle' : 'fas fa-mortar-pestle', + 'fas_mosque' : 'fas fa-mosque', + 'fas_mosquito_net' : 'fas fa-mosquito-net', + 'fas_mosquito' : 'fas fa-mosquito', + 'fas_motorcycle' : 'fas fa-motorcycle', + 'fas_mound' : 'fas fa-mound', + 'fas_mountain_city' : 'fas fa-mountain-city', + 'fas_mountain_sun' : 'fas fa-mountain-sun', + 'fas_mountain' : 'fas fa-mountain', + 'fas_mug_hot' : 'fas fa-mug-hot', + 'fas_mug_saucer' : 'fas fa-mug-saucer', + 'fas_music' : 'fas fa-music', + 'fas_n' : 'fas fa-n', + 'fas_naira_sign' : 'fas fa-naira-sign', + 'fas_network_wired' : 'fas fa-network-wired', + 'fas_neuter' : 'fas fa-neuter', + 'fas_newspaper' : 'fas fa-newspaper', + 'fas_not_equal' : 'fas fa-not-equal', + 'fas_notdef' : 'fas fa-notdef', + 'fas_note_sticky' : 'fas fa-note-sticky', + 'fas_notes_medical' : 'fas fa-notes-medical', + 'fas_o' : 'fas fa-o', + 'fas_object_group' : 'fas fa-object-group', + 'fas_object_ungroup' : 'fas fa-object-ungroup', + 'fas_oil_can' : 'fas fa-oil-can', + 'fas_oil_well' : 'fas fa-oil-well', + 'fas_om' : 'fas fa-om', + 'fas_otter' : 'fas fa-otter', + 'fas_outdent' : 'fas fa-outdent', + 'fas_p' : 'fas fa-p', + 'fas_pager' : 'fas fa-pager', + 'fas_paint_roller' : 'fas fa-paint-roller', + 'fas_paintbrush' : 'fas fa-paintbrush', + 'fas_palette' : 'fas fa-palette', + 'fas_pallet' : 'fas fa-pallet', + 'fas_panorama' : 'fas fa-panorama', + 'fas_paper_plane' : 'fas fa-paper-plane', + 'fas_paperclip' : 'fas fa-paperclip', + 'fas_parachute_box' : 'fas fa-parachute-box', + 'fas_paragraph' : 'fas fa-paragraph', + 'fas_passport' : 'fas fa-passport', + 'fas_paste' : 'fas fa-paste', + 'fas_pause' : 'fas fa-pause', + 'fas_paw' : 'fas fa-paw', + 'fas_peace' : 'fas fa-peace', + 'fas_pen_clip' : 'fas fa-pen-clip', + 'fas_pen_fancy' : 'fas fa-pen-fancy', + 'fas_pen_nib' : 'fas fa-pen-nib', + 'fas_pen_ruler' : 'fas fa-pen-ruler', + 'fas_pen_to_square' : 'fas fa-pen-to-square', + 'fas_pen' : 'fas fa-pen', + 'fas_pencil' : 'fas fa-pencil', + 'fas_people_arrows' : 'fas fa-people-arrows', + 'fas_people_carry_box' : 'fas fa-people-carry-box', + 'fas_people_group' : 'fas fa-people-group', + 'fas_people_line' : 'fas fa-people-line', + 'fas_people_pulling' : 'fas fa-people-pulling', + 'fas_people_robbery' : 'fas fa-people-robbery', + 'fas_people_roof' : 'fas fa-people-roof', + 'fas_pepper_hot' : 'fas fa-pepper-hot', + 'fas_percent' : 'fas fa-percent', + 'fas_person_arrow_down_to_line' : 'fas fa-person-arrow-down-to-line', + 'fas_person_arrow_up_from_line' : 'fas fa-person-arrow-up-from-line', + 'fas_person_biking' : 'fas fa-person-biking', + 'fas_person_booth' : 'fas fa-person-booth', + 'fas_person_breastfeeding' : 'fas fa-person-breastfeeding', + 'fas_person_burst' : 'fas fa-person-burst', + 'fas_person_cane' : 'fas fa-person-cane', + 'fas_person_chalkboard' : 'fas fa-person-chalkboard', + 'fas_person_circle_check' : 'fas fa-person-circle-check', + 'fas_person_circle_exclamation' : 'fas fa-person-circle-exclamation', + 'fas_person_circle_minus' : 'fas fa-person-circle-minus', + 'fas_person_circle_plus' : 'fas fa-person-circle-plus', + 'fas_person_circle_question' : 'fas fa-person-circle-question', + 'fas_person_circle_xmark' : 'fas fa-person-circle-xmark', + 'fas_person_digging' : 'fas fa-person-digging', + 'fas_person_dots_from_line' : 'fas fa-person-dots-from-line', + 'fas_person_dress_burst' : 'fas fa-person-dress-burst', + 'fas_person_dress' : 'fas fa-person-dress', + 'fas_person_drowning' : 'fas fa-person-drowning', + 'fas_person_falling_burst' : 'fas fa-person-falling-burst', + 'fas_person_falling' : 'fas fa-person-falling', + 'fas_person_half_dress' : 'fas fa-person-half-dress', + 'fas_person_harassing' : 'fas fa-person-harassing', + 'fas_person_hiking' : 'fas fa-person-hiking', + 'fas_person_military_pointing' : 'fas fa-person-military-pointing', + 'fas_person_military_rifle' : 'fas fa-person-military-rifle', + 'fas_person_military_to_person' : 'fas fa-person-military-to-person', + 'fas_person_praying' : 'fas fa-person-praying', + 'fas_person_pregnant' : 'fas fa-person-pregnant', + 'fas_person_rays' : 'fas fa-person-rays', + 'fas_person_rifle' : 'fas fa-person-rifle', + 'fas_person_running' : 'fas fa-person-running', + 'fas_person_shelter' : 'fas fa-person-shelter', + 'fas_person_skating' : 'fas fa-person-skating', + 'fas_person_skiing_nordic' : 'fas fa-person-skiing-nordic', + 'fas_person_skiing' : 'fas fa-person-skiing', + 'fas_person_snowboarding' : 'fas fa-person-snowboarding', + 'fas_person_swimming' : 'fas fa-person-swimming', + 'fas_person_through_window' : 'fas fa-person-through-window', + 'fas_person_walking_arrow_loop_left' : 'fas fa-person-walking-arrow-loop-left', + 'fas_person_walking_arrow_right' : 'fas fa-person-walking-arrow-right', + 'fas_person_walking_dashed_line_arrow_right' : 'fas fa-person-walking-dashed-line-arrow-right', + 'fas_person_walking_luggage' : 'fas fa-person-walking-luggage', + 'fas_person_walking_with_cane' : 'fas fa-person-walking-with-cane', + 'fas_person_walking' : 'fas fa-person-walking', + 'fas_person' : 'fas fa-person', + 'fas_peseta_sign' : 'fas fa-peseta-sign', + 'fas_peso_sign' : 'fas fa-peso-sign', + 'fas_phone_flip' : 'fas fa-phone-flip', + 'fas_phone_slash' : 'fas fa-phone-slash', + 'fas_phone_volume' : 'fas fa-phone-volume', + 'fas_phone' : 'fas fa-phone', + 'fas_photo_film' : 'fas fa-photo-film', + 'fas_piggy_bank' : 'fas fa-piggy-bank', + 'fas_pills' : 'fas fa-pills', + 'fas_pizza_slice' : 'fas fa-pizza-slice', + 'fas_place_of_worship' : 'fas fa-place-of-worship', + 'fas_plane_arrival' : 'fas fa-plane-arrival', + 'fas_plane_circle_check' : 'fas fa-plane-circle-check', + 'fas_plane_circle_exclamation' : 'fas fa-plane-circle-exclamation', + 'fas_plane_circle_xmark' : 'fas fa-plane-circle-xmark', + 'fas_plane_departure' : 'fas fa-plane-departure', + 'fas_plane_lock' : 'fas fa-plane-lock', + 'fas_plane_slash' : 'fas fa-plane-slash', + 'fas_plane_up' : 'fas fa-plane-up', + 'fas_plane' : 'fas fa-plane', + 'fas_plant_wilt' : 'fas fa-plant-wilt', + 'fas_plate_wheat' : 'fas fa-plate-wheat', + 'fas_play' : 'fas fa-play', + 'fas_plug_circle_bolt' : 'fas fa-plug-circle-bolt', + 'fas_plug_circle_check' : 'fas fa-plug-circle-check', + 'fas_plug_circle_exclamation' : 'fas fa-plug-circle-exclamation', + 'fas_plug_circle_minus' : 'fas fa-plug-circle-minus', + 'fas_plug_circle_plus' : 'fas fa-plug-circle-plus', + 'fas_plug_circle_xmark' : 'fas fa-plug-circle-xmark', + 'fas_plug' : 'fas fa-plug', + 'fas_plus_minus' : 'fas fa-plus-minus', + 'fas_plus' : 'fas fa-plus', + 'fas_podcast' : 'fas fa-podcast', + 'fas_poo_storm' : 'fas fa-poo-storm', + 'fas_poo' : 'fas fa-poo', + 'fas_poop' : 'fas fa-poop', + 'fas_power_off' : 'fas fa-power-off', + 'fas_prescription_bottle_medical' : 'fas fa-prescription-bottle-medical', + 'fas_prescription_bottle' : 'fas fa-prescription-bottle', + 'fas_prescription' : 'fas fa-prescription', + 'fas_print' : 'fas fa-print', + 'fas_pump_medical' : 'fas fa-pump-medical', + 'fas_pump_soap' : 'fas fa-pump-soap', + 'fas_puzzle_piece' : 'fas fa-puzzle-piece', + 'fas_q' : 'fas fa-q', + 'fas_qrcode' : 'fas fa-qrcode', + 'fas_question' : 'fas fa-question', + 'fas_quote_left' : 'fas fa-quote-left', + 'fas_quote_right' : 'fas fa-quote-right', + 'fas_r' : 'fas fa-r', + 'fas_radiation' : 'fas fa-radiation', + 'fas_radio' : 'fas fa-radio', + 'fas_rainbow' : 'fas fa-rainbow', + 'fas_ranking_star' : 'fas fa-ranking-star', + 'fas_receipt' : 'fas fa-receipt', + 'fas_record_vinyl' : 'fas fa-record-vinyl', + 'fas_rectangle_ad' : 'fas fa-rectangle-ad', + 'fas_rectangle_list' : 'fas fa-rectangle-list', + 'fas_rectangle_xmark' : 'fas fa-rectangle-xmark', + 'fas_recycle' : 'fas fa-recycle', + 'fas_registered' : 'fas fa-registered', + 'fas_repeat' : 'fas fa-repeat', + 'fas_reply_all' : 'fas fa-reply-all', + 'fas_reply' : 'fas fa-reply', + 'fas_republican' : 'fas fa-republican', + 'fas_restroom' : 'fas fa-restroom', + 'fas_retweet' : 'fas fa-retweet', + 'fas_ribbon' : 'fas fa-ribbon', + 'fas_right_from_bracket' : 'fas fa-right-from-bracket', + 'fas_right_left' : 'fas fa-right-left', + 'fas_right_long' : 'fas fa-right-long', + 'fas_right_to_bracket' : 'fas fa-right-to-bracket', + 'fas_ring' : 'fas fa-ring', + 'fas_road_barrier' : 'fas fa-road-barrier', + 'fas_road_bridge' : 'fas fa-road-bridge', + 'fas_road_circle_check' : 'fas fa-road-circle-check', + 'fas_road_circle_exclamation' : 'fas fa-road-circle-exclamation', + 'fas_road_circle_xmark' : 'fas fa-road-circle-xmark', + 'fas_road_lock' : 'fas fa-road-lock', + 'fas_road_spikes' : 'fas fa-road-spikes', + 'fas_road' : 'fas fa-road', + 'fas_robot' : 'fas fa-robot', + 'fas_rocket' : 'fas fa-rocket', + 'fas_rotate_left' : 'fas fa-rotate-left', + 'fas_rotate_right' : 'fas fa-rotate-right', + 'fas_rotate' : 'fas fa-rotate', + 'fas_route' : 'fas fa-route', + 'fas_rss' : 'fas fa-rss', + 'fas_ruble_sign' : 'fas fa-ruble-sign', + 'fas_rug' : 'fas fa-rug', + 'fas_ruler_combined' : 'fas fa-ruler-combined', + 'fas_ruler_horizontal' : 'fas fa-ruler-horizontal', + 'fas_ruler_vertical' : 'fas fa-ruler-vertical', + 'fas_ruler' : 'fas fa-ruler', + 'fas_rupee_sign' : 'fas fa-rupee-sign', + 'fas_rupiah_sign' : 'fas fa-rupiah-sign', + 'fas_s' : 'fas fa-s', + 'fas_sack_dollar' : 'fas fa-sack-dollar', + 'fas_sack_xmark' : 'fas fa-sack-xmark', + 'fas_sailboat' : 'fas fa-sailboat', + 'fas_satellite_dish' : 'fas fa-satellite-dish', + 'fas_satellite' : 'fas fa-satellite', + 'fas_scale_balanced' : 'fas fa-scale-balanced', + 'fas_scale_unbalanced_flip' : 'fas fa-scale-unbalanced-flip', + 'fas_scale_unbalanced' : 'fas fa-scale-unbalanced', + 'fas_school_circle_check' : 'fas fa-school-circle-check', + 'fas_school_circle_exclamation' : 'fas fa-school-circle-exclamation', + 'fas_school_circle_xmark' : 'fas fa-school-circle-xmark', + 'fas_school_flag' : 'fas fa-school-flag', + 'fas_school_lock' : 'fas fa-school-lock', + 'fas_school' : 'fas fa-school', + 'fas_scissors' : 'fas fa-scissors', + 'fas_screwdriver_wrench' : 'fas fa-screwdriver-wrench', + 'fas_screwdriver' : 'fas fa-screwdriver', + 'fas_scroll_torah' : 'fas fa-scroll-torah', + 'fas_scroll' : 'fas fa-scroll', + 'fas_sd_card' : 'fas fa-sd-card', + 'fas_section' : 'fas fa-section', + 'fas_seedling' : 'fas fa-seedling', + 'fas_server' : 'fas fa-server', + 'fas_shapes' : 'fas fa-shapes', + 'fas_share_from_square' : 'fas fa-share-from-square', + 'fas_share_nodes' : 'fas fa-share-nodes', + 'fas_share' : 'fas fa-share', + 'fas_sheet_plastic' : 'fas fa-sheet-plastic', + 'fas_shekel_sign' : 'fas fa-shekel-sign', + 'fas_shield_cat' : 'fas fa-shield-cat', + 'fas_shield_dog' : 'fas fa-shield-dog', + 'fas_shield_halved' : 'fas fa-shield-halved', + 'fas_shield_heart' : 'fas fa-shield-heart', + 'fas_shield_virus' : 'fas fa-shield-virus', + 'fas_shield' : 'fas fa-shield', + 'fas_ship' : 'fas fa-ship', + 'fas_shirt' : 'fas fa-shirt', + 'fas_shoe_prints' : 'fas fa-shoe-prints', + 'fas_shop_lock' : 'fas fa-shop-lock', + 'fas_shop_slash' : 'fas fa-shop-slash', + 'fas_shop' : 'fas fa-shop', + 'fas_shower' : 'fas fa-shower', + 'fas_shrimp' : 'fas fa-shrimp', + 'fas_shuffle' : 'fas fa-shuffle', + 'fas_shuttle_space' : 'fas fa-shuttle-space', + 'fas_sign_hanging' : 'fas fa-sign-hanging', + 'fas_signal' : 'fas fa-signal', + 'fas_signature' : 'fas fa-signature', + 'fas_signs_post' : 'fas fa-signs-post', + 'fas_sim_card' : 'fas fa-sim-card', + 'fas_sink' : 'fas fa-sink', + 'fas_sitemap' : 'fas fa-sitemap', + 'fas_skull_crossbones' : 'fas fa-skull-crossbones', + 'fas_skull' : 'fas fa-skull', + 'fas_slash' : 'fas fa-slash', + 'fas_sleigh' : 'fas fa-sleigh', + 'fas_sliders' : 'fas fa-sliders', + 'fas_smog' : 'fas fa-smog', + 'fas_smoking' : 'fas fa-smoking', + 'fas_snowflake' : 'fas fa-snowflake', + 'fas_snowman' : 'fas fa-snowman', + 'fas_snowplow' : 'fas fa-snowplow', + 'fas_soap' : 'fas fa-soap', + 'fas_socks' : 'fas fa-socks', + 'fas_solar_panel' : 'fas fa-solar-panel', + 'fas_sort_down' : 'fas fa-sort-down', + 'fas_sort_up' : 'fas fa-sort-up', + 'fas_sort' : 'fas fa-sort', + 'fas_spa' : 'fas fa-spa', + 'fas_spaghetti_monster_flying' : 'fas fa-spaghetti-monster-flying', + 'fas_spell_check' : 'fas fa-spell-check', + 'fas_spider' : 'fas fa-spider', + 'fas_spinner' : 'fas fa-spinner', + 'fas_splotch' : 'fas fa-splotch', + 'fas_spoon' : 'fas fa-spoon', + 'fas_spray_can_sparkles' : 'fas fa-spray-can-sparkles', + 'fas_spray_can' : 'fas fa-spray-can', + 'fas_square_arrow_up_right' : 'fas fa-square-arrow-up-right', + 'fas_square_caret_down' : 'fas fa-square-caret-down', + 'fas_square_caret_left' : 'fas fa-square-caret-left', + 'fas_square_caret_right' : 'fas fa-square-caret-right', + 'fas_square_caret_up' : 'fas fa-square-caret-up', + 'fas_square_check' : 'fas fa-square-check', + 'fas_square_envelope' : 'fas fa-square-envelope', + 'fas_square_full' : 'fas fa-square-full', + 'fas_square_h' : 'fas fa-square-h', + 'fas_square_minus' : 'fas fa-square-minus', + 'fas_square_nfi' : 'fas fa-square-nfi', + 'fas_square_parking' : 'fas fa-square-parking', + 'fas_square_pen' : 'fas fa-square-pen', + 'fas_square_person_confined' : 'fas fa-square-person-confined', + 'fas_square_phone_flip' : 'fas fa-square-phone-flip', + 'fas_square_phone' : 'fas fa-square-phone', + 'fas_square_plus' : 'fas fa-square-plus', + 'fas_square_poll_horizontal' : 'fas fa-square-poll-horizontal', + 'fas_square_poll_vertical' : 'fas fa-square-poll-vertical', + 'fas_square_root_variable' : 'fas fa-square-root-variable', + 'fas_square_rss' : 'fas fa-square-rss', + 'fas_square_share_nodes' : 'fas fa-square-share-nodes', + 'fas_square_up_right' : 'fas fa-square-up-right', + 'fas_square_virus' : 'fas fa-square-virus', + 'fas_square_xmark' : 'fas fa-square-xmark', + 'fas_square' : 'fas fa-square', + 'fas_staff_snake' : 'fas fa-staff-snake', + 'fas_stairs' : 'fas fa-stairs', + 'fas_stamp' : 'fas fa-stamp', + 'fas_stapler' : 'fas fa-stapler', + 'fas_star_and_crescent' : 'fas fa-star-and-crescent', + 'fas_star_half_stroke' : 'fas fa-star-half-stroke', + 'fas_star_half' : 'fas fa-star-half', + 'fas_star_of_david' : 'fas fa-star-of-david', + 'fas_star_of_life' : 'fas fa-star-of-life', + 'fas_star' : 'fas fa-star', + 'fas_sterling_sign' : 'fas fa-sterling-sign', + 'fas_stethoscope' : 'fas fa-stethoscope', + 'fas_stop' : 'fas fa-stop', + 'fas_stopwatch_20' : 'fas fa-stopwatch-20', + 'fas_stopwatch' : 'fas fa-stopwatch', + 'fas_store_slash' : 'fas fa-store-slash', + 'fas_store' : 'fas fa-store', + 'fas_street_view' : 'fas fa-street-view', + 'fas_strikethrough' : 'fas fa-strikethrough', + 'fas_stroopwafel' : 'fas fa-stroopwafel', + 'fas_subscript' : 'fas fa-subscript', + 'fas_suitcase_medical' : 'fas fa-suitcase-medical', + 'fas_suitcase_rolling' : 'fas fa-suitcase-rolling', + 'fas_suitcase' : 'fas fa-suitcase', + 'fas_sun_plant_wilt' : 'fas fa-sun-plant-wilt', + 'fas_sun' : 'fas fa-sun', + 'fas_superscript' : 'fas fa-superscript', + 'fas_swatchbook' : 'fas fa-swatchbook', + 'fas_synagogue' : 'fas fa-synagogue', + 'fas_syringe' : 'fas fa-syringe', + 'fas_t' : 'fas fa-t', + 'fas_table_cells_column_lock' : 'fas fa-table-cells-column-lock', + 'fas_table_cells_large' : 'fas fa-table-cells-large', + 'fas_table_cells_row_lock' : 'fas fa-table-cells-row-lock', + 'fas_table_cells' : 'fas fa-table-cells', + 'fas_table_columns' : 'fas fa-table-columns', + 'fas_table_list' : 'fas fa-table-list', + 'fas_table_tennis_paddle_ball' : 'fas fa-table-tennis-paddle-ball', + 'fas_table' : 'fas fa-table', + 'fas_tablet_button' : 'fas fa-tablet-button', + 'fas_tablet_screen_button' : 'fas fa-tablet-screen-button', + 'fas_tablet' : 'fas fa-tablet', + 'fas_tablets' : 'fas fa-tablets', + 'fas_tachograph_digital' : 'fas fa-tachograph-digital', + 'fas_tag' : 'fas fa-tag', + 'fas_tags' : 'fas fa-tags', + 'fas_tape' : 'fas fa-tape', + 'fas_tarp_droplet' : 'fas fa-tarp-droplet', + 'fas_tarp' : 'fas fa-tarp', + 'fas_taxi' : 'fas fa-taxi', + 'fas_teeth_open' : 'fas fa-teeth-open', + 'fas_teeth' : 'fas fa-teeth', + 'fas_temperature_arrow_down' : 'fas fa-temperature-arrow-down', + 'fas_temperature_arrow_up' : 'fas fa-temperature-arrow-up', + 'fas_temperature_empty' : 'fas fa-temperature-empty', + 'fas_temperature_full' : 'fas fa-temperature-full', + 'fas_temperature_half' : 'fas fa-temperature-half', + 'fas_temperature_high' : 'fas fa-temperature-high', + 'fas_temperature_low' : 'fas fa-temperature-low', + 'fas_temperature_quarter' : 'fas fa-temperature-quarter', + 'fas_temperature_three_quarters' : 'fas fa-temperature-three-quarters', + 'fas_tenge_sign' : 'fas fa-tenge-sign', + 'fas_tent_arrow_down_to_line' : 'fas fa-tent-arrow-down-to-line', + 'fas_tent_arrow_left_right' : 'fas fa-tent-arrow-left-right', + 'fas_tent_arrow_turn_left' : 'fas fa-tent-arrow-turn-left', + 'fas_tent_arrows_down' : 'fas fa-tent-arrows-down', + 'fas_tent' : 'fas fa-tent', + 'fas_tents' : 'fas fa-tents', + 'fas_terminal' : 'fas fa-terminal', + 'fas_text_height' : 'fas fa-text-height', + 'fas_text_slash' : 'fas fa-text-slash', + 'fas_text_width' : 'fas fa-text-width', + 'fas_thermometer' : 'fas fa-thermometer', + 'fas_thumbs_down' : 'fas fa-thumbs-down', + 'fas_thumbs_up' : 'fas fa-thumbs-up', + 'fas_thumbtack' : 'fas fa-thumbtack', + 'fas_ticket_simple' : 'fas fa-ticket-simple', + 'fas_ticket' : 'fas fa-ticket', + 'fas_timeline' : 'fas fa-timeline', + 'fas_toggle_off' : 'fas fa-toggle-off', + 'fas_toggle_on' : 'fas fa-toggle-on', + 'fas_toilet_paper_slash' : 'fas fa-toilet-paper-slash', + 'fas_toilet_paper' : 'fas fa-toilet-paper', + 'fas_toilet_portable' : 'fas fa-toilet-portable', + 'fas_toilet' : 'fas fa-toilet', + 'fas_toilets_portable' : 'fas fa-toilets-portable', + 'fas_toolbox' : 'fas fa-toolbox', + 'fas_tooth' : 'fas fa-tooth', + 'fas_torii_gate' : 'fas fa-torii-gate', + 'fas_tornado' : 'fas fa-tornado', + 'fas_tower_broadcast' : 'fas fa-tower-broadcast', + 'fas_tower_cell' : 'fas fa-tower-cell', + 'fas_tower_observation' : 'fas fa-tower-observation', + 'fas_tractor' : 'fas fa-tractor', + 'fas_trademark' : 'fas fa-trademark', + 'fas_traffic_light' : 'fas fa-traffic-light', + 'fas_trailer' : 'fas fa-trailer', + 'fas_train_subway' : 'fas fa-train-subway', + 'fas_train_tram' : 'fas fa-train-tram', + 'fas_train' : 'fas fa-train', + 'fas_transgender' : 'fas fa-transgender', + 'fas_trash_arrow_up' : 'fas fa-trash-arrow-up', + 'fas_trash_can_arrow_up' : 'fas fa-trash-can-arrow-up', + 'fas_trash_can' : 'fas fa-trash-can', + 'fas_trash' : 'fas fa-trash', + 'fas_tree_city' : 'fas fa-tree-city', + 'fas_tree' : 'fas fa-tree', + 'fas_triangle_exclamation' : 'fas fa-triangle-exclamation', + 'fas_trophy' : 'fas fa-trophy', + 'fas_trowel_bricks' : 'fas fa-trowel-bricks', + 'fas_trowel' : 'fas fa-trowel', + 'fas_truck_arrow_right' : 'fas fa-truck-arrow-right', + 'fas_truck_droplet' : 'fas fa-truck-droplet', + 'fas_truck_fast' : 'fas fa-truck-fast', + 'fas_truck_field_un' : 'fas fa-truck-field-un', + 'fas_truck_field' : 'fas fa-truck-field', + 'fas_truck_front' : 'fas fa-truck-front', + 'fas_truck_medical' : 'fas fa-truck-medical', + 'fas_truck_monster' : 'fas fa-truck-monster', + 'fas_truck_moving' : 'fas fa-truck-moving', + 'fas_truck_pickup' : 'fas fa-truck-pickup', + 'fas_truck_plane' : 'fas fa-truck-plane', + 'fas_truck_ramp_box' : 'fas fa-truck-ramp-box', + 'fas_truck' : 'fas fa-truck', + 'fas_tty' : 'fas fa-tty', + 'fas_turkish_lira_sign' : 'fas fa-turkish-lira-sign', + 'fas_turn_down' : 'fas fa-turn-down', + 'fas_turn_up' : 'fas fa-turn-up', + 'fas_tv' : 'fas fa-tv', + 'fas_u' : 'fas fa-u', + 'fas_umbrella_beach' : 'fas fa-umbrella-beach', + 'fas_umbrella' : 'fas fa-umbrella', + 'fas_underline' : 'fas fa-underline', + 'fas_universal_access' : 'fas fa-universal-access', + 'fas_unlock_keyhole' : 'fas fa-unlock-keyhole', + 'fas_unlock' : 'fas fa-unlock', + 'fas_up_down_left_right' : 'fas fa-up-down-left-right', + 'fas_up_down' : 'fas fa-up-down', + 'fas_up_long' : 'fas fa-up-long', + 'fas_up_right_and_down_left_from_center' : 'fas fa-up-right-and-down-left-from-center', + 'fas_up_right_from_square' : 'fas fa-up-right-from-square', + 'fas_upload' : 'fas fa-upload', + 'fas_user_astronaut' : 'fas fa-user-astronaut', + 'fas_user_check' : 'fas fa-user-check', + 'fas_user_clock' : 'fas fa-user-clock', + 'fas_user_doctor' : 'fas fa-user-doctor', + 'fas_user_gear' : 'fas fa-user-gear', + 'fas_user_graduate' : 'fas fa-user-graduate', + 'fas_user_group' : 'fas fa-user-group', + 'fas_user_injured' : 'fas fa-user-injured', + 'fas_user_large_slash' : 'fas fa-user-large-slash', + 'fas_user_large' : 'fas fa-user-large', + 'fas_user_lock' : 'fas fa-user-lock', + 'fas_user_minus' : 'fas fa-user-minus', + 'fas_user_ninja' : 'fas fa-user-ninja', + 'fas_user_nurse' : 'fas fa-user-nurse', + 'fas_user_pen' : 'fas fa-user-pen', + 'fas_user_plus' : 'fas fa-user-plus', + 'fas_user_secret' : 'fas fa-user-secret', + 'fas_user_shield' : 'fas fa-user-shield', + 'fas_user_slash' : 'fas fa-user-slash', + 'fas_user_tag' : 'fas fa-user-tag', + 'fas_user_tie' : 'fas fa-user-tie', + 'fas_user_xmark' : 'fas fa-user-xmark', + 'fas_user' : 'fas fa-user', + 'fas_users_between_lines' : 'fas fa-users-between-lines', + 'fas_users_gear' : 'fas fa-users-gear', + 'fas_users_line' : 'fas fa-users-line', + 'fas_users_rays' : 'fas fa-users-rays', + 'fas_users_rectangle' : 'fas fa-users-rectangle', + 'fas_users_slash' : 'fas fa-users-slash', + 'fas_users_viewfinder' : 'fas fa-users-viewfinder', + 'fas_users' : 'fas fa-users', + 'fas_utensils' : 'fas fa-utensils', + 'fas_v' : 'fas fa-v', + 'fas_van_shuttle' : 'fas fa-van-shuttle', + 'fas_vault' : 'fas fa-vault', + 'fas_vector_square' : 'fas fa-vector-square', + 'fas_venus_double' : 'fas fa-venus-double', + 'fas_venus_mars' : 'fas fa-venus-mars', + 'fas_venus' : 'fas fa-venus', + 'fas_vest_patches' : 'fas fa-vest-patches', + 'fas_vest' : 'fas fa-vest', + 'fas_vial_circle_check' : 'fas fa-vial-circle-check', + 'fas_vial_virus' : 'fas fa-vial-virus', + 'fas_vial' : 'fas fa-vial', + 'fas_vials' : 'fas fa-vials', + 'fas_video_slash' : 'fas fa-video-slash', + 'fas_video' : 'fas fa-video', + 'fas_vihara' : 'fas fa-vihara', + 'fas_virus_covid_slash' : 'fas fa-virus-covid-slash', + 'fas_virus_covid' : 'fas fa-virus-covid', + 'fas_virus_slash' : 'fas fa-virus-slash', + 'fas_virus' : 'fas fa-virus', + 'fas_viruses' : 'fas fa-viruses', + 'fas_voicemail' : 'fas fa-voicemail', + 'fas_volcano' : 'fas fa-volcano', + 'fas_volleyball' : 'fas fa-volleyball', + 'fas_volume_high' : 'fas fa-volume-high', + 'fas_volume_low' : 'fas fa-volume-low', + 'fas_volume_off' : 'fas fa-volume-off', + 'fas_volume_xmark' : 'fas fa-volume-xmark', + 'fas_vr_cardboard' : 'fas fa-vr-cardboard', + 'fas_w' : 'fas fa-w', + 'fas_walkie_talkie' : 'fas fa-walkie-talkie', + 'fas_wallet' : 'fas fa-wallet', + 'fas_wand_magic_sparkles' : 'fas fa-wand-magic-sparkles', + 'fas_wand_magic' : 'fas fa-wand-magic', + 'fas_wand_sparkles' : 'fas fa-wand-sparkles', + 'fas_warehouse' : 'fas fa-warehouse', + 'fas_water_ladder' : 'fas fa-water-ladder', + 'fas_water' : 'fas fa-water', + 'fas_wave_square' : 'fas fa-wave-square', + 'fas_weight_hanging' : 'fas fa-weight-hanging', + 'fas_weight_scale' : 'fas fa-weight-scale', + 'fas_wheat_awn_circle_exclamation' : 'fas fa-wheat-awn-circle-exclamation', + 'fas_wheat_awn' : 'fas fa-wheat-awn', + 'fas_wheelchair_move' : 'fas fa-wheelchair-move', + 'fas_wheelchair' : 'fas fa-wheelchair', + 'fas_whiskey_glass' : 'fas fa-whiskey-glass', + 'fas_wifi' : 'fas fa-wifi', + 'fas_wind' : 'fas fa-wind', + 'fas_window_maximize' : 'fas fa-window-maximize', + 'fas_window_minimize' : 'fas fa-window-minimize', + 'fas_window_restore' : 'fas fa-window-restore', + 'fas_wine_bottle' : 'fas fa-wine-bottle', + 'fas_wine_glass_empty' : 'fas fa-wine-glass-empty', + 'fas_wine_glass' : 'fas fa-wine-glass', + 'fas_won_sign' : 'fas fa-won-sign', + 'fas_worm' : 'fas fa-worm', + 'fas_wrench' : 'fas fa-wrench', + 'fas_x_ray' : 'fas fa-x-ray', + 'fas_x' : 'fas fa-x', + 'fas_xmark' : 'fas fa-xmark', + 'fas_xmarks_lines' : 'fas fa-xmarks-lines', + 'fas_y' : 'fas fa-y', + 'fas_yen_sign' : 'fas fa-yen-sign', + 'fas_yin_yang' : 'fas fa-yin-yang', + 'fas_z' : 'fas fa-z', + + //FONT-AWESOME REGULAR + 'far_address_book' : 'far fa-address-book', + 'far_address_card' : 'far fa-address-card', + 'far_bell_slash' : 'far fa-bell-slash', + 'far_bell' : 'far fa-bell', + 'far_bookmark' : 'far fa-bookmark', + 'far_building' : 'far fa-building', + 'far_calendar_check' : 'far fa-calendar-check', + 'far_calendar_days' : 'far fa-calendar-days', + 'far_calendar_minus' : 'far fa-calendar-minus', + 'far_calendar_plus' : 'far fa-calendar-plus', + 'far_calendar_xmark' : 'far fa-calendar-xmark', + 'far_calendar' : 'far fa-calendar', + 'far_chart_bar' : 'far fa-chart-bar', + 'far_chess_bishop' : 'far fa-chess-bishop', + 'far_chess_king' : 'far fa-chess-king', + 'far_chess_knight' : 'far fa-chess-knight', + 'far_chess_pawn' : 'far fa-chess-pawn', + 'far_chess_queen' : 'far fa-chess-queen', + 'far_chess_rook' : 'far fa-chess-rook', + 'far_circle_check' : 'far fa-circle-check', + 'far_circle_dot' : 'far fa-circle-dot', + 'far_circle_down' : 'far fa-circle-down', + 'far_circle_left' : 'far fa-circle-left', + 'far_circle_pause' : 'far fa-circle-pause', + 'far_circle_play' : 'far fa-circle-play', + 'far_circle_question' : 'far fa-circle-question', + 'far_circle_right' : 'far fa-circle-right', + 'far_circle_stop' : 'far fa-circle-stop', + 'far_circle_up' : 'far fa-circle-up', + 'far_circle_user' : 'far fa-circle-user', + 'far_circle_xmark' : 'far fa-circle-xmark', + 'far_circle' : 'far fa-circle', + 'far_clipboard' : 'far fa-clipboard', + 'far_clock' : 'far fa-clock', + 'far_clone' : 'far fa-clone', + 'far_closed_captioning' : 'far fa-closed-captioning', + 'far_comment_dots' : 'far fa-comment-dots', + 'far_comment' : 'far fa-comment', + 'far_comments' : 'far fa-comments', + 'far_compass' : 'far fa-compass', + 'far_copy' : 'far fa-copy', + 'far_copyright' : 'far fa-copyright', + 'far_credit_card' : 'far fa-credit-card', + 'far_envelope_open' : 'far fa-envelope-open', + 'far_envelope' : 'far fa-envelope', + 'far_eye_slash' : 'far fa-eye-slash', + 'far_eye' : 'far fa-eye', + 'far_face_angry' : 'far fa-face-angry', + 'far_face_dizzy' : 'far fa-face-dizzy', + 'far_face_flushed' : 'far fa-face-flushed', + 'far_face_frown_open' : 'far fa-face-frown-open', + 'far_face_frown' : 'far fa-face-frown', + 'far_face_grimace' : 'far fa-face-grimace', + 'far_face_grin_beam_sweat' : 'far fa-face-grin-beam-sweat', + 'far_face_grin_beam' : 'far fa-face-grin-beam', + 'far_face_grin_hearts' : 'far fa-face-grin-hearts', + 'far_face_grin_squint_tears' : 'far fa-face-grin-squint-tears', + 'far_face_grin_squint' : 'far fa-face-grin-squint', + 'far_face_grin_stars' : 'far fa-face-grin-stars', + 'far_face_grin_tears' : 'far fa-face-grin-tears', + 'far_face_grin_tongue_squint' : 'far fa-face-grin-tongue-squint', + 'far_face_grin_tongue_wink' : 'far fa-face-grin-tongue-wink', + 'far_face_grin_tongue' : 'far fa-face-grin-tongue', + 'far_face_grin_wide' : 'far fa-face-grin-wide', + 'far_face_grin_wink' : 'far fa-face-grin-wink', + 'far_face_grin' : 'far fa-face-grin', + 'far_face_kiss_beam' : 'far fa-face-kiss-beam', + 'far_face_kiss_wink_heart' : 'far fa-face-kiss-wink-heart', + 'far_face_kiss' : 'far fa-face-kiss', + 'far_face_laugh_beam' : 'far fa-face-laugh-beam', + 'far_face_laugh_squint' : 'far fa-face-laugh-squint', + 'far_face_laugh_wink' : 'far fa-face-laugh-wink', + 'far_face_laugh' : 'far fa-face-laugh', + 'far_face_meh_blank' : 'far fa-face-meh-blank', + 'far_face_meh' : 'far fa-face-meh', + 'far_face_rolling_eyes' : 'far fa-face-rolling-eyes', + 'far_face_sad_cry' : 'far fa-face-sad-cry', + 'far_face_sad_tear' : 'far fa-face-sad-tear', + 'far_face_smile_beam' : 'far fa-face-smile-beam', + 'far_face_smile_wink' : 'far fa-face-smile-wink', + 'far_face_smile' : 'far fa-face-smile', + 'far_face_surprise' : 'far fa-face-surprise', + 'far_face_tired' : 'far fa-face-tired', + 'far_file_audio' : 'far fa-file-audio', + 'far_file_code' : 'far fa-file-code', + 'far_file_excel' : 'far fa-file-excel', + 'far_file_image' : 'far fa-file-image', + 'far_file_lines' : 'far fa-file-lines', + 'far_file_pdf' : 'far fa-file-pdf', + 'far_file_powerpoint' : 'far fa-file-powerpoint', + 'far_file_video' : 'far fa-file-video', + 'far_file_word' : 'far fa-file-word', + 'far_file_zipper' : 'far fa-file-zipper', + 'far_file' : 'far fa-file', + 'far_flag' : 'far fa-flag', + 'far_floppy_disk' : 'far fa-floppy-disk', + 'far_folder_closed' : 'far fa-folder-closed', + 'far_folder_open' : 'far fa-folder-open', + 'far_folder' : 'far fa-folder', + 'far_font_awesome' : 'far fa-font-awesome', + 'far_futbol' : 'far fa-futbol', + 'far_gem' : 'far fa-gem', + 'far_hand_back_fist' : 'far fa-hand-back-fist', + 'far_hand_lizard' : 'far fa-hand-lizard', + 'far_hand_peace' : 'far fa-hand-peace', + 'far_hand_point_down' : 'far fa-hand-point-down', + 'far_hand_point_left' : 'far fa-hand-point-left', + 'far_hand_point_right' : 'far fa-hand-point-right', + 'far_hand_point_up' : 'far fa-hand-point-up', + 'far_hand_pointer' : 'far fa-hand-pointer', + 'far_hand_scissors' : 'far fa-hand-scissors', + 'far_hand_spock' : 'far fa-hand-spock', + 'far_hand' : 'far fa-hand', + 'far_handshake' : 'far fa-handshake', + 'far_hard_drive' : 'far fa-hard-drive', + 'far_heart' : 'far fa-heart', + 'far_hospital' : 'far fa-hospital', + 'far_hourglass_half' : 'far fa-hourglass-half', + 'far_hourglass' : 'far fa-hourglass', + 'far_id_badge' : 'far fa-id-badge', + 'far_id_card' : 'far fa-id-card', + 'far_image' : 'far fa-image', + 'far_images' : 'far fa-images', + 'far_keyboard' : 'far fa-keyboard', + 'far_lemon' : 'far fa-lemon', + 'far_life_ring' : 'far fa-life-ring', + 'far_lightbulb' : 'far fa-lightbulb', + 'far_map' : 'far fa-map', + 'far_message' : 'far fa-message', + 'far_money_bill_1' : 'far fa-money-bill-1', + 'far_moon' : 'far fa-moon', + 'far_newspaper' : 'far fa-newspaper', + 'far_note_sticky' : 'far fa-note-sticky', + 'far_object_group' : 'far fa-object-group', + 'far_object_ungroup' : 'far fa-object-ungroup', + 'far_paper_plane' : 'far fa-paper-plane', + 'far_paste' : 'far fa-paste', + 'far_pen_to_square' : 'far fa-pen-to-square', + 'far_rectangle_list' : 'far fa-rectangle-list', + 'far_rectangle_xmark' : 'far fa-rectangle-xmark', + 'far_registered' : 'far fa-registered', + 'far_share_from_square' : 'far fa-share-from-square', + 'far_snowflake' : 'far fa-snowflake', + 'far_square_caret_down' : 'far fa-square-caret-down', + 'far_square_caret_left' : 'far fa-square-caret-left', + 'far_square_caret_right' : 'far fa-square-caret-right', + 'far_square_caret_up' : 'far fa-square-caret-up', + 'far_square_check' : 'far fa-square-check', + 'far_square_full' : 'far fa-square-full', + 'far_square_minus' : 'far fa-square-minus', + 'far_square_plus' : 'far fa-square-plus', + 'far_square' : 'far fa-square', + 'far_star_half_stroke' : 'far fa-star-half-stroke', + 'far_star_half' : 'far fa-star-half', + 'far_star' : 'far fa-star', + 'far_sun' : 'far fa-sun', + 'far_thumbs_down' : 'far fa-thumbs-down', + 'far_thumbs_up' : 'far fa-thumbs-up', + 'far_trash_can' : 'far fa-trash-can', + 'far_user' : 'far fa-user', + 'far_window_maximize' : 'far fa-window-maximize', + 'far_window_minimize' : 'far fa-window-minimize', + 'far_window_restore' : 'far fa-window-restore', + + //FONT-AWESOME BRANDS + 'fab_42_group' : 'fab fa-42-group', + 'fab_500px' : 'fab fa-500px', + 'fab_accessible_icon' : 'fab fa-accessible-icon', + 'fab_accusoft' : 'fab fa-accusoft', + 'fab_adn' : 'fab fa-adn', + 'fab_adversal' : 'fab fa-adversal', + 'fab_affiliatetheme' : 'fab fa-affiliatetheme', + 'fab_airbnb' : 'fab fa-airbnb', + 'fab_algolia' : 'fab fa-algolia', + 'fab_alipay' : 'fab fa-alipay', + 'fab_amazon_pay' : 'fab fa-amazon-pay', + 'fab_amazon' : 'fab fa-amazon', + 'fab_amilia' : 'fab fa-amilia', + 'fab_android' : 'fab fa-android', + 'fab_angellist' : 'fab fa-angellist', + 'fab_angrycreative' : 'fab fa-angrycreative', + 'fab_angular' : 'fab fa-angular', + 'fab_app_store_ios' : 'fab fa-app-store-ios', + 'fab_app_store' : 'fab fa-app-store', + 'fab_apper' : 'fab fa-apper', + 'fab_apple_pay' : 'fab fa-apple-pay', + 'fab_apple' : 'fab fa-apple', + 'fab_artstation' : 'fab fa-artstation', + 'fab_asymmetrik' : 'fab fa-asymmetrik', + 'fab_atlassian' : 'fab fa-atlassian', + 'fab_audible' : 'fab fa-audible', + 'fab_autoprefixer' : 'fab fa-autoprefixer', + 'fab_avianex' : 'fab fa-avianex', + 'fab_aviato' : 'fab fa-aviato', + 'fab_aws' : 'fab fa-aws', + 'fab_bandcamp' : 'fab fa-bandcamp', + 'fab_battle_net' : 'fab fa-battle-net', + 'fab_behance' : 'fab fa-behance', + 'fab_bilibili' : 'fab fa-bilibili', + 'fab_bimobject' : 'fab fa-bimobject', + 'fab_bitbucket' : 'fab fa-bitbucket', + 'fab_bitcoin' : 'fab fa-bitcoin', + 'fab_bity' : 'fab fa-bity', + 'fab_black_tie' : 'fab fa-black-tie', + 'fab_blackberry' : 'fab fa-blackberry', + 'fab_blogger_b' : 'fab fa-blogger-b', + 'fab_blogger' : 'fab fa-blogger', + 'fab_bluesky' : 'fab fa-bluesky', + 'fab_bluetooth_b' : 'fab fa-bluetooth-b', + 'fab_bluetooth' : 'fab fa-bluetooth', + 'fab_bootstrap' : 'fab fa-bootstrap', + 'fab_bots' : 'fab fa-bots', + 'fab_brave_reverse' : 'fab fa-brave-reverse', + 'fab_brave' : 'fab fa-brave', + 'fab_btc' : 'fab fa-btc', + 'fab_buffer' : 'fab fa-buffer', + 'fab_buromobelexperte' : 'fab fa-buromobelexperte', + 'fab_buy_n_large' : 'fab fa-buy-n-large', + 'fab_buysellads' : 'fab fa-buysellads', + 'fab_canadian_maple_leaf' : 'fab fa-canadian-maple-leaf', + 'fab_cc_amazon_pay' : 'fab fa-cc-amazon-pay', + 'fab_cc_amex' : 'fab fa-cc-amex', + 'fab_cc_apple_pay' : 'fab fa-cc-apple-pay', + 'fab_cc_diners_club' : 'fab fa-cc-diners-club', + 'fab_cc_discover' : 'fab fa-cc-discover', + 'fab_cc_jcb' : 'fab fa-cc-jcb', + 'fab_cc_mastercard' : 'fab fa-cc-mastercard', + 'fab_cc_paypal' : 'fab fa-cc-paypal', + 'fab_cc_stripe' : 'fab fa-cc-stripe', + 'fab_cc_visa' : 'fab fa-cc-visa', + 'fab_centercode' : 'fab fa-centercode', + 'fab_centos' : 'fab fa-centos', + 'fab_chrome' : 'fab fa-chrome', + 'fab_chromecast' : 'fab fa-chromecast', + 'fab_cloudflare' : 'fab fa-cloudflare', + 'fab_cloudscale' : 'fab fa-cloudscale', + 'fab_cloudsmith' : 'fab fa-cloudsmith', + 'fab_cloudversify' : 'fab fa-cloudversify', + 'fab_cmplid' : 'fab fa-cmplid', + 'fab_codepen' : 'fab fa-codepen', + 'fab_codiepie' : 'fab fa-codiepie', + 'fab_confluence' : 'fab fa-confluence', + 'fab_connectdevelop' : 'fab fa-connectdevelop', + 'fab_contao' : 'fab fa-contao', + 'fab_cotton_bureau' : 'fab fa-cotton-bureau', + 'fab_cpanel' : 'fab fa-cpanel', + 'fab_creative_commons_by' : 'fab fa-creative-commons-by', + 'fab_creative_commons_nc_eu' : 'fab fa-creative-commons-nc-eu', + 'fab_creative_commons_nc_jp' : 'fab fa-creative-commons-nc-jp', + 'fab_creative_commons_nc' : 'fab fa-creative-commons-nc', + 'fab_creative_commons_nd' : 'fab fa-creative-commons-nd', + 'fab_creative_commons_pd_alt' : 'fab fa-creative-commons-pd-alt', + 'fab_creative_commons_pd' : 'fab fa-creative-commons-pd', + 'fab_creative_commons_remix' : 'fab fa-creative-commons-remix', + 'fab_creative_commons_sa' : 'fab fa-creative-commons-sa', + 'fab_creative_commons_sampling_plus' : 'fab fa-creative-commons-sampling-plus', + 'fab_creative_commons_sampling' : 'fab fa-creative-commons-sampling', + 'fab_creative_commons_share' : 'fab fa-creative-commons-share', + 'fab_creative_commons_zero' : 'fab fa-creative-commons-zero', + 'fab_creative_commons' : 'fab fa-creative-commons', + 'fab_critical_role' : 'fab fa-critical-role', + 'fab_css3_alt' : 'fab fa-css3-alt', + 'fab_css3' : 'fab fa-css3', + 'fab_cuttlefish' : 'fab fa-cuttlefish', + 'fab_d_and_d_beyond' : 'fab fa-d-and-d-beyond', + 'fab_d_and_d' : 'fab fa-d-and-d', + 'fab_dailymotion' : 'fab fa-dailymotion', + 'fab_dashcube' : 'fab fa-dashcube', + 'fab_debian' : 'fab fa-debian', + 'fab_deezer' : 'fab fa-deezer', + 'fab_delicious' : 'fab fa-delicious', + 'fab_deploydog' : 'fab fa-deploydog', + 'fab_deskpro' : 'fab fa-deskpro', + 'fab_dev' : 'fab fa-dev', + 'fab_deviantart' : 'fab fa-deviantart', + 'fab_dhl' : 'fab fa-dhl', + 'fab_diaspora' : 'fab fa-diaspora', + 'fab_digg' : 'fab fa-digg', + 'fab_digital_ocean' : 'fab fa-digital-ocean', + 'fab_discord' : 'fab fa-discord', + 'fab_discourse' : 'fab fa-discourse', + 'fab_dochub' : 'fab fa-dochub', + 'fab_docker' : 'fab fa-docker', + 'fab_draft2digital' : 'fab fa-draft2digital', + 'fab_dribbble' : 'fab fa-dribbble', + 'fab_dropbox' : 'fab fa-dropbox', + 'fab_drupal' : 'fab fa-drupal', + 'fab_dyalog' : 'fab fa-dyalog', + 'fab_earlybirds' : 'fab fa-earlybirds', + 'fab_ebay' : 'fab fa-ebay', + 'fab_edge_legacy' : 'fab fa-edge-legacy', + 'fab_edge' : 'fab fa-edge', + 'fab_elementor' : 'fab fa-elementor', + 'fab_ello' : 'fab fa-ello', + 'fab_ember' : 'fab fa-ember', + 'fab_empire' : 'fab fa-empire', + 'fab_envira' : 'fab fa-envira', + 'fab_erlang' : 'fab fa-erlang', + 'fab_ethereum' : 'fab fa-ethereum', + 'fab_etsy' : 'fab fa-etsy', + 'fab_evernote' : 'fab fa-evernote', + 'fab_expeditedssl' : 'fab fa-expeditedssl', + 'fab_facebook_f' : 'fab fa-facebook-f', + 'fab_facebook_messenger' : 'fab fa-facebook-messenger', + 'fab_facebook' : 'fab fa-facebook', + 'fab_fantasy_flight_games' : 'fab fa-fantasy-flight-games', + 'fab_fedex' : 'fab fa-fedex', + 'fab_fedora' : 'fab fa-fedora', + 'fab_figma' : 'fab fa-figma', + 'fab_firefox_browser' : 'fab fa-firefox-browser', + 'fab_firefox' : 'fab fa-firefox', + 'fab_first_order_alt' : 'fab fa-first-order-alt', + 'fab_first_order' : 'fab fa-first-order', + 'fab_firstdraft' : 'fab fa-firstdraft', + 'fab_flickr' : 'fab fa-flickr', + 'fab_flipboard' : 'fab fa-flipboard', + 'fab_fly' : 'fab fa-fly', + 'fab_font_awesome' : 'fab fa-font-awesome', + 'fab_fonticons_fi' : 'fab fa-fonticons-fi', + 'fab_fonticons' : 'fab fa-fonticons', + 'fab_fort_awesome_alt' : 'fab fa-fort-awesome-alt', + 'fab_fort_awesome' : 'fab fa-fort-awesome', + 'fab_forumbee' : 'fab fa-forumbee', + 'fab_foursquare' : 'fab fa-foursquare', + 'fab_free_code_camp' : 'fab fa-free-code-camp', + 'fab_freebsd' : 'fab fa-freebsd', + 'fab_fulcrum' : 'fab fa-fulcrum', + 'fab_galactic_republic' : 'fab fa-galactic-republic', + 'fab_galactic_senate' : 'fab fa-galactic-senate', + 'fab_get_pocket' : 'fab fa-get-pocket', + 'fab_gg_circle' : 'fab fa-gg-circle', + 'fab_gg' : 'fab fa-gg', + 'fab_git_alt' : 'fab fa-git-alt', + 'fab_git' : 'fab fa-git', + 'fab_github_alt' : 'fab fa-github-alt', + 'fab_github' : 'fab fa-github', + 'fab_gitkraken' : 'fab fa-gitkraken', + 'fab_gitlab' : 'fab fa-gitlab', + 'fab_gitter' : 'fab fa-gitter', + 'fab_glide_g' : 'fab fa-glide-g', + 'fab_glide' : 'fab fa-glide', + 'fab_gofore' : 'fab fa-gofore', + 'fab_golang' : 'fab fa-golang', + 'fab_goodreads_g' : 'fab fa-goodreads-g', + 'fab_goodreads' : 'fab fa-goodreads', + 'fab_google_drive' : 'fab fa-google-drive', + 'fab_google_pay' : 'fab fa-google-pay', + 'fab_google_play' : 'fab fa-google-play', + 'fab_google_plus_g' : 'fab fa-google-plus-g', + 'fab_google_plus' : 'fab fa-google-plus', + 'fab_google_scholar' : 'fab fa-google-scholar', + 'fab_google_wallet' : 'fab fa-google-wallet', + 'fab_google' : 'fab fa-google', + 'fab_gratipay' : 'fab fa-gratipay', + 'fab_grav' : 'fab fa-grav', + 'fab_gripfire' : 'fab fa-gripfire', + 'fab_grunt' : 'fab fa-grunt', + 'fab_guilded' : 'fab fa-guilded', + 'fab_gulp' : 'fab fa-gulp', + 'fab_hacker_news' : 'fab fa-hacker-news', + 'fab_hackerrank' : 'fab fa-hackerrank', + 'fab_hashnode' : 'fab fa-hashnode', + 'fab_hips' : 'fab fa-hips', + 'fab_hire_a_helper' : 'fab fa-hire-a-helper', + 'fab_hive' : 'fab fa-hive', + 'fab_hooli' : 'fab fa-hooli', + 'fab_hornbill' : 'fab fa-hornbill', + 'fab_hotjar' : 'fab fa-hotjar', + 'fab_houzz' : 'fab fa-houzz', + 'fab_html5' : 'fab fa-html5', + 'fab_hubspot' : 'fab fa-hubspot', + 'fab_ideal' : 'fab fa-ideal', + 'fab_imdb' : 'fab fa-imdb', + 'fab_instagram' : 'fab fa-instagram', + 'fab_instalod' : 'fab fa-instalod', + 'fab_intercom' : 'fab fa-intercom', + 'fab_internet_explorer' : 'fab fa-internet-explorer', + 'fab_invision' : 'fab fa-invision', + 'fab_ioxhost' : 'fab fa-ioxhost', + 'fab_itch_io' : 'fab fa-itch-io', + 'fab_itunes_note' : 'fab fa-itunes-note', + 'fab_itunes' : 'fab fa-itunes', + 'fab_java' : 'fab fa-java', + 'fab_jedi_order' : 'fab fa-jedi-order', + 'fab_jenkins' : 'fab fa-jenkins', + 'fab_jira' : 'fab fa-jira', + 'fab_joget' : 'fab fa-joget', + 'fab_joomla' : 'fab fa-joomla', + 'fab_js' : 'fab fa-js', + 'fab_jsfiddle' : 'fab fa-jsfiddle', + 'fab_jxl' : 'fab fa-jxl', + 'fab_kaggle' : 'fab fa-kaggle', + 'fab_keybase' : 'fab fa-keybase', + 'fab_keycdn' : 'fab fa-keycdn', + 'fab_kickstarter_k' : 'fab fa-kickstarter-k', + 'fab_kickstarter' : 'fab fa-kickstarter', + 'fab_korvue' : 'fab fa-korvue', + 'fab_laravel' : 'fab fa-laravel', + 'fab_lastfm' : 'fab fa-lastfm', + 'fab_leanpub' : 'fab fa-leanpub', + 'fab_less' : 'fab fa-less', + 'fab_letterboxd' : 'fab fa-letterboxd', + 'fab_line' : 'fab fa-line', + 'fab_linkedin_in' : 'fab fa-linkedin-in', + 'fab_linkedin' : 'fab fa-linkedin', + 'fab_linode' : 'fab fa-linode', + 'fab_linux' : 'fab fa-linux', + 'fab_lyft' : 'fab fa-lyft', + 'fab_magento' : 'fab fa-magento', + 'fab_mailchimp' : 'fab fa-mailchimp', + 'fab_mandalorian' : 'fab fa-mandalorian', + 'fab_markdown' : 'fab fa-markdown', + 'fab_mastodon' : 'fab fa-mastodon', + 'fab_maxcdn' : 'fab fa-maxcdn', + 'fab_mdb' : 'fab fa-mdb', + 'fab_medapps' : 'fab fa-medapps', + 'fab_medium' : 'fab fa-medium', + 'fab_medrt' : 'fab fa-medrt', + 'fab_meetup' : 'fab fa-meetup', + 'fab_megaport' : 'fab fa-megaport', + 'fab_mendeley' : 'fab fa-mendeley', + 'fab_meta' : 'fab fa-meta', + 'fab_microblog' : 'fab fa-microblog', + 'fab_microsoft' : 'fab fa-microsoft', + 'fab_mintbit' : 'fab fa-mintbit', + 'fab_mix' : 'fab fa-mix', + 'fab_mixcloud' : 'fab fa-mixcloud', + 'fab_mixer' : 'fab fa-mixer', + 'fab_mizuni' : 'fab fa-mizuni', + 'fab_modx' : 'fab fa-modx', + 'fab_monero' : 'fab fa-monero', + 'fab_napster' : 'fab fa-napster', + 'fab_neos' : 'fab fa-neos', + 'fab_nfc_directional' : 'fab fa-nfc-directional', + 'fab_nfc_symbol' : 'fab fa-nfc-symbol', + 'fab_nimblr' : 'fab fa-nimblr', + 'fab_node_js' : 'fab fa-node-js', + 'fab_node' : 'fab fa-node', + 'fab_npm' : 'fab fa-npm', + 'fab_ns8' : 'fab fa-ns8', + 'fab_nutritionix' : 'fab fa-nutritionix', + 'fab_octopus_deploy' : 'fab fa-octopus-deploy', + 'fab_odnoklassniki' : 'fab fa-odnoklassniki', + 'fab_odysee' : 'fab fa-odysee', + 'fab_old_republic' : 'fab fa-old-republic', + 'fab_opencart' : 'fab fa-opencart', + 'fab_openid' : 'fab fa-openid', + 'fab_opensuse' : 'fab fa-opensuse', + 'fab_opera' : 'fab fa-opera', + 'fab_optin_monster' : 'fab fa-optin-monster', + 'fab_orcid' : 'fab fa-orcid', + 'fab_osi' : 'fab fa-osi', + 'fab_padlet' : 'fab fa-padlet', + 'fab_page4' : 'fab fa-page4', + 'fab_pagelines' : 'fab fa-pagelines', + 'fab_palfed' : 'fab fa-palfed', + 'fab_patreon' : 'fab fa-patreon', + 'fab_paypal' : 'fab fa-paypal', + 'fab_perbyte' : 'fab fa-perbyte', + 'fab_periscope' : 'fab fa-periscope', + 'fab_phabricator' : 'fab fa-phabricator', + 'fab_phoenix_framework' : 'fab fa-phoenix-framework', + 'fab_phoenix_squadron' : 'fab fa-phoenix-squadron', + 'fab_php' : 'fab fa-php', + 'fab_pied_piper_alt' : 'fab fa-pied-piper-alt', + 'fab_pied_piper_hat' : 'fab fa-pied-piper-hat', + 'fab_pied_piper_pp' : 'fab fa-pied-piper-pp', + 'fab_pied_piper' : 'fab fa-pied-piper', + 'fab_pinterest_p' : 'fab fa-pinterest-p', + 'fab_pinterest' : 'fab fa-pinterest', + 'fab_pix' : 'fab fa-pix', + 'fab_pixiv' : 'fab fa-pixiv', + 'fab_playstation' : 'fab fa-playstation', + 'fab_product_hunt' : 'fab fa-product-hunt', + 'fab_pushed' : 'fab fa-pushed', + 'fab_python' : 'fab fa-python', + 'fab_qq' : 'fab fa-qq', + 'fab_quinscape' : 'fab fa-quinscape', + 'fab_quora' : 'fab fa-quora', + 'fab_r_project' : 'fab fa-r-project', + 'fab_raspberry_pi' : 'fab fa-raspberry-pi', + 'fab_ravelry' : 'fab fa-ravelry', + 'fab_react' : 'fab fa-react', + 'fab_reacteurope' : 'fab fa-reacteurope', + 'fab_readme' : 'fab fa-readme', + 'fab_rebel' : 'fab fa-rebel', + 'fab_red_river' : 'fab fa-red-river', + 'fab_reddit_alien' : 'fab fa-reddit-alien', + 'fab_reddit' : 'fab fa-reddit', + 'fab_redhat' : 'fab fa-redhat', + 'fab_renren' : 'fab fa-renren', + 'fab_replyd' : 'fab fa-replyd', + 'fab_researchgate' : 'fab fa-researchgate', + 'fab_resolving' : 'fab fa-resolving', + 'fab_rev' : 'fab fa-rev', + 'fab_rocketchat' : 'fab fa-rocketchat', + 'fab_rockrms' : 'fab fa-rockrms', + 'fab_rust' : 'fab fa-rust', + 'fab_safari' : 'fab fa-safari', + 'fab_salesforce' : 'fab fa-salesforce', + 'fab_sass' : 'fab fa-sass', + 'fab_schlix' : 'fab fa-schlix', + 'fab_screenpal' : 'fab fa-screenpal', + 'fab_scribd' : 'fab fa-scribd', + 'fab_searchengin' : 'fab fa-searchengin', + 'fab_sellcast' : 'fab fa-sellcast', + 'fab_sellsy' : 'fab fa-sellsy', + 'fab_servicestack' : 'fab fa-servicestack', + 'fab_shirtsinbulk' : 'fab fa-shirtsinbulk', + 'fab_shoelace' : 'fab fa-shoelace', + 'fab_shopify' : 'fab fa-shopify', + 'fab_shopware' : 'fab fa-shopware', + 'fab_signal_messenger' : 'fab fa-signal-messenger', + 'fab_simplybuilt' : 'fab fa-simplybuilt', + 'fab_sistrix' : 'fab fa-sistrix', + 'fab_sith' : 'fab fa-sith', + 'fab_sitrox' : 'fab fa-sitrox', + 'fab_sketch' : 'fab fa-sketch', + 'fab_skyatlas' : 'fab fa-skyatlas', + 'fab_skype' : 'fab fa-skype', + 'fab_slack' : 'fab fa-slack', + 'fab_slideshare' : 'fab fa-slideshare', + 'fab_snapchat' : 'fab fa-snapchat', + 'fab_soundcloud' : 'fab fa-soundcloud', + 'fab_sourcetree' : 'fab fa-sourcetree', + 'fab_space_awesome' : 'fab fa-space-awesome', + 'fab_speakap' : 'fab fa-speakap', + 'fab_speaker_deck' : 'fab fa-speaker-deck', + 'fab_spotify' : 'fab fa-spotify', + 'fab_square_behance' : 'fab fa-square-behance', + 'fab_square_dribbble' : 'fab fa-square-dribbble', + 'fab_square_facebook' : 'fab fa-square-facebook', + 'fab_square_font_awesome_stroke' : 'fab fa-square-font-awesome-stroke', + 'fab_square_font_awesome' : 'fab fa-square-font-awesome', + 'fab_square_git' : 'fab fa-square-git', + 'fab_square_github' : 'fab fa-square-github', + 'fab_square_gitlab' : 'fab fa-square-gitlab', + 'fab_square_google_plus' : 'fab fa-square-google-plus', + 'fab_square_hacker_news' : 'fab fa-square-hacker-news', + 'fab_square_instagram' : 'fab fa-square-instagram', + 'fab_square_js' : 'fab fa-square-js', + 'fab_square_lastfm' : 'fab fa-square-lastfm', + 'fab_square_letterboxd' : 'fab fa-square-letterboxd', + 'fab_square_odnoklassniki' : 'fab fa-square-odnoklassniki', + 'fab_square_pied_piper' : 'fab fa-square-pied-piper', + 'fab_square_pinterest' : 'fab fa-square-pinterest', + 'fab_square_reddit' : 'fab fa-square-reddit', + 'fab_square_snapchat' : 'fab fa-square-snapchat', + 'fab_square_steam' : 'fab fa-square-steam', + 'fab_square_threads' : 'fab fa-square-threads', + 'fab_square_tumblr' : 'fab fa-square-tumblr', + 'fab_square_twitter' : 'fab fa-square-twitter', + 'fab_square_upwork' : 'fab fa-square-upwork', + 'fab_square_viadeo' : 'fab fa-square-viadeo', + 'fab_square_vimeo' : 'fab fa-square-vimeo', + 'fab_square_web_awesome_stroke' : 'fab fa-square-web-awesome-stroke', + 'fab_square_web_awesome' : 'fab fa-square-web-awesome', + 'fab_square_whatsapp' : 'fab fa-square-whatsapp', + 'fab_square_x_twitter' : 'fab fa-square-x-twitter', + 'fab_square_xing' : 'fab fa-square-xing', + 'fab_square_youtube' : 'fab fa-square-youtube', + 'fab_squarespace' : 'fab fa-squarespace', + 'fab_stack_exchange' : 'fab fa-stack-exchange', + 'fab_stack_overflow' : 'fab fa-stack-overflow', + 'fab_stackpath' : 'fab fa-stackpath', + 'fab_staylinked' : 'fab fa-staylinked', + 'fab_steam_symbol' : 'fab fa-steam-symbol', + 'fab_steam' : 'fab fa-steam', + 'fab_sticker_mule' : 'fab fa-sticker-mule', + 'fab_strava' : 'fab fa-strava', + 'fab_stripe_s' : 'fab fa-stripe-s', + 'fab_stripe' : 'fab fa-stripe', + 'fab_stubber' : 'fab fa-stubber', + 'fab_studiovinari' : 'fab fa-studiovinari', + 'fab_stumbleupon_circle' : 'fab fa-stumbleupon-circle', + 'fab_stumbleupon' : 'fab fa-stumbleupon', + 'fab_superpowers' : 'fab fa-superpowers', + 'fab_supple' : 'fab fa-supple', + 'fab_suse' : 'fab fa-suse', + 'fab_swift' : 'fab fa-swift', + 'fab_symfony' : 'fab fa-symfony', + 'fab_teamspeak' : 'fab fa-teamspeak', + 'fab_telegram' : 'fab fa-telegram', + 'fab_tencent_weibo' : 'fab fa-tencent-weibo', + 'fab_the_red_yeti' : 'fab fa-the-red-yeti', + 'fab_themeco' : 'fab fa-themeco', + 'fab_themeisle' : 'fab fa-themeisle', + 'fab_think_peaks' : 'fab fa-think-peaks', + 'fab_threads' : 'fab fa-threads', + 'fab_tiktok' : 'fab fa-tiktok', + 'fab_trade_federation' : 'fab fa-trade-federation', + 'fab_trello' : 'fab fa-trello', + 'fab_tumblr' : 'fab fa-tumblr', + 'fab_twitch' : 'fab fa-twitch', + 'fab_twitter' : 'fab fa-twitter', + 'fab_typo3' : 'fab fa-typo3', + 'fab_uber' : 'fab fa-uber', + 'fab_ubuntu' : 'fab fa-ubuntu', + 'fab_uikit' : 'fab fa-uikit', + 'fab_umbraco' : 'fab fa-umbraco', + 'fab_uncharted' : 'fab fa-uncharted', + 'fab_uniregistry' : 'fab fa-uniregistry', + 'fab_unity' : 'fab fa-unity', + 'fab_unsplash' : 'fab fa-unsplash', + 'fab_untappd' : 'fab fa-untappd', + 'fab_ups' : 'fab fa-ups', + 'fab_upwork' : 'fab fa-upwork', + 'fab_usb' : 'fab fa-usb', + 'fab_usps' : 'fab fa-usps', + 'fab_ussunnah' : 'fab fa-ussunnah', + 'fab_vaadin' : 'fab fa-vaadin', + 'fab_viacoin' : 'fab fa-viacoin', + 'fab_viadeo' : 'fab fa-viadeo', + 'fab_viber' : 'fab fa-viber', + 'fab_vimeo_v' : 'fab fa-vimeo-v', + 'fab_vimeo' : 'fab fa-vimeo', + 'fab_vine' : 'fab fa-vine', + 'fab_vk' : 'fab fa-vk', + 'fab_vnv' : 'fab fa-vnv', + 'fab_vuejs' : 'fab fa-vuejs', + 'fab_watchman_monitoring' : 'fab fa-watchman-monitoring', + 'fab_waze' : 'fab fa-waze', + 'fab_web_awesome' : 'fab fa-web-awesome', + 'fab_webflow' : 'fab fa-webflow', + 'fab_weebly' : 'fab fa-weebly', + 'fab_weibo' : 'fab fa-weibo', + 'fab_weixin' : 'fab fa-weixin', + 'fab_whatsapp' : 'fab fa-whatsapp', + 'fab_whmcs' : 'fab fa-whmcs', + 'fab_wikipedia_w' : 'fab fa-wikipedia-w', + 'fab_windows' : 'fab fa-windows', + 'fab_wirsindhandwerk' : 'fab fa-wirsindhandwerk', + 'fab_wix' : 'fab fa-wix', + 'fab_wizards_of_the_coast' : 'fab fa-wizards-of-the-coast', + 'fab_wodu' : 'fab fa-wodu', + 'fab_wolf_pack_battalion' : 'fab fa-wolf-pack-battalion', + 'fab_wordpress_simple' : 'fab fa-wordpress-simple', + 'fab_wordpress' : 'fab fa-wordpress', + 'fab_wpbeginner' : 'fab fa-wpbeginner', + 'fab_wpexplorer' : 'fab fa-wpexplorer', + 'fab_wpforms' : 'fab fa-wpforms', + 'fab_wpressr' : 'fab fa-wpressr', + 'fab_x_twitter' : 'fab fa-x-twitter', + 'fab_xbox' : 'fab fa-xbox', + 'fab_xing' : 'fab fa-xing', + 'fab_y_combinator' : 'fab fa-y-combinator', + 'fab_yahoo' : 'fab fa-yahoo', + 'fab_yammer' : 'fab fa-yammer', + 'fab_yandex_international' : 'fab fa-yandex-international', + 'fab_yandex' : 'fab fa-yandex', + 'fab_yarn' : 'fab fa-yarn', + 'fab_yelp' : 'fab fa-yelp', + 'fab_yoast' : 'fab fa-yoast', + 'fab_youtube' : 'fab fa-youtube', + 'fab_zhihu' : 'fab fa-zhihu' +}; + +module.exports = fontAwesome; \ No newline at end of file