gitextract__s9io7at/ ├── .dockerignore ├── .eslintrc-auto-import.json ├── .eslintrc.cjs ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report.yml │ │ ├── config.yml │ │ └── feature-request.yml │ ├── PULL_REQUEST_TEMPLATE/ │ │ └── pull_request_template.md │ ├── stale.yml │ └── workflows/ │ ├── ci.yml │ ├── docker-nightly-release.yml │ ├── e2e-tests.yml │ └── releases.yml ├── .gitignore ├── .nvmrc ├── .prettierrc ├── .versionrc ├── .vscode/ │ └── extensions.json ├── CHANGELOG.md ├── Dockerfile ├── LICENSE ├── README.md ├── _templates/ │ └── generator/ │ └── ui-component/ │ ├── component.demo.ejs.t │ └── component.ejs.t ├── auto-imports.d.ts ├── components.d.ts ├── env.d.ts ├── index.html ├── locales/ │ ├── de.yml │ ├── en.yml │ ├── es.yml │ ├── fr.yml │ ├── no.yml │ ├── pt.yml │ ├── uk.yml │ ├── vi.yml │ └── zh.yml ├── netlify.toml ├── nginx.conf ├── package.json ├── playwright.config.ts ├── public/ │ ├── browserconfig.xml │ ├── humans.txt │ └── robots.txt ├── renovate.json ├── scripts/ │ ├── build-locales-files.mjs │ ├── create-tool.mjs │ ├── getLatestChangelog.mjs │ ├── release.mjs │ └── shared/ │ ├── changelog.mjs │ └── commits.mjs ├── src/ │ ├── App.vue │ ├── components/ │ │ ├── CollapsibleToolMenu.vue │ │ ├── ColoredCard.vue │ │ ├── FavoriteButton.vue │ │ ├── FormatTransformer.vue │ │ ├── InputCopyable.vue │ │ ├── MenuIconItem.vue │ │ ├── MenuLayout.vue │ │ ├── NavbarButtons.vue │ │ ├── SpanCopyable.vue │ │ ├── TextareaCopyable.vue │ │ └── ToolCard.vue │ ├── composable/ │ │ ├── computed/ │ │ │ └── catchedComputed.ts │ │ ├── computedRefreshable.ts │ │ ├── copy.ts │ │ ├── debouncedref.ts │ │ ├── downloadBase64.test.ts │ │ ├── downloadBase64.ts │ │ ├── fuzzySearch.ts │ │ ├── queryParams.ts │ │ ├── validation.test.ts │ │ └── validation.ts │ ├── config.ts │ ├── layouts/ │ │ ├── base.layout.vue │ │ ├── index.ts │ │ └── tool.layout.vue │ ├── main.ts │ ├── modules/ │ │ ├── command-palette/ │ │ │ ├── command-palette.store.ts │ │ │ ├── command-palette.types.ts │ │ │ ├── command-palette.vue │ │ │ └── components/ │ │ │ └── command-palette-option.vue │ │ ├── i18n/ │ │ │ └── components/ │ │ │ └── locale-selector.vue │ │ ├── shared/ │ │ │ ├── date.models.ts │ │ │ └── number.models.ts │ │ └── tracker/ │ │ ├── tracker.services.ts │ │ └── tracker.types.ts │ ├── pages/ │ │ ├── 404.page.vue │ │ ├── About.vue │ │ └── Home.page.vue │ ├── plugins/ │ │ ├── i18n.plugin.ts │ │ ├── naive.plugin.ts │ │ └── plausible.plugin.ts │ ├── router.ts │ ├── shims.d.ts │ ├── stores/ │ │ └── style.store.ts │ ├── themes.ts │ ├── tools/ │ │ ├── ascii-text-drawer/ │ │ │ ├── ascii-text-drawer.vue │ │ │ └── index.ts │ │ ├── base64-file-converter/ │ │ │ ├── base64-file-converter.vue │ │ │ └── index.ts │ │ ├── base64-string-converter/ │ │ │ ├── base64-string-converter.vue │ │ │ └── index.ts │ │ ├── basic-auth-generator/ │ │ │ ├── basic-auth-generator.vue │ │ │ └── index.ts │ │ ├── bcrypt/ │ │ │ ├── bcrypt.vue │ │ │ └── index.ts │ │ ├── benchmark-builder/ │ │ │ ├── benchmark-builder.models.ts │ │ │ ├── benchmark-builder.vue │ │ │ ├── dynamic-values.vue │ │ │ └── index.ts │ │ ├── bip39-generator/ │ │ │ ├── bip39-generator.vue │ │ │ └── index.ts │ │ ├── camera-recorder/ │ │ │ ├── camera-recorder.vue │ │ │ ├── index.ts │ │ │ └── useMediaRecorder.ts │ │ ├── case-converter/ │ │ │ ├── case-converter.vue │ │ │ └── index.ts │ │ ├── chmod-calculator/ │ │ │ ├── chmod-calculator.service.test.ts │ │ │ ├── chmod-calculator.service.ts │ │ │ ├── chmod-calculator.types.ts │ │ │ ├── chmod-calculator.vue │ │ │ └── index.ts │ │ ├── chronometer/ │ │ │ ├── chronometer.service.test.ts │ │ │ ├── chronometer.service.ts │ │ │ ├── chronometer.vue │ │ │ └── index.ts │ │ ├── color-converter/ │ │ │ ├── color-converter.e2e.spec.ts │ │ │ ├── color-converter.models.test.ts │ │ │ ├── color-converter.models.ts │ │ │ ├── color-converter.vue │ │ │ └── index.ts │ │ ├── crontab-generator/ │ │ │ ├── crontab-generator.vue │ │ │ └── index.ts │ │ ├── date-time-converter/ │ │ │ ├── date-time-converter.e2e.spec.ts │ │ │ ├── date-time-converter.models.test.ts │ │ │ ├── date-time-converter.models.ts │ │ │ ├── date-time-converter.types.ts │ │ │ ├── date-time-converter.vue │ │ │ └── index.ts │ │ ├── device-information/ │ │ │ ├── device-information.vue │ │ │ └── index.ts │ │ ├── docker-run-to-docker-compose-converter/ │ │ │ ├── composerize.d.ts │ │ │ ├── docker-run-to-docker-compose-converter.vue │ │ │ └── index.ts │ │ ├── email-normalizer/ │ │ │ ├── email-normalizer.vue │ │ │ └── index.ts │ │ ├── emoji-picker/ │ │ │ ├── emoji-card.vue │ │ │ ├── emoji-grid.vue │ │ │ ├── emoji-picker.vue │ │ │ ├── emoji.types.ts │ │ │ └── index.ts │ │ ├── encryption/ │ │ │ ├── encryption.vue │ │ │ └── index.ts │ │ ├── eta-calculator/ │ │ │ ├── eta-calculator.service.ts │ │ │ ├── eta-calculator.vue │ │ │ └── index.ts │ │ ├── git-memo/ │ │ │ ├── git-memo.content.md │ │ │ ├── git-memo.vue │ │ │ └── index.ts │ │ ├── hash-text/ │ │ │ ├── hash-text.service.test.ts │ │ │ ├── hash-text.service.ts │ │ │ ├── hash-text.vue │ │ │ └── index.ts │ │ ├── hmac-generator/ │ │ │ ├── hmac-generator.vue │ │ │ └── index.ts │ │ ├── html-entities/ │ │ │ ├── html-entities.vue │ │ │ └── index.ts │ │ ├── html-wysiwyg-editor/ │ │ │ ├── editor/ │ │ │ │ ├── editor.vue │ │ │ │ ├── menu-bar-item.vue │ │ │ │ └── menu-bar.vue │ │ │ ├── html-wysiwyg-editor.vue │ │ │ └── index.ts │ │ ├── http-status-codes/ │ │ │ ├── http-status-codes.constants.ts │ │ │ ├── http-status-codes.e2e.spec.ts │ │ │ ├── http-status-codes.vue │ │ │ └── index.ts │ │ ├── iban-validator-and-parser/ │ │ │ ├── iban-validator-and-parser.e2e.spec.ts │ │ │ ├── iban-validator-and-parser.service.ts │ │ │ ├── iban-validator-and-parser.vue │ │ │ └── index.ts │ │ ├── index.ts │ │ ├── integer-base-converter/ │ │ │ ├── index.ts │ │ │ ├── integer-base-converter.model.test.ts │ │ │ ├── integer-base-converter.model.ts │ │ │ └── integer-base-converter.vue │ │ ├── ipv4-address-converter/ │ │ │ ├── index.ts │ │ │ ├── ipv4-address-converter.service.test.ts │ │ │ ├── ipv4-address-converter.service.ts │ │ │ └── ipv4-address-converter.vue │ │ ├── ipv4-range-expander/ │ │ │ ├── index.ts │ │ │ ├── ipv4-range-expander.e2e.spec.ts │ │ │ ├── ipv4-range-expander.service.test.ts │ │ │ ├── ipv4-range-expander.service.ts │ │ │ ├── ipv4-range-expander.types.ts │ │ │ ├── ipv4-range-expander.vue │ │ │ └── result-row.vue │ │ ├── ipv4-subnet-calculator/ │ │ │ ├── index.ts │ │ │ ├── ipv4-subnet-calculator.models.ts │ │ │ └── ipv4-subnet-calculator.vue │ │ ├── ipv6-ula-generator/ │ │ │ ├── index.ts │ │ │ └── ipv6-ula-generator.vue │ │ ├── json-diff/ │ │ │ ├── diff-viewer/ │ │ │ │ ├── diff-viewer.models.tsx │ │ │ │ └── diff-viewer.vue │ │ │ ├── index.ts │ │ │ ├── json-diff.e2e.spec.ts │ │ │ ├── json-diff.models.test.ts │ │ │ ├── json-diff.models.ts │ │ │ ├── json-diff.types.ts │ │ │ └── json-diff.vue │ │ ├── json-minify/ │ │ │ ├── index.ts │ │ │ └── json-minify.vue │ │ ├── json-to-csv/ │ │ │ ├── index.ts │ │ │ ├── json-to-csv.e2e.spec.ts │ │ │ ├── json-to-csv.service.test.ts │ │ │ ├── json-to-csv.service.ts │ │ │ └── json-to-csv.vue │ │ ├── json-to-toml/ │ │ │ ├── index.ts │ │ │ ├── json-to-toml.e2e.spec.ts │ │ │ └── json-to-toml.vue │ │ ├── json-to-xml/ │ │ │ ├── index.ts │ │ │ └── json-to-xml.vue │ │ ├── json-to-yaml-converter/ │ │ │ ├── index.ts │ │ │ ├── json-to-yaml.e2e.spec.ts │ │ │ └── json-to-yaml.vue │ │ ├── json-viewer/ │ │ │ ├── index.ts │ │ │ ├── json-viewer.vue │ │ │ ├── json.models.test.ts │ │ │ └── json.models.ts │ │ ├── jwt-parser/ │ │ │ ├── index.ts │ │ │ ├── jwt-parser.constants.ts │ │ │ ├── jwt-parser.service.ts │ │ │ └── jwt-parser.vue │ │ ├── keycode-info/ │ │ │ ├── index.ts │ │ │ └── keycode-info.vue │ │ ├── list-converter/ │ │ │ ├── index.ts │ │ │ ├── list-converter.e2e.spec.ts │ │ │ ├── list-converter.models.test.ts │ │ │ ├── list-converter.models.ts │ │ │ ├── list-converter.types.ts │ │ │ └── list-converter.vue │ │ ├── lorem-ipsum-generator/ │ │ │ ├── index.ts │ │ │ ├── lorem-ipsum-generator.service.ts │ │ │ └── lorem-ipsum-generator.vue │ │ ├── mac-address-generator/ │ │ │ ├── index.ts │ │ │ ├── mac-address-generator.e2e.spec.ts │ │ │ ├── mac-address-generator.vue │ │ │ ├── mac-adress-generator.models.test.ts │ │ │ └── mac-adress-generator.models.ts │ │ ├── mac-address-lookup/ │ │ │ ├── index.ts │ │ │ └── mac-address-lookup.vue │ │ ├── markdown-to-html/ │ │ │ ├── index.ts │ │ │ └── markdown-to-html.vue │ │ ├── math-evaluator/ │ │ │ ├── index.ts │ │ │ └── math-evaluator.vue │ │ ├── meta-tag-generator/ │ │ │ ├── OGSchemaType.type.ts │ │ │ ├── index.ts │ │ │ ├── meta-tag-generator.vue │ │ │ └── og-schemas/ │ │ │ ├── article.ts │ │ │ ├── book.ts │ │ │ ├── image.ts │ │ │ ├── index.ts │ │ │ ├── musicAlbum.ts │ │ │ ├── musicPlaylist.ts │ │ │ ├── musicRadioStation.ts │ │ │ ├── musicSong.ts │ │ │ ├── profile.ts │ │ │ ├── twitter.ts │ │ │ ├── videoEpisode.ts │ │ │ ├── videoMovie.ts │ │ │ ├── videoOther.ts │ │ │ ├── videoTVShow.ts │ │ │ └── website.ts │ │ ├── mime-types/ │ │ │ ├── index.ts │ │ │ └── mime-types.vue │ │ ├── numeronym-generator/ │ │ │ ├── index.ts │ │ │ ├── numeronym-generator.e2e.spec.ts │ │ │ ├── numeronym-generator.service.test.ts │ │ │ ├── numeronym-generator.service.ts │ │ │ └── numeronym-generator.vue │ │ ├── otp-code-generator-and-validator/ │ │ │ ├── index.ts │ │ │ ├── otp-code-generator-and-validator.vue │ │ │ ├── otp-code-generator.e2e.spec.ts │ │ │ ├── otp.service.test.ts │ │ │ ├── otp.service.ts │ │ │ └── token-display.vue │ │ ├── password-strength-analyser/ │ │ │ ├── index.ts │ │ │ ├── password-strength-analyser.e2e.spec.ts │ │ │ ├── password-strength-analyser.service.test.ts │ │ │ ├── password-strength-analyser.service.ts │ │ │ └── password-strength-analyser.vue │ │ ├── pdf-signature-checker/ │ │ │ ├── components/ │ │ │ │ └── pdf-signature-details.vue │ │ │ ├── index.ts │ │ │ ├── pdf-signature-checker.e2e.spec.ts │ │ │ ├── pdf-signature-checker.types.ts │ │ │ └── pdf-signature-checker.vue │ │ ├── percentage-calculator/ │ │ │ ├── index.ts │ │ │ ├── percentage-calculator.e2e.spec.ts │ │ │ └── percentage-calculator.vue │ │ ├── phone-parser-and-formatter/ │ │ │ ├── index.ts │ │ │ ├── phone-parser-and-formatter.e2e.spec.ts │ │ │ ├── phone-parser-and-formatter.models.ts │ │ │ └── phone-parser-and-formatter.vue │ │ ├── qr-code-generator/ │ │ │ ├── index.ts │ │ │ ├── qr-code-generator.vue │ │ │ └── useQRCode.ts │ │ ├── random-port-generator/ │ │ │ ├── index.ts │ │ │ ├── random-port-generator.model.ts │ │ │ └── random-port-generator.vue │ │ ├── regex-memo/ │ │ │ ├── index.ts │ │ │ ├── regex-memo.content.md │ │ │ └── regex-memo.vue │ │ ├── regex-tester/ │ │ │ ├── index.ts │ │ │ ├── regex-tester.service.test.ts │ │ │ ├── regex-tester.service.ts │ │ │ └── regex-tester.vue │ │ ├── roman-numeral-converter/ │ │ │ ├── index.ts │ │ │ ├── roman-numeral-converter.service.test.ts │ │ │ ├── roman-numeral-converter.service.ts │ │ │ └── roman-numeral-converter.vue │ │ ├── rsa-key-pair-generator/ │ │ │ ├── index.ts │ │ │ ├── rsa-key-pair-generator.service.ts │ │ │ └── rsa-key-pair-generator.vue │ │ ├── safelink-decoder/ │ │ │ ├── index.ts │ │ │ ├── safelink-decoder.service.test.ts │ │ │ ├── safelink-decoder.service.ts │ │ │ └── safelink-decoder.vue │ │ ├── slugify-string/ │ │ │ ├── index.ts │ │ │ └── slugify-string.vue │ │ ├── sql-prettify/ │ │ │ ├── index.ts │ │ │ └── sql-prettify.vue │ │ ├── string-obfuscator/ │ │ │ ├── index.ts │ │ │ ├── string-obfuscator.model.test.ts │ │ │ ├── string-obfuscator.model.ts │ │ │ └── string-obfuscator.vue │ │ ├── svg-placeholder-generator/ │ │ │ ├── index.ts │ │ │ └── svg-placeholder-generator.vue │ │ ├── temperature-converter/ │ │ │ ├── index.ts │ │ │ ├── temperature-converter.models.ts │ │ │ └── temperature-converter.vue │ │ ├── text-diff/ │ │ │ ├── index.ts │ │ │ └── text-diff.vue │ │ ├── text-statistics/ │ │ │ ├── index.ts │ │ │ ├── text-statistics.service.test.ts │ │ │ ├── text-statistics.service.ts │ │ │ └── text-statistics.vue │ │ ├── text-to-binary/ │ │ │ ├── index.ts │ │ │ ├── text-to-binary.e2e.spec.ts │ │ │ ├── text-to-binary.models.test.ts │ │ │ ├── text-to-binary.models.ts │ │ │ └── text-to-binary.vue │ │ ├── text-to-nato-alphabet/ │ │ │ ├── index.ts │ │ │ ├── text-to-nato-alphabet.constants.ts │ │ │ ├── text-to-nato-alphabet.service.ts │ │ │ └── text-to-nato-alphabet.vue │ │ ├── text-to-unicode/ │ │ │ ├── index.ts │ │ │ ├── text-to-unicode.e2e.spec.ts │ │ │ ├── text-to-unicode.service.test.ts │ │ │ ├── text-to-unicode.service.ts │ │ │ └── text-to-unicode.vue │ │ ├── token-generator/ │ │ │ ├── index.ts │ │ │ ├── token-generator.e2e.spec.ts │ │ │ ├── token-generator.service.test.ts │ │ │ ├── token-generator.service.ts │ │ │ └── token-generator.tool.vue │ │ ├── toml-to-json/ │ │ │ ├── index.ts │ │ │ ├── toml-to-json.e2e.spec.ts │ │ │ ├── toml-to-json.vue │ │ │ └── toml.services.ts │ │ ├── toml-to-yaml/ │ │ │ ├── index.ts │ │ │ ├── toml-to-yaml.e2e.spec.ts │ │ │ └── toml-to-yaml.vue │ │ ├── tool.ts │ │ ├── tools.store.ts │ │ ├── tools.types.ts │ │ ├── ulid-generator/ │ │ │ ├── index.ts │ │ │ ├── ulid-generator.e2e.spec.ts │ │ │ └── ulid-generator.vue │ │ ├── url-encoder/ │ │ │ ├── index.ts │ │ │ └── url-encoder.vue │ │ ├── url-parser/ │ │ │ ├── index.ts │ │ │ └── url-parser.vue │ │ ├── user-agent-parser/ │ │ │ ├── index.ts │ │ │ ├── user-agent-parser.types.ts │ │ │ ├── user-agent-parser.vue │ │ │ └── user-agent-result-cards.vue │ │ ├── uuid-generator/ │ │ │ ├── index.ts │ │ │ └── uuid-generator.vue │ │ ├── wifi-qr-code-generator/ │ │ │ ├── index.ts │ │ │ ├── useQRCode.ts │ │ │ └── wifi-qr-code-generator.vue │ │ ├── xml-formatter/ │ │ │ ├── index.ts │ │ │ ├── xml-formatter.e2e.spec.ts │ │ │ ├── xml-formatter.service.test.ts │ │ │ ├── xml-formatter.service.ts │ │ │ └── xml-formatter.vue │ │ ├── xml-to-json/ │ │ │ ├── index.ts │ │ │ └── xml-to-json.vue │ │ ├── yaml-to-json-converter/ │ │ │ ├── index.ts │ │ │ ├── yaml-to-json.e2e.spec.ts │ │ │ └── yaml-to-json.vue │ │ ├── yaml-to-toml/ │ │ │ ├── index.ts │ │ │ ├── yaml-to-toml.e2e.spec.ts │ │ │ └── yaml-to-toml.vue │ │ └── yaml-viewer/ │ │ ├── index.ts │ │ ├── yaml-models.ts │ │ └── yaml-viewer.vue │ ├── ui/ │ │ ├── c-alert/ │ │ │ ├── c-alert.demo.vue │ │ │ ├── c-alert.theme.ts │ │ │ └── c-alert.vue │ │ ├── c-button/ │ │ │ ├── c-button.demo.vue │ │ │ ├── c-button.theme.ts │ │ │ └── c-button.vue │ │ ├── c-buttons-select/ │ │ │ ├── c-buttons-select.demo.vue │ │ │ ├── c-buttons-select.types.ts │ │ │ └── c-buttons-select.vue │ │ ├── c-card/ │ │ │ ├── c-card.demo.vue │ │ │ ├── c-card.theme.ts │ │ │ └── c-card.vue │ │ ├── c-collapse/ │ │ │ ├── c-collapse.demo.vue │ │ │ └── c-collapse.vue │ │ ├── c-diff-editor/ │ │ │ └── c-diff-editor.vue │ │ ├── c-file-upload/ │ │ │ ├── c-file-upload.demo.vue │ │ │ └── c-file-upload.vue │ │ ├── c-input-text/ │ │ │ ├── c-input-text.demo.vue │ │ │ ├── c-input-text.test.ts │ │ │ ├── c-input-text.theme.ts │ │ │ └── c-input-text.vue │ │ ├── c-key-value-list/ │ │ │ ├── c-key-value-list-item.vue │ │ │ ├── c-key-value-list.types.ts │ │ │ └── c-key-value-list.vue │ │ ├── c-label/ │ │ │ ├── c-label.types.ts │ │ │ └── c-label.vue │ │ ├── c-link/ │ │ │ ├── c-link.demo.vue │ │ │ ├── c-link.theme.ts │ │ │ └── c-link.vue │ │ ├── c-markdown/ │ │ │ ├── c-markdown.demo.vue │ │ │ └── c-markdown.vue │ │ ├── c-modal/ │ │ │ ├── c-modal.demo.vue │ │ │ ├── c-modal.theme.ts │ │ │ └── c-modal.vue │ │ ├── c-modal-value/ │ │ │ ├── c-modal-value.demo.vue │ │ │ └── c-modal-value.vue │ │ ├── c-select/ │ │ │ ├── c-select.demo.vue │ │ │ ├── c-select.theme.ts │ │ │ ├── c-select.types.ts │ │ │ └── c-select.vue │ │ ├── c-table/ │ │ │ ├── c-table.demo.vue │ │ │ ├── c-table.types.ts │ │ │ └── c-table.vue │ │ ├── c-text-copyable/ │ │ │ ├── c-text-copyable.demo.vue │ │ │ └── c-text-copyable.vue │ │ ├── c-tooltip/ │ │ │ ├── c-tooltip.demo.vue │ │ │ └── c-tooltip.vue │ │ ├── color/ │ │ │ ├── color.models.test.ts │ │ │ └── color.models.ts │ │ ├── demo/ │ │ │ ├── demo-home.page.vue │ │ │ ├── demo-wrapper.vue │ │ │ └── demo.routes.ts │ │ └── theme/ │ │ ├── theme.models.ts │ │ └── themes.ts │ └── utils/ │ ├── array.ts │ ├── base64.test.ts │ ├── base64.ts │ ├── boolean.test.ts │ ├── boolean.ts │ ├── convert.ts │ ├── defaults.test.ts │ ├── defaults.ts │ ├── error.test.ts │ ├── error.ts │ ├── macAddress.ts │ └── random.ts ├── tsconfig.app.json ├── tsconfig.json ├── tsconfig.vite-config.json ├── tsconfig.vitest.json ├── unocss.config.ts ├── vercel.json └── vite.config.ts