├── .editorconfig
├── .eslintrc
├── .github
├── FUNDING.yml
├── ISSUE_TEMPLATE
│ └── operator.yml
└── workflows
│ ├── build.yml
│ ├── codeql-analysis.yml
│ └── publish.yml
├── .gitignore
├── .husky
├── .gitignore
└── pre-commit
├── .prettierrc
├── .vscode
└── extensions.json
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── jest.config.ts
├── operators
├── ace
│ ├── ace.svg
│ └── index.ts
├── alibi
│ ├── alibi.svg
│ └── index.ts
├── amaru
│ ├── amaru.svg
│ └── index.ts
├── aruni
│ ├── aruni.svg
│ └── index.ts
├── ash
│ ├── ash.svg
│ └── index.ts
├── azami
│ ├── azami.svg
│ └── index.ts
├── bandit
│ ├── bandit.svg
│ └── index.ts
├── blackbeard
│ ├── blackbeard.svg
│ └── index.ts
├── blitz
│ ├── blitz.svg
│ └── index.ts
├── brava
│ ├── brava.svg
│ └── index.ts
├── buck
│ ├── buck.svg
│ └── index.ts
├── capitao
│ ├── capitao.svg
│ └── index.ts
├── castle
│ ├── castle.svg
│ └── index.ts
├── caveira
│ ├── caveira.svg
│ └── index.ts
├── clash
│ ├── clash.svg
│ └── index.ts
├── deimos
│ ├── deimos.svg
│ └── index.ts
├── doc
│ ├── doc.svg
│ └── index.ts
├── dokkaebi
│ ├── dokkaebi.svg
│ └── index.ts
├── echo
│ ├── echo.svg
│ └── index.ts
├── ela
│ ├── ela.svg
│ └── index.ts
├── fenrir
│ ├── fenrir.svg
│ └── index.ts
├── finka
│ ├── finka.svg
│ └── index.ts
├── flores
│ ├── flores.svg
│ └── index.ts
├── frost
│ ├── frost.svg
│ └── index.ts
├── fuze
│ ├── fuze.svg
│ └── index.ts
├── glaz
│ ├── glaz.svg
│ └── index.ts
├── goyo
│ ├── goyo.svg
│ └── index.ts
├── gridlock
│ ├── gridlock.svg
│ └── index.ts
├── grim
│ ├── grim.svg
│ └── index.ts
├── hibana
│ ├── hibana.svg
│ └── index.ts
├── iana
│ ├── iana.svg
│ └── index.ts
├── index.ts
├── iq
│ ├── index.ts
│ └── iq.svg
├── jackal
│ ├── index.ts
│ └── jackal.svg
├── jager
│ ├── index.ts
│ └── jager.svg
├── kaid
│ ├── index.ts
│ └── kaid.svg
├── kali
│ ├── index.ts
│ └── kali.svg
├── kapkan
│ ├── index.ts
│ └── kapkan.svg
├── lesion
│ ├── index.ts
│ └── lesion.svg
├── lion
│ ├── index.ts
│ └── lion.svg
├── maestro
│ ├── index.ts
│ └── maestro.svg
├── maverick
│ ├── index.ts
│ └── maverick.svg
├── melusi
│ ├── index.ts
│ └── melusi.svg
├── mira
│ ├── index.ts
│ └── mira.svg
├── montagne
│ ├── index.ts
│ └── montagne.svg
├── mozzie
│ ├── index.ts
│ └── mozzie.svg
├── mute
│ ├── index.ts
│ └── mute.svg
├── nokk
│ ├── index.ts
│ └── nokk.svg
├── nomad
│ ├── index.ts
│ └── nomad.svg
├── oryx
│ ├── index.ts
│ └── oryx.svg
├── osa
│ ├── index.ts
│ └── osa.svg
├── pulse
│ ├── index.ts
│ └── pulse.svg
├── ram
│ ├── index.ts
│ └── ram.svg
├── rauora
│ ├── index.ts
│ └── rauora.svg
├── recruit_blue
│ ├── index.ts
│ └── recruit_blue.svg
├── recruit_green
│ ├── index.ts
│ └── recruit_green.svg
├── recruit_orange
│ ├── index.ts
│ └── recruit_orange.svg
├── recruit_red
│ ├── index.ts
│ └── recruit_red.svg
├── recruit_yellow
│ ├── index.ts
│ └── recruit_yellow.svg
├── rook
│ ├── index.ts
│ └── rook.svg
├── sens
│ ├── index.ts
│ └── sens.svg
├── sentry
│ ├── index.ts
│ └── sentry.svg
├── skopos
│ ├── index.ts
│ └── skopos.svg
├── sledge
│ ├── index.ts
│ └── sledge.svg
├── smoke
│ ├── index.ts
│ └── smoke.svg
├── solis
│ ├── index.ts
│ └── solis.svg
├── striker
│ ├── index.ts
│ └── striker.svg
├── tachanka
│ ├── index.ts
│ └── tachanka.svg
├── thatcher
│ ├── index.ts
│ └── thatcher.svg
├── thermite
│ ├── index.ts
│ └── thermite.svg
├── thorn
│ ├── index.ts
│ └── thorn.svg
├── thunderbird
│ ├── index.ts
│ └── thunderbird.svg
├── tubarao
│ ├── index.ts
│ └── tubarao.svg
├── twitch
│ ├── index.ts
│ └── twitch.svg
├── valkyrie
│ ├── index.ts
│ └── valkyrie.svg
├── vigil
│ ├── index.ts
│ └── vigil.svg
├── wamai
│ ├── index.ts
│ └── wamai.svg
├── warden
│ ├── index.ts
│ └── warden.svg
├── ying
│ ├── index.ts
│ └── ying.svg
├── zero
│ ├── index.ts
│ └── zero.svg
└── zofia
│ ├── index.ts
│ └── zofia.svg
├── package-lock.json
├── package.json
├── scripts
├── build-icon-modules.ts
├── build-optimized-svg.ts
├── build-rollup.ts
├── build.ts
├── clean.ts
├── config.ts
└── util
│ ├── copy-dir.ts
│ └── index.ts
├── src
├── _tests_
│ ├── __snapshots__
│ │ └── functions.test.ts.snap
│ ├── functions.test.ts
│ └── index.test.ts
├── functions.ts
├── index.ts
├── template.ai
└── types
│ └── operator.d.ts
└── tsconfig.json
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | indent_style = space
5 | indent_size = 2
6 | end_of_line = lf
7 | charset = utf-8
8 | trim_trailing_whitespace = true
9 | insert_final_newline = true
10 |
--------------------------------------------------------------------------------
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "root": true,
3 | "parser": "@typescript-eslint/parser",
4 | "plugins": ["@typescript-eslint"],
5 | "extends": [
6 | "eslint:recommended",
7 | "plugin:@typescript-eslint/recommended",
8 | "plugin:unicorn/recommended",
9 | "prettier"
10 | ],
11 | "rules": {
12 | "unicorn/prefer-node-protocol": "off",
13 | "unicorn/prefer-module": "off",
14 | "unicorn/prevent-abbreviations": "off",
15 | "unicorn/numeric-separators-style": "off"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | ko_fi: marcopixel
2 | custom: ["https://www.paypal.me/vockner"]
3 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/operator.yml:
--------------------------------------------------------------------------------
1 | name: Operator
2 | description: Add an operator
3 | title: '[Operation OPERATION_NAME] OPERATOR_NAME'
4 | labels: ['enhancement']
5 | body:
6 | - type: input
7 | id: name
8 | attributes:
9 | label: Name/Nickname
10 | description: 'Readable name of the operator.'
11 | placeholder: 'ex: Sledge, Jäger'
12 | validations:
13 | required: true
14 | - type: dropdown
15 | id: role
16 | attributes:
17 | label: Role
18 | description: 'Role of the operator.'
19 | options:
20 | - Attacker
21 | - Defender
22 | validations:
23 | required: true
24 | - type: input
25 | id: org
26 | attributes:
27 | label: Organization
28 | description: 'Operator organisation name.'
29 | placeholder: 'ex: FBI, SWAT'
30 | validations:
31 | required: true
32 | - type: input
33 | id: squad
34 | attributes:
35 | label: Squad
36 | description: 'Operator squad name.'
37 | placeholder: 'ex: Nighthaven'
38 | validations:
39 | required: true
40 | - type: dropdown
41 | id: speed
42 | attributes:
43 | label: Speed
44 | description: 'Speed rating.'
45 | options:
46 | - 1
47 | - 2
48 | - 3
49 | validations:
50 | required: true
51 | - type: dropdown
52 | id: health
53 | attributes:
54 | label: Health
55 | description: 'Health Rating.'
56 | options:
57 | - 1
58 | - 2
59 | - 3
60 | validations:
61 | required: true
62 | - type: dropdown
63 | id: difficulty
64 | attributes:
65 | label: Difficilty
66 | description: 'Difficulty rating.'
67 | options:
68 | - 1
69 | - 2
70 | - 3
71 | validations:
72 | required: true
73 | - type: dropdown
74 | id: gender
75 | attributes:
76 | label: Gender
77 | description: 'm - Male, f - Female, o - Other, n - None/Not applicable, u - Unknown.'
78 | options:
79 | - 'm'
80 | - 'f'
81 | - 'o'
82 | - 'n'
83 | - 'u'
84 | validations:
85 | required: true
86 | - type: input
87 | id: country
88 | attributes:
89 | label: Country
90 | description: 'Country of the operator as a ISO 3166-1 alpha-2 code (https://wikipedia.org/wiki/ISO_3166-1_alpha-2).'
91 | placeholder: 'ex: DE, SK'
92 | validations:
93 | required: true
94 | - type: input
95 | id: season
96 | attributes:
97 | label: Season
98 | description: 'Season shorthandle when the operator was first introduced to the game.'
99 | placeholder: 'ex: Y1S1'
100 | validations:
101 | required: true
102 | - type: input
103 | id: height
104 | attributes:
105 | label: Height
106 | description: 'Height of the operator, in cm.'
107 | placeholder: 'ex: 175'
108 | validations:
109 | required: true
110 | - type: input
111 | id: weight
112 | attributes:
113 | label: Weight
114 | description: 'Weight of the operator, in kg.'
115 | placeholder: 'ex: 75'
116 | validations:
117 | required: true
118 | - type: input
119 | id: real-name
120 | attributes:
121 | label: Real name
122 | description: 'Real name of the operator.'
123 | placeholder: 'Miles Campbell'
124 | validations:
125 | required: true
126 | - type: input
127 | id: birthplace
128 | attributes:
129 | label: Birthplace
130 | description: 'Birthplace of the operator, including the country.'
131 | placeholder: 'Sherman Oaks, U.S.A'
132 | validations:
133 | required: true
134 | # Can be add later
135 | # - type: input
136 | # id: date-of-birth
137 | # attributes:
138 | # label: Date of birth
139 | # description: 'Date of birth of the operator as a ISO 8601 (https://wikipedia.org/wiki/ISO_8601).'
140 | # placeholder: 'ex: 1968-07-12'
141 | # validations:
142 | # required: true
143 | - type: textarea
144 | id: icon
145 | attributes:
146 | label: Icon
147 | description: 'Highiest resolution of operator icon you could find, in-game lossless screenshot, asset packs.'
148 | value: |
149 |
150 | Expand
151 |
152 |
153 | Icon image goes here
154 |
155 |
156 |
157 | validations:
158 | required: true
159 | - type: textarea
160 | id: reference
161 | attributes:
162 | label: Reference
163 | description: 'Sources of information filled above. Screenshots, urls.'
164 | value: |
165 |
166 | Expand
167 |
168 |
169 | Media files goes here
170 |
171 |
172 |
173 | - type: textarea
174 | id: additional-information
175 | attributes:
176 | label: Additional Information
177 |
--------------------------------------------------------------------------------
/.github/workflows/build.yml:
--------------------------------------------------------------------------------
1 | name: Ubuntu CI
2 |
3 | on:
4 | push:
5 | branches: [master]
6 | pull_request:
7 | branches: [master]
8 |
9 | jobs:
10 | build:
11 | name: Build & Test
12 | runs-on: ubuntu-latest
13 | strategy:
14 | matrix:
15 | node-version: [20.x]
16 | steps:
17 | - uses: actions/checkout@v2
18 | - name: Use Node.js ${{ matrix.node-version }}
19 | uses: actions/setup-node@v1
20 | with:
21 | node-version: ${{ matrix.node-version }}
22 | - run: npm ci
23 | - run: npm run build
24 | - run: npm run test
25 |
--------------------------------------------------------------------------------
/.github/workflows/codeql-analysis.yml:
--------------------------------------------------------------------------------
1 | # For most projects, this workflow file will not need changing; you simply need
2 | # to commit it to your repository.
3 | #
4 | # You may wish to alter this file to override the set of languages analyzed,
5 | # or to provide custom queries or build logic.
6 | #
7 | # ******** NOTE ********
8 | # We have attempted to detect the languages in your repository. Please check
9 | # the `language` matrix defined below to confirm you have the correct set of
10 | # supported CodeQL languages.
11 | # ******** NOTE ********
12 |
13 | name: "CodeQL"
14 |
15 | on:
16 | push:
17 | branches: [master]
18 | pull_request:
19 | # The branches below must be a subset of the branches above
20 | branches: [master]
21 | schedule:
22 | - cron: "38 7 * * 2"
23 |
24 | jobs:
25 | analyze:
26 | name: Analyze
27 | runs-on: ubuntu-latest
28 |
29 | strategy:
30 | fail-fast: false
31 | matrix:
32 | language: ["javascript"]
33 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
34 | # Learn more...
35 | # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection
36 |
37 | steps:
38 | - name: Checkout repository
39 | uses: actions/checkout@v2
40 |
41 | # Initializes the CodeQL tools for scanning.
42 | - name: Initialize CodeQL
43 | uses: github/codeql-action/init@v1
44 | with:
45 | languages: ${{ matrix.language }}
46 | # If you wish to specify custom queries, you can do so here or in a config file.
47 | # By default, queries listed here will override any specified in a config file.
48 | # Prefix the list here with "+" to use these queries and those in the config file.
49 | # queries: ./path/to/local/query, your-org/your-repo/queries@main
50 |
51 | # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
52 | # If this step fails, then you should remove it and run the build manually (see below)
53 | - name: Autobuild
54 | uses: github/codeql-action/autobuild@v1
55 |
56 | # ℹ️ Command-line programs to run using the OS shell.
57 | # 📚 https://git.io/JvXDl
58 |
59 | # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
60 | # and modify them (or add more) to build your code if your project
61 | # uses a compiled language
62 |
63 | #- run: |
64 | # make bootstrap
65 | # make release
66 |
67 | - name: Perform CodeQL Analysis
68 | uses: github/codeql-action/analyze@v1
69 |
--------------------------------------------------------------------------------
/.github/workflows/publish.yml:
--------------------------------------------------------------------------------
1 | name: Ubuntu Package
2 | on:
3 | release:
4 | types: [published]
5 | jobs:
6 | publish-npm:
7 | name: Publish to NPM
8 | runs-on: ubuntu-latest
9 | strategy:
10 | matrix:
11 | node-version: [20.x]
12 | steps:
13 | - uses: actions/checkout@v2
14 | - name: Use Node.js ${{ matrix.node-version }}
15 | uses: actions/setup-node@v1
16 | with:
17 | node-version: ${{ matrix.node-version }}
18 | registry-url: "https://registry.npmjs.org"
19 | - name: Install & test
20 | run: |
21 | npm ci
22 | npm run build
23 | npm run test
24 | - run: npm publish
25 | env:
26 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
27 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Created by https://www.gitignore.io/api/node,windows,visualstudiocode
3 | # Edit at https://www.gitignore.io/?templates=node,windows,visualstudiocode
4 |
5 | ### Node ###
6 | # Logs
7 | logs
8 | *.log
9 | npm-debug.log*
10 | yarn-debug.log*
11 | yarn-error.log*
12 | lerna-debug.log*
13 |
14 | # Diagnostic reports (https://nodejs.org/api/report.html)
15 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
16 |
17 | # Runtime data
18 | pids
19 | *.pid
20 | *.seed
21 | *.pid.lock
22 |
23 | # Directory for instrumented libs generated by jscoverage/JSCover
24 | lib-cov
25 |
26 | # Coverage directory used by tools like istanbul
27 | coverage
28 | *.lcov
29 |
30 | # nyc test coverage
31 | .nyc_output
32 |
33 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
34 | .grunt
35 |
36 | # Bower dependency directory (https://bower.io/)
37 | bower_components
38 |
39 | # node-waf configuration
40 | .lock-wscript
41 |
42 | # Compiled binary addons (https://nodejs.org/api/addons.html)
43 | build/Release
44 |
45 | # Dependency directories
46 | node_modules/
47 | jspm_packages/
48 |
49 | # TypeScript v1 declaration files
50 | typings/
51 |
52 | # TypeScript cache
53 | *.tsbuildinfo
54 |
55 | # Optional npm cache directory
56 | .npm
57 |
58 | # Optional eslint cache
59 | .eslintcache
60 |
61 | # Optional REPL history
62 | .node_repl_history
63 |
64 | # Output of 'npm pack'
65 | *.tgz
66 |
67 | # Yarn Integrity file
68 | .yarn-integrity
69 |
70 | # dotenv environment variables file
71 | .env
72 | .env.test
73 |
74 | # parcel-bundler cache (https://parceljs.org/)
75 | .cache
76 |
77 | # next.js build output
78 | .next
79 |
80 | # nuxt.js build output
81 | .nuxt
82 |
83 | # rollup.js default build output
84 | dist/
85 |
86 | # Uncomment the public line if your project uses Gatsby
87 | # https://nextjs.org/blog/next-9-1#public-directory-support
88 | # https://create-react-app.dev/docs/using-the-public-folder/#docsNav
89 | # public
90 |
91 | # Storybook build outputs
92 | .out
93 | .storybook-out
94 |
95 | # vuepress build output
96 | .vuepress/dist
97 |
98 | # Serverless directories
99 | .serverless/
100 |
101 | # FuseBox cache
102 | .fusebox/
103 |
104 | # DynamoDB Local files
105 | .dynamodb/
106 |
107 | # Temporary folders
108 | tmp/
109 | temp/
110 |
111 | ### VisualStudioCode ###
112 | .vscode/*
113 | !.vscode/settings.json
114 | !.vscode/tasks.json
115 | !.vscode/launch.json
116 | !.vscode/extensions.json
117 |
118 | ### VisualStudioCode Patch ###
119 | # Ignore all local history of files
120 | .history
121 |
122 | ### Windows ###
123 | # Windows thumbnail cache files
124 | Thumbs.db
125 | Thumbs.db:encryptable
126 | ehthumbs.db
127 | ehthumbs_vista.db
128 |
129 | # Dump file
130 | *.stackdump
131 |
132 | # Folder config file
133 | [Dd]esktop.ini
134 |
135 | # Recycle Bin used on file shares
136 | $RECYCLE.BIN/
137 |
138 | # Windows Installer files
139 | *.cab
140 | *.msi
141 | *.msix
142 | *.msm
143 | *.msp
144 |
145 | # Windows shortcuts
146 | *.lnk
147 |
148 | # End of https://www.gitignore.io/api/node,windows,visualstudiocode
149 |
--------------------------------------------------------------------------------
/.husky/.gitignore:
--------------------------------------------------------------------------------
1 | _
2 |
--------------------------------------------------------------------------------
/.husky/pre-commit:
--------------------------------------------------------------------------------
1 | npx lint-staged
2 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "semi": false,
3 | "arrowParens": "always",
4 | "singleQuote": false,
5 | "printWidth": 100
6 | }
7 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": [
3 | "editorconfig.editorconfig",
4 | "dbaeumer.vscode-eslint",
5 | "esbenp.prettier-vscode"
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | All versions upwards from `2.0.0` project will be documented in this file. For all older version, please check the [Releases](https://github.com/marcopixel/r6operators/releases/) tab.
4 |
5 | ## 2.11.1 (2025-03-26)
6 |
7 | ### 🐛 Bug Fixes
8 |
9 | - 🛠 Fixed incorrect CURRENT_SEASON value ([79591bc](https://github.com/marcopixel/r6operators/commit/79591bc93c9aa0de6c3f41fab9bf51034d45ad27))
10 |
11 | ## 2.11.0 (2025-03-24)
12 |
13 | - 🌟 Added Rauora operator icon & metadata (thanks to @J4yJ4y-R6 & @ynn-dev, [03a2805](https://github.com/marcopixel/r6operators/commit/03a28059efb2d26b18de18bbcf1546acf9682656), [ba9b2cd](https://github.com/marcopixel/r6operators/commit/ba9b2cdee5a68682da387fe8c0902f466cb5f1ae))
14 |
15 | ## 2.10.2 (2024-10-16)
16 |
17 | ### 🐛 Bug Fixes
18 |
19 | - 🛠 Fixed incorrect CURRENT_SEASON value again (thanks to @AlmostSuspense, [215fbf7](https://github.com/marcopixel/r6operators/commit/215fbf709b91f3ba31958b19fc461820f395d19e))
20 |
21 |
22 | ## 2.10.1 (2024-09-21)
23 |
24 | ### 🐛 Bug Fixes
25 |
26 | - 🛠 Fixed incorrect CURRENT_SEASON value ([b1add90](https://github.com/marcopixel/r6operators/commit/b1add909ddda65263ae948cb2f8204727efcc2ca))
27 |
28 |
29 | ## 2.10.0 (2024-09-21)
30 |
31 | ### ✨ Features
32 |
33 | - 🌟 Added Skopós operator icon & metadata (thanks to @J4yJ4y-R6 & @AlmostSuspense, [aa570e7](https://github.com/marcopixel/r6operators/commit/aa570e71e79539e5870d6e4196ed84cfb0af97fa))
34 |
35 | ## 2.9.0 (2024-05-31)
36 |
37 | ### ✨ Features
38 | * 🌟 add sentry and striker metadata and icon by @danielwerg in https://github.com/marcopixel/r6operators/pull/58
39 | * 📝 add operator issue template by @danielwerg in https://github.com/marcopixel/r6operators/pull/57
40 |
41 |
42 | ## 2.8.0 (2024-03-03)
43 |
44 | ### ✨ Features
45 |
46 | - 🌟 Added Deimos operator icon & metadata ([0af085d](https://github.com/marcopixel/r6operators/commit/0af085d0130f794ed69ef3c03d63773eda77aca1))
47 |
48 | ### 🐛 Bug Fixes
49 |
50 | - 🛠 Fixed Zofia squad copy/paste mistake ([74a4cb7](https://github.com/marcopixel/r6operators/commit/74a4cb70b87e0098f0fc618c80ed55d316aea8f8))
51 |
52 |
53 | ## 2.7.0 (2023-11-22)
54 |
55 | ### ✨ Features
56 |
57 | - 🌟 Added Tubarão operator icon & metadata (thanks to @danielwerg, [d924845](https://github.com/marcopixel/r6operators/commit/d924845f279b2910300468b3291fe4a89fcccbe4))
58 |
59 | ## 2.6.1 (2023-09-05)
60 |
61 | ### 🐛 Bug Fixes
62 |
63 | - 🛠 Fixed Ram icon inconsistencies & removed embedded raster image (thanks to @danielwerg, [66ba1aa](https://github.com/marcopixel/r6operators/commit/66ba1aa855932acf18547d6dc7b6546810c40ff0))
64 |
65 | ## 2.6.0 (2023-09-04)
66 |
67 | ### ✨ Features
68 |
69 | - 🌟 Added Ram operator icon & metadata ([5f5f2b9](https://github.com/marcopixel/r6operators/commit/5f5f2b9a2bd59497383535c9b9155c0d26707aa1))
70 |
71 | ## 2.5.0 (2023-05-24)
72 |
73 | ### ✨ Features
74 |
75 | - 🌟 Added Fenrir operator icon & metadata (thanks to @danielwerg, [557b359](https://github.com/marcopixel/r6operators/commit/557b359e7af2e9d761a67a58739e19c4ba6e41e2))
76 | - 🌟 Added Brava operator icon & metadata (thanks to @danielwerg, [afc28fa](https://github.com/marcopixel/r6operators/commit/afc28fa35fbb157e7e0d1d2ff1e04778dc45180f))
77 |
78 | ### 🐛 Bug Fixes
79 |
80 | - 🛠 Updated operator metadata ([c457841](https://github.com/marcopixel/r6operators/commit/c4578413e73a71a1a172022e41db53003ebae618))
81 |
82 | ### 🚨 Breaking Changes
83 |
84 | - **BREAKING**: Replaced `[op].unit` with `[op].org` and `[op].squad` ([c457841](https://github.com/marcopixel/r6operators/commit/c4578413e73a71a1a172022e41db53003ebae618))
85 |
86 | ## 2.4.0 (2022-12-07)
87 |
88 | ### ✨ Features
89 |
90 | - 🌟 Added Solis operator icon & metadata - thanks to @danielwerg for making the icon and collecting the metadata ([b6b1741](https://github.com/marcopixel/r6operators/commit/b6b17413ee3a8cb4b3dc4328c2ab36062363208a))
91 |
92 | ## 2.3.0 (2022-09-06)
93 |
94 | ### ✨ Features
95 |
96 | - 🌟 Added Grim operator icon & metadata ([b812269](https://github.com/marcopixel/r6operators/commit/b81226947cedca55a62ac3dfb5ebe1f62548dbc5))
97 | - 🛠 Added function to automatically calculate operator prices (by @danielwerg, [08989b6](https://github.com/marcopixel/r6operators/commit/08989b6666b2d1fc5fbe7fccdbb3b067fbdaea7a))
98 |
99 | ## 2.2.0 (2022-06-23)
100 |
101 | ### ✨ Features
102 |
103 | - 🌟 Added Sens operator icon & metadata ([3132a88](https://github.com/marcopixel/r6operators/commit/3132a88e0d8f3b4dd4e7fd1acfb7fa1040651f99))
104 |
105 | ### 🐛 Bug Fixes
106 |
107 | - 🛠 Updated operator prices + glaz rating (by @danielwerg, [6eaf958](https://github.com/marcopixel/r6operators/commit/6eaf958e24fcaba0b01ba5be7f351348606a867c))
108 |
109 | ## 2.1.0 (2022-03-16)
110 |
111 | ### ✨ Features
112 |
113 | - 🌟 Added Azami operator icon & metadata ([5561296](https://github.com/marcopixel/r6operators/commit/55612961add5b512896f388e31af96bb8f07f49c))
114 | - 🪙 Add operator prices (by [@leochras](https://github.com/leochras), [f2f5b62](https://github.com/marcopixel/r6operators/commit/f2f5b62a1c29b2b023126d1a9af8bca8dce1936f))
115 |
116 | ### 🐛 Bug Fixes
117 |
118 | - 🛠 Corrected incorrect season on Ela (by [@danielwerg](https://github.com/danielwerg), [6a8e270](https://github.com/marcopixel/r6operators/commit/6a8e27019e96dd3a9a17dba04065e3737fd76800))
119 |
120 | ## 2.0.0 (2021-12-01)
121 |
122 | ### ✨ Features
123 |
124 | - 📝 Rewrote library code for better typings, smaller filesize and future features ([6c84917](https://github.com/marcopixel/r6operators/commit/6c8491729761d3929a55597b655f41d091cce0ec))
125 | - 🎨 Reworked existing operator icons to the new style ([bfac854](https://github.com/marcopixel/r6operators/commit/bfac85442b01429553996428659bae1eee87ffb6), [80dbc5b](https://github.com/marcopixel/r6operators/commit/80dbc5b577449bf39dc50175115fb86c7aa410ea))
126 | - 🌟 Added Thorn opperator icon & metadata ([11ad21c](https://github.com/marcopixel/r6operators/commit/11ad21c2ae109c867203bc5782cf6bb3804cfb8f))
127 |
128 | ### 🐛 Bug Fixes
129 |
130 | - 🛠 Corrected incorrect metadata on Doc & Thatcher ([bb7e7a5](https://github.com/marcopixel/r6operators/commit/bb7e7a5d185026dfddb24f58da01295f123fa52a))
131 |
132 | ### 🚨 Breaking Changes
133 |
134 | - **BREAKING**: Changed `[op].sex` to `[op].gender` ([b46431e](https://github.com/marcopixel/r6operators/commit/b46431e2e2181083c120948161fe91c77e4fc4cf))
135 | - **BREAKING**: Renamed `[op].ratings.armor` to `[op].ratings.health` ([4311beb](https://github.com/marcopixel/r6operators/commit/4311beb57cc80ae2562631c83e6d6bbf2bad2b0a))
136 | - **BREAKING**: PNG files are no longer supplied with the library ([See #1 for more information](https://github.com/marcopixel/r6operators/issues/1#issuecomment-861881904))
137 | - **BREAKING**: Compiled library & icons path moved from `/lib` to `/dist` ([7756724](https://github.com/marcopixel/r6operators/commit/7756724e0f2d56cf7cc8521da8727c0804af06da))
138 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contribution Guidelines
2 |
3 | Thank you for your interest to contribute to this project. You're awesome! :+1:
4 |
5 | Below here are some guidelines for contributing to this project, please read them before creating a pull request/issue on Github.
6 |
7 | Feel free to improve these guidelines with a pull request! 😄
8 |
9 | ## Getting started
10 |
11 | **What does "contributing" mean?**
12 |
13 | Creating an issue is the simplest form of contributing to a project. But there are many ways to contribute, including the following:
14 |
15 | - Updating or correcting documentation
16 | - Feature requests
17 | - Bug reports
18 |
19 | If you'd like to learn more about contributing in general, the [Guide to Idiomatic Contributing](https://github.com/jonschlinkert/idiomatic-contributing) has a lot of useful information.
20 |
21 | ## Issues
22 |
23 | Please only create issues for bug reports or feature requests. Issues discussing any other topics may be closed by the project's maintainers without further explanation.
24 |
25 | Do not create issues about bumping dependencies unless a bug has been identified and you can demonstrate that it effects this library.
26 |
27 | **Help us to help you**
28 |
29 | Remember that we’re here to help, but not to make guesses about what you need help with:
30 |
31 | - Whatever bug or issue you're experiencing, assume that it will not be as obvious to the maintainers as it is to you.
32 | - Spell it out completely. Keep in mind that maintainers need to think about _all potential use cases_ of a library. It's important that you explain how you're using a library so that maintainers can make that connection and solve the issue.
33 |
34 | _It can't be understated how frustrating and draining it can be to maintainers to have to ask clarifying questions on the most basic things, before it's even possible to start debugging. Please try to make the best use of everyone's time involved, including yourself, by providing this information up front._
35 |
36 | ### Before creating an issue
37 |
38 | Please try to determine if the issue is caused by an underlying library, and if so, create the issue there. Sometimes this is difficult to know. We only ask that you attempt to give a reasonable attempt to find out. Oftentimes the readme will have advice about where to go to create issues.
39 |
40 | Try to follow these guidelines:
41 |
42 | - **Avoid creating issues for implementation help** - It's much better for discoverability, SEO, and semantics - to keep the issue tracker focused on bugs and feature requests - to ask implementation-related questions please go to [stackoverflow.com](https://stackoverflow.com/)
43 | - **Investigate the issue** - Search for exising issues (open or closed) that address the issue, and might have even resolved it already.
44 | - **Check the readme** - oftentimes you will find notes about creating issues, and where to go depending on the type of issue.
45 | - Create the issue in the appropriate repository.
46 |
47 | ### Creating an issue
48 |
49 | Please be as descriptive as possible when creating an issue. Give us the information we need to successfully answer your question or address your issue by answering the following in your issue:
50 |
51 | - **description**: (required) What is the bug you're experiencing? How are you using this library/app?
52 | - **version**: (required) please note the version you are using
53 | - **error messages**: (required) please paste any error messages into the issue, or a [gist](https://gist.github.com/)
54 |
55 | ### Closing issues
56 |
57 | The original poster or the maintainers may close an issue at any time. Typically, but not exclusively, issues are closed when:
58 |
59 | - The issue is resolved
60 | - The project's maintainers have determined the issue is out of scope
61 | - An issue is clearly a duplicate of another issue, in which case the duplicate issue will be linked.
62 | - A discussion has clearly run its course
63 |
64 | ## Next steps
65 |
66 | **Tips for creating idiomatic issues**
67 |
68 | Spending just a little extra time to review best practices and brush up on your contributing skills will, at minimum, make your issue easier to read, easier to resolve, and more likely to be found by others who have the same or similar issue in the future. At best, it will open up doors and potential career opportunities by helping you be at your best.
69 |
70 | The following resources were hand-picked to help you be the most effective contributor you can be:
71 |
72 | - The [Guide to Idiomatic Contributing](https://github.com/jonschlinkert/idiomatic-contributing) is a great place for newcomers to start, but there is also information for experienced contributors there.
73 | - Take some time to learn basic markdown. We can't stress this enough. Don't start pasting code into GitHub issues before you've taken a moment to review this [markdown cheatsheet](https://gist.github.com/jonschlinkert/5854601)
74 | - And if you want to really go above and beyond, read [mastering markdown](https://guides.github.com/features/mastering-markdown/).
75 |
76 | At the very least, please try to:
77 |
78 | - Use backticks to wrap code. This ensures that it retains its formatting and isn't modified when it's rendered by GitHub, and makes the code more readable to others
79 | - When applicable, use syntax highlighting by adding the correct language name after the first "code fence"
80 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Marco Vockner
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 | # r6operators
4 |
5 | 
6 | [](https://github.com/marcopixel/r6operators/stargazers)
7 | [](https://github.com/marcopixel/r6operators/network)
8 | [](https://github.com/marcopixel/r6operators)
9 |
10 | r6operators is a collection of high-quality vectorized Rainbow Six: Siege Operator icons & metadata for Node.js.
11 |
12 | This project started as way for people to get high-resolution operator icons for Rainbow Six: Siege operators, especially as vector graphics gained popularity in web development in the recent years. All icons have been remade by hand and they got the same aspect ratio & alignment for more consistent usage.
13 |
14 | [https://r6operators.marcopixel.eu/](https://r6operators.marcopixel.eu/)
15 |
16 | ## Usage
17 |
18 | #### 1. Install
19 |
20 | Install the package with [npm](https://docs.npmjs.com/getting-started/what-is-npm):
21 |
22 | ```shell
23 | npm install r6operators
24 | ```
25 |
26 | #### 2. Use it
27 |
28 | ```js
29 | import r6operators from "r6operators"
30 | // default export
31 |
32 | import { ace, getSVGIcon } from "r6operators"
33 | // named exports
34 |
35 | r6operators.alibi
36 | // {
37 | // id: 'alibi',
38 | // name: 'Alibi',
39 | // role: 'Defender',
40 | // org: 'GIS',
41 | // squad: 'VIPERSTRIKE',
42 | // ratings: {
43 | // health: 1,
44 | // speed: 3,
45 | // difficulty: 3
46 | // },
47 | // meta: {
48 | // gender: 'f',
49 | // country: 'it',
50 | // season: 'Y3S2',
51 | // height: 171,
52 | // weight: 63,
53 | // price: 10000
54 | // },
55 | // bio: {
56 | // real_name: 'Aria de Luca',
57 | // birthplace: 'Tripoli, Lybia'
58 | // },
59 | // svg: {
60 | // contents: [SVG Contents],
61 | // attributes: {
62 | // xmlns: 'http://www.w3.org/2000/svg',
63 | // viewBox: '0 0 350 350',
64 | // style: 'enable-background:new 0 0 350 350',
65 | // space: 'preserve',
66 | // class: 'r6operators r6operators-alibi'
67 | // }
68 | // },
69 | // toSVG: [Function]
70 | // }
71 |
72 | r6operators.alibi.toSVG()
73 | //
74 |
75 | r6operators.alibi.toSVG({ class: "large", "stroke-width": 2, color: "red" })
76 | //
77 | ```
78 |
79 | You can also access the optimized SVG icons directly from `node_modules\r6operators\dist\icons` if you desire.
80 |
81 | ## Reference
82 |
83 | ### `r6operators.[name]`
84 |
85 | An object containing all data about the operator, including the svg contents and attributes.
86 |
87 | > Note: You can find all possible operator names in the [operators/index.ts](https://github.com/marcopixel/r6operators/blob/master/operators/index.ts) file
88 | >
89 | > Please keep in mind that the properties `bio`, `meta` and `ratings` are not available on recruits.
90 |
91 | ##### Example:
92 |
93 | ```js
94 | r6operators.alibi
95 | // {
96 | // id: 'alibi',
97 | // name: 'Alibi',
98 | // role: 'Defender',
99 | // org: 'GIS',
100 | // squad: 'VIPERSTRIKE',
101 | // ratings: {
102 | // health: 1,
103 | // speed: 3,
104 | // difficulty: 3
105 | // },
106 | // meta: {
107 | // gender: 'f',
108 | // country: 'it',
109 | // season: 'Y3S2',
110 | // height: 171,
111 | // weight: 63,
112 | // price: 10000
113 | // },
114 | // bio: {
115 | // real_name: 'Aria de Luca',
116 | // birthplace: 'Tripoli, Lybia'
117 | // },
118 | // svg: {
119 | // contents: [SVG Contents],
120 | // attributes: {
121 | // xmlns: 'http://www.w3.org/2000/svg',
122 | // viewBox: '0 0 350 350',
123 | // style: 'enable-background:new 0 0 350 350',
124 | // space: 'preserve',
125 | // class: 'r6operators r6operators-alibi'
126 | // }
127 | // },
128 | // toSVG: [Function]
129 | // }
130 |
131 | r6operators.alibi.unit.toString()
132 | // GIS
133 | ```
134 |
135 | ---
136 |
137 | ### `r6operators.[name].toSVG([attrs])`
138 |
139 | Returns an SVG string of the operator icon.
140 |
141 | #### Parameters
142 |
143 | | Name | Type | Description |
144 | | ------------------ | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
145 | | `attrs` (optional) | Object | Key-value pairs in the `attrs` object will be mapped to HTML attributes on the `