From b9f8c1581c1806e727239792f618bb0d72848e6c Mon Sep 17 00:00:00 2001 From: Aaron Benmohan John Date: Tue, 14 Apr 2026 12:46:01 +0530 Subject: [PATCH 01/31] refactor(profile): migrate edit profile modal to SolidJS --- frontend/src/html/popups.html | 77 +---- .../components/pages/profile/UserDetails.tsx | 11 +- .../src/ts/components/popups/EditProfile.tsx | 305 ++++++++++++++++++ frontend/src/ts/event-handlers/account.ts | 26 -- frontend/src/ts/modals/edit-profile.ts | 241 -------------- packages/schemas/src/users.ts | 2 +- 6 files changed, 315 insertions(+), 347 deletions(-) create mode 100644 frontend/src/ts/components/popups/EditProfile.tsx delete mode 100644 frontend/src/ts/modals/edit-profile.ts diff --git a/frontend/src/html/popups.html b/frontend/src/html/popups.html index 4dd3c50507ed..c408cbc5a18e 100644 --- a/frontend/src/html/popups.html +++ b/frontend/src/html/popups.html @@ -354,79 +354,4 @@
- - - + \ No newline at end of file diff --git a/frontend/src/ts/components/pages/profile/UserDetails.tsx b/frontend/src/ts/components/pages/profile/UserDetails.tsx index 6bf7746ea68d..6dcecd3e2eb0 100644 --- a/frontend/src/ts/components/pages/profile/UserDetails.tsx +++ b/frontend/src/ts/components/pages/profile/UserDetails.tsx @@ -16,7 +16,6 @@ import { createEffect, createSignal, For, JSXElement, Show } from "solid-js"; import { Snapshot } from "../../../constants/default-snapshot"; import { addFriend, isFriend } from "../../../db"; -import * as EditProfileModal from "../../../modals/edit-profile"; import * as UserReportModal from "../../../modals/user-report"; import { bp } from "../../../states/breakpoints"; import { getUserId, isAuthenticated } from "../../../states/core"; @@ -37,6 +36,7 @@ import { Conditional } from "../../common/Conditional"; import { DiscordAvatar } from "../../common/DiscordAvatar"; import { UserBadge } from "../../common/UserBadge"; import { UserFlags } from "../../common/UserFlags"; +import { EditProfile } from "../../popups/EditProfile"; type Variant = "basic" | "hasSocials" | "hasBioOrKeyboard" | "full"; @@ -110,7 +110,7 @@ function ActionButtons(props: { const isUsersProfile = () => props.profile.uid !== undefined && props.profile.uid === (getUserId() ?? ""); - + const [showEditProfile, setShowEditProfile] = createSignal(false); const [hasFriendRequest, setHasFriendRequest] = createSignal(false); const showFriendsButton = () => isAuthenticated() && !isUsersProfile() && !hasFriendRequest(); @@ -150,9 +150,14 @@ function ActionButtons(props: { ); return; } - EditProfileModal.show(); + setShowEditProfile(true); }} /> + + + setShowEditProfile(false)} /> + + + + {(badge) => ( + + )} + + + +
+ + +
+ + + + ); +} diff --git a/frontend/src/ts/event-handlers/account.ts b/frontend/src/ts/event-handlers/account.ts index e75072fae276..fa3b115e7ca9 100644 --- a/frontend/src/ts/event-handlers/account.ts +++ b/frontend/src/ts/event-handlers/account.ts @@ -1,11 +1,4 @@ import * as PbTablesModal from "../modals/pb-tables"; -import * as EditProfileModal from "../modals/edit-profile"; -import { getSnapshot } from "../db"; -import { isAuthenticated } from "../states/core"; -import { - showNoticeNotification, - showErrorNotification, -} from "../states/notifications"; import * as EditResultTagsModal from "../modals/edit-result-tags"; import * as AddFilterPresetModal from "../modals/new-filter-preset"; import { parseWithSchema as parseJsonWithSchema } from "@monkeytype/util/json"; @@ -22,25 +15,6 @@ accountPage?.onChild("click", ".pbsWords .showAllButton", () => { PbTablesModal.show("words"); }); -accountPage?.onChild("click", ".editProfileButton", () => { - if (!isAuthenticated()) { - showNoticeNotification("You must be logged in to edit your profile"); - return; - } - const snapshot = getSnapshot(); - if (!snapshot) { - showErrorNotification( - "Failed to open edit profile modal: No user snapshot found", - ); - return; - } - if (snapshot.banned === true) { - showNoticeNotification("Banned users cannot edit their profile"); - return; - } - EditProfileModal.show(); -}); - const TagsArraySchema = z.array(z.string()); accountPage?.onChild("click", ".group.history .resultEditTagsButton", (e) => { diff --git a/frontend/src/ts/modals/edit-profile.ts b/frontend/src/ts/modals/edit-profile.ts deleted file mode 100644 index fcc31ccafefe..000000000000 --- a/frontend/src/ts/modals/edit-profile.ts +++ /dev/null @@ -1,241 +0,0 @@ -import Ape from "../ape"; -import { getHTMLById } from "../controllers/badge-controller"; -import * as DB from "../db"; - -import { showLoaderBar, hideLoaderBar } from "../states/loader-bar"; -import { - showErrorNotification, - showSuccessNotification, -} from "../states/notifications"; -import AnimatedModal from "../utils/animated-modal"; -import { CharacterCounter } from "../elements/character-counter"; -import { - Badge, - GithubProfileSchema, - TwitterProfileSchema, - UserProfileDetails, - WebsiteSchema, -} from "@monkeytype/schemas/users"; -import { InputIndicator } from "../elements/input-indicator"; -import { ElementWithUtils, qsr } from "../utils/dom"; - -export function show(): void { - void modal.show({ - beforeAnimation: async () => { - hydrateInputs(); - initializeCharacterCounters(); - }, - }); -} - -function hide(): void { - void modal.hide(); -} - -const bioInput = qsr("#editProfileModal .bio"); -const keyboardInput = qsr("#editProfileModal .keyboard"); -const twitterInput = qsr("#editProfileModal .twitter"); -const githubInput = qsr("#editProfileModal .github"); -const websiteInput = qsr("#editProfileModal .website"); -const badgeIdsSelect = qsr("#editProfileModal .badgeSelectionContainer"); -const showActivityOnPublicProfileInput = qsr( - "#editProfileModal .editProfileShowActivityOnPublicProfile", -); - -const indicators = [ - addValidation(twitterInput, TwitterProfileSchema), - addValidation(githubInput, GithubProfileSchema), - addValidation(websiteInput, WebsiteSchema), -]; - -let currentSelectedBadgeId = -1; - -function hydrateInputs(): void { - const snapshot = DB.getSnapshot(); - if (!snapshot) return; - const badges = snapshot.inventory?.badges ?? []; - const { bio, keyboard, socialProfiles, showActivityOnPublicProfile } = - snapshot.details ?? {}; - currentSelectedBadgeId = -1; - - bioInput.setValue(bio ?? ""); - keyboardInput.setValue(keyboard ?? ""); - twitterInput.setValue(socialProfiles?.twitter ?? ""); - githubInput.setValue(socialProfiles?.github ?? ""); - websiteInput.setValue(socialProfiles?.website ?? ""); - badgeIdsSelect.setHtml(""); - showActivityOnPublicProfileInput.native.checked = - showActivityOnPublicProfile ?? false; - - badges?.forEach((badge: Badge) => { - if (badge.selected) { - currentSelectedBadgeId = badge.id; - } - - const badgeOption = getHTMLById(badge.id, false, true); - const badgeWrapper = ``; - badgeIdsSelect?.appendHtml(badgeWrapper); - }); - - badgeIdsSelect?.prependHtml( - ``, - ); - - badgeIdsSelect - ?.qsa(".badgeSelectionItem") - ?.on("click", ({ currentTarget }) => { - const selectionId = (currentTarget as HTMLElement).getAttribute( - "selection-id", - ) as string; - currentSelectedBadgeId = parseInt(selectionId, 10); - - badgeIdsSelect?.qsa(".badgeSelectionItem")?.removeClass("selected"); - (currentTarget as HTMLElement).classList.add("selected"); - }); - - indicators.forEach((it) => it.hide()); -} - -function initializeCharacterCounters(): void { - new CharacterCounter(bioInput, 250); - new CharacterCounter(keyboardInput, 75); -} - -function buildUpdatesFromInputs(): UserProfileDetails { - const bio = bioInput.getValue() ?? ""; - const keyboard = keyboardInput.getValue() ?? ""; - const twitter = twitterInput.getValue() ?? ""; - const github = githubInput.getValue() ?? ""; - const website = websiteInput.getValue() ?? ""; - const showActivityOnPublicProfile = - showActivityOnPublicProfileInput.isChecked() ?? false; - - const profileUpdates: UserProfileDetails = { - bio, - keyboard, - socialProfiles: { - twitter, - github, - website, - }, - showActivityOnPublicProfile, - }; - - return profileUpdates; -} - -async function updateProfile(): Promise { - const snapshot = DB.getSnapshot(); - if (!snapshot) return; - const updates = buildUpdatesFromInputs(); - - // check for length resctrictions before sending server requests - const githubLengthLimit = 39; - if ( - updates.socialProfiles?.github !== undefined && - updates.socialProfiles?.github.length > githubLengthLimit - ) { - showErrorNotification( - `GitHub username exceeds maximum allowed length (${githubLengthLimit} characters).`, - ); - return; - } - - const twitterLengthLimit = 20; - if ( - updates.socialProfiles?.twitter !== undefined && - updates.socialProfiles?.twitter.length > twitterLengthLimit - ) { - showErrorNotification( - `Twitter username exceeds maximum allowed length (${twitterLengthLimit} characters).`, - ); - return; - } - - showLoaderBar(); - const response = await Ape.users.updateProfile({ - body: { - ...updates, - selectedBadgeId: currentSelectedBadgeId, - }, - }); - hideLoaderBar(); - - if (response.status !== 200) { - showErrorNotification("Failed to update profile", { response }); - return; - } - - snapshot.details = response.body.data ?? updates; - snapshot.inventory?.badges.forEach((badge) => { - if (badge.id === currentSelectedBadgeId) { - badge.selected = true; - } else { - delete badge.selected; - } - }); - - DB.setSnapshot(snapshot); - - showSuccessNotification("Profile updated"); - - hide(); -} - -function addValidation( - element: ElementWithUtils, - schema: Zod.Schema, -): InputIndicator { - const indicator = new InputIndicator(element, { - valid: { - icon: "fa-check", - level: 1, - }, - invalid: { - icon: "fa-times", - level: -1, - }, - checking: { - icon: "fa-circle-notch", - spinIcon: true, - level: 0, - }, - }); - - element.on("input", (event) => { - const value = (event.target as HTMLInputElement).value; - if (value === undefined || value === "") { - indicator.hide(); - return; - } - const validationResult = schema.safeParse(value); - if (!validationResult.success) { - indicator.show( - "invalid", - validationResult.error.errors.map((err) => err.message).join(", "), - ); - return; - } - indicator.show("valid"); - }); - return indicator; -} - -const modal = new AnimatedModal({ - dialogId: "editProfileModal", - setup: async (modalEl): Promise => { - modalEl.on("submit", async (e) => { - e.preventDefault(); - await updateProfile(); - }); - }, -}); diff --git a/packages/schemas/src/users.ts b/packages/schemas/src/users.ts index 80286ce739c5..d2404f07ed2a 100644 --- a/packages/schemas/src/users.ts +++ b/packages/schemas/src/users.ts @@ -89,7 +89,7 @@ function profileDetailsBase( .transform((value) => (value === null ? undefined : value)); } -export const TwitterProfileSchema = profileDetailsBase(slug().max(20)).or( +export const TwitterProfileSchema = profileDetailsBase(slug().max(15)).or( z.literal(""), ); From bee62e2f45d8a34171a8ceb818925a2e656bae8a Mon Sep 17 00:00:00 2001 From: Nad Alaba <37968805+nadalaba@users.noreply.github.com> Date: Tue, 28 Apr 2026 22:23:47 +0300 Subject: [PATCH 02/31] chore: add stylelint linter for css/scss (@nadalaba) (#7718) supersedes #7716 --------- Co-authored-by: Jack --- .github/workflows/monkey-ci.yml | 20 +- backend/private/style.css | 10 +- frontend/package.json | 2 + frontend/src/styles/account-settings.scss | 2 - frontend/src/styles/account.scss | 6 +- frontend/src/styles/buttons.scss | 5 - frontend/src/styles/caret.scss | 1 - frontend/src/styles/commandline.scss | 2 - frontend/src/styles/core.scss | 5 +- frontend/src/styles/fontawesome-5.scss | 2 +- frontend/src/styles/fonts.scss | 2 +- frontend/src/styles/inputs.scss | 29 +- frontend/src/styles/keymap.scss | 1 - frontend/src/styles/media-queries-gray.scss | 2 +- frontend/src/styles/popups.scss | 5 - frontend/src/styles/standalone.scss | 10 +- frontend/src/styles/tailwind.css | 2 +- frontend/src/styles/test.scss | 23 +- frontend/static/funbox/asl.css | 4 +- frontend/static/funbox/crt.css | 2 +- frontend/static/themes/aurora.css | 10 +- frontend/static/themes/chaos_theory.css | 44 +- frontend/static/themes/dark_note.css | 18 +- frontend/static/themes/dmg.css | 4 +- frontend/static/themes/fire.css | 10 +- frontend/static/themes/grape.css | 10 +- frontend/static/themes/moonlight.css | 8 +- frontend/static/themes/phantom.css | 66 +-- frontend/static/themes/rainbow_trail.css | 31 +- frontend/static/themes/rgb.css | 42 +- frontend/static/themes/sewing_tin_light.css | 2 +- frontend/static/themes/snes.css | 12 +- frontend/static/themes/suisei.css | 9 +- frontend/static/themes/trance.css | 10 +- monkeytype.code-workspace | 8 +- package.json | 10 +- pnpm-lock.yaml | 590 +++++++++++++++++++- stylelint.config.mjs | 76 +++ turbo.json | 3 + 39 files changed, 876 insertions(+), 222 deletions(-) create mode 100644 stylelint.config.mjs diff --git a/.github/workflows/monkey-ci.yml b/.github/workflows/monkey-ci.yml index 7038729134ec..7c4f7684df9a 100644 --- a/.github/workflows/monkey-ci.yml +++ b/.github/workflows/monkey-ci.yml @@ -28,7 +28,7 @@ jobs: should-build-be: ${{ steps.export-changes.outputs.should-build-be }} should-build-fe: ${{ steps.export-changes.outputs.should-build-fe }} should-build-pkg: ${{ steps.export-changes.outputs.should-build-pkg }} - assets-json: ${{ steps.export-changes.outputs.assets-json }} + assets-or-styles: ${{ steps.export-changes.outputs.assets-or-styles }} steps: - name: Full checkout @@ -41,8 +41,9 @@ jobs: id: filter with: filters: | - json: + assets-or-styles: - 'frontend/static/**/*' + - '**/*.{scss,css}' be-src: - 'backend/**/*.{ts,js,json,lua,css,html}' - 'backend/package.json' @@ -64,13 +65,13 @@ jobs: echo "should-build-pkg=${{ steps.filter.outputs.pkg-src }}" >> $GITHUB_OUTPUT echo "should-build-be=${{ steps.filter.outputs.be-src }}" >> $GITHUB_OUTPUT echo "should-build-fe=${{ steps.filter.outputs.fe-src }}" >> $GITHUB_OUTPUT - echo "assets-json=${{ steps.filter.outputs.json }}" >> $GITHUB_OUTPUT + echo "assets-or-styles=${{ steps.filter.outputs.assets-or-styles }}" >> $GITHUB_OUTPUT prime-cache: name: prime-cache runs-on: ubuntu-latest needs: [pre-ci] - if: needs.pre-ci.outputs.should-build-be == 'true' || needs.pre-ci.outputs.should-build-fe == 'true' || needs.pre-ci.outputs.should-build-pkg == 'true' || needs.pre-ci.outputs.assets-json == 'true' || contains(github.event.pull_request.labels.*.name, 'force-full-ci') + if: needs.pre-ci.outputs.should-build-be == 'true' || needs.pre-ci.outputs.should-build-fe == 'true' || needs.pre-ci.outputs.should-build-pkg == 'true' || needs.pre-ci.outputs.assets-or-styles == 'true' || contains(github.event.pull_request.labels.*.name, 'force-full-ci') steps: - name: Checkout pnpm-lock uses: actions/checkout@v4 @@ -216,7 +217,7 @@ jobs: name: ci-assets needs: [pre-ci, prime-cache] runs-on: ubuntu-latest - if: needs.pre-ci.outputs.assets-json == 'true' || contains(github.event.pull_request.labels.*.name, 'force-full-ci') + if: needs.pre-ci.outputs.assets-or-styles == 'true' || contains(github.event.pull_request.labels.*.name, 'force-full-ci') steps: - uses: actions/checkout@v4 with: @@ -228,6 +229,10 @@ jobs: id: filter with: filters: | + styles: + - '**/*.{scss,css}' + json: + - 'frontend/static/**/*.json' languages: - 'frontend/static/languages/**' quotes: @@ -265,7 +270,12 @@ jobs: - name: Install dependencies run: pnpm install + - name: Lint styles + if: steps.filter.outputs.styles == 'true' + run: npm run lint-styles + - name: Lint JSON + if: steps.filter.outputs.json == 'true' run: npm run lint-json-assets - name: Validate language assets diff --git a/backend/private/style.css b/backend/private/style.css index 1b274ef00684..72bc15ae7bf9 100644 --- a/backend/private/style.css +++ b/backend/private/style.css @@ -81,7 +81,7 @@ body { bottom: 3rem; background-color: var(--sub-alt-color); color: var(--text-color); - font-style: bold; + font-weight: bold; border-radius: 3px; padding: 1rem 2rem; cursor: pointer; @@ -189,10 +189,6 @@ input[type="checkbox"] { } } -.tooltip:hover .tooltip-text { - display: block; -} - .tooltip-text { display: none; color: var(--text-color); @@ -202,3 +198,7 @@ input[type="checkbox"] { padding: 10px; border-radius: var(--roundness); } + +.tooltip:hover .tooltip-text { + display: block; +} diff --git a/frontend/package.json b/frontend/package.json index 0723a36d7a39..ac199bba36ff 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -6,6 +6,8 @@ "scripts": { "lint": "oxlint . --type-aware --type-check", "lint-fast": "oxlint .", + "lint-styles": "stylelint \"**/*.{scss,css}\"", + "lint-styles-fix": "stylelint \"**/*.{scss,css}\" --fix", "lint-json": "eslint static/**/*.json", "check-assets": "tsx ./scripts/check-assets.ts", "audit": "vite-bundle-visualizer", diff --git a/frontend/src/styles/account-settings.scss b/frontend/src/styles/account-settings.scss index 68eb21dee253..6ecfef6d6a56 100644 --- a/frontend/src/styles/account-settings.scss +++ b/frontend/src/styles/account-settings.scss @@ -141,7 +141,6 @@ td { padding: 0.5rem; background: var(--bg-color); - position: -webkit-sticky; position: sticky; top: 0; z-index: 99; @@ -159,7 +158,6 @@ tfoot { td { padding: 1rem 0.5rem; - position: -webkit-sticky; position: sticky; bottom: -5px; background: var(--bg-color); diff --git a/frontend/src/styles/account.scss b/frontend/src/styles/account.scss index 6e779672f650..54f8a28f2fdc 100644 --- a/frontend/src/styles/account.scss +++ b/frontend/src/styles/account.scss @@ -152,7 +152,7 @@ &.history { table td { - -webkit-appearance: unset; + appearance: unset; } table tr { @@ -170,10 +170,8 @@ padding: 0.5rem; border-radius: var(--roundness); cursor: pointer; - -webkit-transition: 0.25s; transition: 0.25s; - -webkit-user-select: none; - display: -ms-grid; + user-select: none; display: grid; -ms-flex-line-pack: center; align-content: center; diff --git a/frontend/src/styles/buttons.scss b/frontend/src/styles/buttons.scss index b14263e1ae91..b2a0a8f82b36 100644 --- a/frontend/src/styles/buttons.scss +++ b/frontend/src/styles/buttons.scss @@ -27,7 +27,6 @@ button, input[type="button"], input[type="reset"], input[type="submit"] { - text-align: center; color: var(--text-color); cursor: pointer; transition: @@ -38,11 +37,9 @@ input[type="submit"] { border-radius: var(--roundness); background: var(--sub-alt-color); text-align: center; - -webkit-user-select: none; user-select: none; align-content: center; align-items: center; - height: -moz-min-content; height: min-content; line-height: 1.25; appearance: none; @@ -115,10 +112,8 @@ button.text, border-radius: var(--roundness); background: none; text-align: center; - -webkit-user-select: none; user-select: none; align-content: center; - height: -moz-min-content; height: min-content; line-height: 1.25; appearance: none; diff --git a/frontend/src/styles/caret.scss b/frontend/src/styles/caret.scss index 05f3f72de703..c626792c0cc0 100644 --- a/frontend/src/styles/caret.scss +++ b/frontend/src/styles/caret.scss @@ -65,7 +65,6 @@ &.block { width: 0.5em; - border-radius: 0; z-index: -1; border-radius: 0.05em; } diff --git a/frontend/src/styles/commandline.scss b/frontend/src/styles/commandline.scss index 5af927d771e2..670662cc52fb 100644 --- a/frontend/src/styles/commandline.scss +++ b/frontend/src/styles/commandline.scss @@ -60,13 +60,11 @@ } .suggestions { - display: block; @extend .ffscroll; overflow-y: scroll; max-height: calc(100vh - 12rem - 3rem); display: grid; cursor: pointer; - -webkit-user-select: none; user-select: none; .command { diff --git a/frontend/src/styles/core.scss b/frontend/src/styles/core.scss index fef770be07df..a7b63a408713 100644 --- a/frontend/src/styles/core.scss +++ b/frontend/src/styles/core.scss @@ -292,7 +292,6 @@ kbd { grid-column: 1/2; grid-row: 1/2; place-self: center center; - display: grid; place-content: center center; overflow: hidden; display: inline-block; @@ -321,7 +320,6 @@ kbd { color: var(--text-color); border-radius: calc(var(--roundness) / 2); // padding: 0.15em 0.5em; - -webkit-user-select: none; user-select: none; display: grid; grid-template-columns: max-content auto; @@ -375,7 +373,7 @@ kbd { } // mouseover texts -[aria-label][data-balloon-pos]:after { +[aria-label][data-balloon-pos]::after { font-family: var(--font); font-size: var(--balloon-font-size); line-height: var(--balloon-font-size); @@ -401,7 +399,6 @@ table { z-index: 0; td.sortable:hover { cursor: pointer; - -webkit-user-select: none; user-select: none; background-color: var(--sub-alt-color); } diff --git a/frontend/src/styles/fontawesome-5.scss b/frontend/src/styles/fontawesome-5.scss index 933587471119..fb3105a3ab7f 100644 --- a/frontend/src/styles/fontawesome-5.scss +++ b/frontend/src/styles/fontawesome-5.scss @@ -2,7 +2,7 @@ @import "@fortawesome/fontawesome-free/scss/_mixins.scss"; @import "@fortawesome/fontawesome-free/scss/_core.scss"; -/** fixed-with **/ +/** fixed-width **/ @import "@fortawesome/fontawesome-free/scss/_fixed-width.scss"; //fa-fw /** animated **/ @import "@fortawesome/fontawesome-free/scss/_animated.scss"; //fa-spin diff --git a/frontend/src/styles/fonts.scss b/frontend/src/styles/fonts.scss index 625f601dd4cf..6b822e45f0a2 100644 --- a/frontend/src/styles/fonts.scss +++ b/frontend/src/styles/fonts.scss @@ -1,7 +1,7 @@ @use "sass:map"; @font-face { - font-family: "Vazirharf"; + font-family: Vazirharf; font-style: normal; font-weight: 400; font-display: block; diff --git a/frontend/src/styles/inputs.scss b/frontend/src/styles/inputs.scss index ca0768d7920c..4bfd7b352233 100644 --- a/frontend/src/styles/inputs.scss +++ b/frontend/src/styles/inputs.scss @@ -25,7 +25,6 @@ textarea { top: -1.75rem; right: 0.25rem; color: var(--sub-color); - -webkit-user-select: none; user-select: none; &.error { color: var(--error-color); @@ -41,13 +40,13 @@ textarea { } input[type="range"] { - -webkit-appearance: none; + appearance: none; padding: 0; width: 100%; height: 1.25em; border-radius: var(--roundness); &::-webkit-slider-thumb { - -webkit-appearance: none; + appearance: none; padding: 0; border: none; width: 25%; @@ -63,7 +62,7 @@ input[type="range"] { } &::-moz-range-thumb { - -webkit-appearance: none; + appearance: none; padding: 0; border: none; width: 25%; @@ -110,14 +109,13 @@ input[type="checkbox"] { position: relative; transition: background 0.125s; flex-shrink: 0; - &:after { + &::after { font-family: "Font Awesome"; content: "\f00c"; top: 0; left: 0; width: 100%; height: 100%; - display: block; border-radius: calc((var(--roundness) / 2) - 0.1em); font-weight: 900; position: absolute; @@ -129,23 +127,23 @@ input[type="checkbox"] { color: transparent; } - &:checked:after { + &:checked::after { color: var(--main-color); } - &:hover:after { + &:hover::after { color: var(--bg-color); } - &:hover:checked:after { + &:hover:checked::after { color: var(--text-color); } &[disabled] { opacity: 0.33; pointer-events: none; - &:hover:after { + &:hover::after { color: var(--sub-alt-color); } - &:hover:checked:after { + &:hover:checked::after { color: var(--main-color); } } @@ -176,15 +174,11 @@ textarea:disabled { input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button { - -webkit-appearance: none; - -moz-appearance: none; appearance: none; margin: 0; } input[type="number"] { - -moz-appearance: textfield; - -webkit-appearance: textfield; appearance: textfield; } @@ -202,13 +196,12 @@ select:-webkit-autofill:focus { outline: 0.15em solid var(--main-color); font-family: inherit; -webkit-text-fill-color: var(--text-color); - -webkit-box-shadow: 0 0 0 1000000px var(--sub-alt-color) inset; + box-shadow: 0 0 0 1000000px var(--sub-alt-color) inset; caret-color: var(--text-color); } // slim-select styles .ss-main { - border-radius: var(--roundness); outline: none; border: none; border-radius: var(--roundness); @@ -316,7 +309,7 @@ select:-webkit-autofill:focus { color: var(--sub-color); } &::-webkit-search-cancel-button { - -webkit-appearance: none; + appearance: none; } } } diff --git a/frontend/src/styles/keymap.scss b/frontend/src/styles/keymap.scss index 078df6d6ceb8..30ce0988f5b4 100644 --- a/frontend/src/styles/keymap.scss +++ b/frontend/src/styles/keymap.scss @@ -7,7 +7,6 @@ // height: 140px; gap: 0.25rem; margin-top: 1rem; - -webkit-user-select: none; user-select: none; .row { diff --git a/frontend/src/styles/media-queries-gray.scss b/frontend/src/styles/media-queries-gray.scss index 2deefb6038bd..7159c19512e8 100644 --- a/frontend/src/styles/media-queries-gray.scss +++ b/frontend/src/styles/media-queries-gray.scss @@ -1,5 +1,5 @@ -//this is very overkill for the modern world so dont worry too much about this width @use "./media.scss" as *; @include media-query(gray) { + // this is very overkill for the modern world so dont worry too much about this width } diff --git a/frontend/src/styles/popups.scss b/frontend/src/styles/popups.scss index 5de0f1b4f917..304c7a6d87e0 100644 --- a/frontend/src/styles/popups.scss +++ b/frontend/src/styles/popups.scss @@ -258,7 +258,6 @@ body.darkMode { max-width: 465px; z-index: 100000001; // outline: 0.5rem solid var(--bg-color) - -webkit-user-select: none; user-select: none; .main { display: grid; @@ -329,7 +328,6 @@ body.darkMode { width: 100%; max-width: 1000px; aspect-ratio: 16/9; - display: grid; grid-template-areas: "middle"; .preloader { grid-area: middle; @@ -480,7 +478,6 @@ body.darkMode { td { padding: 0.5rem; background: var(--bg-color); - position: -webkit-sticky; position: sticky; top: 0; z-index: 99; @@ -498,7 +495,6 @@ body.darkMode { tfoot { td { padding: 1rem 0.5rem; - position: -webkit-sticky; position: sticky; bottom: -5px; background: var(--bg-color); @@ -712,7 +708,6 @@ body.darkMode { } .badgeSelectionItem { - margin-bottom: 0.5rem; width: max-content; opacity: 25%; cursor: pointer; diff --git a/frontend/src/styles/standalone.scss b/frontend/src/styles/standalone.scss index 262b4514e306..a55889b402e5 100644 --- a/frontend/src/styles/standalone.scss +++ b/frontend/src/styles/standalone.scss @@ -2,18 +2,18 @@ @import "core.scss"; @font-face { - font-family: Roboto Mono; + font-family: "Roboto Mono"; font-style: normal; font-weight: 400; font-display: block; - src: url(/webfonts/RobotoMono-Regular.woff2) format("woff2"); + src: url("/webfonts/RobotoMono-Regular.woff2") format("woff2"); } @font-face { - font-family: Lexend Deca; + font-family: "Lexend Deca"; font-style: normal; font-weight: 400; font-display: block; - src: url(/webfonts/LexendDeca-Regular.woff2) format("woff2"); + src: url("/webfonts/LexendDeca-Regular.woff2") format("woff2"); } :root { @@ -43,7 +43,6 @@ header { z-index: 3; align-items: center; gap: 0.5rem; - -webkit-user-select: none; user-select: none; #logo { @@ -92,7 +91,6 @@ header { margin-top: -0.23em; } white-space: nowrap; - -webkit-user-select: none; user-select: none; } } diff --git a/frontend/src/styles/tailwind.css b/frontend/src/styles/tailwind.css index 68ae21a5ea8d..77468db97091 100644 --- a/frontend/src/styles/tailwind.css +++ b/frontend/src/styles/tailwind.css @@ -99,6 +99,6 @@ @apply border-none font-(--font) caret-(--text-color) font-[inherit]; outline: 0.15em solid var(--main-color); -webkit-text-fill-color: var(--text-color); - -webkit-box-shadow: 0 0 0 1000000px var(--sub-alt-color) inset; + box-shadow: 0 0 0 1000000px var(--sub-alt-color) inset; } } diff --git a/frontend/src/styles/test.scss b/frontend/src/styles/test.scss index 317e16f7b67e..9b9961a7a9af 100644 --- a/frontend/src/styles/test.scss +++ b/frontend/src/styles/test.scss @@ -46,7 +46,6 @@ #barTimerProgress { opacity: 0; - z-index: -1; position: relative; z-index: 99; .bar { @@ -119,7 +118,6 @@ color: black; z-index: -1; text-align: center; - width: 100%; position: relative; display: grid; font-size: 10rem; @@ -193,13 +191,11 @@ #words { height: fit-content; - height: -moz-fit-content; padding-bottom: 0.5em; // to account for hints of the bottom line display: flex; flex-wrap: wrap; width: 100%; align-content: flex-start; - -webkit-user-select: none; user-select: none; .newline { @@ -345,7 +341,6 @@ &.blurred { opacity: 0.25; filter: blur(4px); - -webkit-filter: blur(4px); } &.blind { @@ -691,7 +686,6 @@ pointer-events: none; border-radius: 0; caret-color: transparent; - resize: none; overflow: hidden; // if the text wraps, ctrl backspace will not work on firefox >:| // and holy shit do not use white-space: nowrap here because the hellspawn that is safari @@ -743,8 +737,8 @@ } &.noBalloons { - [aria-label][data-balloon-pos]:before, - [aria-label][data-balloon-pos]:after { + [aria-label][data-balloon-pos]::before, + [aria-label][data-balloon-pos]::after { display: none; } } @@ -899,7 +893,6 @@ #resultReplay .words { user-select: none; - -webkit-user-select: none; } .chart { @@ -1028,7 +1021,6 @@ text-align: center; color: var(--sub-color); // grid-area: login; - grid-column: 1/3; .link { text-decoration: underline; display: inline-block; @@ -1341,7 +1333,6 @@ &.blurred { opacity: 0.25; - -webkit-filter: blur(4px); filter: blur(4px); } } @@ -1358,13 +1349,6 @@ overflow: visible clip; &.tape { overflow: hidden; - -webkit-mask-image: linear-gradient( - 90deg, - rgba(0, 0, 0, 0) 1%, - rgb(0, 0, 0) 10%, - rgb(0, 0, 0) 90%, - rgba(0, 0, 0, 0) 99% - ); mask-image: linear-gradient( 90deg, rgba(0, 0, 0, 0) 1%, @@ -1392,7 +1376,6 @@ position: absolute; transform: translateX(-50%); top: -6rem; - -webkit-user-select: none; user-select: none; pointer-events: none; opacity: 0; @@ -1405,7 +1388,6 @@ z-index: 999; position: absolute; width: 100%; - -webkit-user-select: none; user-select: none; pointer-events: none; } @@ -1419,7 +1401,6 @@ margin-bottom: 0.5rem; transition: opacity 0.125s; justify-content: center; - -webkit-user-select: none; user-select: none; .textButton { diff --git a/frontend/static/funbox/asl.css b/frontend/static/funbox/asl.css index d1161b8d15ad..fac24919085d 100644 --- a/frontend/static/funbox/asl.css +++ b/frontend/static/funbox/asl.css @@ -1,8 +1,8 @@ @font-face { - font-family: "Gallaudet"; + font-family: Gallaudet; src: url("/webfonts/GallaudetRegular.woff2") format("woff2"); } #wordsWrapper { - font-family: "Gallaudet" !important; + font-family: Gallaudet !important; } diff --git a/frontend/static/funbox/crt.css b/frontend/static/funbox/crt.css index 1413c4f9f024..0ca8f62f387b 100644 --- a/frontend/static/funbox/crt.css +++ b/frontend/static/funbox/crt.css @@ -101,7 +101,7 @@ body.crtmode #caret { } body.crtmode #paceCaret, -body.crtmode key, +body.crtmode kbd, body.crtmode #bannerCenter .banner { box-shadow: 3px 0 1px var(--crt-sub-color-glow), diff --git a/frontend/static/themes/aurora.css b/frontend/static/themes/aurora.css index 6bd63ad96ea3..2c93b2b2515f 100644 --- a/frontend/static/themes/aurora.css +++ b/frontend/static/themes/aurora.css @@ -68,6 +68,11 @@ a:not(.button):not([data-ui-variant="button"]):hover { --untyped-letter-animation: aurora 5s linear infinite; } +#words.highlight-off .word letter, +#words.highlight-off .word.typed letter { + animation: aurora 5s linear infinite; +} + #words .word.typed letter.correct, #words.highlight-word .word.typed letter, #words.highlight-next-word .word.typed letter, @@ -79,8 +84,3 @@ a:not(.button):not([data-ui-variant="button"]):hover { #words.flipped .word.typed letter { animation: none; } - -#words.highlight-off .word letter, -#words.highlight-off .word.typed letter { - animation: aurora 5s linear infinite; -} diff --git a/frontend/static/themes/chaos_theory.css b/frontend/static/themes/chaos_theory.css index f016618d7452..d1ef620de959 100644 --- a/frontend/static/themes/chaos_theory.css +++ b/frontend/static/themes/chaos_theory.css @@ -13,22 +13,6 @@ transition: 0.5s; } -header[data-focused] { - & [data-ui-element="logo"] > div, - [data-ui-element="logo"] svg { - transform: rotateY(0deg); - direction: ltr; - } - & [data-nav-item] { - --nav-focus-opacity: 1; - background: var(--sub-color); - transform: rotateY(180deg); - } - & [data-nav-item="account"] { - --themable-button-bg: var(--sub-color); - } -} - #words .incorrect.extra { transform: rotateY(180deg); unicode-bidi: bidi-override; @@ -36,7 +20,7 @@ header[data-focused] { } #caret { - background-image: url(/images/themes/chaos_theory/caret.webp) !important; + background-image: url("/images/themes/chaos_theory/caret.webp") !important; background-color: transparent !important; background-size: 1rem !important; background-position: center !important; @@ -47,18 +31,21 @@ header[data-focused] { width: 4px !important; } +/* this is not taking effect since 4 years ago because it is +refering to the old .config which does not exist anymore +did not try it on the new #testConfig yet .config .toggleButton { transform: rotateY(180deg); unicode-bidi: bidi-override; direction: rtl; - align-content: right; + //align-content: right; // there is no align-content: right } .config .mode .textButton { transform: rotateY(180deg); unicode-bidi: bidi-override; direction: rtl; - align-content: right; + //align-content: right; // there is no align-content: right } .config .wordCount .textButton, @@ -68,8 +55,9 @@ header[data-focused] { transform: rotateY(180deg); unicode-bidi: bidi-override; direction: rtl; - align-content: right; + //align-content: right; // there is no align-content: right } +*/ [data-nav-item] { color: var(--bg-color); @@ -128,6 +116,22 @@ header[data-focused] { background: #ab92e1; } +header[data-focused] { + & [data-ui-element="logo"] > div, + [data-ui-element="logo"] svg { + transform: rotateY(0deg); + direction: ltr; + } + & [data-nav-item] { + --nav-focus-opacity: 1; + background: var(--sub-color); + transform: rotateY(180deg); + } + & [data-nav-item="account"] { + --themable-button-bg: var(--sub-color); + } +} + body.crtmode { & [data-nav-item="test"] { box-shadow: diff --git a/frontend/static/themes/dark_note.css b/frontend/static/themes/dark_note.css index 47c9483c1370..b522f4a7aa3e 100644 --- a/frontend/static/themes/dark_note.css +++ b/frontend/static/themes/dark_note.css @@ -63,18 +63,18 @@ body::before { text-shadow: none; } -#words:not(.blind).colorfulMode .word letter.incorrect:not(.extra), -#words:not(.blind) .word letter.incorrect:not(.extra) { - color: var(--current-color); -} - -#words:not(.blind) .word.error letter:not(.correct):not(.incorrect)::after { - background: var(--sub-color); -} - #words:not(.blind) .word letter.incorrect, #words:not(.blind).colorfulMode .word letter.incorrect { text-decoration: line-through; text-decoration-color: var(--error-color); text-decoration-thickness: 2px; } + +#words:not(.blind) .word letter.incorrect:not(.extra), +#words:not(.blind).colorfulMode .word letter.incorrect:not(.extra) { + color: var(--current-color); +} + +#words:not(.blind) .word.error letter:not(.correct):not(.incorrect)::after { + background: var(--sub-color); +} diff --git a/frontend/static/themes/dmg.css b/frontend/static/themes/dmg.css index 7f9588555cdd..7a0b14d6b77e 100644 --- a/frontend/static/themes/dmg.css +++ b/frontend/static/themes/dmg.css @@ -34,8 +34,8 @@ body.crtmode { 0 0 3px; } - & header[data-focused] [data-nav-item], - & [data-nav-item]:hover { + & [data-nav-item]:hover, + & header[data-focused] [data-nav-item] { box-shadow: none; } diff --git a/frontend/static/themes/fire.css b/frontend/static/themes/fire.css index d4a78109cdae..3dbd85f6c5f1 100644 --- a/frontend/static/themes/fire.css +++ b/frontend/static/themes/fire.css @@ -74,6 +74,11 @@ a:not(.button):not([data-ui-variant="button"]):hover { --untyped-letter-animation: fire 5s linear infinite; } +#words.highlight-off .word letter, +#words.highlight-off .word.typed letter { + animation: fire 5s linear infinite; +} + #words .word.typed letter.correct, #words.highlight-word .word.typed letter, #words.highlight-next-word .word.typed letter, @@ -85,8 +90,3 @@ a:not(.button):not([data-ui-variant="button"]):hover { #words.flipped .word.typed letter { animation: none; } - -#words.highlight-off .word letter, -#words.highlight-off .word.typed letter { - animation: fire 5s linear infinite; -} diff --git a/frontend/static/themes/grape.css b/frontend/static/themes/grape.css index 08f8aa161848..e4a186ca5bf8 100644 --- a/frontend/static/themes/grape.css +++ b/frontend/static/themes/grape.css @@ -69,6 +69,11 @@ a:not(.button):not([data-ui-variant="button"]):hover { --untyped-letter-animation: grape 5s linear infinite; } +#words.highlight-off .word letter, +#words.highlight-off .word.typed letter { + animation: grape 5s linear infinite; +} + #words .word.typed letter.correct, #words.highlight-word .word.typed letter, #words.highlight-next-word .word.typed letter, @@ -80,8 +85,3 @@ a:not(.button):not([data-ui-variant="button"]):hover { #words.flipped .word.typed letter { animation: none; } - -#words.highlight-off .word letter, -#words.highlight-off .word.typed letter { - animation: grape 5s linear infinite; -} diff --git a/frontend/static/themes/moonlight.css b/frontend/static/themes/moonlight.css index c76ad99f3125..338c362ce344 100644 --- a/frontend/static/themes/moonlight.css +++ b/frontend/static/themes/moonlight.css @@ -2,8 +2,8 @@ header[data-focused] { & [data-nav-item], - & nav:before, - & nav:after { + & nav::before, + & nav::after { background: var(--bg-color); } } @@ -12,11 +12,11 @@ header[data-focused] { [data-nav-item="leaderboards"], [data-nav-item="about"], [data-nav-item="settings"] { - border-radius: rem !important; + /* border-radius: rem !important; this is doing nothing */ color: #191f28 !important; background: #c69f68; &:hover { - border-radius: rem !important; + /* border-radius: rem !important; this is doing nothing */ color: #4b5975 !important; transition: 0.25s; } diff --git a/frontend/static/themes/phantom.css b/frontend/static/themes/phantom.css index 836581a2d716..a3a7553567fb 100644 --- a/frontend/static/themes/phantom.css +++ b/frontend/static/themes/phantom.css @@ -59,6 +59,34 @@ header:not([data-focused]) [data-ui-element="logoText"] { animation: phantom-glow 3s infinite alternate; } +button:hover, +.button:hover, +input[type="button"]:hover, +input[type="reset"]:hover, +input[type="submit"]:hover { + color: var(--bg-color); + background: var(--caret-color); +} + +footer a:hover, +footer button:hover { + animation: phantom-glow 3s linear infinite; + background: none; +} + +[data-ui-element="accountMenu"] a:hover, +[data-ui-element="accountMenu"] button:hover { + animation: none; + background: var(--text-color); +} + +[data-ui-element="logoSubtext"], +#result .stats .group .bottom, +[data-nav-item]:hover, +a:not(.button):not([data-ui-variant="button"]):hover { + animation: phantom-glow 3s linear infinite; +} + header [data-ui-element="logoSubtext"] { color: inherit; animation: none; @@ -89,15 +117,6 @@ button.text:hover, animation: phantom-glow 5s linear infinite; } -button:hover, -.button:hover, -input[type="button"]:hover, -input[type="reset"]:hover, -input[type="submit"]:hover { - color: var(--bg-color); - background: var(--caret-color); -} - .scrollToTopButton:hover { background: var(--caret-color); color: var(--bg-color); @@ -107,19 +126,6 @@ input[type="submit"]:hover { animation: phantom-bg 3s linear infinite; } -[data-ui-element="logoSubtext"], -#result .stats .group .bottom, -[data-nav-item]:hover, -a:not(.button):not([data-ui-variant="button"]):hover { - animation: phantom-glow 3s linear infinite; -} - -footer a:hover, -footer button:hover { - animation: phantom-glow 3s linear infinite; - background: none; -} - [data-nav-item]:hover { background: none; } @@ -129,6 +135,11 @@ footer button:hover { animation: phantom-glow 3s linear infinite; } +#words.highlight-off .word letter, +#words.highlight-off .word.typed letter { + animation: phantom-glow 5s linear infinite; +} + .afk, .timeToday, #words .word letter.correct, @@ -147,14 +158,3 @@ footer button:hover { .incorrect { animation: phantom-glow-incorrect 5s linear infinite; } - -#words.highlight-off .word letter, -#words.highlight-off .word.typed letter { - animation: phantom-glow 5s linear infinite; -} - -[data-ui-element="accountMenu"] a:hover, -[data-ui-element="accountMenu"] button:hover { - animation: none; - background: var(--text-color); -} diff --git a/frontend/static/themes/rainbow_trail.css b/frontend/static/themes/rainbow_trail.css index 1c7110132c0d..adeb41c2cb93 100644 --- a/frontend/static/themes/rainbow_trail.css +++ b/frontend/static/themes/rainbow_trail.css @@ -31,7 +31,11 @@ header [data-ui-element="logoSubtext"], button.text:hover, .textButton:hover, -#restartTestButton:hover > i, +footer a:hover, +footer a:hover > i, +footer button:hover, +footer button:hover > i, +footer button:hover > .relative > i, #restartTestButton:hover > i, #showWordHistoryButton:hover > i, #saveScreenshotButton:hover > i, @@ -39,12 +43,7 @@ button.text:hover, #nextTestButton:hover > i, #practiseWordsButton:hover > i, #watchReplayButton:hover > i, -#watchVideoAdButton:hover > i, -footer a:hover, -footer a:hover > i, -footer button:hover, -footer button:hover > i, -footer button:hover > .relative > i { +#watchVideoAdButton:hover > i { background: linear-gradient( 90deg, #60b6ce, @@ -78,6 +77,11 @@ footer button:hover > .relative > i { infinite; } +#words.highlight-off .word letter, +#words.highlight-off .word.typed letter { + animation: rainbow-infinite-loop 5s linear infinite; +} + #words .word.typed letter.correct, #words.highlight-word .word.typed letter, #words.highlight-next-word .word.typed letter, @@ -103,17 +107,16 @@ footer button:hover > .relative > i { animation: none; } +footer button:hover { + animation: none !important; +} + .button:hover, button:not(.textButton):not(.text):not([data-ui-variant="text"]):hover, [data-nav-item]:hover { animation: rainbow-button 2s alternate ease-in-out infinite; } -#words.highlight-off .word letter, -#words.highlight-off .word.typed letter { - animation: rainbow-infinite-loop 5s linear infinite; -} - .row .textButton:not(.active) { color: #999999; } @@ -122,10 +125,6 @@ button:not(.textButton):not(.text):not([data-ui-variant="text"]):hover, color: #111111; } -footer button:hover { - animation: none !important; -} - @keyframes rainbow { 0% { color: #60b6ce; diff --git a/frontend/static/themes/rgb.css b/frontend/static/themes/rgb.css index 482807bdc3dc..2fe20a20b286 100644 --- a/frontend/static/themes/rgb.css +++ b/frontend/static/themes/rgb.css @@ -71,6 +71,28 @@ animation: rgb-bg 5s linear infinite !important; } +[data-ui-element="logoSubtext"], +#result .stats .group .bottom, +[data-nav-item]:hover, +footer button:hover, +#words.flipped .word, +footer a:hover { + animation: rgb 5s linear infinite; +} + +[data-ui-element="accountMenu"] a:hover, +[data-ui-element="accountMenu"] button:hover { + animation: none; +} + +a:not(.button):not([data-ui-variant="button"]):hover { + animation: rgb 5s linear infinite; +} + +header [data-ui-element="logo"] svg path { + animation: rgb-fill 5s linear infinite; +} + header[data-focused] { & [data-ui-element="logoSubtext"] { animation: none; @@ -80,14 +102,8 @@ header[data-focused] { } } -[data-ui-element="logoSubtext"], -#result .stats .group .bottom, -[data-nav-item]:hover, -footer button:hover, -#words.flipped .word, -footer a:hover, -a:not(.button):not([data-ui-variant="button"]):hover { - animation: rgb 5s linear infinite; +header [data-nav-item="account"]:hover [data-ui-element="navAvatar"] svg path { + animation: rgb-fill 5s linear infinite; } #words { @@ -98,13 +114,3 @@ a:not(.button):not([data-ui-variant="button"]):hover { --correct-letter-animation: none; --untyped-letter-animation: rgb 5s linear infinite; } - -header [data-ui-element="logo"] svg path, -header [data-nav-item="account"]:hover [data-ui-element="navAvatar"] svg path { - animation: rgb-fill 5s linear infinite; -} - -[data-ui-element="accountMenu"] a:hover, -[data-ui-element="accountMenu"] button:hover { - animation: none; -} diff --git a/frontend/static/themes/sewing_tin_light.css b/frontend/static/themes/sewing_tin_light.css index 870dd1ce59aa..1db4fd26357d 100644 --- a/frontend/static/themes/sewing_tin_light.css +++ b/frontend/static/themes/sewing_tin_light.css @@ -7,7 +7,7 @@ } header [data-ui-element="logoText"] { - background-color: #ffffff; /* fallback */ + background: #ffffff; /* fallback */ background: linear-gradient( #2d2076, #2d2076 25%, diff --git a/frontend/static/themes/snes.css b/frontend/static/themes/snes.css index de84a0e10d1a..b3c8c38be949 100644 --- a/frontend/static/themes/snes.css +++ b/frontend/static/themes/snes.css @@ -1,9 +1,3 @@ -header[data-focused] [data-nav-item], -header[data-focused] nav:before, -header[data-focused] nav:after { - background: #99989f; -} - [data-nav-item] { border-radius: 10rem !important; --themable-button-text: var(--bg-color); @@ -13,6 +7,12 @@ header[data-focused] nav:after { filter: brightness(1.25); } +header[data-focused] [data-nav-item], +header[data-focused] nav::before, +header[data-focused] nav::after { + background: #99989f; +} + [data-nav-item="test"] { background: #553d94; } diff --git a/frontend/static/themes/suisei.css b/frontend/static/themes/suisei.css index eb69a9f698f7..25a33e983d00 100644 --- a/frontend/static/themes/suisei.css +++ b/frontend/static/themes/suisei.css @@ -30,20 +30,23 @@ header[data-focused] [data-ui-element="logoText"] { color: transparent; padding-bottom: 0.1em; } -header[data-focused] [data-nav-item] { - background: none; -} + [data-nav-item] { border-radius: 150px 150px 32px 32px; background-color: var(--sub-alt-color); color: var(--main-color); } + [data-nav-item]:hover { animation: suisei-pulse 800ms ease-out infinite; color: var(--main-color); background-color: var(--sub-alt-color); } +header[data-focused] [data-nav-item] { + background: none; +} + [data-nav-item="leaderboards"], [data-nav-item="leaderboards"]:hover { color: var(--sub-color); diff --git a/frontend/static/themes/trance.css b/frontend/static/themes/trance.css index 451df1ad0705..d35516ad6ac8 100644 --- a/frontend/static/themes/trance.css +++ b/frontend/static/themes/trance.css @@ -57,6 +57,11 @@ a:not(.button):not([data-ui-variant="button"]):hover { --untyped-letter-animation: trance 5s linear infinite; } +#words.highlight-off .word letter, +#words.highlight-off .word.typed letter { + animation: trance 5s linear infinite; +} + #words .word.typed letter.correct, #words.highlight-word .word.typed letter, #words.highlight-next-word .word.typed letter, @@ -68,8 +73,3 @@ a:not(.button):not([data-ui-variant="button"]):hover { #words.flipped .word.typed letter { animation: none; } - -#words.highlight-off .word letter, -#words.highlight-off .word.typed letter { - animation: trance 5s linear infinite; -} diff --git a/monkeytype.code-workspace b/monkeytype.code-workspace index 3ddff0b55d9b..cec61ca8c4ec 100644 --- a/monkeytype.code-workspace +++ b/monkeytype.code-workspace @@ -44,7 +44,7 @@ "testing.automaticallyOpenTestResults": "neverOpen", "vitest.maximumConfigs": 10, "oxc.typeAware": true, - "typescript.format.enable": false, + "js/ts.format.enabled": false, "oxc.fmt.configPath": ".oxfmtrc-editor.json", "oxc.fixKind": "safe_fix_or_suggestion", "[json]": { @@ -68,6 +68,11 @@ "[javascriptreact]": { "editor.defaultFormatter": "oxc.oxc-vscode", }, + "css.validate": false, + "scss.validate": false, + "stylelint.lintFiles.glob": "**/*.{css,scss}", + "stylelint.snippet": ["css", "postcss", "scss"], + "stylelint.validate": ["css", "postcss", "scss"], }, "launch": { @@ -101,6 +106,7 @@ "oxc.oxc-vscode", "bradlc.vscode-tailwindcss", "csstools.postcss", + "stylelint.vscode-stylelint", ], }, } diff --git a/package.json b/package.json index 7260fed38195..00e7c4626cd5 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "type": "module", "scripts": { "preinstall": "npx only-allow pnpm", - "full-check": "turbo lint build test integration-test check-assets --force", + "full-check": "turbo lint build test integration-test lint-styles lint-json check-assets --force", "prepare": "husky install", "pre-commit": "lint-staged", "ts-check": "turbo run ts-check", @@ -49,6 +49,8 @@ "hotfix-dry": "monkeytype-release --hotfix --dry", "format-check": "oxfmt . --check", "format-fix": "oxfmt .", + "lint-styles": "stylelint \"**/*.{scss,css}\"", + "lint-styles-fix": "stylelint \"**/*.{scss,css}\" --fix", "lint-json-assets": "turbo lint-json --filter @monkeytype/frontend", "check-assets": "turbo check-assets --filter @monkeytype/frontend", "check-assets-quotes": "turbo check-assets --filter @monkeytype/frontend -- quotes", @@ -73,6 +75,9 @@ "oxlint": "1.60.0", "oxlint-tsgolint": "0.21.0", "prettier": "3.7.1", + "stylelint": "17.6.0", + "stylelint-config-standard": "40.0.0", + "stylelint-config-standard-scss": "17.0.0", "turbo": "2.7.5", "vitest": "4.1.0", "yaml": "2.8.3" @@ -83,6 +88,9 @@ ], "*.{ts,tsx,js}": [ "oxlint --type-aware --type-check" + ], + "*.{scss,css}": [ + "stylelint" ] }, "engines": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e66d4de909ed..20abea3d7cc9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -56,6 +56,15 @@ importers: prettier: specifier: 3.7.1 version: 3.7.1 + stylelint: + specifier: 17.6.0 + version: 17.6.0(typescript@5.9.3) + stylelint-config-standard: + specifier: 40.0.0 + version: 40.0.0(stylelint@17.6.0(typescript@5.9.3)) + stylelint-config-standard-scss: + specifier: 17.0.0 + version: 17.0.0(postcss@8.5.8)(stylelint@17.6.0(typescript@5.9.3)) turbo: specifier: 2.7.5 version: 2.7.5 @@ -1398,6 +1407,12 @@ packages: resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} + '@cacheable/memory@2.0.8': + resolution: {integrity: sha512-FvEb29x5wVwu/Kf93IWwsOOEuhHh6dYCJF3vcKLzXc0KXIW181AOzv6ceT4ZpBHDvAfG60eqb+ekmrnLHIy+jw==} + + '@cacheable/utils@2.4.1': + resolution: {integrity: sha512-eiFgzCbIneyMlLOmNG4g9xzF7Hv3Mga4LjxjcSC/ues6VYq2+gUbQI8JqNuw/ZM8tJIeIaBGpswAsqV2V7ApgA==} + '@chromatic-com/storybook@5.0.1': resolution: {integrity: sha512-v80QBwVd8W6acH5NtDgFlUevIBaMZAh1pYpBiB40tuNzS242NTHeQHBDGYwIAbWKDnt1qfjJpcpL6pj5kAr4LA==} engines: {node: '>=20.0.0', yarn: '>=1.22.18'} @@ -1512,6 +1527,13 @@ packages: '@csstools/css-parser-algorithms': ^3.0.5 '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-calc@3.1.1': + resolution: {integrity: sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 + '@csstools/css-color-parser@3.1.0': resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==} engines: {node: '>=18'} @@ -1525,14 +1547,51 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-parser-algorithms@4.0.0': + resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-tokenizer': ^4.0.0 + '@csstools/css-syntax-patches-for-csstree@1.0.23': resolution: {integrity: sha512-YEmgyklR6l/oKUltidNVYdjSmLSW88vMsKx0pmiS3r71s8ZZRpd8A0Yf0U+6p/RzElmMnPBv27hNWjDQMSZRtQ==} engines: {node: '>=18'} + '@csstools/css-syntax-patches-for-csstree@1.1.2': + resolution: {integrity: sha512-5GkLzz4prTIpoyeUiIu3iV6CSG3Plo7xRVOFPKI7FVEJ3mZ0A8SwK0XU3Gl7xAkiQ+mDyam+NNp875/C5y+jSA==} + peerDependencies: + css-tree: ^3.2.1 + peerDependenciesMeta: + css-tree: + optional: true + '@csstools/css-tokenizer@3.0.4': resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} engines: {node: '>=18'} + '@csstools/css-tokenizer@4.0.0': + resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} + engines: {node: '>=20.19.0'} + + '@csstools/media-query-list-parser@5.0.0': + resolution: {integrity: sha512-T9lXmZOfnam3eMERPsszjY5NK0jX8RmThmmm99FZ8b7z8yMaFZWKwLWGZuTwdO3ddRY5fy13GmmEYZXB4I98Eg==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/selector-resolve-nested@4.0.0': + resolution: {integrity: sha512-9vAPxmp+Dx3wQBIUwc1v7Mdisw1kbbaGqXUM8QLTgWg7SoPGYtXBsMXvsFs/0Bn5yoFhcktzxNZGNaUt0VjgjA==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss-selector-parser: ^7.1.1 + + '@csstools/selector-specificity@6.0.0': + resolution: {integrity: sha512-4sSgl78OtOXEX/2d++8A83zHNTgwCJMaR24FvsYL7Uf/VS8HZk9PTwR51elTbGqMuwH3szLvvOXEaVnqn0Z3zA==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss-selector-parser: ^7.1.1 + '@dabh/diagnostics@2.0.3': resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} @@ -2572,6 +2631,15 @@ packages: '@jsdevtools/ono@7.1.3': resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + '@keyv/bigmap@1.3.1': + resolution: {integrity: sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==} + engines: {node: '>= 18'} + peerDependencies: + keyv: ^5.6.0 + + '@keyv/serialize@1.1.1': + resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} + '@kwsites/file-exists@1.1.1': resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} @@ -3716,6 +3784,10 @@ packages: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + '@snyk/github-codeowners@1.1.0': resolution: {integrity: sha512-lGFf08pbkEac0NYgVf4hdANpAgApRjNByLXB+WBip3qj1iendOIyAwP2GKkKbQMNVy2r1xxDf0ssfWscoiC+Vw==} engines: {node: '>=8.10'} @@ -5190,6 +5262,9 @@ packages: resolution: {integrity: sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==} engines: {node: ^16.14.0 || >=18.0.0} + cacheable@2.3.4: + resolution: {integrity: sha512-djgxybDbw9fL/ZWMI3+CE8ZilNxcwFkVtDc1gJ+IlOSSWkSMPQabhV/XCHTQ6pwwN6aivXPZ43omTooZiX06Ew==} + call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -5423,6 +5498,9 @@ packages: color@3.2.1: resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + colorette@1.4.0: resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} @@ -5664,6 +5742,15 @@ packages: typescript: optional: true + cosmiconfig@9.0.1: + resolution: {integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + cpu-features@0.0.10: resolution: {integrity: sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==} engines: {node: '>=10.0.0'} @@ -5708,6 +5795,10 @@ packages: resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} engines: {node: '>=4'} + css-functions-list@3.3.3: + resolution: {integrity: sha512-8HFEBPKhOpJPEPu70wJJetjKta86Gw9+CCyCnB3sui2qQfOvRyqBy4IKLKKAwdMpWb2lHXWk9Wb4Z6AmaUT1Pg==} + engines: {node: '>=12'} + css-select@5.1.0: resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} @@ -5718,6 +5809,10 @@ packages: resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css-what@6.1.0: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} @@ -5725,6 +5820,11 @@ packages: css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + cssstyle@5.3.7: resolution: {integrity: sha512-7D2EPVltRrsTkhpQmksIu+LxeWAIEk6wRDMJ1qljlv+CKHJM+cJLlfhWIzNA44eAsHXSNe3+vO6DW1yCYx8SuQ==} engines: {node: '>=20'} @@ -6397,6 +6497,10 @@ packages: resolution: {integrity: sha512-Z7Fh2nVQSb2d+poDViM063ix2ZGt9jmY1nWhPfHBOK2Hgnb/OW3P4Et3P/81SEej0J7QbWtJqxO05h8QYfK7LQ==} hasBin: true + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + fastify@3.29.5: resolution: {integrity: sha512-FBDgb1gkenZxxh4sTD6AdI6mFnZnsgckpjIXzIvfLSYCa4isfQeD8QWGPib63dxq6btnY0l1j8I0xYhMvUb+sw==} @@ -6423,6 +6527,9 @@ packages: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} + file-entry-cache@11.1.2: + resolution: {integrity: sha512-N2WFfK12gmrK1c1GXOqiAJ1tc5YE+R53zvQ+t5P8S5XhnmKYVB5eZEiLNZKDSmoG8wqqbF9EXYBBW/nef19log==} + file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -6495,12 +6602,18 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} + flat-cache@6.1.22: + resolution: {integrity: sha512-N2dnzVJIphnNsjHcrxGW7DePckJ6haPrSFqpsBUhHYgwtKGVq4JrBGielEGD2fCVnsGm1zlBVZ8wGhkyuetgug==} + flatstr@1.0.12: resolution: {integrity: sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==} flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} @@ -6651,6 +6764,10 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-east-asian-width@1.5.0: + resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} + engines: {node: '>=18'} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -6747,6 +6864,14 @@ packages: resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} engines: {node: '>=10'} + global-modules@2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + + global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -6767,6 +6892,13 @@ packages: resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + globby@16.2.0: + resolution: {integrity: sha512-QrJia2qDf5BB/V6HYlDTs0I0lBahyjLzpGQg3KT7FnCdTonAyPy2RtY802m2k4ALx6Dp752f82WsOczEVr3l6Q==} + engines: {node: '>=20'} + + globjoin@0.1.4: + resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} + gonzales-pe@4.3.0: resolution: {integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==} engines: {node: '>=0.6.0'} @@ -6834,6 +6966,10 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + has-flag@5.0.1: + resolution: {integrity: sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==} + engines: {node: '>=12'} + has-own-property@0.1.0: resolution: {integrity: sha512-14qdBKoonU99XDhWcFKZTShK+QV47qU97u8zzoVo9cL5TZ3BmBHXogItSt9qJjR0KUMFRhcCW8uGIGl8nkl7Aw==} @@ -6859,6 +6995,10 @@ packages: resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==} engines: {node: '>=8'} + hashery@1.5.1: + resolution: {integrity: sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==} + engines: {node: '>=20'} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -6878,6 +7018,12 @@ packages: highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + hookified@1.15.1: + resolution: {integrity: sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==} + + hookified@2.1.1: + resolution: {integrity: sha512-AHb76R16GB5EsPBE2J7Ko5kiEyXwviB9P5SMrAKcuAu4vJPZttViAbj9+tZeaQE5zjDme+1vcHP78Yj/WoAveA==} + hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -6919,6 +7065,10 @@ packages: resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} engines: {node: '>=8'} + html-tags@5.1.0: + resolution: {integrity: sha512-n6l5uca7/y5joxZ3LUePhzmBFUJ+U2YWzhMa8XUTecSeSlQiZdF5XAd/Q3/WUl0VsXgUwWi8I7CNIwdI5WN1SQ==} + engines: {node: '>=20.10'} + htmlparser2@5.0.1: resolution: {integrity: sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==} @@ -7001,6 +7151,10 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + immutable@4.3.8: resolution: {integrity: sha512-d/Ld9aLbKpNwyl0KiM2CT1WYvkitQ1TSvmRtkcV8FKStiDoA7Slzgjmb/1G2yhKM1p0XeNOieaTbFZmU1d3Xuw==} @@ -7232,10 +7386,18 @@ packages: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} + is-path-inside@4.0.0: + resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} + engines: {node: '>=12'} + is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} @@ -7539,6 +7701,9 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + keyv@5.6.0: + resolution: {integrity: sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==} + kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -7551,6 +7716,9 @@ packages: known-css-properties@0.30.0: resolution: {integrity: sha512-VSWXYUnsPu9+WYKkfmJyLKtIvaRJi1kXUqVmBACORXZQxT5oZDsoZ2vQP+bQFDnWtpI/4eq3MLoRMjI2fnLzTQ==} + known-css-properties@0.37.0: + resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==} + kuler@2.0.0: resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} @@ -7830,6 +7998,9 @@ packages: lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} @@ -7984,9 +8155,15 @@ packages: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + mathml-tag-names@4.0.0: + resolution: {integrity: sha512-aa6AU2Pcx0VP/XWnh8IGL0SYSgQHDT6Ucror2j2mXeFAlN3ahaNs8EZtG1YiticMkSLj3Gt6VPFfZogt7G5iFQ==} + mdn-data@2.12.2: resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} + media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} @@ -8005,6 +8182,10 @@ packages: resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} engines: {node: '>=18'} + meow@14.1.0: + resolution: {integrity: sha512-EDYo6VlmtnumlcBCbh1gLJ//9jvM/ndXHfVXIFrZVr6fGcwTUyCTFNTLCKuY3ffbK8L/+3Mzqnd58RojiZqHVw==} + engines: {node: '>=20'} + meow@8.1.2: resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} engines: {node: '>=10'} @@ -8949,6 +9130,28 @@ packages: yaml: optional: true + postcss-media-query-parser@0.2.3: + resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} + + postcss-resolve-nested-selector@0.1.6: + resolution: {integrity: sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==} + + postcss-safe-parser@7.0.1: + resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==} + engines: {node: '>=18.0'} + peerDependencies: + postcss: 8.5.8 + + postcss-scss@4.0.9: + resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: 8.5.8 + + postcss-selector-parser@7.1.1: + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} + engines: {node: '>=4'} + postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} @@ -9094,6 +9297,10 @@ packages: resolution: {integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==} engines: {node: '>=8'} + qified@0.9.1: + resolution: {integrity: sha512-n7mar4T0xQ+39dE2vGTAlbxUEpndwPANH0kDef1/MYsB8Bba9wshkybIRx74qgcvKQPEWErf9AqAdYjhzY2Ilg==} + engines: {node: '>=20'} + qs@6.13.0: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} @@ -9673,6 +9880,10 @@ packages: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} engines: {node: '>=12'} + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + slice-ansi@3.0.0: resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} engines: {node: '>=8'} @@ -9902,6 +10113,10 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} + string-width@8.2.0: + resolution: {integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==} + engines: {node: '>=20'} + string.fromcodepoint@0.2.1: resolution: {integrity: sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==} @@ -9993,6 +10208,49 @@ packages: react-dom: optional: true + stylelint-config-recommended-scss@17.0.0: + resolution: {integrity: sha512-VkVD9r7jfUT/dq3mA3/I1WXXk2U71rO5wvU2yIil9PW5o1g3UM7Xc82vHmuVJHV7Y8ok5K137fmW5u3HbhtTOA==} + engines: {node: '>=20'} + peerDependencies: + postcss: 8.5.8 + stylelint: ^17.0.0 + peerDependenciesMeta: + postcss: + optional: true + + stylelint-config-recommended@18.0.0: + resolution: {integrity: sha512-mxgT2XY6YZ3HWWe3Di8umG6aBmWmHTblTgu/f10rqFXnyWxjKWwNdjSWkgkwCtxIKnqjSJzvFmPT5yabVIRxZg==} + engines: {node: '>=20.19.0'} + peerDependencies: + stylelint: ^17.0.0 + + stylelint-config-standard-scss@17.0.0: + resolution: {integrity: sha512-uLJS6xgOCBw5EMsDW7Ukji8l28qRoMnkRch15s0qwZpskXvWt9oPzMmcYM307m9GN4MxuWLsQh4I6hU9yI53cQ==} + engines: {node: '>=20'} + peerDependencies: + postcss: 8.5.8 + stylelint: ^17.0.0 + peerDependenciesMeta: + postcss: + optional: true + + stylelint-config-standard@40.0.0: + resolution: {integrity: sha512-EznGJxOUhtWck2r6dJpbgAdPATIzvpLdK9+i5qPd4Lx70es66TkBPljSg4wN3Qnc6c4h2n+WbUrUynQ3fanjHw==} + engines: {node: '>=20.19.0'} + peerDependencies: + stylelint: ^17.0.0 + + stylelint-scss@7.0.0: + resolution: {integrity: sha512-H88kCC+6Vtzj76NsC8rv6x/LW8slBzIbyeSjsKVlS+4qaEJoDrcJR4L+8JdrR2ORdTscrBzYWiiT2jq6leYR1Q==} + engines: {node: '>=20.19.0'} + peerDependencies: + stylelint: ^16.8.2 || ^17.0.0 + + stylelint@17.6.0: + resolution: {integrity: sha512-tokrsMIVAR9vAQ/q3UVEr7S0dGXCi7zkCezPRnS2kqPUulvUh5Vgfwngrk4EoAoW7wnrThqTdnTFN5Ra7CaxIg==} + engines: {node: '>=20.19.0'} + hasBin: true + stylis@4.3.6: resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} @@ -10025,6 +10283,10 @@ packages: resolution: {integrity: sha512-tjLPs7dVyqgItVFirHYqe2T+MfWc2VOBQ8QFKKbWTA3PU7liZR8zoSpAi/C1k1ilm9RsXIKYf197oap9wXGVYg==} engines: {node: '>=14.18.0'} + supports-color@10.2.2: + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} + engines: {node: '>=18'} + supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -10041,10 +10303,17 @@ packages: resolution: {integrity: sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==} engines: {node: '>=14.18'} + supports-hyperlinks@4.4.0: + resolution: {integrity: sha512-UKbpT93hN5Nr9go5UY7bopIB9YQlMz9nm/ct4IXt/irb5YRkn9WaqrOBJGZ5Pwvsd5FQzSVeYlGdXoCAPQZrPg==} + engines: {node: '>=20'} + supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + svg-tags@1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + swagger-stats@0.99.7: resolution: {integrity: sha512-niP70m99Cwpz/Fyfk8ydul1jM0pOKD6UofSaDzW2Op6o6WYFsuAl/BhVbmLkZWOAZ7IloDVvFj6vaU5zA0xydg==} peerDependencies: @@ -10057,6 +10326,10 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + table@6.9.0: + resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} + engines: {node: '>=10.0.0'} + tailwind-merge@3.4.0: resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==} @@ -10504,6 +10777,10 @@ packages: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} + unicorn-magic@0.4.0: + resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==} + engines: {node: '>=20'} + unique-filename@3.0.0: resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -11020,6 +11297,10 @@ packages: write-file-atomic@3.0.3: resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + write-file-atomic@7.0.1: + resolution: {integrity: sha512-OTIk8iR8/aCRWBqvxrzxR0hgxWpnYBblY1S5hDWBQfk/VFmJwzmJgQFN3WsoUKHISv2eAwe+PpbUzyL1CKTLXg==} + engines: {node: ^20.17.0 || >=22.9.0} + ws@7.5.10: resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} @@ -11924,6 +12205,18 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} + '@cacheable/memory@2.0.8': + dependencies: + '@cacheable/utils': 2.4.1 + '@keyv/bigmap': 1.3.1(keyv@5.6.0) + hookified: 1.15.1 + keyv: 5.6.0 + + '@cacheable/utils@2.4.1': + dependencies: + hashery: 1.5.1 + keyv: 5.6.0 + '@chromatic-com/storybook@5.0.1(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': dependencies: '@neoconfetti/react': 1.0.0 @@ -12082,6 +12375,11 @@ snapshots: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 + '@csstools/css-calc@3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': dependencies: '@csstools/color-helpers': 5.1.0 @@ -12093,10 +12391,33 @@ snapshots: dependencies: '@csstools/css-tokenizer': 3.0.4 + '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-tokenizer': 4.0.0 + '@csstools/css-syntax-patches-for-csstree@1.0.23': {} + '@csstools/css-syntax-patches-for-csstree@1.1.2(css-tree@3.2.1)': + optionalDependencies: + css-tree: 3.2.1 + '@csstools/css-tokenizer@3.0.4': {} + '@csstools/css-tokenizer@4.0.0': {} + + '@csstools/media-query-list-parser@5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/selector-resolve-nested@4.0.0(postcss-selector-parser@7.1.1)': + dependencies: + postcss-selector-parser: 7.1.1 + + '@csstools/selector-specificity@6.0.0(postcss-selector-parser@7.1.1)': + dependencies: + postcss-selector-parser: 7.1.1 + '@dabh/diagnostics@2.0.3': dependencies: colorspace: 1.1.4 @@ -13167,6 +13488,14 @@ snapshots: '@jsdevtools/ono@7.1.3': {} + '@keyv/bigmap@1.3.1(keyv@5.6.0)': + dependencies: + hashery: 1.5.1 + hookified: 1.15.1 + keyv: 5.6.0 + + '@keyv/serialize@1.1.1': {} + '@kwsites/file-exists@1.1.1': dependencies: debug: 4.4.3(supports-color@5.5.0) @@ -14111,6 +14440,8 @@ snapshots: '@sindresorhus/is@4.6.0': {} + '@sindresorhus/merge-streams@4.0.0': {} + '@snyk/github-codeowners@1.1.0': dependencies: commander: 4.1.1 @@ -15222,6 +15553,14 @@ snapshots: optionalDependencies: vite: 7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + '@vitest/mocker@4.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@20.5.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + dependencies: + '@vitest/spy': 4.1.0 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@20.5.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + '@vitest/mocker@4.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.1.0 @@ -15883,6 +16222,14 @@ snapshots: unique-filename: 3.0.0 optional: true + cacheable@2.3.4: + dependencies: + '@cacheable/memory': 2.0.8 + '@cacheable/utils': 2.4.1 + hookified: 1.15.1 + keyv: 5.6.0 + qified: 0.9.1 + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -16110,6 +16457,8 @@ snapshots: color-convert: 1.9.3 color-string: 1.9.1 + colord@2.9.3: {} + colorette@1.4.0: {} colorette@2.0.20: {} @@ -16360,6 +16709,15 @@ snapshots: optionalDependencies: typescript: 5.9.3 + cosmiconfig@9.0.1(typescript@5.9.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.1 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.9.3 + cpu-features@0.0.10: dependencies: buildcheck: 0.0.6 @@ -16405,6 +16763,8 @@ snapshots: css-color-keywords@1.0.0: {} + css-functions-list@3.3.3: {} + css-select@5.1.0: dependencies: boolbase: 1.0.0 @@ -16424,10 +16784,17 @@ snapshots: mdn-data: 2.12.2 source-map-js: 1.2.1 + css-tree@3.2.1: + dependencies: + mdn-data: 2.27.1 + source-map-js: 1.2.1 + css-what@6.1.0: {} css.escape@1.5.1: {} + cssesc@3.0.0: {} + cssstyle@5.3.7: dependencies: '@asamuzakjp/css-color': 4.1.1 @@ -16814,8 +17181,7 @@ snapshots: entities@7.0.1: {} - env-paths@2.2.1: - optional: true + env-paths@2.2.1: {} environment@1.1.0: {} @@ -17320,6 +17686,8 @@ snapshots: path-expression-matcher: 1.2.0 strnum: 2.2.2 + fastest-levenshtein@1.0.16: {} + fastify@3.29.5: dependencies: '@fastify/ajv-compiler': 1.1.0 @@ -17359,6 +17727,10 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 + file-entry-cache@11.1.2: + dependencies: + flat-cache: 6.1.22 + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -17575,10 +17947,18 @@ snapshots: flatted: 3.3.3 keyv: 4.5.4 + flat-cache@6.1.22: + dependencies: + cacheable: 2.3.4 + flatted: 3.4.2 + hookified: 1.15.1 + flatstr@1.0.12: {} flatted@3.3.3: {} + flatted@3.4.2: {} + fn.name@1.1.0: {} follow-redirects@1.15.6(debug@4.4.3): @@ -17738,6 +18118,8 @@ snapshots: get-caller-file@2.0.5: {} + get-east-asian-width@1.5.0: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -17865,6 +18247,16 @@ snapshots: dependencies: ini: 2.0.0 + global-modules@2.0.0: + dependencies: + global-prefix: 3.0.0 + + global-prefix@3.0.0: + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + globals@14.0.0: {} globals@15.15.0: {} @@ -17891,6 +18283,17 @@ snapshots: merge2: 1.4.1 slash: 4.0.0 + globby@16.2.0: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + fast-glob: 3.3.3 + ignore: 7.0.5 + is-path-inside: 4.0.0 + slash: 5.1.0 + unicorn-magic: 0.4.0 + + globjoin@0.1.4: {} + gonzales-pe@4.3.0: dependencies: minimist: 1.2.8 @@ -17988,6 +18391,8 @@ snapshots: has-flag@4.0.0: {} + has-flag@5.0.1: {} + has-own-property@0.1.0: {} has-property-descriptors@1.0.2: @@ -18008,6 +18413,10 @@ snapshots: has-yarn@2.1.0: {} + hashery@1.5.1: + dependencies: + hookified: 1.15.1 + hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -18020,6 +18429,10 @@ snapshots: highlight.js@10.7.3: {} + hookified@1.15.1: {} + + hookified@2.1.1: {} + hosted-git-info@2.8.9: {} hosted-git-info@4.1.0: @@ -18067,6 +18480,8 @@ snapshots: html-tags@3.3.1: {} + html-tags@5.1.0: {} + htmlparser2@5.0.1: dependencies: domelementtype: 2.3.0 @@ -18163,6 +18578,8 @@ snapshots: ignore@5.3.2: {} + ignore@7.0.5: {} + immutable@4.3.8: {} immutable@5.1.5: @@ -18399,8 +18816,12 @@ snapshots: is-path-inside@3.0.3: {} + is-path-inside@4.0.0: {} + is-plain-obj@1.1.0: {} + is-plain-object@5.0.0: {} + is-potential-custom-element-name@1.0.1: {} is-promise@4.0.0: {} @@ -18727,6 +19148,10 @@ snapshots: dependencies: json-buffer: 3.0.1 + keyv@5.6.0: + dependencies: + '@keyv/serialize': 1.1.1 + kind-of@6.0.3: {} knip@2.19.2: @@ -18751,6 +19176,8 @@ snapshots: known-css-properties@0.30.0: {} + known-css-properties@0.37.0: {} + kuler@2.0.0: {} lazystream@1.0.1: @@ -18975,6 +19402,8 @@ snapshots: lodash.startcase@4.4.0: {} + lodash.truncate@4.4.2: {} + lodash.uniq@4.5.0: {} lodash.upperfirst@4.3.1: {} @@ -19140,8 +19569,12 @@ snapshots: math-intrinsics@1.1.0: {} + mathml-tag-names@4.0.0: {} + mdn-data@2.12.2: {} + mdn-data@2.27.1: {} + media-typer@0.3.0: {} media-typer@1.1.0: {} @@ -19152,6 +19585,8 @@ snapshots: meow@13.2.0: {} + meow@14.1.0: {} + meow@8.1.2: dependencies: '@types/minimist': 1.2.5 @@ -20310,6 +20745,23 @@ snapshots: tsx: 4.21.0 yaml: 2.8.3 + postcss-media-query-parser@0.2.3: {} + + postcss-resolve-nested-selector@0.1.6: {} + + postcss-safe-parser@7.0.1(postcss@8.5.8): + dependencies: + postcss: 8.5.8 + + postcss-scss@4.0.9(postcss@8.5.8): + dependencies: + postcss: 8.5.8 + + postcss-selector-parser@7.1.1: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + postcss-value-parser@4.2.0: {} postcss-values-parser@6.0.2(postcss@8.5.8): @@ -20475,6 +20927,10 @@ snapshots: dependencies: escape-goat: 2.1.1 + qified@0.9.1: + dependencies: + hookified: 2.1.1 + qs@6.13.0: dependencies: side-channel: 1.1.0 @@ -21242,6 +21698,8 @@ snapshots: slash@4.0.0: {} + slash@5.1.0: {} + slice-ansi@3.0.0: dependencies: ansi-styles: 4.3.0 @@ -21512,6 +21970,11 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.2 + string-width@8.2.0: + dependencies: + get-east-asian-width: 1.5.0 + strip-ansi: 7.1.2 + string.fromcodepoint@0.2.1: {} string.prototype.matchall@4.0.12: @@ -21618,6 +22081,86 @@ snapshots: optionalDependencies: react-dom: 18.3.1(react@18.3.1) + stylelint-config-recommended-scss@17.0.0(postcss@8.5.8)(stylelint@17.6.0(typescript@5.9.3)): + dependencies: + postcss-scss: 4.0.9(postcss@8.5.8) + stylelint: 17.6.0(typescript@5.9.3) + stylelint-config-recommended: 18.0.0(stylelint@17.6.0(typescript@5.9.3)) + stylelint-scss: 7.0.0(stylelint@17.6.0(typescript@5.9.3)) + optionalDependencies: + postcss: 8.5.8 + + stylelint-config-recommended@18.0.0(stylelint@17.6.0(typescript@5.9.3)): + dependencies: + stylelint: 17.6.0(typescript@5.9.3) + + stylelint-config-standard-scss@17.0.0(postcss@8.5.8)(stylelint@17.6.0(typescript@5.9.3)): + dependencies: + stylelint: 17.6.0(typescript@5.9.3) + stylelint-config-recommended-scss: 17.0.0(postcss@8.5.8)(stylelint@17.6.0(typescript@5.9.3)) + stylelint-config-standard: 40.0.0(stylelint@17.6.0(typescript@5.9.3)) + optionalDependencies: + postcss: 8.5.8 + + stylelint-config-standard@40.0.0(stylelint@17.6.0(typescript@5.9.3)): + dependencies: + stylelint: 17.6.0(typescript@5.9.3) + stylelint-config-recommended: 18.0.0(stylelint@17.6.0(typescript@5.9.3)) + + stylelint-scss@7.0.0(stylelint@17.6.0(typescript@5.9.3)): + dependencies: + css-tree: 3.1.0 + is-plain-object: 5.0.0 + known-css-properties: 0.37.0 + mdn-data: 2.27.1 + postcss-media-query-parser: 0.2.3 + postcss-resolve-nested-selector: 0.1.6 + postcss-selector-parser: 7.1.1 + postcss-value-parser: 4.2.0 + stylelint: 17.6.0(typescript@5.9.3) + + stylelint@17.6.0(typescript@5.9.3): + dependencies: + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-syntax-patches-for-csstree': 1.1.2(css-tree@3.2.1) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/selector-resolve-nested': 4.0.0(postcss-selector-parser@7.1.1) + '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) + colord: 2.9.3 + cosmiconfig: 9.0.1(typescript@5.9.3) + css-functions-list: 3.3.3 + css-tree: 3.2.1 + debug: 4.4.3(supports-color@5.5.0) + fast-glob: 3.3.3 + fastest-levenshtein: 1.0.16 + file-entry-cache: 11.1.2 + global-modules: 2.0.0 + globby: 16.2.0 + globjoin: 0.1.4 + html-tags: 5.1.0 + ignore: 7.0.5 + import-meta-resolve: 4.2.0 + is-plain-object: 5.0.0 + mathml-tag-names: 4.0.0 + meow: 14.1.0 + micromatch: 4.0.8 + normalize-path: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.8 + postcss-safe-parser: 7.0.1(postcss@8.5.8) + postcss-selector-parser: 7.1.1 + postcss-value-parser: 4.2.0 + string-width: 8.2.0 + supports-hyperlinks: 4.4.0 + svg-tags: 1.0.0 + table: 6.9.0 + write-file-atomic: 7.0.1 + transitivePeerDependencies: + - supports-color + - typescript + stylis@4.3.6: {} stylus-lookup@6.0.0: @@ -21690,6 +22233,8 @@ snapshots: transitivePeerDependencies: - supports-color + supports-color@10.2.2: {} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -21707,8 +22252,15 @@ snapshots: has-flag: 4.0.0 supports-color: 7.2.0 + supports-hyperlinks@4.4.0: + dependencies: + has-flag: 5.0.1 + supports-color: 10.2.2 + supports-preserve-symlinks-flag@1.0.0: {} + svg-tags@1.0.0: {} + swagger-stats@0.99.7(prom-client@15.1.3): dependencies: axios: 1.7.4(debug@4.4.3) @@ -21742,6 +22294,14 @@ snapshots: symbol-tree@3.2.4: {} + table@6.9.0: + dependencies: + ajv: 8.18.0 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + tailwind-merge@3.4.0: {} tailwindcss@4.1.18: {} @@ -22191,6 +22751,8 @@ snapshots: unicorn-magic@0.1.0: {} + unicorn-magic@0.4.0: {} + unique-filename@3.0.0: dependencies: unique-slug: 4.0.0 @@ -22410,6 +22972,26 @@ snapshots: tsx: 4.21.0 yaml: 2.8.3 + vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@20.5.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.8 + rolldown: 1.0.0-rc.12(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0) + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 20.5.1 + esbuild: 0.27.7 + fsevents: 2.3.3 + jiti: 2.6.1 + sass: 1.98.0 + terser: 5.46.1 + tsx: 4.21.0 + yaml: 2.8.3 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: lightningcss: 1.32.0 @@ -22908,6 +23490,10 @@ snapshots: signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 + write-file-atomic@7.0.1: + dependencies: + signal-exit: 4.1.0 + ws@7.5.10: {} ws@8.19.0: {} diff --git a/stylelint.config.mjs b/stylelint.config.mjs new file mode 100644 index 000000000000..5aacf8e9a154 --- /dev/null +++ b/stylelint.config.mjs @@ -0,0 +1,76 @@ +/** @type {import('stylelint').Config} */ +export default { + extends: ["stylelint-config-standard"], + rules: { + "font-family-no-missing-generic-family-keyword": [ + true, + { + ignoreFontFamilies: [ + "Font Awesome", + "Font Awesome Brands", + "Gallaudet", + ], + }, + ], //default: true + + "at-rule-no-unknown": [ + true, + { ignoreAtRules: ["theme", "utility", "tailwind", "apply", "source"] }, + ], // source for lightningCss and the rest for tailwind //default: true + "selector-type-no-unknown": [ + true, + { ignore: ["custom-elements"], ignoreTypes: ["letter", "hint"] }, + ], // default: [true, {ignore: ['custom-elements'],},] + + "length-zero-no-unit": null, // default: [true, {ignore: ['custom-properties'], ignorePreludeOfAtRules: ['function', 'mixin'],},] + + "value-keyword-case": null, // default: lower + + "at-rule-empty-line-before": null, // default: ['always', {except: ['blockless-after-same-name-blockless', 'first-nested'], ignore: ['after-comment'],},] + "comment-empty-line-before": null, // default: ['always', {except: ['first-nested'], ignore: ['stylelint-commands'],},] + "custom-property-empty-line-before": null, // default: 'custom-property-empty-line-before': ['always',{except: ['after-custom-property', 'first-nested'],ignore: ['after-comment', 'inside-single-line-block'],},] + "declaration-empty-line-before": null, // default: ['always', {except: ['after-declaration', 'first-nested'], ignore: ['after-comment', 'inside-single-line-block'],},] + "rule-empty-line-before": null, // default: ['always-multi-line', {except: ['first-nested'], ignore: ['after-comment'],},] + + "alpha-value-notation": null, // default: ['percentage',{exceptProperties: ['opacity','fill-opacity','flood-opacity','stop-opacity','stroke-opacity',],},] + "color-function-alias-notation": null, // default: without-alpha + "color-function-notation": null, // default: modern + "color-hex-length": null, // default: short + "hue-degree-notation": null, // default: angle + "import-notation": null, // default: url + "media-feature-range-notation": null, // default: context + "selector-not-notation": null, // default: complex + + // default pattern for these rules is a kebab case pattern + "custom-property-pattern": null, + "keyframes-name-pattern": null, + "selector-class-pattern": null, + "selector-id-pattern": null, + + "declaration-block-no-redundant-longhand-properties": null, + "shorthand-property-no-redundant-values": null, + + "comment-whitespace-inside": null, // default: always + }, + overrides: [ + { + files: ["**/*.scss"], + extends: ["stylelint-config-standard-scss"], + rules: { + "no-invalid-position-at-import-rule": null, // consider adding // default: [true, {ignoreAtRules: ['use', 'forward'],},] + + "at-rule-no-unknown": null, // use "scss/at-rule-no-unknown" to override this + + "scss/at-extend-no-missing-placeholder": null, + "scss/load-no-partial-leading-underscore": null, + "scss/load-partial-extension": null, // default: never, + "scss/no-global-function-names": null, + + "scss/dollar-variable-pattern": null, + "scss/double-slash-comment-empty-line-before": null, + "scss/double-slash-comment-whitespace-inside": null, + }, + }, + ], + ignoreFiles: ["**/dist/**"], +}; diff --git a/turbo.json b/turbo.json index f0013d056cb5..f3cf9386d268 100644 --- a/turbo.json +++ b/turbo.json @@ -42,6 +42,9 @@ "@monkeytype/frontend#check-assets": { "dependsOn": ["^parallel", "@monkeytype/schemas#build"] }, + "//#lint-styles": { + "dependsOn": ["^parallel"] + }, "@monkeytype/frontend#lint-json": { "dependsOn": ["^parallel"] }, From f13e4cf71d375ec6a30db84165199111816a1882 Mon Sep 17 00:00:00 2001 From: Miodec Date: Mon, 27 Apr 2026 23:01:00 +0200 Subject: [PATCH 03/31] chore: fix typos --- frontend/static/languages/turkish_5k.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/static/languages/turkish_5k.json b/frontend/static/languages/turkish_5k.json index d2977012ceaf..065d299e817a 100644 --- a/frontend/static/languages/turkish_5k.json +++ b/frontend/static/languages/turkish_5k.json @@ -4558,7 +4558,7 @@ "kablosuz", "parfüm", "konser", - "serenad", + "serenat", "sahne", "çöp", "çöplük", @@ -4568,7 +4568,7 @@ "menekşe", "bidon", "ambalaj", - "bağbozumu", + "bağ bozumu", "birtakım", "huzurevi", "depremzede", From 07a25c43fd6f6fb3e94cabd6fd69cbf5d74a0a72 Mon Sep 17 00:00:00 2001 From: Miodec Date: Tue, 28 Apr 2026 21:25:58 +0200 Subject: [PATCH 04/31] chore(stylelint): ignore coverage folder --- stylelint.config.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stylelint.config.mjs b/stylelint.config.mjs index 5aacf8e9a154..8abc0fe5e722 100644 --- a/stylelint.config.mjs +++ b/stylelint.config.mjs @@ -72,5 +72,5 @@ export default { }, }, ], - ignoreFiles: ["**/dist/**"], + ignoreFiles: ["**/dist/**", "**/coverage/**"], }; From ddc0d2e0e386200ddf0be0a8a985850d7f78f96f Mon Sep 17 00:00:00 2001 From: Dhruv <148534040+Dhruv1249@users.noreply.github.com> Date: Wed, 29 Apr 2026 01:02:25 +0530 Subject: [PATCH 05/31] impr(quotes): add Hindi quotes (@Dhruv1249) (#7786) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description ## Adding 10 famous hindi quotes :) ### id: 54 **धीरे-धीरे रे मना, धीरे सब कुछ होय; माली सींचे सौ घड़ा, ऋतु आए फल होय।** Slowly, slowly, O mind—everything unfolds in its own time; the gardener may water with a hundred pots, yet fruit arrives only in season. --- ### id: 55 **रहिमन पानी राखिए, बिन पानी सब सून; पानी गए न ऊबरे, मोती, मानस, चून।** Preserve your “water” (honor/essence), says Rahim; without it, all is empty. Once lost, neither pearls, humans, nor lime can regain it. --- ### id: 56 **ऐसी वाणी बोलिए, मन का आपा खोय; औरन को शीतल करे, आपहुं शीतल होय।** Speak such words that your ego dissolves; they bring peace to others, and peace to yourself. --- ### id: 57 **निंदक नियरे राखिए, आँगन कुटी छवाय; बिन पानी, साबुन बिना, निर्मल करे सुभाय।** Keep your critic close—give them a place in your courtyard; without soap or water, they cleanse your nature. --- ### id: 58 **करत-करत अभ्यास के जड़मति होत सुजान; रसरी आवत-जात ते सिल पर परत निशान।** Through constant practice, even a dull mind becomes wise; as a rope’s repeated friction leaves marks on stone. --- ### id: 59 **तुलसी इस संसार में भाँति-भाँति के लोग; सबसे हँस मिल बोलिए, नदी नाव संजोग।** In this world are people of many kinds; meet everyone with a smile—like a boat meeting the river. --- ### id: 60 **रहिमन निज मन की व्यथा, मन ही राखो गोय; सुनि अठिलैंहि लोग सब, बाँटि न लेंहि कोय।** Keep your heart’s pain within, says Rahim; people will only laugh at it—none truly shares it. --- ### id: 61 **रहिमन देखि बड़ेन को, लघु न दीजिए डारि; जहाँ काम आवे सुई, कहाँ करे तरवारि।** Do not discard the small in favor of the great, says Rahim; where a needle is needed, what use is a sword? --- ### id: 62 **जो रहीम उत्तम प्रकृति, का करि सकत कुसंग; चंदन विष व्यापत नहीं, लिपटे रहत भुजंग।** What harm can bad company do to one of noble nature, says Rahim? Poison does not affect sandalwood, even when snakes coil around it. --- ### id: 63 **साँच बराबर तप नहीं, झूठ बराबर पाप; जाके हृदय साँच है, ताके हृदय आप।** No austerity equals truth, no sin equals falsehood; where truth resides in the heart, there resides God. ### Checks - [x] Adding quotes? - Make sure to follow the [quotes documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/QUOTES.md) - [x] Make sure to include translations for the quotes in the description (or another comment) so we can verify their content. - [ ] Adding a language? - Make sure to follow the [languages documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/LANGUAGES.md) - [ ] Add language to `packages/schemas/src/languages.ts` - [ ] Add language to exactly one group in `frontend/src/ts/constants/languages.ts` - [ ] Add language json file to `frontend/static/languages` - [ ] Adding a theme? - Make sure to follow the [themes documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/THEMES.md) - [ ] Add theme to `packages/schemas/src/themes.ts` - [ ] Add theme to `frontend/src/ts/constants/themes.ts` - [ ] (optional) Add theme css file to `frontend/static/themes` - [ ] Add some screenshots of the theme, especially with different test settings (colorful, flip colors) to your pull request - [ ] Adding a layout? - [ ] Make sure to follow the [layouts documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/LAYOUTS.md) - [ ] Add layout to `packages/schemas/src/layouts.ts` - [ ] Add layout json file to `frontend/static/layouts` - [ ] Adding a font? - Make sure to follow the [fonts documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/FONTS.md) - [ ] Add font file to `frontend/static/webfonts` - [ ] Add font to `packages/schemas/src/fonts.ts` - [ ] Add font to `frontend/src/ts/constants/fonts.ts` - [ ] Check if any open issues are related to this PR; if so, be sure to tag them below. - [ ] Make sure the PR title follows the Conventional Commits standard. (https://www.conventionalcommits.org for more info) - [x] Make sure to include your GitHub username prefixed with @ inside parentheses at the end of the PR title. --- frontend/static/quotes/hindi.json | 60 +++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/frontend/static/quotes/hindi.json b/frontend/static/quotes/hindi.json index 7c36eb906918..2aa57bba2b51 100644 --- a/frontend/static/quotes/hindi.json +++ b/frontend/static/quotes/hindi.json @@ -324,6 +324,66 @@ "source": "नुसरत फ़तेह अली ख़ान", "length": 128, "id": 53 + }, + { + "text": "धीरे-धीरे रे मना, धीरे सब कुछ होय; माली सींचे सौ घड़ा, ऋतु आए फल होय।", + "source": "कबीर दास", + "length": 69, + "id": 54 + }, + { + "text": "रहिमन पानी राखिए, बिन पानी सब सून; पानी गए न ऊबरे, मोती, मानस, चून।", + "source": "रहीम", + "length": 67, + "id": 55 + }, + { + "text": "ऐसी वाणी बोलिए, मन का आपा खोय; औरन को शीतल करे, आपहुं शीतल होय।", + "source": "कबीर दास", + "length": 63, + "id": 56 + }, + { + "text": "निंदक नियरे राखिए, आँगन कुटी छवाय; बिन पानी, साबुन बिना, निर्मल करे सुभाय।", + "source": "कबीर दास", + "length": 74, + "id": 57 + }, + { + "text": "करत-करत अभ्यास के जड़मति होत सुजान; रसरी आवत-जात ते सिल पर परत निशान।", + "source": "कवि वृंद", + "length": 69, + "id": 58 + }, + { + "text": "तुलसी इस संसार में भाँति-भाँति के लोग; सबसे हँस मिल बोलिए, नदी नाव संजोग।", + "source": "तुलसीदास", + "length": 73, + "id": 59 + }, + { + "text": "रहिमन निज मन की व्यथा, मन ही राखो गोय; सुनि अठिलैंहि लोग सब, बाँटि न लेंहि कोय।", + "source": "रहीम", + "length": 79, + "id": 60 + }, + { + "text": "रहिमन देखि बड़ेन को, लघु न दीजिए डारि; जहाँ काम आवे सुई, कहाँ करे तरवारि।", + "source": "रहीम", + "length": 73, + "id": 61 + }, + { + "text": "जो रहीम उत्तम प्रकृति, का करि सकत कुसंग; चंदन विष व्यापत नहीं, लिपटे रहत भुजंग।", + "source": "रहीम", + "length": 79, + "id": 62 + }, + { + "text": "साँच बराबर तप नहीं, झूठ बराबर पाप; जाके हृदय साँच है, ताके हृदय आप।", + "source": "कबीर दास", + "length": 67, + "id": 63 } ] } From a0627a52570aad38fc0d74e2d4f3d692c68bb8f2 Mon Sep 17 00:00:00 2001 From: Miodec Date: Tue, 28 Apr 2026 21:35:51 +0200 Subject: [PATCH 06/31] chore: rename functions (to make upcoming pr diff easier to parse) --- frontend/src/ts/elements/caret.ts | 2 +- frontend/src/ts/input/handlers/before-delete.ts | 2 +- frontend/src/ts/input/handlers/before-insert-text.ts | 6 +++--- frontend/src/ts/input/handlers/delete.ts | 2 +- frontend/src/ts/input/handlers/insert-text.ts | 10 +++++----- frontend/src/ts/input/helpers/word-navigation.ts | 6 +++--- frontend/src/ts/input/listeners/input.ts | 2 +- frontend/src/ts/test/funbox/funbox-functions.ts | 8 +++++--- frontend/src/ts/test/pace-caret.ts | 6 +++--- frontend/src/ts/test/practise-words.ts | 6 +++--- frontend/src/ts/test/test-logic.ts | 12 ++++++------ frontend/src/ts/test/test-stats.ts | 2 +- frontend/src/ts/test/test-timer.ts | 4 +++- frontend/src/ts/test/test-ui.ts | 12 ++++++------ frontend/src/ts/test/test-words.ts | 8 ++++---- 15 files changed, 46 insertions(+), 42 deletions(-) diff --git a/frontend/src/ts/elements/caret.ts b/frontend/src/ts/elements/caret.ts index 417c5ab8bd63..15c326971653 100644 --- a/frontend/src/ts/elements/caret.ts +++ b/frontend/src/ts/elements/caret.ts @@ -287,7 +287,7 @@ export class Caret { const word = wordsCache.qs( `.word[data-wordindex="${options.wordIndex}"]`, ); - const wordText = TestWords.words.get(options.wordIndex) ?? ""; + const wordText = TestWords.words.getText(options.wordIndex) ?? ""; const wordLength = Array.from(wordText).length; // caret can be either on the left side of the target letter or the right diff --git a/frontend/src/ts/input/handlers/before-delete.ts b/frontend/src/ts/input/handlers/before-delete.ts index 12784dfdacb0..867a2525dc2e 100644 --- a/frontend/src/ts/input/handlers/before-delete.ts +++ b/frontend/src/ts/input/handlers/before-delete.ts @@ -43,7 +43,7 @@ export function onBeforeDelete(event: InputEvent): void { const confidence = Config.confidenceMode; const previousWordCorrect = (TestInput.input.get(TestState.activeWordIndex - 1) ?? "") === - TestWords.words.get(TestState.activeWordIndex - 1); + TestWords.words.getText(TestState.activeWordIndex - 1); if (confidence === "on" && inputIsEmpty && !previousWordCorrect) { event.preventDefault(); diff --git a/frontend/src/ts/input/handlers/before-insert-text.ts b/frontend/src/ts/input/handlers/before-insert-text.ts index 9c582fd28e3c..1bcc44aa3172 100644 --- a/frontend/src/ts/input/handlers/before-insert-text.ts +++ b/frontend/src/ts/input/handlers/before-insert-text.ts @@ -34,7 +34,7 @@ export function onBeforeInsertText(data: string): boolean { const shouldInsertSpaceAsCharacter = shouldInsertSpaceCharacter({ data, inputValue, - targetWord: TestWords.words.getCurrent(), + targetWord: TestWords.words.getCurrentText(), }); //prevent space from being inserted if input is empty @@ -60,7 +60,7 @@ export function onBeforeInsertText(data: string): boolean { // block input if the word is too long const inputLimit = - Config.mode === "zen" ? 30 : TestWords.words.getCurrent().length + 20; + Config.mode === "zen" ? 30 : TestWords.words.getCurrentText().length + 20; const overLimit = TestInput.input.current.length >= inputLimit; if (overLimit && (shouldInsertSpaceAsCharacter === true || !dataIsSpace)) { console.error("Hitting word limit"); @@ -71,7 +71,7 @@ export function onBeforeInsertText(data: string): boolean { // this will not work for the first word of each line, but that has a low chance of happening const dataIsNotFalsy = data !== null && data !== ""; const inputIsLongerThanOrEqualToWord = - TestInput.input.current.length >= TestWords.words.getCurrent().length; + TestInput.input.current.length >= TestWords.words.getCurrentText().length; if ( !SlowTimer.get() && // don't do this check if slow timer is active diff --git a/frontend/src/ts/input/handlers/delete.ts b/frontend/src/ts/input/handlers/delete.ts index 0ee4213d8e3f..0adf0b8ff06b 100644 --- a/frontend/src/ts/input/handlers/delete.ts +++ b/frontend/src/ts/input/handlers/delete.ts @@ -20,7 +20,7 @@ export function onDelete(inputType: DeleteInputType): void { const beforeDeleteOnlyTabs = /^\t*$/.test(inputBeforeDelete); const allTabsCorrect = TestWords.words - .getCurrent() + .getCurrentText() .startsWith(TestInput.input.current); //special check for code languages diff --git a/frontend/src/ts/input/handlers/insert-text.ts b/frontend/src/ts/input/handlers/insert-text.ts index 6c0eef3c833b..ff19d06333e9 100644 --- a/frontend/src/ts/input/handlers/insert-text.ts +++ b/frontend/src/ts/input/handlers/insert-text.ts @@ -85,7 +85,7 @@ export async function onInsertText(options: OnInsertTextParams): Promise { const charOverride = charOverrides.get(options.data); if ( charOverride !== undefined && - TestWords.words.getCurrent()[TestInput.input.current.length] !== + TestWords.words.getCurrentText()[TestInput.input.current.length] !== options.data ) { // replace the data with the override @@ -101,7 +101,7 @@ export async function onInsertText(options: OnInsertTextParams): Promise { // input and target word const testInput = TestInput.input.current; - const currentWord = TestWords.words.getCurrent(); + const currentWord = TestWords.words.getCurrentText(); // if the character is visually equal, replace it with the target character // this ensures all future equivalence checks work correctly @@ -151,7 +151,7 @@ export async function onInsertText(options: OnInsertTextParams): Promise { // word navigation check const noSpaceForce = isFunboxActiveWithProperty("nospace") && - (testInput + data).length === TestWords.words.getCurrent().length; + (testInput + data).length === TestWords.words.getCurrentText().length; const shouldGoToNextWord = ((charIsSpace || charIsNewline) && !shouldInsertSpace) || noSpaceForce; @@ -169,7 +169,7 @@ export async function onInsertText(options: OnInsertTextParams): Promise { TestInput.pushKeypressWord(wordIndex); if (!correct) { TestInput.incrementKeypressErrors(); - TestInput.pushMissedWord(TestWords.words.getCurrent()); + TestInput.pushMissedWord(TestWords.words.getCurrentText()); } if (Config.keymapMode === "react") { flash(data, correct); @@ -236,7 +236,7 @@ export async function onInsertText(options: OnInsertTextParams): Promise { */ //this COULD be the next word because we are awaiting goToNextWord - const nextWord = TestWords.words.getCurrent(); + const nextWord = TestWords.words.getCurrentText(); const doesNextWordHaveTab = /^\t+/.test(nextWord); const isCurrentCharTab = nextWord[TestInput.input.current.length] === "\t"; diff --git a/frontend/src/ts/input/helpers/word-navigation.ts b/frontend/src/ts/input/helpers/word-navigation.ts index fdb0e298bca2..897d115e65c0 100644 --- a/frontend/src/ts/input/helpers/word-navigation.ts +++ b/frontend/src/ts/input/helpers/word-navigation.ts @@ -60,9 +60,9 @@ export async function goToNextWord({ TestInput.pushBurstToHistory(burst); ret.lastBurst = burst; - PaceCaret.handleSpace(correctInsert, TestWords.words.getCurrent()); + PaceCaret.handleSpace(correctInsert, TestWords.words.getCurrentText()); - Funbox.toggleScript(TestWords.words.get(TestState.activeWordIndex + 1)); + Funbox.toggleScript(TestWords.words.getText(TestState.activeWordIndex + 1)); TestInput.input.pushHistory(); TestInput.corrected.pushHistory(); @@ -111,7 +111,7 @@ export function goToPreviousWord( TestState.decreaseActiveWordIndex(); TestInput.corrected.popHistory(); - Funbox.toggleScript(TestWords.words.get(TestState.activeWordIndex)); + Funbox.toggleScript(TestWords.words.getText(TestState.activeWordIndex)); const nospaceEnabled = isFunboxActiveWithProperty("nospace"); diff --git a/frontend/src/ts/input/listeners/input.ts b/frontend/src/ts/input/listeners/input.ts index 51855bc55c34..cc2b884d4dcf 100644 --- a/frontend/src/ts/input/listeners/input.ts +++ b/frontend/src/ts/input/listeners/input.ts @@ -125,7 +125,7 @@ inputEl.addEventListener("input", async (event) => { const inputPlusComposition = TestInput.input.current + (CompositionState.getData() ?? ""); const inputPlusCompositionIsCorrect = - TestWords.words.getCurrent() === inputPlusComposition; + TestWords.words.getCurrentText() === inputPlusComposition; // composition quick end // if the user typed the entire word correctly but is still in composition diff --git a/frontend/src/ts/test/funbox/funbox-functions.ts b/frontend/src/ts/test/funbox/funbox-functions.ts index 1c65da0b870a..dfd315ae4a5e 100644 --- a/frontend/src/ts/test/funbox/funbox-functions.ts +++ b/frontend/src/ts/test/funbox/funbox-functions.ts @@ -54,7 +54,7 @@ export type FunboxFunctions = { async function readAheadHandleKeydown(event: KeyboardEvent): Promise { const inputCurrentChar = (TestInput.input.current ?? "").slice(-1); const wordCurrentChar = TestWords.words - .getCurrent() + .getCurrentText() .slice(TestInput.input.current.length - 1, TestInput.input.current.length); const isCorrect = inputCurrentChar === wordCurrentChar; @@ -63,7 +63,7 @@ async function readAheadHandleKeydown(event: KeyboardEvent): Promise { !isCorrect && (TestInput.input.current !== "" || TestInput.input.getHistory(TestState.activeWordIndex - 1) !== - TestWords.words.get(TestState.activeWordIndex - 1) || + TestWords.words.getText(TestState.activeWordIndex - 1) || Config.freedomMode) ) { qs("#words")?.addClass("read_ahead_disabled"); @@ -452,7 +452,9 @@ const list: Partial> = { } setTimeout(() => { highlight( - TestWords.words.getCurrent().charAt(TestInput.input.current.length), + TestWords.words + .getCurrentText() + .charAt(TestInput.input.current.length), ); }, 1); } diff --git a/frontend/src/ts/test/pace-caret.ts b/frontend/src/ts/test/pace-caret.ts index d934c71c0264..064d8a29428a 100644 --- a/frontend/src/ts/test/pace-caret.ts +++ b/frontend/src/ts/test/pace-caret.ts @@ -195,7 +195,7 @@ function incrementLetterIndex(): void { settings.currentLetterIndex++; if ( settings.currentLetterIndex >= - TestWords.words.get(settings.currentWordIndex).length + 1 + TestWords.words.getText(settings.currentWordIndex).length + 1 ) { //go to the next word settings.currentLetterIndex = 0; @@ -208,7 +208,7 @@ function incrementLetterIndex(): void { if (settings.currentLetterIndex <= -2) { //go to the previous word settings.currentLetterIndex = - TestWords.words.get(settings.currentWordIndex - 1).length - 1; + TestWords.words.getText(settings.currentWordIndex - 1).length - 1; settings.currentWordIndex--; } settings.correction++; @@ -218,7 +218,7 @@ function incrementLetterIndex(): void { settings.currentLetterIndex++; if ( settings.currentLetterIndex >= - TestWords.words.get(settings.currentWordIndex).length + TestWords.words.getText(settings.currentWordIndex).length ) { //go to the next word settings.currentLetterIndex = 0; diff --git a/frontend/src/ts/test/practise-words.ts b/frontend/src/ts/test/practise-words.ts index 6bb97b5e023d..912f630faf99 100644 --- a/frontend/src/ts/test/practise-words.ts +++ b/frontend/src/ts/test/practise-words.ts @@ -55,7 +55,7 @@ export function init( let sortableMissedBiwords: [string, string, number][] = []; if (missed === "biwords") { for (let i = 0; i < TestWords.words.length; i++) { - const missedWord = TestWords.words.get(i); + const missedWord = TestWords.words.getText(i); const missedWordCount = TestInput.missedWords[missedWord]; if (missedWordCount !== undefined) { if (i === 0) { @@ -63,7 +63,7 @@ export function init( } else { sortableMissedBiwords.push([ missedWord, - TestWords.words.get(i - 1), + TestWords.words.getText(i - 1), missedWordCount, ]); } @@ -87,7 +87,7 @@ export function init( let sortableSlowWords: [string, number][] = []; if (slow) { const typedWords = TestWords.words - .get() + .getText() .slice(0, TestInput.input.getHistory().length - 1); sortableSlowWords = typedWords.map((e, i) => [ diff --git a/frontend/src/ts/test/test-logic.ts b/frontend/src/ts/test/test-logic.ts index 3ce10c09a91a..fb864c967b81 100644 --- a/frontend/src/ts/test/test-logic.ts +++ b/frontend/src/ts/test/test-logic.ts @@ -582,12 +582,12 @@ async function init(): Promise { Arrays.nthElementFromArray( // ignoring for now but this might need a different approach // oxlint-disable-next-line no-misused-spread - [...TestWords.words.getCurrent()], + [...TestWords.words.getCurrentText()], 0, ) as string, ); } - Funbox.toggleScript(TestWords.words.getCurrent()); + Funbox.toggleScript(TestWords.words.getCurrentText()); TestUI.setLigatures(allLigatures ?? language.ligatures ?? false); const isLanguageRTL = allRightToLeft ?? language.rightToLeft ?? false; @@ -684,8 +684,8 @@ export async function addWord(): Promise { const randomWord = await WordsGenerator.getNextWord( TestWords.words.length, bound, - TestWords.words.get(TestWords.words.length - 1), - TestWords.words.get(TestWords.words.length - 2), + TestWords.words.getText(TestWords.words.length - 1), + TestWords.words.getText(TestWords.words.length - 2), ); TestWords.words.push(randomWord.word, randomWord.sectionIndex); @@ -1139,7 +1139,7 @@ export async function finish(difficultyFailed = false): Promise { const lastWordInputLength = history[wordIndex]?.length ?? 0; - if (lastWordInputLength < TestWords.words.get(wordIndex).length) { + if (lastWordInputLength < TestWords.words.getText(wordIndex).length) { historyLength--; } @@ -1470,7 +1470,7 @@ configEvent.subscribe(({ key, newValue, nosave }) => { Arrays.nthElementFromArray( // ignoring for now but this might need a different approach // oxlint-disable-next-line no-misused-spread - [...TestWords.words.getCurrent()], + [...TestWords.words.getCurrentText()], 0, ) as string, ); diff --git a/frontend/src/ts/test/test-stats.ts b/frontend/src/ts/test/test-stats.ts index 392683b16781..64b28ba40540 100644 --- a/frontend/src/ts/test/test-stats.ts +++ b/frontend/src/ts/test/test-stats.ts @@ -275,7 +275,7 @@ function getTargetWords(): string[] { targetWords.push( Config.mode === "zen" ? TestInput.input.current - : TestWords.words.getCurrent(), + : TestWords.words.getCurrentText(), ); } diff --git a/frontend/src/ts/test/test-timer.ts b/frontend/src/ts/test/test-timer.ts index 26cf66b694e3..f6776752332d 100644 --- a/frontend/src/ts/test/test-timer.ts +++ b/frontend/src/ts/test/test-timer.ts @@ -142,7 +142,9 @@ function layoutfluid(): void { if (Config.keymapMode === "next") { setTimeout(() => { highlight( - TestWords.words.getCurrent().charAt(TestInput.input.current.length), + TestWords.words + .getCurrentText() + .charAt(TestInput.input.current.length), ); }, 1); } diff --git a/frontend/src/ts/test/test-ui.ts b/frontend/src/ts/test/test-ui.ts index 71e3ca0fa80c..0ffe1aaa266b 100644 --- a/frontend/src/ts/test/test-ui.ts +++ b/frontend/src/ts/test/test-ui.ts @@ -228,7 +228,7 @@ async function joinOverlappingHints( hintElements: HTMLCollection, ): Promise { const [isWordRightToLeft] = Strings.isWordRightToLeft( - TestWords.words.getCurrent(), + TestWords.words.getCurrentText(), TestState.isLanguageRightToLeft, TestState.isDirectionReversed, ); @@ -502,7 +502,7 @@ function showWords(): void { } else { let wordsHTML = ""; for (let i = 0; i < TestWords.words.length; i++) { - wordsHTML += buildWordHTML(TestWords.words.get(i), i); + wordsHTML += buildWordHTML(TestWords.words.getText(i), i); } wordsEl.setHtml(wordsHTML); } @@ -739,7 +739,7 @@ export async function updateWordLetters({ `test-ui.updateWordLetters.${wordIndex}`, async () => { pendingWordData.delete(wordIndex); - const currentWord = TestWords.words.get(wordIndex); + const currentWord = TestWords.words.getText(wordIndex); if (!currentWord && Config.mode !== "zen") return; let ret = ""; const wordAtIndex = getWordElement(wordIndex); @@ -1326,7 +1326,7 @@ async function loadWordsHistory(): Promise { for (let i = 0; i < inputHistoryLength + 2; i++) { const input = TestInput.input.getHistory(i); const corrected = TestInput.corrected.getHistory(i); - const word = TestWords.words.get(i) ?? ""; + const word = TestWords.words.getText(i) ?? ""; const koreanRegex = /[\uac00-\ud7af]|[\u1100-\u11ff]|[\u3130-\u318f]|[\ua960-\ua97f]|[\ud7b0-\ud7ff]/; const containsKorean = @@ -1751,7 +1751,7 @@ function afterAnyTestInput( if (Config.keymapMode === "next") { highlight( - TestWords.words.getCurrent().charAt(TestInput.input.current.length), + TestWords.words.getCurrentText().charAt(TestInput.input.current.length), ); } @@ -1955,7 +1955,7 @@ qs(".pageTest #copyWordsListButton")?.on("click", async () => { words = TestInput.input.getHistory().join(" "); } else { words = TestWords.words - .get() + .getText() .slice(0, TestInput.input.getHistory().length) .join(" "); } diff --git a/frontend/src/ts/test/test-words.ts b/frontend/src/ts/test/test-words.ts index 1f618e0fd0fe..5ab6bf4337a1 100644 --- a/frontend/src/ts/test/test-words.ts +++ b/frontend/src/ts/test/test-words.ts @@ -12,9 +12,9 @@ class Words { this.length = 0; } - get(i?: undefined, raw?: boolean): string[]; - get(i: number, raw?: boolean): string; - get(i?: number, raw = false): string | string[] | undefined { + getText(i?: undefined, raw?: boolean): string[]; + getText(i: number, raw?: boolean): string; + getText(i?: number, raw = false): string | string[] | undefined { if (i === undefined) { return this.list; } else { @@ -25,7 +25,7 @@ class Words { } } } - getCurrent(): string { + getCurrentText(): string { return this.list[TestState.activeWordIndex] ?? ""; } getLast(): string { From 9735f20480b04c707ed5e582cafd06eb6b6769af Mon Sep 17 00:00:00 2001 From: Nad Alaba <37968805+nadalaba@users.noreply.github.com> Date: Tue, 28 Apr 2026 23:15:00 +0300 Subject: [PATCH 07/31] fix: add @types/node to packages devDependencies (@nadalaba) (#7789) after `"types": ["node"]` was added to the base tsconfig on e7cd1a0, running `pnpm ts-check --force` fails: > @monkeytype/tsup-config:ts-check: error TS2688: Cannot find type definition file for 'node'. @monkeytype/tsup-config:ts-check: The file is in the program because: @monkeytype/tsup-config:ts-check: Entry point of type library 'node' specified in compilerOptions Co-authored-by: Jack --- packages/contracts/package.json | 1 + packages/funbox/package.json | 1 + packages/schemas/package.json | 1 + packages/tsup-config/package.json | 1 + packages/util/package.json | 1 + pnpm-lock.yaml | 15 +++++++++++++++ 6 files changed, 20 insertions(+) diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 2bbc22b0a9d5..29a1a4bb2543 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -28,6 +28,7 @@ "devDependencies": { "@monkeytype/tsup-config": "workspace:*", "@monkeytype/typescript-config": "workspace:*", + "@types/node": "24.9.1", "madge": "8.0.0", "oxlint": "1.60.0", "oxlint-tsgolint": "0.21.0", diff --git a/packages/funbox/package.json b/packages/funbox/package.json index 5bde8e1191c4..797906b70e07 100644 --- a/packages/funbox/package.json +++ b/packages/funbox/package.json @@ -24,6 +24,7 @@ "devDependencies": { "@monkeytype/tsup-config": "workspace:*", "@monkeytype/typescript-config": "workspace:*", + "@types/node": "24.9.1", "madge": "8.0.0", "oxlint": "1.60.0", "oxlint-tsgolint": "0.21.0", diff --git a/packages/schemas/package.json b/packages/schemas/package.json index 2c44a664bf86..0362db05e9ec 100644 --- a/packages/schemas/package.json +++ b/packages/schemas/package.json @@ -25,6 +25,7 @@ "devDependencies": { "@monkeytype/tsup-config": "workspace:*", "@monkeytype/typescript-config": "workspace:*", + "@types/node": "24.9.1", "madge": "8.0.0", "oxlint": "1.60.0", "oxlint-tsgolint": "0.21.0", diff --git a/packages/tsup-config/package.json b/packages/tsup-config/package.json index 93edc2852ef1..783fa60c865b 100644 --- a/packages/tsup-config/package.json +++ b/packages/tsup-config/package.json @@ -17,6 +17,7 @@ }, "devDependencies": { "@monkeytype/typescript-config": "workspace:*", + "@types/node": "24.9.1", "oxlint": "1.60.0", "oxlint-tsgolint": "0.21.0", "typescript": "6.0.2" diff --git a/packages/util/package.json b/packages/util/package.json index 3df477f82817..60b072253c06 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -19,6 +19,7 @@ "devDependencies": { "@monkeytype/tsup-config": "workspace:*", "@monkeytype/typescript-config": "workspace:*", + "@types/node": "24.9.1", "madge": "8.0.0", "oxlint": "1.60.0", "oxlint-tsgolint": "0.21.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 20abea3d7cc9..040977f214aa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -657,6 +657,9 @@ importers: '@monkeytype/typescript-config': specifier: workspace:* version: link:../typescript-config + '@types/node': + specifier: 24.9.1 + version: 24.9.1 madge: specifier: 8.0.0 version: 8.0.0(typescript@6.0.2) @@ -691,6 +694,9 @@ importers: '@monkeytype/typescript-config': specifier: workspace:* version: link:../typescript-config + '@types/node': + specifier: 24.9.1 + version: 24.9.1 madge: specifier: 8.0.0 version: 8.0.0(typescript@6.0.2) @@ -750,6 +756,9 @@ importers: '@monkeytype/typescript-config': specifier: workspace:* version: link:../typescript-config + '@types/node': + specifier: 24.9.1 + version: 24.9.1 madge: specifier: 8.0.0 version: 8.0.0(typescript@6.0.2) @@ -778,6 +787,9 @@ importers: '@monkeytype/typescript-config': specifier: workspace:* version: link:../typescript-config + '@types/node': + specifier: 24.9.1 + version: 24.9.1 oxlint: specifier: 1.60.0 version: 1.60.0(oxlint-tsgolint@0.21.0) @@ -798,6 +810,9 @@ importers: '@monkeytype/typescript-config': specifier: workspace:* version: link:../typescript-config + '@types/node': + specifier: 24.9.1 + version: 24.9.1 madge: specifier: 8.0.0 version: 8.0.0(typescript@6.0.2) From 605a32d2569214730033f35a03f05a3c3bd00194 Mon Sep 17 00:00:00 2001 From: Nad Alaba <37968805+nadalaba@users.noreply.github.com> Date: Tue, 28 Apr 2026 23:22:03 +0300 Subject: [PATCH 08/31] fix(test-ui): word jumping to 3rd line (@nadalaba) (#7790) ![lineJump](https://github.com/user-attachments/assets/c46fe253-921f-4c56-8845-9e85b91d271d) Co-authored-by: Jack --- frontend/src/ts/test/test-ui.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/frontend/src/ts/test/test-ui.ts b/frontend/src/ts/test/test-ui.ts index 0ffe1aaa266b..c4a7a58711c2 100644 --- a/frontend/src/ts/test/test-ui.ts +++ b/frontend/src/ts/test/test-ui.ts @@ -1704,15 +1704,17 @@ export function getActiveWordTopAndHeightWithDifferentData(data: string): { if (!activeWord) throw new Error("No active word element found"); + const lettersEls = activeWord.qsa("letter"); + const domLettersCount = lettersEls.length; const nodes = []; - for (let i = activeWord.getChildren().length; i < data.length; i++) { + for (let i = domLettersCount; i < data.length; i++) { const tempLetter = document.createElement("letter"); const displayData = data[i] === " " ? "_" : data[i]; tempLetter.textContent = displayData as string; nodes.push(tempLetter); } - activeWord.append(nodes); + lettersEls[domLettersCount - 1]?.native.after(...nodes); const top = activeWord.getOffsetTop(); const height = activeWord.getOffsetHeight(); From 0767da48a2d1e6eae4c913a7df7999d83a44de15 Mon Sep 17 00:00:00 2001 From: Oussama <196547922+lacunepoetique@users.noreply.github.com> Date: Wed, 29 Apr 2026 10:34:02 +0200 Subject: [PATCH 09/31] fix(language): remove exclamation marks in french_10k (@lacunepoetique) (#7836) ### Description Clean french_10k words by removing exclamation marks from words. ### Checks - [x] Check if any open issues are related to this PR; if so, be sure to tag them below. - [x] Make sure the PR title follows the Conventional Commits standard. (https://www.conventionalcommits.org for more info) - [x] Make sure to include your GitHub username prefixed with @ inside parentheses at the end of the PR title. --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- frontend/static/languages/french_10k.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/frontend/static/languages/french_10k.json b/frontend/static/languages/french_10k.json index 22dd85f18bce..a7279740a8df 100644 --- a/frontend/static/languages/french_10k.json +++ b/frontend/static/languages/french_10k.json @@ -2312,7 +2312,7 @@ "réduit", "ambigu", "wagon", - "déballe!", + "déballe", "obèse", "adultes", "vagabond", @@ -3957,7 +3957,6 @@ "discrédit", "corrections", "travaillait", - "assez!", "transporte", "positif", "dixième", @@ -5476,7 +5475,6 @@ "absolutisme", "frénésie", "dorage", - "feu!", "verrou", "outrage", "cash", From 74ae09e25ef81b1f72b87b45d39ce3589cc224f9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 Apr 2026 10:38:58 +0200 Subject: [PATCH 10/31] chore(deps): bump nodemailer from 8.0.4 to 8.0.5 (#7794) Bumps [nodemailer](https://github.com/nodemailer/nodemailer) from 8.0.4 to 8.0.5.
Release notes

Sourced from nodemailer's releases.

v8.0.5

8.0.5 (2026-04-07)

Bug Fixes

  • decode SMTP server responses as UTF-8 at line boundary (95876b1)
  • sanitize CRLF in transport name option to prevent SMTP command injection (GHSA-vvjj-xcjg-gr5g) (0a43876)
Changelog

Sourced from nodemailer's changelog.

8.0.5 (2026-04-07)

Bug Fixes

  • decode SMTP server responses as UTF-8 at line boundary (95876b1)
  • sanitize CRLF in transport name option to prevent SMTP command injection (GHSA-vvjj-xcjg-gr5g) (0a43876)
Commits
  • 202cfb3 chore(master): release 8.0.5 (#1809)
  • b634abf docs: add CLAUDE.md with project conventions and release process
  • 95876b1 fix: decode SMTP server responses as UTF-8 at line boundary
  • 0a43876 fix: sanitize CRLF in transport name option to prevent SMTP command injection...
  • 08e59e6 chore: update dev dependencies
  • See full diff in compare view

Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- backend/package.json | 2 +- pnpm-lock.yaml | 396 +++++++++++++++++++++++++------------------ 2 files changed, 228 insertions(+), 170 deletions(-) diff --git a/backend/package.json b/backend/package.json index 0e3e6788ed5b..204d0ee16471 100644 --- a/backend/package.json +++ b/backend/package.json @@ -45,7 +45,7 @@ "mjml": "4.15.0", "mongodb": "6.3.0", "mustache": "4.2.0", - "nodemailer": "8.0.4", + "nodemailer": "8.0.5", "object-hash": "3.0.0", "prom-client": "15.1.3", "rate-limiter-flexible": "5.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 040977f214aa..343b911ca8b6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,7 +25,7 @@ importers: version: 24.9.1 '@vitest/coverage-v8': specifier: 4.0.15 - version: 4.0.15(vitest@4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 4.0.15(vitest@4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))) caniuse-lite: specifier: 1.0.30001778 version: 1.0.30001778 @@ -70,7 +70,7 @@ importers: version: 2.7.5 vitest: specifier: 4.1.0 - version: 4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) yaml: specifier: 2.8.3 version: 2.8.3 @@ -153,8 +153,8 @@ importers: specifier: 4.2.0 version: 4.2.0 nodemailer: - specifier: 8.0.4 - version: 8.0.4 + specifier: 8.0.5 + version: 8.0.5 object-hash: specifier: 3.0.0 version: 3.0.0 @@ -245,7 +245,7 @@ importers: version: 10.0.0 '@vitest/coverage-v8': specifier: 4.0.15 - version: 4.0.15(vitest@4.1.0(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))) + version: 4.0.15(vitest@4.1.0(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.2))) concurrently: specifier: 8.2.2 version: 8.2.2 @@ -275,7 +275,7 @@ importers: version: 6.0.2 vitest: specifier: 4.1.0 - version: 4.1.0(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.0(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.2)) yaml: specifier: 2.8.2 version: 2.8.2 @@ -444,7 +444,7 @@ importers: version: 0.8.10(solid-js@1.9.10) '@tailwindcss/vite': specifier: 4.2.1 - version: 4.2.1(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.2.1(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) '@tanstack/eslint-plugin-query': specifier: 5.91.4 version: 5.91.4(eslint@9.39.1(jiti@2.6.1))(typescript@6.0.2) @@ -483,7 +483,7 @@ importers: version: 5.0.2 '@vitest/coverage-v8': specifier: 4.0.15 - version: 4.0.15(vitest@4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 4.0.15(vitest@4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))) autoprefixer: specifier: 10.4.27 version: 10.4.27(postcss@8.5.8) @@ -537,7 +537,7 @@ importers: version: 1.70.0 solid-devtools: specifier: 0.34.5 - version: 0.34.5(solid-js@1.9.10)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 0.34.5(solid-js@1.9.10)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) solid-js: specifier: 1.9.10 version: 1.9.10 @@ -558,7 +558,7 @@ importers: version: 3.0.0 vite: specifier: 8.0.5 - version: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) vite-bundle-visualizer: specifier: 1.2.1 version: 1.2.1(rollup@2.80.0) @@ -567,19 +567,19 @@ importers: version: 1.1.2 vite-plugin-inspect: specifier: 11.3.3 - version: 11.3.3(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 11.3.3(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) vite-plugin-minify: specifier: 2.1.0 - version: 2.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) vite-plugin-pwa: specifier: 1.1.0 - version: 1.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0) + version: 1.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0) vite-plugin-solid: specifier: 2.11.11 - version: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.10)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.10)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) vitest: specifier: 4.1.0 - version: 4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) frontend/storybook: dependencies: @@ -595,7 +595,7 @@ importers: version: 10.2.16(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@storybook/addon-docs': specifier: ^10.2.14 - version: 10.2.16(@types/react@19.2.14)(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 10.2.16(@types/react@19.2.14)(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) '@storybook/addon-links': specifier: ^10.2.14 version: 10.2.16(react@18.3.1)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) @@ -604,22 +604,22 @@ importers: version: 10.2.16(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@storybook/addon-vitest': specifier: ^10.2.14 - version: 10.2.16(@vitest/browser-playwright@4.0.18)(@vitest/browser@4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0))(@vitest/runner@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vitest@4.1.0) + version: 10.2.16(@vitest/browser-playwright@4.0.18)(@vitest/browser@4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0))(@vitest/runner@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vitest@4.1.0) '@storybook/builder-vite': specifier: ^10.2.14 - version: 10.2.16(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 10.2.16(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) '@tailwindcss/vite': specifier: ^4.2.1 - version: 4.2.1(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.2.1(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/browser': specifier: ^4.0.18 - version: 4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0) + version: 4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0) '@vitest/browser-playwright': specifier: ^4.0.18 - version: 4.0.18(playwright@1.58.2)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0) + version: 4.0.18(playwright@1.58.2)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0) '@vitest/coverage-v8': specifier: ^4.0.18 - version: 4.0.18(@vitest/browser@4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0))(vitest@4.1.0) + version: 4.0.18(@vitest/browser@4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0))(vitest@4.1.0) playwright: specifier: ^1.58.2 version: 1.58.2 @@ -631,13 +631,13 @@ importers: version: 10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) storybook-solidjs-vite: specifier: ^10.0.9 - version: 10.0.9(@testing-library/jest-dom@6.9.1)(esbuild@0.27.7)(rollup@4.60.1)(solid-js@1.9.11)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@6.0.2)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 10.0.9(@testing-library/jest-dom@6.9.1)(esbuild@0.27.7)(rollup@4.60.1)(solid-js@1.9.11)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@6.0.2)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) vite: specifier: ^7.3.2 - version: 7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) vitest: specifier: ^4.1.0 - version: 4.1.0(@types/node@24.9.1)(@vitest/browser-playwright@4.0.18)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(@types/node@24.9.1)(@vitest/browser-playwright@4.0.18)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) packages/contracts: dependencies: @@ -677,7 +677,7 @@ importers: version: 6.0.2 vitest: specifier: 4.1.0 - version: 4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.25.11)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) packages/funbox: dependencies: @@ -714,7 +714,7 @@ importers: version: 6.0.2 vitest: specifier: 4.1.0 - version: 4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) packages/oxlint-config: devDependencies: @@ -776,7 +776,7 @@ importers: version: 6.0.2 vitest: specifier: 4.1.0 - version: 4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) packages/tsup-config: dependencies: @@ -830,7 +830,7 @@ importers: version: 6.0.2 vitest: specifier: 4.1.0 - version: 4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) zod: specifier: 3.23.8 version: 3.23.8 @@ -4850,11 +4850,11 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ajv@6.14.0: - resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} - ajv@8.18.0: - resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} animejs@4.2.2: resolution: {integrity: sha512-Ys3RuvLdAeI14fsdKCQy7ytu4057QX6Bb7m4jwmfd6iKmUmLquTwk1ut0e4NtRQgCeq/s2Lv5+oMBjz6c7ZuIg==} @@ -5148,7 +5148,7 @@ packages: basic-ftp@5.0.5: resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} engines: {node: '>=10.0.0'} - deprecated: Security vulnerability fixed in 5.2.0, please upgrade + deprecated: Security vulnerability fixed in 5.2.1, please upgrade bcrypt-pbkdf@1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} @@ -7018,6 +7018,10 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hasown@2.0.3: + resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} + engines: {node: '>= 0.4'} + he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true @@ -7669,6 +7673,9 @@ packages: jsonfile@6.2.0: resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + jsonfile@6.2.1: + resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} + jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} @@ -8660,8 +8667,8 @@ packages: resolution: {integrity: sha512-1uiY543L+N7Og4yswvlm5NCKgPKDEXd9AUR9Jh3gen6oOeBsesr6LqhXom1er3eRzSUcVRWXzhv8tSNrIfGHKw==} engines: {node: '>=18'} - nodemailer@8.0.4: - resolution: {integrity: sha512-k+jf6N8PfQJ0Fe8ZhJlgqU5qJU44Lpvp2yvidH3vp1lPnVQMgi4yEEMPXg5eJS1gFIJTVq1NHBk7Ia9ARdSBdQ==} + nodemailer@8.0.5: + resolution: {integrity: sha512-0PF8Yb1yZuQfQbq+5/pZJrtF6WQcjTd5/S4JOHs9PGFxuTqoB/icwuB44pOdURHJbRKX1PPoJZtY7R4VUoCC8w==} engines: {node: '>=6.0.0'} nodemon@3.1.14: @@ -9551,6 +9558,11 @@ packages: engines: {node: '>= 0.4'} hasBin: true + resolve@1.22.12: + resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} + engines: {node: '>= 0.4'} + hasBin: true + restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} @@ -9650,8 +9662,8 @@ packages: rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + safe-array-concat@1.1.4: + resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} engines: {node: '>=0.4'} safe-buffer@5.1.2: @@ -10399,8 +10411,8 @@ packages: engines: {node: '>=10'} hasBin: true - terser@5.46.1: - resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==} + terser@5.46.2: + resolution: {integrity: sha512-uxfo9fPcSgLDYob/w1FuL0c99MWiJDnv+5qXSQc5+Ki5NjVNsYi66INnMFBjf6uFz6OnX12piJQPF4IpjJTNTw==} engines: {node: '>=10'} hasBin: true @@ -11444,9 +11456,9 @@ snapshots: ts-deepmerge: 6.2.1 zod: 3.23.8 - '@apideck/better-ajv-errors@0.3.7(ajv@8.18.0)': + '@apideck/better-ajv-errors@0.3.7(ajv@8.20.0)': dependencies: - ajv: 8.18.0 + ajv: 8.20.0 jsonpointer: 5.0.1 leven: 3.1.0 @@ -11586,7 +11598,7 @@ snapshots: '@babel/helper-plugin-utils': 7.28.6 debug: 4.4.3(supports-color@5.5.0) lodash.debounce: 4.0.8 - resolve: 1.22.11 + resolve: 1.22.12 transitivePeerDependencies: - supports-color @@ -12273,7 +12285,7 @@ snapshots: '@commitlint/config-validator@17.8.1': dependencies: '@commitlint/types': 17.8.1 - ajv: 8.18.0 + ajv: 8.20.0 '@commitlint/ensure@17.8.1': dependencies: @@ -12312,7 +12324,7 @@ snapshots: '@types/node': 20.5.1 chalk: 4.1.2 cosmiconfig: 8.3.6(typescript@5.9.3) - cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.9.3))(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.9.3))(typescript@5.9.3) + cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.9.3))(ts-node@10.9.2(@types/node@24.9.1)(typescript@5.9.3))(typescript@5.9.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -12753,7 +12765,7 @@ snapshots: '@eslint/eslintrc@3.3.3': dependencies: - ajv: 6.14.0 + ajv: 6.15.0 debug: 4.4.3(supports-color@5.5.0) espree: 10.4.0 globals: 14.0.0 @@ -12794,7 +12806,7 @@ snapshots: '@fastify/ajv-compiler@1.1.0': dependencies: - ajv: 6.14.0 + ajv: 6.15.0 '@fastify/busboy@1.2.1': dependencies: @@ -13462,11 +13474,11 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@joshwooding/vite-plugin-react-docgen-typescript@0.6.4(typescript@6.0.2)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.6.4(typescript@6.0.2)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))': dependencies: glob: 13.0.6 react-docgen-typescript: 2.4.0(typescript@6.0.2) - vite: 7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) optionalDependencies: typescript: 6.0.2 @@ -14165,7 +14177,7 @@ snapshots: '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 - resolve: 1.22.11 + resolve: 1.22.12 optionalDependencies: rollup: 2.80.0 @@ -14179,7 +14191,7 @@ snapshots: dependencies: serialize-javascript: 6.0.2 smob: 1.6.1 - terser: 5.46.1 + terser: 5.46.2 optionalDependencies: rollup: 2.80.0 @@ -14681,10 +14693,10 @@ snapshots: axe-core: 4.11.1 storybook: 10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/addon-docs@10.2.16(@types/react@19.2.14)(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@storybook/addon-docs@10.2.16(@types/react@19.2.14)(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@18.3.1) - '@storybook/csf-plugin': 10.2.16(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@storybook/csf-plugin': 10.2.16(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) '@storybook/icons': 2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/react-dom-shim': 10.2.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) react: 18.3.1 @@ -14709,39 +14721,39 @@ snapshots: dependencies: storybook: 10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/addon-vitest@10.2.16(@vitest/browser-playwright@4.0.18)(@vitest/browser@4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0))(@vitest/runner@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vitest@4.1.0)': + '@storybook/addon-vitest@10.2.16(@vitest/browser-playwright@4.0.18)(@vitest/browser@4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0))(@vitest/runner@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vitest@4.1.0)': dependencies: '@storybook/global': 5.0.0 '@storybook/icons': 2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) storybook: 10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) optionalDependencies: - '@vitest/browser': 4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0) - '@vitest/browser-playwright': 4.0.18(playwright@1.58.2)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0) + '@vitest/browser': 4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0) + '@vitest/browser-playwright': 4.0.18(playwright@1.58.2)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0) '@vitest/runner': 4.1.0 - vitest: 4.1.0(@types/node@24.9.1)(@vitest/browser-playwright@4.0.18)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.0(@types/node@24.9.1)(@vitest/browser-playwright@4.0.18)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) transitivePeerDependencies: - react - react-dom - '@storybook/builder-vite@10.2.16(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@storybook/builder-vite@10.2.16(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - '@storybook/csf-plugin': 10.2.16(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@storybook/csf-plugin': 10.2.16(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) storybook: 10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) ts-dedent: 2.2.0 - vite: 7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - esbuild - rollup - webpack - '@storybook/csf-plugin@10.2.16(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@storybook/csf-plugin@10.2.16(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))': dependencies: storybook: 10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) unplugin: 2.3.11 optionalDependencies: esbuild: 0.27.7 rollup: 4.60.1 - vite: 7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) '@storybook/global@5.0.0': {} @@ -14824,19 +14836,19 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.2.1 '@tailwindcss/oxide-win32-x64-msvc': 4.2.1 - '@tailwindcss/vite@4.2.1(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@tailwindcss/vite@4.2.1(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@tailwindcss/node': 4.2.1 '@tailwindcss/oxide': 4.2.1 tailwindcss: 4.2.1 - vite: 7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) - '@tailwindcss/vite@4.2.1(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@tailwindcss/vite@4.2.1(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@tailwindcss/node': 4.2.1 '@tailwindcss/oxide': 4.2.1 tailwindcss: 4.2.1 - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) '@tanstack/db-ivm@0.1.17(typescript@6.0.2)': dependencies: @@ -15438,29 +15450,29 @@ snapshots: '@typescript-eslint/types': 8.52.0 eslint-visitor-keys: 4.2.1 - '@vitest/browser-playwright@4.0.18(playwright@1.58.2)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0)': + '@vitest/browser-playwright@4.0.18(playwright@1.58.2)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0)': dependencies: - '@vitest/browser': 4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0) - '@vitest/mocker': 4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/browser': 4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0) + '@vitest/mocker': 4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) playwright: 1.58.2 tinyrainbow: 3.0.3 - vitest: 4.1.0(@types/node@24.9.1)(@vitest/browser-playwright@4.0.18)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.0(@types/node@24.9.1)(@vitest/browser-playwright@4.0.18)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0)': + '@vitest/browser@4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0)': dependencies: - '@vitest/mocker': 4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/mocker': 4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/utils': 4.0.18 magic-string: 0.30.21 pixelmatch: 7.1.0 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.1.0(@types/node@24.9.1)(@vitest/browser-playwright@4.0.18)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.0(@types/node@24.9.1)(@vitest/browser-playwright@4.0.18)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) ws: 8.19.0 transitivePeerDependencies: - bufferutil @@ -15468,7 +15480,7 @@ snapshots: - utf-8-validate - vite - '@vitest/coverage-v8@4.0.15(vitest@4.1.0(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))': + '@vitest/coverage-v8@4.0.15(vitest@4.1.0(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.2)))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.0.15 @@ -15481,11 +15493,11 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.1.0(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) + vitest: 4.1.0(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.2)) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@4.0.15(vitest@4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))': + '@vitest/coverage-v8@4.0.15(vitest@4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.0.15 @@ -15498,11 +15510,11 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@4.0.15(vitest@4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))': + '@vitest/coverage-v8@4.0.15(vitest@4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.0.15 @@ -15515,11 +15527,11 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@4.0.18(@vitest/browser@4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0))(vitest@4.1.0)': + '@vitest/coverage-v8@4.0.18(@vitest/browser@4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0))(vitest@4.1.0)': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.0.18 @@ -15531,9 +15543,9 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.1.0(@types/node@24.9.1)(@vitest/browser-playwright@4.0.18)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.0(@types/node@24.9.1)(@vitest/browser-playwright@4.0.18)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) optionalDependencies: - '@vitest/browser': 4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0) + '@vitest/browser': 4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0) '@vitest/expect@3.2.4': dependencies: @@ -15552,53 +15564,53 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/mocker@4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) - '@vitest/mocker@4.1.0(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/mocker@4.1.0(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) - '@vitest/mocker@4.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@20.5.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/mocker@4.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.25.11)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@20.5.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.25.11)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) - '@vitest/mocker@4.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/mocker@4.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) - '@vitest/mocker@4.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/mocker@4.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/mocker@4.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) '@vitest/pretty-format@3.2.4': dependencies: @@ -15742,9 +15754,9 @@ snapshots: clean-stack: 2.2.0 indent-string: 4.0.0 - ajv-formats@2.1.1(ajv@8.18.0): + ajv-formats@2.1.1(ajv@8.20.0): optionalDependencies: - ajv: 8.18.0 + ajv: 8.20.0 ajv-formats@3.0.1(@redocly/ajv@8.18.0): optionalDependencies: @@ -15757,14 +15769,14 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@6.14.0: + ajv@6.15.0: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.18.0: + ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 fast-uri: 3.1.0 @@ -16708,7 +16720,7 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.9.3))(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.9.3))(typescript@5.9.3): + cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.9.3))(ts-node@10.9.2(@types/node@24.9.1)(typescript@5.9.3))(typescript@5.9.3): dependencies: '@types/node': 20.5.1 cosmiconfig: 8.3.6(typescript@5.9.3) @@ -17233,7 +17245,7 @@ snapshots: has-property-descriptors: 1.0.2 has-proto: 1.2.0 has-symbols: 1.1.0 - hasown: 2.0.2 + hasown: 2.0.3 internal-slot: 1.1.0 is-array-buffer: 3.0.5 is-callable: 1.2.7 @@ -17251,7 +17263,7 @@ snapshots: object.assign: 4.1.7 own-keys: 1.0.1 regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 + safe-array-concat: 1.1.4 safe-push-apply: 1.0.0 safe-regex-test: 1.1.0 set-proto: 1.0.0 @@ -17543,8 +17555,8 @@ snapshots: exegesis@4.2.0: dependencies: '@apidevtools/json-schema-ref-parser': 9.1.2 - ajv: 8.18.0 - ajv-formats: 2.1.1(ajv@8.18.0) + ajv: 8.20.0 + ajv-formats: 2.1.1(ajv@8.20.0) body-parser: 1.20.3 content-type: 1.0.5 deep-freeze: 0.0.1 @@ -17670,7 +17682,7 @@ snapshots: fast-json-stringify@2.7.13: dependencies: - ajv: 6.14.0 + ajv: 6.15.0 deepmerge: 4.3.1 rfdc: 1.4.1 string-similarity: 4.0.4 @@ -18053,7 +18065,7 @@ snapshots: dependencies: at-least-node: 1.0.0 graceful-fs: 4.2.11 - jsonfile: 6.2.0 + jsonfile: 6.2.1 universalify: 2.0.1 fs-minipass@2.1.0: @@ -18081,7 +18093,7 @@ snapshots: call-bound: 1.0.4 define-properties: 1.2.1 functions-have-names: 1.2.3 - hasown: 2.0.2 + hasown: 2.0.3 is-callable: 1.2.7 functional-red-black-tree@1.0.1: @@ -18436,6 +18448,10 @@ snapshots: dependencies: function-bind: 1.1.2 + hasown@2.0.3: + dependencies: + function-bind: 1.1.2 + he@1.2.0: {} heap-js@2.5.0: {} @@ -18668,7 +18684,7 @@ snapshots: internal-slot@1.1.0: dependencies: es-errors: 1.3.0 - hasown: 2.0.2 + hasown: 2.0.3 side-channel: 1.1.0 ioredis@4.28.5: @@ -18846,7 +18862,7 @@ snapshots: call-bound: 1.0.4 gopd: 1.2.0 has-tostringtag: 1.0.2 - hasown: 2.0.2 + hasown: 2.0.3 is-regexp@1.0.0: {} @@ -19091,6 +19107,12 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jsonfile@6.2.1: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + jsonparse@1.3.1: {} jsonpath-rfc9535@1.3.0: {} @@ -19214,7 +19236,7 @@ snapshots: light-my-request@4.12.0: dependencies: - ajv: 8.18.0 + ajv: 8.20.0 cookie: 0.5.0 process-warning: 1.0.0 set-cookie-parser: 2.6.0 @@ -20228,7 +20250,7 @@ snapshots: dependencies: '@babel/parser': 7.28.6 - nodemailer@8.0.4: {} + nodemailer@8.0.5: {} nodemon@3.1.14: dependencies: @@ -21235,6 +21257,13 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + resolve@1.22.12: + dependencies: + es-errors: 1.3.0 + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 @@ -21401,7 +21430,7 @@ snapshots: dependencies: tslib: 2.8.1 - safe-array-concat@1.1.3: + safe-array-concat@1.1.4: dependencies: call-bind: 1.0.9 call-bound: 1.0.4 @@ -21755,7 +21784,7 @@ snapshots: ip-address: 9.0.5 smart-buffer: 4.2.0 - solid-devtools@0.34.5(solid-js@1.9.10)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + solid-devtools@0.34.5(solid-js@1.9.10)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@babel/core': 7.28.6 '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.28.6) @@ -21764,7 +21793,7 @@ snapshots: '@solid-devtools/shared': 0.20.0(solid-js@1.9.10) solid-js: 1.9.10 optionalDependencies: - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color @@ -21905,15 +21934,15 @@ snapshots: es-errors: 1.3.0 internal-slot: 1.1.0 - storybook-solidjs-vite@10.0.9(@testing-library/jest-dom@6.9.1)(esbuild@0.27.7)(rollup@4.60.1)(solid-js@1.9.11)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@6.0.2)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + storybook-solidjs-vite@10.0.9(@testing-library/jest-dom@6.9.1)(esbuild@0.27.7)(rollup@4.60.1)(solid-js@1.9.11)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@6.0.2)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)): dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.4(typescript@6.0.2)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - '@storybook/builder-vite': 10.2.16(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.4(typescript@6.0.2)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) + '@storybook/builder-vite': 10.2.16(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) '@storybook/global': 5.0.0 solid-js: 1.9.11 storybook: 10.2.16(@testing-library/dom@10.4.1)(prettier@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - vite: 7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vite-plugin-solid: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vite: 7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) + vite-plugin-solid: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) optionalDependencies: typescript: 6.0.2 transitivePeerDependencies: @@ -22311,7 +22340,7 @@ snapshots: table@6.9.0: dependencies: - ajv: 8.18.0 + ajv: 8.20.0 lodash.truncate: 4.4.2 slice-ansi: 4.0.0 string-width: 4.2.3 @@ -22403,7 +22432,7 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 - terser@5.46.1: + terser@5.46.2: dependencies: '@jridgewell/source-map': 0.3.11 acorn: 8.16.0 @@ -22895,19 +22924,19 @@ snapshots: - rollup - supports-color - vite-dev-rpc@1.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + vite-dev-rpc@1.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)): dependencies: birpc: 2.6.1 - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vite-hot-client: 2.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) + vite-hot-client: 2.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) - vite-hot-client@2.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + vite-hot-client@2.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)): dependencies: - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) vite-plugin-html-inject@1.1.2: {} - vite-plugin-inspect@11.3.3(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + vite-plugin-inspect@11.3.3(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)): dependencies: ansis: 4.2.0 debug: 4.4.3(supports-color@5.5.0) @@ -22917,29 +22946,29 @@ snapshots: perfect-debounce: 2.0.0 sirv: 3.0.2 unplugin-utils: 0.3.1 - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vite-dev-rpc: 1.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) + vite-dev-rpc: 1.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) transitivePeerDependencies: - supports-color - vite-plugin-minify@2.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + vite-plugin-minify@2.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@types/html-minifier-terser': 7.0.2 html-minifier-terser: 7.2.0 - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) - vite-plugin-pwa@1.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0): + vite-plugin-pwa@1.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0): dependencies: debug: 4.4.3(supports-color@5.5.0) pretty-bytes: 6.1.1 tinyglobby: 0.2.15 - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) workbox-build: 7.1.1(@types/babel__core@7.20.5) workbox-window: 7.1.0 transitivePeerDependencies: - supports-color - vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@babel/core': 7.28.6 '@types/babel__core': 7.20.5 @@ -22947,14 +22976,14 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.11 solid-refresh: 0.6.3(solid-js@1.9.11) - vite: 7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vitefu: 1.1.1(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vite: 7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) + vitefu: 1.1.1(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) optionalDependencies: '@testing-library/jest-dom': 6.9.1 transitivePeerDependencies: - supports-color - vite-plugin-solid@2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.10)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + vite-plugin-solid@2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.10)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@babel/core': 7.28.6 '@types/babel__core': 7.20.5 @@ -22962,14 +22991,14 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.10 solid-refresh: 0.6.3(solid-js@1.9.10) - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vitefu: 1.1.1(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) + vitefu: 1.1.1(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) optionalDependencies: '@testing-library/jest-dom': 6.9.1 transitivePeerDependencies: - supports-color - vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3): dependencies: esbuild: 0.27.7 fdir: 6.5.0(picomatch@4.0.4) @@ -22983,11 +23012,11 @@ snapshots: jiti: 2.6.1 lightningcss: 1.32.0 sass: 1.98.0 - terser: 5.46.1 + terser: 5.46.2 tsx: 4.21.0 yaml: 2.8.3 - vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@20.5.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.25.11)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -22995,19 +23024,19 @@ snapshots: rolldown: 1.0.0-rc.12(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0) tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 20.5.1 - esbuild: 0.27.7 + '@types/node': 24.9.1 + esbuild: 0.25.11 fsevents: 2.3.3 jiti: 2.6.1 sass: 1.98.0 - terser: 5.46.1 + terser: 5.46.2 tsx: 4.21.0 yaml: 2.8.3 transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' - vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -23020,14 +23049,14 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 sass: 1.70.0 - terser: 5.46.1 + terser: 5.46.2 tsx: 4.21.0 yaml: 2.8.3 transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' - vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): + vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.2): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -23040,14 +23069,14 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 sass: 1.98.0 - terser: 5.46.1 + terser: 5.46.2 tsx: 4.21.0 yaml: 2.8.2 transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' - vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -23060,25 +23089,25 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 sass: 1.98.0 - terser: 5.46.1 + terser: 5.46.2 tsx: 4.21.0 yaml: 2.8.3 transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' - vitefu@1.1.1(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + vitefu@1.1.1(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)): optionalDependencies: - vite: 7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) - vitefu@1.1.1(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + vitefu@1.1.1(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)): optionalDependencies: - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) - vitest@4.1.0(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)): + vitest@4.1.0(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.2)): dependencies: '@vitest/expect': 4.1.0 - '@vitest/mocker': 4.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.1.0 '@vitest/runner': 4.1.0 '@vitest/snapshot': 4.1.0 @@ -23095,7 +23124,7 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.8.0 @@ -23105,10 +23134,40 @@ snapshots: transitivePeerDependencies: - msw - vitest@4.1.0(@types/node@24.9.1)(@vitest/browser-playwright@4.0.18)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + vitest@4.1.0(@types/node@24.9.1)(@vitest/browser-playwright@4.0.18)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)): + dependencies: + '@vitest/expect': 4.1.0 + '@vitest/mocker': 4.1.0(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/pretty-format': 4.1.0 + '@vitest/runner': 4.1.0 + '@vitest/snapshot': 4.1.0 + '@vitest/spy': 4.1.0 + '@vitest/utils': 4.1.0 + es-module-lexer: 2.0.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 4.0.0 + tinybench: 2.9.0 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.0.3 + vite: 7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 24.9.1 + '@vitest/browser-playwright': 4.0.18(playwright@1.58.2)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0) + happy-dom: 20.8.9 + jsdom: 27.4.0 + transitivePeerDependencies: + - msw + + vitest@4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.25.11)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.0 - '@vitest/mocker': 4.1.0(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/mocker': 4.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.25.11)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/pretty-format': 4.1.0 '@vitest/runner': 4.1.0 '@vitest/snapshot': 4.1.0 @@ -23125,20 +23184,19 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.25.11)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 24.9.1 - '@vitest/browser-playwright': 4.0.18(playwright@1.58.2)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0) happy-dom: 20.8.9 jsdom: 27.4.0 transitivePeerDependencies: - msw - vitest@4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + vitest@4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.0 - '@vitest/mocker': 4.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/mocker': 4.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/pretty-format': 4.1.0 '@vitest/runner': 4.1.0 '@vitest/snapshot': 4.1.0 @@ -23155,7 +23213,7 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 24.9.1 @@ -23164,10 +23222,10 @@ snapshots: transitivePeerDependencies: - msw - vitest@4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + vitest@4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.0 - '@vitest/mocker': 4.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/mocker': 4.1.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/pretty-format': 4.1.0 '@vitest/runner': 4.1.0 '@vitest/snapshot': 4.1.0 @@ -23184,7 +23242,7 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 24.9.1 @@ -23376,7 +23434,7 @@ snapshots: workbox-build@7.1.1(@types/babel__core@7.20.5): dependencies: - '@apideck/better-ajv-errors': 0.3.7(ajv@8.18.0) + '@apideck/better-ajv-errors': 0.3.7(ajv@8.20.0) '@babel/core': 7.29.0 '@babel/preset-env': 7.29.2(@babel/core@7.29.0) '@babel/runtime': 7.29.2 @@ -23385,7 +23443,7 @@ snapshots: '@rollup/plugin-replace': 2.4.2(rollup@2.80.0) '@rollup/plugin-terser': 0.4.4(rollup@2.80.0) '@surma/rollup-plugin-off-main-thread': 2.2.3 - ajv: 8.18.0 + ajv: 8.20.0 common-tags: 1.8.2 fast-json-stable-stringify: 2.1.0 fs-extra: 9.1.0 From 0ab6c73dde9d778e5c1912b5bc092e543a65a541 Mon Sep 17 00:00:00 2001 From: Abdellah Ennajari <105159582+ennajari@users.noreply.github.com> Date: Wed, 29 Apr 2026 09:42:18 +0100 Subject: [PATCH 11/31] chore: use explicit !== undefined check instead of truthy check (@ennajari) (#7805) ## Summary - Use explicit `!== undefined` check instead of truthy check for cached `Promise` in memoize utility (`json-data.ts`) ## Test plan - [ ] Memoized async functions cache correctly --- .gitignore | 2 +- frontend/src/ts/utils/json-data.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 2946d00bdf7b..e2a50cb343d3 100644 --- a/.gitignore +++ b/.gitignore @@ -132,4 +132,4 @@ frontend/static/webfonts-preview .turbo frontend/.env.sentry-build-plugin .claude/worktrees -1024MiB \ No newline at end of file +1024MiB diff --git a/frontend/src/ts/utils/json-data.ts b/frontend/src/ts/utils/json-data.ts index 3151e9ce5daa..0437db6dbd37 100644 --- a/frontend/src/ts/utils/json-data.ts +++ b/frontend/src/ts/utils/json-data.ts @@ -52,7 +52,7 @@ export function memoizeAsync( const key = getKey ? getKey(...args) : (args[0] as P); const cached = cache.get(key); - if (cached) { + if (cached !== undefined) { return cached; } From 2cfe7bab865b20eb6c9fcf3caf2d060e3a56adb1 Mon Sep 17 00:00:00 2001 From: Abdellah Ennajari <105159582+ennajari@users.noreply.github.com> Date: Wed, 29 Apr 2026 09:42:55 +0100 Subject: [PATCH 12/31] fix(tests): handle unknown .jsx extension for TanStack solid dependencies (@ennajari) (#7806) Fixes #7801 `@tanstack/solid-*` packages ship `.jsx` source files that Node.js cannot load without a JSX transform. **Fix:** Add `ssr.noExternal: ["@solidjs/meta", /@tanstack\/solid-.*/]` to all three test projects (unit, jsdom, jsx). This forces Vite to bundle and transform them through `vite-plugin-solid`. **Test plan** - pnpm vitest run completes without "Unknown file extension" errors - Tests importing `@tanstack/solid-*` packages run correctly --- frontend/vitest.config.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/frontend/vitest.config.ts b/frontend/vitest.config.ts index a981b4ccd897..bd7b19d3f543 100644 --- a/frontend/vitest.config.ts +++ b/frontend/vitest.config.ts @@ -9,8 +9,16 @@ const plugins = [ solidPlugin({ hot: false }), ]; +const tanstackSolidNoExternal: (string | RegExp)[] = [ + "@solidjs/meta", + /@tanstack\/solid-.*/, +]; + export const projects: UserWorkspaceConfig[] = [ { + ssr: { + noExternal: tanstackSolidNoExternal, + }, test: { name: { label: "unit", color: "blue" }, include: ["__tests__/**/*.spec.ts"], @@ -26,6 +34,9 @@ export const projects: UserWorkspaceConfig[] = [ plugins, }, { + ssr: { + noExternal: tanstackSolidNoExternal, + }, test: { name: { label: "jsdom", color: "yellow" }, include: ["__tests__/**/*.jsdom-spec.ts"], @@ -36,7 +47,7 @@ export const projects: UserWorkspaceConfig[] = [ }, { ssr: { - noExternal: ["@solidjs/meta"], + noExternal: tanstackSolidNoExternal, }, test: { name: { label: "jsx", color: "green" }, From 9b4547dff3c3299a2cf87391f1fa1a2ecb73f7a1 Mon Sep 17 00:00:00 2001 From: Seif Soliman Date: Wed, 29 Apr 2026 11:45:48 +0300 Subject: [PATCH 13/31] fix: highlight search quote button when active (@byseif21) (#7807) Closes #7796 --- frontend/src/ts/components/modals/MobileTestConfigModal.tsx | 4 +++- frontend/src/ts/components/pages/test/TestConfig.tsx | 1 + frontend/src/ts/test/test-state.ts | 4 +++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/frontend/src/ts/components/modals/MobileTestConfigModal.tsx b/frontend/src/ts/components/modals/MobileTestConfigModal.tsx index 69719e717f31..dd16f99e979c 100644 --- a/frontend/src/ts/components/modals/MobileTestConfigModal.tsx +++ b/frontend/src/ts/components/modals/MobileTestConfigModal.tsx @@ -106,7 +106,9 @@ export function MobileTestConfigModal(): JSXElement { if (value === "all") { return areUnsortedArraysEqual(getConfig.quoteLength, [0, 1, 2, 3]); } - if (value === "-2") return false; + if (value === "-2") { + return areUnsortedArraysEqual(getConfig.quoteLength, [-2]); + } if (value === "-3") { return areUnsortedArraysEqual(getConfig.quoteLength, [-3]); } diff --git a/frontend/src/ts/components/pages/test/TestConfig.tsx b/frontend/src/ts/components/pages/test/TestConfig.tsx index 58b557093845..9d81d747b59c 100644 --- a/frontend/src/ts/components/pages/test/TestConfig.tsx +++ b/frontend/src/ts/components/pages/test/TestConfig.tsx @@ -348,6 +348,7 @@ function Mode2Quote(props: ComponentProps<"div">): JSXElement { fa={{ icon: "fa-search", }} + active={areUnsortedArraysEqual(getConfig.quoteLength, [-2])} onClick={() => { showModal("QuoteSearch"); }} diff --git a/frontend/src/ts/test/test-state.ts b/frontend/src/ts/test/test-state.ts index 436b10780496..c0976ab8b075 100644 --- a/frontend/src/ts/test/test-state.ts +++ b/frontend/src/ts/test/test-state.ts @@ -4,7 +4,8 @@ export let isRepeated = false; export let isPaceRepeat = false; export let isActive = false; export let bailedOut = false; -export let selectedQuoteId = 1; +export let selectedQuoteId = + parseInt(localStorage.getItem("selectedQuoteId") ?? "1", 10) || 1; export let activeWordIndex = 0; export let testInitSuccess = true; export let isLanguageRightToLeft = false; @@ -30,6 +31,7 @@ export function setBailedOut(tf: boolean): void { export function setSelectedQuoteId(id: number): void { selectedQuoteId = id; + localStorage.setItem("selectedQuoteId", id.toString()); } export function setActiveWordIndex(index: number): void { From bb7affe147cbc2116b54519c959945816f3ca8bb Mon Sep 17 00:00:00 2001 From: Karthikeyan <75555469+J-Karthikeyan@users.noreply.github.com> Date: Wed, 29 Apr 2026 14:18:09 +0530 Subject: [PATCH 14/31] fix(test-timer): slow timer notification reappearing after new test (@J-Karthikeyan) (#7808) ### Description When a test fails due to the slow timer, the error notification ("Stopping the test due to bad performance...") has no auto dismiss timeout so it stays in the notification store indefinitely so it reappears once the next test is completed. When we start a new test, the notification gets visually hidden by focus mode (non important notifications get a `hidden` class when getFocus() is true). When the test ends, focus mode turns off and the notification reappears making it look like it fired again when it didn't. ### Steps to Reproduce 1. Start a test and let the slow timer trigger the notification by just typing one or two letter and leaving it. 2. Do NOT dismiss the notification 3. Start and complete a new test without a page refresh 4. The notification reappears at the end of the new test ### Fix Fix: track the error notification's ID when the slow timer fires, and remove it from the store when a new test starts via TestTimer.start(). --- frontend/src/ts/states/notifications.ts | 16 +++++++++------- frontend/src/ts/test/test-timer.ts | 12 ++++++++++-- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/frontend/src/ts/states/notifications.ts b/frontend/src/ts/states/notifications.ts index d003750fb3d8..3108c1594d1d 100644 --- a/frontend/src/ts/states/notifications.ts +++ b/frontend/src/ts/states/notifications.ts @@ -115,7 +115,7 @@ export function addNotificationWithLevel( message: string, level: NotificationLevel, options: AddNotificationOptions = {}, -): void { +): number { let details = options.details; if (options.response !== undefined) { @@ -174,25 +174,27 @@ export function addNotificationWithLevel( }, durationMs + 250); autoRemoveTimers.set(notifId, timer); } + + return notifId; } export function showNoticeNotification( message: string, options?: AddNotificationOptions, -): void { - addNotificationWithLevel(message, "notice", options); +): number { + return addNotificationWithLevel(message, "notice", options); } export function showSuccessNotification( message: string, options?: AddNotificationOptions, -): void { - addNotificationWithLevel(message, "success", options); +): number { + return addNotificationWithLevel(message, "success", options); } export function showErrorNotification( message: string, options?: AddNotificationOptions, -): void { - addNotificationWithLevel(message, "error", options); +): number { + return addNotificationWithLevel(message, "error", options); } diff --git a/frontend/src/ts/test/test-timer.ts b/frontend/src/ts/test/test-timer.ts index f6776752332d..1c8a6d1d9166 100644 --- a/frontend/src/ts/test/test-timer.ts +++ b/frontend/src/ts/test/test-timer.ts @@ -14,6 +14,7 @@ import * as Numbers from "@monkeytype/util/numbers"; import { showNoticeNotification, showErrorNotification, + removeNotification, } from "../states/notifications"; import * as Caret from "./caret"; import * as SlowTimer from "../legacy-states/slow-timer"; @@ -52,6 +53,7 @@ type TimerStats = { }; let slowTimerCount = 0; +let slowTimerNotifIds: number[] = []; let timer: NodeJS.Timeout | null = null; const interval = 1000; let expected = 0; @@ -284,8 +286,10 @@ function checkIfTimerIsSlow(drift: number): void { 'This could be caused by "efficiency mode" on Microsoft Edge.', ); - showErrorNotification( - "Stopping the test due to bad performance. This would cause test calculations to be incorrect. If this happens a lot, please report this.", + slowTimerNotifIds.push( + showErrorNotification( + "Stopping the test due to bad performance. This would cause test calculations to be incorrect. If this happens a lot, please report this.", + ), ); timerEvent.dispatch({ key: "fail", value: "slow timer" }); @@ -296,6 +300,10 @@ function checkIfTimerIsSlow(drift: number): void { export async function start(): Promise { SlowTimer.clear(); slowTimerCount = 0; + for (const id of slowTimerNotifIds) { + removeNotification(id, "clear"); + } + slowTimerNotifIds = []; void _startNew(); // void _startOld(); } From 1f7eb06616d1a5f3d89e62a236d21ab4c62a5db6 Mon Sep 17 00:00:00 2001 From: Nad Alaba <37968805+nadalaba@users.noreply.github.com> Date: Thu, 30 Apr 2026 09:48:18 +0300 Subject: [PATCH 15/31] chore: fix release dev script (@nadalaba) (#7791) - packages/release> `pnpm dev` > Checking if local branch is master... [Dry Run] Command: git branch --show-current Local branch is not master. Please checkout the master branch. [nodemon] app crashed - waiting for file changes before starting... - let the script format the fetched contributors data with the pre-commit hook --- packages/release/src/index.js | 73 ++++++++++++++++------------------- 1 file changed, 34 insertions(+), 39 deletions(-) diff --git a/packages/release/src/index.js b/packages/release/src/index.js index b1b8a908d693..afc413023e1e 100755 --- a/packages/release/src/index.js +++ b/packages/release/src/index.js @@ -59,11 +59,15 @@ const runProjectRootCommand = (command, force) => { }; const checkBranchSync = () => { + if (noSyncCheck) { + console.log("Skipping sync check."); + return; + } console.log("Checking if local branch is master..."); const currentBranch = runProjectRootCommand( "git branch --show-current", ).trim(); - if (currentBranch !== "master") { + if (currentBranch !== "master" && !isDryRun) { console.error( "Local branch is not master. Please checkout the master branch.", ); @@ -72,32 +76,26 @@ const checkBranchSync = () => { console.log("Checking if local master branch is in sync with origin..."); - if (noSyncCheck) { - console.log("Skipping sync check."); - } else if (isDryRun) { - console.log("[Dry Run] Checking sync..."); - } else { - try { - // Fetch the latest changes from the remote repository - runProjectRootCommand("git fetch origin"); - - // Get the commit hashes of the local and remote master branches - const localMaster = runProjectRootCommand("git rev-parse master").trim(); - const remoteMaster = runProjectRootCommand( - "git rev-parse origin/master", - ).trim(); - - if (localMaster !== remoteMaster) { - console.error( - "Local master branch is not in sync with origin. Please pull the latest changes before proceeding.", - ); - process.exit(1); - } - } catch (error) { - console.error("Error checking branch sync status."); - console.error(error); + try { + // Fetch the latest changes from the remote repository + runProjectRootCommand("git fetch origin"); + + // Get the commit hashes of the local and remote master branches + const localMaster = runProjectRootCommand("git rev-parse master").trim(); + const remoteMaster = runProjectRootCommand( + "git rev-parse origin/master", + ).trim(); + + if (localMaster !== remoteMaster && !isDryRun) { + console.error( + "Local master branch is not in sync with origin. Please pull the latest changes before proceeding.", + ); process.exit(1); } + } catch (error) { + console.error("Error checking branch sync status."); + console.error(error); + process.exit(1); } }; @@ -156,9 +154,8 @@ const updatePackage = (newVersion) => { const checkUncommittedChanges = () => { console.log("Checking uncommitted changes..."); const status = execSync("git status --porcelain").toString().trim(); - if (isDryRun) { - console.log("[Dry Run] Checking uncommitted changes..."); - } else if (status) { + + if (status && !isDryRun) { console.error( "You have uncommitted changes. Please commit or stash them before proceeding.", ); @@ -168,11 +165,7 @@ const checkUncommittedChanges = () => { const installDependencies = () => { console.log("Installing dependencies..."); - if (isDryRun) { - console.log("[Dry Run] Dependencies would be installed."); - } else { - runProjectRootCommand("pnpm i"); - } + runProjectRootCommand("pnpm i"); }; const buildProject = () => { @@ -233,11 +226,13 @@ const generateContributors = () => { contributors.replaceAll("\n", "").replace(/^.*?\[/, "["), ); - fs.writeFileSync( - `${PROJECT_ROOT}/frontend/static/contributors.json`, - JSON.stringify(contributors, null, 2), - "utf8", - ); + if (!isDryRun) { + fs.writeFileSync( + `${PROJECT_ROOT}/frontend/static/contributors.json`, + JSON.stringify(contributors, null, 2), + "utf8", + ); + } console.log("Contributors list updated."); } catch (e) { @@ -249,7 +244,7 @@ const generateContributors = () => { const createCommitAndTag = (version) => { console.log("Creating commit and tag... Pushing to Github..."); runCommand(`git add .`); - runCommand(`git commit -m "chore: release ${version}" --no-verify`); + runCommand(`git commit -m "chore: release ${version}"`); runCommand(`git tag ${version}`); runCommand(`git push origin master --tags --no-verify`); }; From bf2a4c3c18fd68be86f48405d915236c2535b13c Mon Sep 17 00:00:00 2001 From: Sharann Manojkumar <66624533+Sharann-del@users.noreply.github.com> Date: Thu, 30 Apr 2026 12:34:32 +0530 Subject: [PATCH 16/31] impr(theme): display custom theme names in indicator (@Sharann-del) (#7798) Improves the theme indicator by displaying the actual custom theme name instead of the generic "custom". - Matches active custom theme using color comparison - Displays as: "themeName (custom)" - Falls back to "custom" if no match is found Notes: - Config does not store custom theme IDs, so matching is done via color arrays - Handles edge cases such as unsaved themes and missing DB snapshot - Does not affect preview or random theme behavior --------- Co-authored-by: Jack --- frontend/src/ts/controllers/theme-controller.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/frontend/src/ts/controllers/theme-controller.ts b/frontend/src/ts/controllers/theme-controller.ts index aca22ffa4a43..7fca36a702dd 100644 --- a/frontend/src/ts/controllers/theme-controller.ts +++ b/frontend/src/ts/controllers/theme-controller.ts @@ -85,7 +85,21 @@ function updateThemeIndicator(nameOverride?: string): void { //text let str: string = Config.theme; if (randomTheme !== null) str = randomTheme; - if (Config.customTheme) str = "custom"; + + if (Config.customTheme && nameOverride === undefined) { + // Match current custom theme by colors since Config does not store custom theme IDs + const snapshot = DB.getSnapshot(); + const matchedTheme = snapshot?.customThemes?.find((ct) => + Arrays.areSortedArraysEqual(ct.colors, Config.customThemeColors), + ); + + if (matchedTheme) { + str = `${matchedTheme.name} (custom)`; + } else { + str = "custom"; + } + } + if (nameOverride !== undefined && nameOverride !== "") str = nameOverride; str = str.replace(/_/g, " "); From 17581aa520018827c089d4f41a5e2c04617074bc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Apr 2026 09:13:45 +0200 Subject: [PATCH 17/31] chore(deps-dev): bump @vitest/coverage-v8 from 4.0.15 to 4.1.5 (#7809) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) from 4.0.15 to 4.1.5.
Release notes

Sourced from @​vitest/coverage-v8's releases.

v4.1.5

   🚀 Experimental Features

   🐞 Bug Fixes

    View changes on GitHub

v4.1.4

   🚀 Experimental Features

   🐞 Bug Fixes

    View changes on GitHub

v4.1.3

   🚀 Experimental Features

... (truncated)

Commits

Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- backend/package.json | 2 +- frontend/package.json | 2 +- frontend/storybook/package.json | 2 +- package.json | 2 +- pnpm-lock.yaml | 227 ++++++++++++++------------------ 5 files changed, 106 insertions(+), 129 deletions(-) diff --git a/backend/package.json b/backend/package.json index 204d0ee16471..f82bfc41d38f 100644 --- a/backend/package.json +++ b/backend/package.json @@ -77,7 +77,7 @@ "@types/swagger-stats": "0.95.11", "@types/ua-parser-js": "0.7.36", "@types/uuid": "10.0.0", - "@vitest/coverage-v8": "4.0.15", + "@vitest/coverage-v8": "4.1.5", "concurrently": "8.2.2", "openapi3-ts": "2.0.2", "oxlint": "1.60.0", diff --git a/frontend/package.json b/frontend/package.json index ac199bba36ff..f2a4edadb83b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -94,7 +94,7 @@ "@types/object-hash": "3.0.6", "@types/subset-font": "1.4.3", "@types/throttle-debounce": "5.0.2", - "@vitest/coverage-v8": "4.0.15", + "@vitest/coverage-v8": "4.1.5", "autoprefixer": "10.4.27", "caniuse-lite": "1.0.30001778", "concurrently": "8.2.2", diff --git a/frontend/storybook/package.json b/frontend/storybook/package.json index e4c018fb053a..029d0b645529 100644 --- a/frontend/storybook/package.json +++ b/frontend/storybook/package.json @@ -27,7 +27,7 @@ "@tailwindcss/vite": "^4.2.1", "@vitest/browser": "^4.0.18", "@vitest/browser-playwright": "^4.0.18", - "@vitest/coverage-v8": "^4.0.18", + "@vitest/coverage-v8": "^4.1.5", "playwright": "^1.58.2", "solid-js": "^1.9.11", "storybook": "^10.2.14", diff --git a/package.json b/package.json index 00e7c4626cd5..cdc61e5b2e43 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "@commitlint/config-conventional": "19.2.2", "@monkeytype/release": "workspace:*", "@types/node": "24.9.1", - "@vitest/coverage-v8": "4.0.15", + "@vitest/coverage-v8": "4.1.5", "caniuse-lite": "1.0.30001778", "conventional-changelog": "6.0.0", "husky": "8.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 343b911ca8b6..965c8f90bb83 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,8 +24,8 @@ importers: specifier: 24.9.1 version: 24.9.1 '@vitest/coverage-v8': - specifier: 4.0.15 - version: 4.0.15(vitest@4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))) + specifier: 4.1.5 + version: 4.1.5(vitest@4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))) caniuse-lite: specifier: 1.0.30001778 version: 1.0.30001778 @@ -244,8 +244,8 @@ importers: specifier: 10.0.0 version: 10.0.0 '@vitest/coverage-v8': - specifier: 4.0.15 - version: 4.0.15(vitest@4.1.0(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.2))) + specifier: 4.1.5 + version: 4.1.5(vitest@4.1.0(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.2))) concurrently: specifier: 8.2.2 version: 8.2.2 @@ -482,8 +482,8 @@ importers: specifier: 5.0.2 version: 5.0.2 '@vitest/coverage-v8': - specifier: 4.0.15 - version: 4.0.15(vitest@4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))) + specifier: 4.1.5 + version: 4.1.5(vitest@4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))) autoprefixer: specifier: 10.4.27 version: 10.4.27(postcss@8.5.8) @@ -618,8 +618,8 @@ importers: specifier: ^4.0.18 version: 4.0.18(playwright@1.58.2)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0) '@vitest/coverage-v8': - specifier: ^4.0.18 - version: 4.0.18(@vitest/browser@4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0))(vitest@4.1.0) + specifier: ^4.1.5 + version: 4.1.5(@vitest/browser@4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0))(vitest@4.1.0) playwright: specifier: ^1.58.2 version: 1.58.2 @@ -4671,20 +4671,11 @@ packages: peerDependencies: vitest: 4.0.18 - '@vitest/coverage-v8@4.0.15': - resolution: {integrity: sha512-FUJ+1RkpTFW7rQITdgTi93qOCWJobWhBirEPCeXh2SW2wsTlFxy51apDz5gzG+ZEYt/THvWeNmhdAoS9DTwpCw==} + '@vitest/coverage-v8@4.1.5': + resolution: {integrity: sha512-38C0/Ddb7HcRG0Z4/DUem8x57d2p9jYgp18mkaYswEOQBGsI1CG4f/hjm0ZCeaJfWhSZ4k7jgs29V1Zom7Ki9A==} peerDependencies: - '@vitest/browser': 4.0.15 - vitest: 4.0.15 - peerDependenciesMeta: - '@vitest/browser': - optional: true - - '@vitest/coverage-v8@4.0.18': - resolution: {integrity: sha512-7i+N2i0+ME+2JFZhfuz7Tg/FqKtilHjGyGvoHYQ6iLV0zahbsJ9sljC9OcFcPDbhYKCet+sG8SsVqlyGvPflZg==} - peerDependencies: - '@vitest/browser': 4.0.18 - vitest: 4.0.18 + '@vitest/browser': 4.1.5 + vitest: 4.1.5 peerDependenciesMeta: '@vitest/browser': optional: true @@ -4720,15 +4711,15 @@ packages: '@vitest/pretty-format@3.2.4': resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - '@vitest/pretty-format@4.0.15': - resolution: {integrity: sha512-SWdqR8vEv83WtZcrfLNqlqeQXlQLh2iilO1Wk1gv4eiHKjEzvgHb2OVc3mIPyhZE6F+CtfYjNlDJwP5MN6Km7A==} - '@vitest/pretty-format@4.0.18': resolution: {integrity: sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==} '@vitest/pretty-format@4.1.0': resolution: {integrity: sha512-3RZLZlh88Ib0J7NQTRATfc/3ZPOnSUn2uDBUoGNn5T36+bALixmzphN26OUD3LRXWkJu4H0s5vvUeqBiw+kS0A==} + '@vitest/pretty-format@4.1.5': + resolution: {integrity: sha512-7I3q6l5qr03dVfMX2wCo9FxwSJbPdwKjy2uu/YPpU3wfHvIL4QHwVRp57OfGrDFeUJ8/8QdfBKIV12FTtLn00g==} + '@vitest/runner@4.1.0': resolution: {integrity: sha512-Duvx2OzQ7d6OjchL+trw+aSrb9idh7pnNfxrklo14p3zmNL4qPCDeIJAK+eBKYjkIwG96Bc6vYuxhqDXQOWpoQ==} @@ -4747,15 +4738,15 @@ packages: '@vitest/utils@3.2.4': resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} - '@vitest/utils@4.0.15': - resolution: {integrity: sha512-HXjPW2w5dxhTD0dLwtYHDnelK3j8sR8cWIaLxr22evTyY6q8pRCjZSmhRWVjBaOVXChQd6AwMzi9pucorXCPZA==} - '@vitest/utils@4.0.18': resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==} '@vitest/utils@4.1.0': resolution: {integrity: sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==} + '@vitest/utils@4.1.5': + resolution: {integrity: sha512-76wdkrmfXfqGjueGgnb45ITPyUi1ycZ4IHgC2bhPDUfWHklY/q3MdLOAB+TF1e6xfl8NxNY0ZYaPCFNWSsw3Ug==} + '@vue/compiler-core@3.4.37': resolution: {integrity: sha512-ZDDT/KiLKuCRXyzWecNzC5vTcubGz4LECAtfGPENpo0nrmqJHwuWtRLxk/Sb9RAKtR9iFflFycbkjkY+W/PZUQ==} @@ -5000,8 +4991,8 @@ packages: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} - ast-v8-to-istanbul@0.3.12: - resolution: {integrity: sha512-BRRC8VRZY2R4Z4lFIL35MwNXmwVqBityvOIwETtsCSwvjl0IdgFsy9NhdaA6j74nUdtJJlIypeRhpDam19Wq3g==} + ast-v8-to-istanbul@1.0.0: + resolution: {integrity: sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg==} astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} @@ -7542,10 +7533,6 @@ packages: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} - istanbul-lib-source-maps@5.0.6: - resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} - engines: {node: '>=10'} - istanbul-reports@3.2.0: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} @@ -8124,8 +8111,8 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - magicast@0.5.1: - resolution: {integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==} + magicast@0.5.2: + resolution: {integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==} make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} @@ -10069,12 +10056,12 @@ packages: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} - std-env@3.10.0: - resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} - std-env@4.0.0: resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} + std-env@4.1.0: + resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} + stemmer@2.0.1: resolution: {integrity: sha512-bkWvSX2JR4nSZFfs113kd4C6X13bBBrg4fBKv2pVdzpdQI2LA5pZcWzTFNdkYsiUNl13E4EzymSRjZ0D55jBYg==} hasBin: true @@ -10482,6 +10469,10 @@ packages: resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} engines: {node: '>=14.0.0'} + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} + engines: {node: '>=14.0.0'} + tinyspy@4.0.4: resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} engines: {node: '>=14.0.0'} @@ -11545,8 +11536,8 @@ snapshots: '@babel/generator@7.28.6': dependencies: - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 @@ -11613,12 +11604,12 @@ snapshots: '@babel/helper-module-imports@7.18.6': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 '@babel/helper-module-imports@7.28.6': dependencies: '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -11688,7 +11679,7 @@ snapshots: '@babel/helpers@7.28.6': dependencies: '@babel/template': 7.28.6 - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 '@babel/helpers@7.29.2': dependencies: @@ -11697,7 +11688,7 @@ snapshots: '@babel/parser@7.28.6': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 '@babel/parser@7.29.2': dependencies: @@ -12191,17 +12182,17 @@ snapshots: '@babel/template@7.28.6': dependencies: '@babel/code-frame': 7.28.6 - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 '@babel/traverse@7.28.6': dependencies: '@babel/code-frame': 7.28.6 '@babel/generator': 7.28.6 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.6 + '@babel/parser': 7.29.2 '@babel/template': 7.28.6 - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 debug: 4.4.3(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -12324,7 +12315,7 @@ snapshots: '@types/node': 20.5.1 chalk: 4.1.2 cosmiconfig: 8.3.6(typescript@5.9.3) - cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.9.3))(ts-node@10.9.2(@types/node@24.9.1)(typescript@5.9.3))(typescript@5.9.3) + cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.9.3))(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.9.3))(typescript@5.9.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -15125,16 +15116,16 @@ snapshots: '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 '@types/bcrypt@5.0.2': dependencies: @@ -15480,72 +15471,63 @@ snapshots: - utf-8-validate - vite - '@vitest/coverage-v8@4.0.15(vitest@4.1.0(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.2)))': + '@vitest/coverage-v8@4.1.5(@vitest/browser@4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0))(vitest@4.1.0)': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.0.15 - ast-v8-to-istanbul: 0.3.12 + '@vitest/utils': 4.1.5 + ast-v8-to-istanbul: 1.0.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.2.0 - magicast: 0.5.1 + magicast: 0.5.2 obug: 2.1.1 - std-env: 3.10.0 - tinyrainbow: 3.0.3 - vitest: 4.1.0(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.2)) - transitivePeerDependencies: - - supports-color + std-env: 4.1.0 + tinyrainbow: 3.1.0 + vitest: 4.1.0(@types/node@24.9.1)(@vitest/browser-playwright@4.0.18)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) + optionalDependencies: + '@vitest/browser': 4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0) - '@vitest/coverage-v8@4.0.15(vitest@4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)))': + '@vitest/coverage-v8@4.1.5(vitest@4.1.0(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.2)))': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.0.15 - ast-v8-to-istanbul: 0.3.12 + '@vitest/utils': 4.1.5 + ast-v8-to-istanbul: 1.0.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.2.0 - magicast: 0.5.1 + magicast: 0.5.2 obug: 2.1.1 - std-env: 3.10.0 - tinyrainbow: 3.0.3 - vitest: 4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) - transitivePeerDependencies: - - supports-color + std-env: 4.1.0 + tinyrainbow: 3.1.0 + vitest: 4.1.0(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.2)) - '@vitest/coverage-v8@4.0.15(vitest@4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)))': + '@vitest/coverage-v8@4.1.5(vitest@4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)))': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.0.15 - ast-v8-to-istanbul: 0.3.12 + '@vitest/utils': 4.1.5 + ast-v8-to-istanbul: 1.0.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.2.0 - magicast: 0.5.1 + magicast: 0.5.2 obug: 2.1.1 - std-env: 3.10.0 - tinyrainbow: 3.0.3 - vitest: 4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) - transitivePeerDependencies: - - supports-color + std-env: 4.1.0 + tinyrainbow: 3.1.0 + vitest: 4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.70.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) - '@vitest/coverage-v8@4.0.18(@vitest/browser@4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0))(vitest@4.1.0)': + '@vitest/coverage-v8@4.1.5(vitest@4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)))': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.0.18 - ast-v8-to-istanbul: 0.3.12 + '@vitest/utils': 4.1.5 + ast-v8-to-istanbul: 1.0.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-reports: 3.2.0 - magicast: 0.5.1 + magicast: 0.5.2 obug: 2.1.1 - std-env: 3.10.0 - tinyrainbow: 3.0.3 - vitest: 4.1.0(@types/node@24.9.1)(@vitest/browser-playwright@4.0.18)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) - optionalDependencies: - '@vitest/browser': 4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0) + std-env: 4.1.0 + tinyrainbow: 3.1.0 + vitest: 4.1.0(@types/node@24.9.1)(happy-dom@20.8.9)(jsdom@27.4.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(@types/node@24.9.1)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/expect@3.2.4': dependencies: @@ -15562,7 +15544,7 @@ snapshots: '@vitest/spy': 4.1.0 '@vitest/utils': 4.1.0 chai: 6.2.2 - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 '@vitest/mocker@4.0.18(vite@7.3.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))': dependencies: @@ -15616,17 +15598,17 @@ snapshots: dependencies: tinyrainbow: 2.0.0 - '@vitest/pretty-format@4.0.15': - dependencies: - tinyrainbow: 3.0.3 - '@vitest/pretty-format@4.0.18': dependencies: - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 '@vitest/pretty-format@4.1.0': dependencies: - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 + + '@vitest/pretty-format@4.1.5': + dependencies: + tinyrainbow: 3.1.0 '@vitest/runner@4.1.0': dependencies: @@ -15654,25 +15636,26 @@ snapshots: loupe: 3.2.1 tinyrainbow: 2.0.0 - '@vitest/utils@4.0.15': - dependencies: - '@vitest/pretty-format': 4.0.15 - tinyrainbow: 3.0.3 - '@vitest/utils@4.0.18': dependencies: '@vitest/pretty-format': 4.0.18 - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 '@vitest/utils@4.1.0': dependencies: '@vitest/pretty-format': 4.1.0 convert-source-map: 2.0.0 - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 + + '@vitest/utils@4.1.5': + dependencies: + '@vitest/pretty-format': 4.1.5 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 '@vue/compiler-core@3.4.37': dependencies: - '@babel/parser': 7.28.6 + '@babel/parser': 7.29.2 '@vue/shared': 3.4.37 entities: 5.0.0 estree-walker: 2.0.2 @@ -15685,7 +15668,7 @@ snapshots: '@vue/compiler-sfc@3.4.37': dependencies: - '@babel/parser': 7.28.6 + '@babel/parser': 7.29.2 '@vue/compiler-core': 3.4.37 '@vue/compiler-dom': 3.4.37 '@vue/compiler-ssr': 3.4.37 @@ -15916,7 +15899,7 @@ snapshots: dependencies: tslib: 2.8.1 - ast-v8-to-istanbul@0.3.12: + ast-v8-to-istanbul@1.0.0: dependencies: '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 @@ -15984,7 +15967,7 @@ snapshots: '@babel/core': 7.28.6 '@babel/helper-module-imports': 7.18.6 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.6) - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 html-entities: 2.3.3 parse5: 7.1.2 @@ -16720,7 +16703,7 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.9.3))(ts-node@10.9.2(@types/node@24.9.1)(typescript@5.9.3))(typescript@5.9.3): + cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.9.3))(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.9.3))(typescript@5.9.3): dependencies: '@types/node': 20.5.1 cosmiconfig: 8.3.6(typescript@5.9.3) @@ -18962,14 +18945,6 @@ snapshots: make-dir: 4.0.0 supports-color: 7.2.0 - istanbul-lib-source-maps@5.0.6: - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - debug: 4.4.3(supports-color@5.5.0) - istanbul-lib-coverage: 3.2.2 - transitivePeerDependencies: - - supports-color - istanbul-reports@3.2.0: dependencies: html-escaper: 2.0.2 @@ -19548,10 +19523,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - magicast@0.5.1: + magicast@0.5.2: dependencies: - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 source-map-js: 1.2.1 make-dir@3.1.0: @@ -20248,7 +20223,7 @@ snapshots: node-source-walk@7.0.0: dependencies: - '@babel/parser': 7.28.6 + '@babel/parser': 7.29.2 nodemailer@8.0.5: {} @@ -21921,10 +21896,10 @@ snapshots: statuses@2.0.2: {} - std-env@3.10.0: {} - std-env@4.0.0: {} + std-env@4.1.0: {} + stemmer@2.0.1: {} stickyfill@1.1.1: {} @@ -22507,6 +22482,8 @@ snapshots: tinyrainbow@3.0.3: {} + tinyrainbow@3.1.0: {} + tinyspy@4.0.4: {} tldts-core@7.0.19: {} From 5cb569e0e6274dbdb2afc9739485a691399d0f7e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Apr 2026 09:14:01 +0200 Subject: [PATCH 18/31] chore(deps-dev): bump @eslint/json from 1.0.1 to 1.2.0 (#7810) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [@eslint/json](https://github.com/eslint/json) from 1.0.1 to 1.2.0.
Release notes

Sourced from @​eslint/json's releases.

json: v1.2.0

1.2.0 (2026-03-16)

Features

json: v1.1.0

1.1.0 (2026-03-09)

Features

  • implement autofix for no-unnormalized-keys (#151) (fc3beec)

Bug Fixes

Changelog

Sourced from @​eslint/json's changelog.

1.2.0 (2026-03-16)

Features

1.1.0 (2026-03-09)

Features

  • implement autofix for no-unnormalized-keys (#151) (fc3beec)

Bug Fixes

Commits

Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- frontend/package.json | 2 +- pnpm-lock.yaml | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index f2a4edadb83b..38af68dbf817 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -76,7 +76,7 @@ "zod-urlsearchparams": "0.0.16" }, "devDependencies": { - "@eslint/json": "1.0.1", + "@eslint/json": "1.2.0", "@fortawesome/fontawesome-free": "5.15.4", "@monkeytype/oxlint-config": "workspace:*", "@monkeytype/typescript-config": "workspace:*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 965c8f90bb83..3fda589fca90 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -428,8 +428,8 @@ importers: version: 0.0.16(zod@3.23.8) devDependencies: '@eslint/json': - specifier: 1.0.1 - version: 1.0.1 + specifier: 1.2.0 + version: 1.2.0 '@fortawesome/fontawesome-free': specifier: 5.15.4 version: 5.15.4 @@ -2130,8 +2130,8 @@ packages: resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@1.1.0': - resolution: {integrity: sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==} + '@eslint/core@1.2.1': + resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/eslintrc@3.3.3': @@ -2142,8 +2142,8 @@ packages: resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/json@1.0.1': - resolution: {integrity: sha512-bE2nGv8/U+uRvQEJWOgCsZCa65XsCBgxyyx/sXtTHVv0kqdauACLzyp7A1C3yNn7pRaWjIt5acxY+TAbSyIJXw==} + '@eslint/json@1.2.0': + resolution: {integrity: sha512-CEFEyNgvzu8zn5QwVYDg3FaG+ZKUeUsNYitFpMYJAqoAlnw68EQgNbUfheSmexZr4n0wZPrAkPLuvsLaXO6wRw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/object-schema@2.1.7': @@ -2154,8 +2154,8 @@ packages: resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.6.0': - resolution: {integrity: sha512-bIZEUzOI1jkhviX2cp5vNyXQc6olzb2ohewQubuYlMXZ2Q/XjBO0x0XhGPvc9fjSIiUN0vw+0hq53BJ4eQSJKQ==} + '@eslint/plugin-kit@0.6.1': + resolution: {integrity: sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@exodus/bytes@1.8.0': @@ -12750,7 +12750,7 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/core@1.1.0': + '@eslint/core@1.2.1': dependencies: '@types/json-schema': 7.0.15 @@ -12770,10 +12770,10 @@ snapshots: '@eslint/js@9.39.1': {} - '@eslint/json@1.0.1': + '@eslint/json@1.2.0': dependencies: - '@eslint/core': 1.1.0 - '@eslint/plugin-kit': 0.6.0 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.6.1 '@humanwhocodes/momoa': 3.3.10 natural-compare: 1.4.0 @@ -12784,9 +12784,9 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 - '@eslint/plugin-kit@0.6.0': + '@eslint/plugin-kit@0.6.1': dependencies: - '@eslint/core': 1.1.0 + '@eslint/core': 1.2.1 levn: 0.4.1 '@exodus/bytes@1.8.0': {} From 3962e6e2261786428e12aed7e5f60cd3e9314613 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Apr 2026 09:16:52 +0200 Subject: [PATCH 19/31] chore(deps-dev): bump @commitlint/cli from 17.7.1 to 20.5.2 (#7811) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [@commitlint/cli](https://github.com/conventional-changelog/commitlint/tree/HEAD/@commitlint/cli) from 17.7.1 to 20.5.2.
Release notes

Sourced from @​commitlint/cli's releases.

v20.5.2

20.5.2 (2026-04-25)

Just minor dep updates before the next breaking change

Chore & Docs

New Contributors

Full Changelog: https://github.com/conventional-changelog/commitlint/compare/v20.5.1...v20.5.2

v20.5.1

20.5.1 (2026-03-31)

Bug Fixes

Reverts

Core & co

Full Changelog: https://github.com/conventional-changelog/commitlint/compare/v20.5.0...v20.5.1

v20.5.0

20.5.0 (2026-03-15)

Bug Fixes

... (truncated)

Changelog

Sourced from @​commitlint/cli's changelog.

20.5.2 (2026-04-25)

Note: Version bump only for package @​commitlint/cli

20.5.0 (2026-03-15)

Bug Fixes

  • cli: validate that --cwd directory exists before execution (#4658) (cf80f75), closes #4595

20.4.4 (2026-03-12)

Note: Version bump only for package @​commitlint/cli

20.4.3 (2026-03-03)

Bug Fixes

20.4.2 (2026-02-19)

Note: Version bump only for package @​commitlint/cli

20.4.1 (2026-02-02)

Note: Version bump only for package @​commitlint/cli

... (truncated)

Commits

Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 886 +++++++++++++------------------------------------ 2 files changed, 238 insertions(+), 650 deletions(-) diff --git a/package.json b/package.json index cdc61e5b2e43..dd670a5c8436 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "update-oxc": "pnpm up -D -r oxlint@latest oxfmt@latest oxlint-tsgolint@latest" }, "devDependencies": { - "@commitlint/cli": "17.7.1", + "@commitlint/cli": "20.5.2", "@commitlint/config-conventional": "19.2.2", "@monkeytype/release": "workspace:*", "@types/node": "24.9.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3fda589fca90..c7b57528f0d6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: .: devDependencies: '@commitlint/cli': - specifier: 17.7.1 - version: 17.7.1 + specifier: 20.5.2 + version: 20.5.2(@types/node@24.9.1)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1)(typescript@6.0.2) '@commitlint/config-conventional': specifier: 19.2.2 version: 19.2.2 @@ -58,13 +58,13 @@ importers: version: 3.7.1 stylelint: specifier: 17.6.0 - version: 17.6.0(typescript@5.9.3) + version: 17.6.0(typescript@6.0.2) stylelint-config-standard: specifier: 40.0.0 - version: 40.0.0(stylelint@17.6.0(typescript@5.9.3)) + version: 40.0.0(stylelint@17.6.0(typescript@6.0.2)) stylelint-config-standard-scss: specifier: 17.0.0 - version: 17.0.0(postcss@8.5.8)(stylelint@17.6.0(typescript@5.9.3)) + version: 17.0.0(postcss@8.5.8)(stylelint@17.6.0(typescript@6.0.2)) turbo: specifier: 2.7.5 version: 2.7.5 @@ -1442,79 +1442,79 @@ packages: resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} engines: {node: '>=0.1.90'} - '@commitlint/cli@17.7.1': - resolution: {integrity: sha512-BCm/AT06SNCQtvFv921iNhudOHuY16LswT0R3OeolVGLk8oP+Rk9TfQfgjH7QPMjhvp76bNqGFEcpKojxUNW1g==} - engines: {node: '>=v14'} + '@commitlint/cli@20.5.2': + resolution: {integrity: sha512-IXr5xd3IX8SEG936P8gcpozRplkDeDSwJlt8UvoY1winwIy2udTbQ/cOCgbaaxcjdDqVoS29VUcz/wkwnSozbA==} + engines: {node: '>=v18'} hasBin: true '@commitlint/config-conventional@19.2.2': resolution: {integrity: sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==} engines: {node: '>=v18'} - '@commitlint/config-validator@17.8.1': - resolution: {integrity: sha512-UUgUC+sNiiMwkyiuIFR7JG2cfd9t/7MV8VB4TZ+q02ZFkHoduUS4tJGsCBWvBOGD9Btev6IecPMvlWUfJorkEA==} - engines: {node: '>=v14'} - - '@commitlint/ensure@17.8.1': - resolution: {integrity: sha512-xjafwKxid8s1K23NFpL8JNo6JnY/ysetKo8kegVM7c8vs+kWLP8VrQq+NbhgVlmCojhEDbzQKp4eRXSjVOGsow==} - engines: {node: '>=v14'} + '@commitlint/config-validator@20.5.0': + resolution: {integrity: sha512-T/Uh6iJUzyx7j35GmHWdIiGRQB+ouZDk0pwAaYq4SXgB54KZhFdJ0vYmxiW6AMYICTIWuyMxDBl1jK74oFp/Gw==} + engines: {node: '>=v18'} - '@commitlint/execute-rule@17.8.1': - resolution: {integrity: sha512-JHVupQeSdNI6xzA9SqMF+p/JjrHTcrJdI02PwesQIDCIGUrv04hicJgCcws5nzaoZbROapPs0s6zeVHoxpMwFQ==} - engines: {node: '>=v14'} + '@commitlint/ensure@20.5.0': + resolution: {integrity: sha512-IpHqAUesBeW1EDDdjzJeaOxU9tnogLAyXLRBn03SHlj1SGENn2JGZqSWGkFvBJkJzfXAuCNtsoYzax+ZPS+puw==} + engines: {node: '>=v18'} - '@commitlint/format@17.8.1': - resolution: {integrity: sha512-f3oMTyZ84M9ht7fb93wbCKmWxO5/kKSbwuYvS867duVomoOsgrgljkGGIztmT/srZnaiGbaK8+Wf8Ik2tSr5eg==} - engines: {node: '>=v14'} + '@commitlint/execute-rule@20.0.0': + resolution: {integrity: sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==} + engines: {node: '>=v18'} - '@commitlint/is-ignored@17.8.1': - resolution: {integrity: sha512-UshMi4Ltb4ZlNn4F7WtSEugFDZmctzFpmbqvpyxD3la510J+PLcnyhf9chs7EryaRFJMdAKwsEKfNK0jL/QM4g==} - engines: {node: '>=v14'} + '@commitlint/format@20.5.0': + resolution: {integrity: sha512-TI9EwFU/qZWSK7a5qyXMpKPPv3qta7FO4tKW+Wt2al7sgMbLWTsAcDpX1cU8k16TRdsiiet9aOw0zpvRXNJu7Q==} + engines: {node: '>=v18'} - '@commitlint/lint@17.8.1': - resolution: {integrity: sha512-aQUlwIR1/VMv2D4GXSk7PfL5hIaFSfy6hSHV94O8Y27T5q+DlDEgd/cZ4KmVI+MWKzFfCTiTuWqjfRSfdRllCA==} - engines: {node: '>=v14'} + '@commitlint/is-ignored@20.5.0': + resolution: {integrity: sha512-JWLarAsurHJhPozbuAH6GbP4p/hdOCoqS9zJMfqwswne+/GPs5V0+rrsfOkP68Y8PSLphwtFXV0EzJ+GTXTTGg==} + engines: {node: '>=v18'} - '@commitlint/load@17.8.1': - resolution: {integrity: sha512-iF4CL7KDFstP1kpVUkT8K2Wl17h2yx9VaR1ztTc8vzByWWcbO/WaKwxsnCOqow9tVAlzPfo1ywk9m2oJ9ucMqA==} - engines: {node: '>=v14'} + '@commitlint/lint@20.5.0': + resolution: {integrity: sha512-jiM3hNUdu04jFBf1VgPdjtIPvbuVfDTBAc6L98AWcoLjF5sYqkulBHBzlVWll4rMF1T5zeQFB6r//a+s+BBKlA==} + engines: {node: '>=v18'} - '@commitlint/message@17.8.1': - resolution: {integrity: sha512-6bYL1GUQsD6bLhTH3QQty8pVFoETfFQlMn2Nzmz3AOLqRVfNNtXBaSY0dhZ0dM6A2MEq4+2d7L/2LP8TjqGRkA==} - engines: {node: '>=v14'} + '@commitlint/load@20.5.2': + resolution: {integrity: sha512-zmr0RGDz7vThxW1I8ohb9yBjnGuH9mqwJpn21hInjGla+IlLOkS9ey0+dD5HlkzFlY0lX2NYdA2lDW6/0rO7Gw==} + engines: {node: '>=v18'} - '@commitlint/parse@17.8.1': - resolution: {integrity: sha512-/wLUickTo0rNpQgWwLPavTm7WbwkZoBy3X8PpkUmlSmQJyWQTj0m6bDjiykMaDt41qcUbfeFfaCvXfiR4EGnfw==} - engines: {node: '>=v14'} + '@commitlint/message@20.4.3': + resolution: {integrity: sha512-6akwCYrzcrFcTYz9GyUaWlhisY4lmQ3KvrnabmhoeAV8nRH4dXJAh4+EUQ3uArtxxKQkvxJS78hNX2EU3USgxQ==} + engines: {node: '>=v18'} - '@commitlint/read@17.8.1': - resolution: {integrity: sha512-Fd55Oaz9irzBESPCdMd8vWWgxsW3OWR99wOntBDHgf9h7Y6OOHjWEdS9Xzen1GFndqgyoaFplQS5y7KZe0kO2w==} - engines: {node: '>=v14'} + '@commitlint/parse@20.5.0': + resolution: {integrity: sha512-SeKWHBMk7YOTnnEWUhx+d1a9vHsjjuo6Uo1xRfPNfeY4bdYFasCH1dDpAv13Lyn+dDPOels+jP6D2GRZqzc5fA==} + engines: {node: '>=v18'} - '@commitlint/resolve-extends@17.8.1': - resolution: {integrity: sha512-W/ryRoQ0TSVXqJrx5SGkaYuAaE/BUontL1j1HsKckvM6e5ZaG0M9126zcwL6peKSuIetJi7E87PRQF8O86EW0Q==} - engines: {node: '>=v14'} + '@commitlint/read@20.5.0': + resolution: {integrity: sha512-JDEIJ2+GnWpK8QqwfmW7O42h0aycJEWNqcdkJnyzLD11nf9dW2dWLTVEa8Wtlo4IZFGLPATjR5neA5QlOvIH1w==} + engines: {node: '>=v18'} - '@commitlint/rules@17.8.1': - resolution: {integrity: sha512-2b7OdVbN7MTAt9U0vKOYKCDsOvESVXxQmrvuVUZ0rGFMCrCPJWWP1GJ7f0lAypbDAhaGb8zqtdOr47192LBrIA==} - engines: {node: '>=v14'} + '@commitlint/resolve-extends@20.5.2': + resolution: {integrity: sha512-8EhSCU9eNos/5cI1yg64GW79UH1c64O69AfStCsj4zqy6An/qIphVEXj4/+2M6056T8coz00f+UXFn4WUUP1HQ==} + engines: {node: '>=v18'} - '@commitlint/to-lines@17.8.1': - resolution: {integrity: sha512-LE0jb8CuR/mj6xJyrIk8VLz03OEzXFgLdivBytoooKO5xLt5yalc8Ma5guTWobw998sbR3ogDd+2jed03CFmJA==} - engines: {node: '>=v14'} + '@commitlint/rules@20.5.0': + resolution: {integrity: sha512-5NdQXQEdnDPT5pK8O39ZA7HohzPRHEsDGU23cyVCNPQy4WegAbAwrQk3nIu7p2sl3dutPk8RZd91yKTrMTnRkQ==} + engines: {node: '>=v18'} - '@commitlint/top-level@17.8.1': - resolution: {integrity: sha512-l6+Z6rrNf5p333SHfEte6r+WkOxGlWK4bLuZKbtf/2TXRN+qhrvn1XE63VhD8Oe9oIHQ7F7W1nG2k/TJFhx2yA==} - engines: {node: '>=v14'} + '@commitlint/to-lines@20.0.0': + resolution: {integrity: sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw==} + engines: {node: '>=v18'} - '@commitlint/types@17.8.1': - resolution: {integrity: sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==} - engines: {node: '>=v14'} + '@commitlint/top-level@20.4.3': + resolution: {integrity: sha512-qD9xfP6dFg5jQ3NMrOhG0/w5y3bBUsVGyJvXxdWEwBm8hyx4WOk3kKXw28T5czBYvyeCVJgJJ6aoJZUWDpaacQ==} + engines: {node: '>=v18'} '@commitlint/types@19.8.1': resolution: {integrity: sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw==} engines: {node: '>=v18'} + '@commitlint/types@20.5.0': + resolution: {integrity: sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==} + engines: {node: '>=v18'} + '@conventional-changelog/git-client@1.0.1': resolution: {integrity: sha512-PJEqBwAleffCMETaVm/fUgHldzBE35JFk3/9LL6NUA5EXa3qednu+UT6M7E5iBu3zIQZCULYIiZ90fBYHt6xUw==} engines: {node: '>=18'} @@ -1527,9 +1527,17 @@ packages: conventional-commits-parser: optional: true - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} + '@conventional-changelog/git-client@2.7.0': + resolution: {integrity: sha512-j7A8/LBEQ+3rugMzPXoKYzyUPpw/0CBQCyvtTR7Lmu4olG4yRC/Tfkq79Mr3yuPs0SUitlO2HwGP3gitMJnRFw==} + engines: {node: '>=18'} + peerDependencies: + conventional-commits-filter: ^5.0.0 + conventional-commits-parser: ^6.4.0 + peerDependenciesMeta: + conventional-commits-filter: + optional: true + conventional-commits-parser: + optional: true '@csstools/color-helpers@5.1.0': resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} @@ -2637,9 +2645,6 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - '@js-sdsl/ordered-map@4.4.2': resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} @@ -3795,6 +3800,14 @@ packages: '@sideway/pinpoint@2.0.0': resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + '@simple-libs/child-process-utils@1.0.2': + resolution: {integrity: sha512-/4R8QKnd/8agJynkNdJmNw2MBxuFTRcNFnE5Sg/G+jkSsV8/UBgULMzhizWWW42p8L5H7flImV2ATi79Ove2Tw==} + engines: {node: '>=18'} + + '@simple-libs/stream-utils@1.2.0': + resolution: {integrity: sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==} + engines: {node: '>=18'} + '@sindresorhus/is@4.6.0': resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} @@ -4366,18 +4379,6 @@ packages: '@ts-rest/core': ~3.52.0 zod: ^3.22.3 - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} @@ -4489,9 +4490,6 @@ packages: '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - '@types/minimist@1.2.5': - resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - '@types/mjml-core@4.15.0': resolution: {integrity: sha512-jSRWTOpwRS/uHIBfGdvLl0a7MaoBZZYHKI+HhsFYChrUOKVJTnjSYsuV6wx0snv6ZaX3TUo5OP/gNsz/uzZz1A==} @@ -4507,9 +4505,6 @@ packages: '@types/node@20.14.11': resolution: {integrity: sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==} - '@types/node@20.5.1': - resolution: {integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==} - '@types/node@24.9.1': resolution: {integrity: sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==} @@ -4762,10 +4757,6 @@ packages: '@vue/shared@3.4.37': resolution: {integrity: sha512-nIh8P2fc3DflG8+5Uw8PT/1i17ccFn0xxN/5oE9RfV5SVnd7G0XEFRwakrnNFE/jlS95fpGXDVG5zDETS26nmg==} - JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true - abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} @@ -4793,10 +4784,6 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} - acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} @@ -4918,9 +4905,6 @@ packages: engines: {node: '>=10'} deprecated: This package is no longer supported. - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -4955,10 +4939,6 @@ packages: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} - arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - arrify@2.0.1: resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} engines: {node: '>=8'} @@ -5296,14 +5276,6 @@ packages: camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - camelcase-keys@6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} - engines: {node: '>=8'} - - camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} @@ -5613,14 +5585,14 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} - conventional-changelog-angular@6.0.0: - resolution: {integrity: sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==} - engines: {node: '>=14'} - conventional-changelog-angular@8.1.0: resolution: {integrity: sha512-GGf2Nipn1RUCAktxuVauVr1e3r8QrLP/B0lEUsFktmGqc3ddbQkhoJZHJctVU829U1c6mTSWftrVOCHaL85Q3w==} engines: {node: '>=18'} + conventional-changelog-angular@8.3.1: + resolution: {integrity: sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==} + engines: {node: '>=18'} + conventional-changelog-atom@5.0.0: resolution: {integrity: sha512-WfzCaAvSCFPkznnLgLnfacRAzjgqjLUjvf3MftfsJzQdDICqkOOpcMtdJF3wTerxSpv2IAAjX8doM3Vozqle3g==} engines: {node: '>=18'} @@ -5678,16 +5650,16 @@ packages: resolution: {integrity: sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==} engines: {node: '>=18'} - conventional-commits-parser@4.0.0: - resolution: {integrity: sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==} - engines: {node: '>=14'} - hasBin: true - conventional-commits-parser@6.2.1: resolution: {integrity: sha512-20pyHgnO40rvfI0NGF/xiEoFMkXDtkF8FwHvk5BokoFoCuTQRI8vrNCNFWUOfuolKJMm1tPCHc8GgYEtr1XRNA==} engines: {node: '>=18'} hasBin: true + conventional-commits-parser@6.4.0: + resolution: {integrity: sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw==} + engines: {node: '>=18'} + hasBin: true + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -5730,23 +5702,13 @@ packages: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} - cosmiconfig-typescript-loader@4.4.0: - resolution: {integrity: sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==} - engines: {node: '>=v14.21.3'} + cosmiconfig-typescript-loader@6.3.0: + resolution: {integrity: sha512-Akr82WH1Wfqatyiqpj8HDkO2o2KmJRu1FhKfSNJP3K4IdXwHfEyL7MOb62i1AGQVLtIQM+iCE9CGOtrfhR+mmA==} + engines: {node: '>=v18'} peerDependencies: '@types/node': '*' - cosmiconfig: '>=7' - ts-node: '>=10' - typescript: '>=4' - - cosmiconfig@8.3.6: - resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true + cosmiconfig: '>=9' + typescript: '>=5' cosmiconfig@9.0.1: resolution: {integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==} @@ -5770,9 +5732,6 @@ packages: resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} engines: {node: '>= 14'} - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - cron-parser@4.9.0: resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} engines: {node: '>=12.0.0'} @@ -5844,10 +5803,6 @@ packages: damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dargs@7.0.0: - resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} - engines: {node: '>=8'} - data-uri-to-buffer@6.0.2: resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} @@ -5912,14 +5867,6 @@ packages: supports-color: optional: true - decamelize-keys@1.1.1: - resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} - engines: {node: '>=0.10.0'} - - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - decimal.js@10.6.0: resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} @@ -6067,10 +6014,6 @@ packages: dezalgo@1.0.4: resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -6406,10 +6349,6 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - execa@7.2.0: resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} @@ -6584,10 +6523,6 @@ packages: resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} engines: {node: '>=18'} - find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -6812,18 +6747,17 @@ packages: resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} engines: {node: '>= 14'} - git-raw-commits@2.0.11: - resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} - engines: {node: '>=10'} - deprecated: This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead. - hasBin: true - git-raw-commits@5.0.0: resolution: {integrity: sha512-I2ZXrXeOc0KrCvC7swqtIFXFN+rbjnC7b2T943tvemIOVNl+XP8YnA9UVwqFhzzLClnSA60KR/qEjLpXzs73Qg==} engines: {node: '>=18'} deprecated: This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead. hasBin: true + git-raw-commits@5.0.1: + resolution: {integrity: sha512-Y+csSm2GD/PCSh6Isd/WiMjNAydu0VBiG9J7EdQsNA5P9uXvLayqjmTsNlK5Gs9IhblFZqOU0yid5Il5JPoLiQ==} + engines: {node: '>=18'} + hasBin: true + git-semver-tags@8.0.0: resolution: {integrity: sha512-N7YRIklvPH3wYWAR2vysaqGLPRcpwQ0GKdlqTiVN5w1UmCdaeY3K8s6DMKRCh54DDdzyt/OAB6C8jgVtb7Y2Fg==} engines: {node: '>=18'} @@ -6862,9 +6796,9 @@ packages: engines: {node: '>=12'} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - global-dirs@0.1.1: - resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} - engines: {node: '>=4'} + global-directory@5.0.0: + resolution: {integrity: sha512-1pgFdhK3J2LeM+dVf2Pd424yHx2ou338lC0ErNP2hPx4j8eW1Sp0XqSjNxtk6Tc4Kr5wlWtSvz8cn2yb7/SG/w==} + engines: {node: '>=20'} global-dirs@3.0.1: resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} @@ -6953,10 +6887,6 @@ packages: resolution: {integrity: sha512-Tz23LR9T9jOGVZm2x1EPdXqwA37G/owYMxRwU0E4miurAtFsPMQ1d2Jc2okUaSjZqAFz2oEn3FLXC5a0a+siyA==} engines: {node: '>=20.0.0'} - hard-rejection@2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} - harfbuzzjs@0.3.6: resolution: {integrity: sha512-dzf7y6NS8fiAIvPAL/VKwY8wx2HCzUB0vUfOo6h1J5UilFEEf7iYqFsvgwjHwvM3whbjfOMadNvQekU3KuRnWQ==} @@ -7034,13 +6964,6 @@ packages: hookified@2.1.1: resolution: {integrity: sha512-AHb76R16GB5EsPBE2J7Ko5kiEyXwviB9P5SMrAKcuAu4vJPZttViAbj9+tZeaQE5zjDme+1vcHP78Yj/WoAveA==} - hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - - hosted-git-info@4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} - hosted-git-info@7.0.2: resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} engines: {node: ^16.14.0 || >=18.0.0} @@ -7117,10 +7040,6 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - human-signals@4.3.1: resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} engines: {node: '>=14.18.0'} @@ -7212,6 +7131,10 @@ packages: resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} engines: {node: '>=10'} + ini@6.0.0: + resolution: {integrity: sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==} + engines: {node: ^20.17.0 || >=22.9.0} + inline-style-parser@0.2.7: resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} @@ -7400,9 +7323,9 @@ packages: resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} engines: {node: '>=12'} - is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} is-plain-object@5.0.0: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} @@ -7449,10 +7372,6 @@ packages: resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} engines: {node: '>= 0.4'} - is-text-path@1.0.1: - resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} - engines: {node: '>=0.10.0'} - is-typed-array@1.1.15: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} @@ -7663,10 +7582,6 @@ packages: jsonfile@6.2.1: resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} - jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - jsonpath-rfc9535@1.3.0: resolution: {integrity: sha512-3jFHya7oZ45aDxIIdx+/zQARahHXxFSMWBkcBUldfXpLS9VCXDJyTKt35kQfEXLqh0K3Ixw/9xFnvcDStaxh7Q==} engines: {node: '>=20'} @@ -7924,10 +7839,6 @@ packages: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -7962,9 +7873,6 @@ packages: lodash.isboolean@3.0.3: resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} - lodash.isfunction@3.0.9: - resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} - lodash.isinteger@4.0.4: resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} @@ -8010,9 +7918,6 @@ packages: lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} - lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - lodash.upperfirst@4.3.1: resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} @@ -8122,25 +8027,14 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - make-fetch-happen@13.0.1: resolution: {integrity: sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==} engines: {node: ^16.14.0 || >=18.0.0} - map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - map-obj@2.0.0: resolution: {integrity: sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==} engines: {node: '>=4'} - map-obj@4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} - mark.js@8.11.1: resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} @@ -8195,10 +8089,6 @@ packages: resolution: {integrity: sha512-EDYo6VlmtnumlcBCbh1gLJ//9jvM/ndXHfVXIFrZVr6fGcwTUyCTFNTLCKuY3ffbK8L/+3Mzqnd58RojiZqHVw==} engines: {node: '>=20'} - meow@8.1.2: - resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} - engines: {node: '>=10'} - merge-anything@5.1.7: resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} engines: {node: '>=12.13'} @@ -8294,10 +8184,6 @@ packages: resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} - minimist-options@4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} - minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -8673,13 +8559,6 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} hasBin: true - normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - - normalize-package-data@3.0.3: - resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} - engines: {node: '>=10'} - normalize-package-data@6.0.2: resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} engines: {node: ^16.14.0 || >=18.0.0} @@ -8695,10 +8574,6 @@ packages: resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - npm-run-path@5.3.0: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -8855,18 +8730,10 @@ packages: resolution: {integrity: sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==} engines: {node: '>=8'} - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} @@ -8883,10 +8750,6 @@ packages: resolution: {integrity: sha512-+N+s2g01w1Zch4D0K3OpnPDqLOKmLcQ4BvIFq3JC0K29R28vUOjWpO+OJZBNt8X9i3pFCksZJZ0YXkUGjaFE6g==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - pac-proxy-agent@7.0.2: resolution: {integrity: sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==} engines: {node: '>= 14'} @@ -9324,10 +9187,6 @@ packages: quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} - quick-lru@4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} - engines: {node: '>=8'} - quote-unquote@1.0.0: resolution: {integrity: sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==} @@ -9396,14 +9255,6 @@ packages: resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==} engines: {node: '>=18'} - read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - - read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - read-pkg@9.0.1: resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} engines: {node: '>=18'} @@ -9533,10 +9384,6 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - resolve-global@1.0.0: - resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} - engines: {node: '>=8'} - resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} @@ -9717,11 +9564,6 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - semver@7.7.3: resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} engines: {node: '>=10'} @@ -10010,9 +9852,6 @@ packages: split-ca@1.0.1: resolution: {integrity: sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==} - split2@3.2.2: - resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} - split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} @@ -10176,10 +10015,6 @@ packages: resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} engines: {node: '>=10'} - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} @@ -10412,10 +10247,6 @@ packages: text-decoding@1.0.0: resolution: {integrity: sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA==} - text-extensions@1.9.0: - resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} - engines: {node: '>=0.10'} - text-hex@1.0.0: resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} @@ -10430,9 +10261,6 @@ packages: resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==} engines: {node: '>=12.22'} - through2@4.0.2: - resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} - through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -10453,6 +10281,10 @@ packages: resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} engines: {node: '>=18'} + tinyexec@1.1.2: + resolution: {integrity: sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==} + engines: {node: '>=18'} + tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} @@ -10542,10 +10374,6 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true - trim-newlines@3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} - engines: {node: '>=8'} - triple-beam@1.4.1: resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} engines: {node: '>= 14.0.0'} @@ -10580,20 +10408,6 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - ts-node@10.9.2: - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - tsconfig-paths@4.2.0: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} @@ -10674,10 +10488,6 @@ packages: resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} engines: {node: '>=10'} - type-fest@0.18.1: - resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} - engines: {node: '>=10'} - type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} @@ -10686,14 +10496,6 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - - type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} @@ -10887,19 +10689,19 @@ packages: uuid@10.0.0: resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true - v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - valid-data-url@3.0.1: resolution: {integrity: sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==} engines: {node: '>=10'} @@ -11409,10 +11211,6 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -12252,128 +12050,125 @@ snapshots: '@colors/colors@1.6.0': {} - '@commitlint/cli@17.7.1': + '@commitlint/cli@20.5.2(@types/node@24.9.1)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1)(typescript@6.0.2)': dependencies: - '@commitlint/format': 17.8.1 - '@commitlint/lint': 17.8.1 - '@commitlint/load': 17.8.1 - '@commitlint/read': 17.8.1 - '@commitlint/types': 17.8.1 - execa: 5.1.1 - lodash.isfunction: 3.0.9 - resolve-from: 5.0.0 - resolve-global: 1.0.0 + '@commitlint/format': 20.5.0 + '@commitlint/lint': 20.5.0 + '@commitlint/load': 20.5.2(@types/node@24.9.1)(typescript@6.0.2) + '@commitlint/read': 20.5.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1) + '@commitlint/types': 20.5.0 + tinyexec: 1.1.2 yargs: 17.7.2 transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' + - '@types/node' + - conventional-commits-filter + - conventional-commits-parser + - typescript '@commitlint/config-conventional@19.2.2': dependencies: '@commitlint/types': 19.8.1 conventional-changelog-conventionalcommits: 7.0.2 - '@commitlint/config-validator@17.8.1': + '@commitlint/config-validator@20.5.0': dependencies: - '@commitlint/types': 17.8.1 + '@commitlint/types': 20.5.0 ajv: 8.20.0 - '@commitlint/ensure@17.8.1': + '@commitlint/ensure@20.5.0': dependencies: - '@commitlint/types': 17.8.1 + '@commitlint/types': 20.5.0 lodash.camelcase: 4.3.0 lodash.kebabcase: 4.1.1 lodash.snakecase: 4.1.1 lodash.startcase: 4.4.0 lodash.upperfirst: 4.3.1 - '@commitlint/execute-rule@17.8.1': {} + '@commitlint/execute-rule@20.0.0': {} - '@commitlint/format@17.8.1': + '@commitlint/format@20.5.0': dependencies: - '@commitlint/types': 17.8.1 - chalk: 4.1.2 + '@commitlint/types': 20.5.0 + picocolors: 1.1.1 - '@commitlint/is-ignored@17.8.1': + '@commitlint/is-ignored@20.5.0': dependencies: - '@commitlint/types': 17.8.1 - semver: 7.5.4 + '@commitlint/types': 20.5.0 + semver: 7.7.4 - '@commitlint/lint@17.8.1': + '@commitlint/lint@20.5.0': dependencies: - '@commitlint/is-ignored': 17.8.1 - '@commitlint/parse': 17.8.1 - '@commitlint/rules': 17.8.1 - '@commitlint/types': 17.8.1 + '@commitlint/is-ignored': 20.5.0 + '@commitlint/parse': 20.5.0 + '@commitlint/rules': 20.5.0 + '@commitlint/types': 20.5.0 - '@commitlint/load@17.8.1': + '@commitlint/load@20.5.2(@types/node@24.9.1)(typescript@6.0.2)': dependencies: - '@commitlint/config-validator': 17.8.1 - '@commitlint/execute-rule': 17.8.1 - '@commitlint/resolve-extends': 17.8.1 - '@commitlint/types': 17.8.1 - '@types/node': 20.5.1 - chalk: 4.1.2 - cosmiconfig: 8.3.6(typescript@5.9.3) - cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.9.3))(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.9.3))(typescript@5.9.3) - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 - lodash.uniq: 4.5.0 - resolve-from: 5.0.0 - ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.9.3) - typescript: 5.9.3 + '@commitlint/config-validator': 20.5.0 + '@commitlint/execute-rule': 20.0.0 + '@commitlint/resolve-extends': 20.5.2 + '@commitlint/types': 20.5.0 + cosmiconfig: 9.0.1(typescript@6.0.2) + cosmiconfig-typescript-loader: 6.3.0(@types/node@24.9.1)(cosmiconfig@9.0.1(typescript@6.0.2))(typescript@6.0.2) + is-plain-obj: 4.1.0 + lodash.mergewith: 4.6.2 + picocolors: 1.1.1 transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' + - '@types/node' + - typescript - '@commitlint/message@17.8.1': {} + '@commitlint/message@20.4.3': {} - '@commitlint/parse@17.8.1': + '@commitlint/parse@20.5.0': dependencies: - '@commitlint/types': 17.8.1 - conventional-changelog-angular: 6.0.0 - conventional-commits-parser: 4.0.0 + '@commitlint/types': 20.5.0 + conventional-changelog-angular: 8.3.1 + conventional-commits-parser: 6.4.0 - '@commitlint/read@17.8.1': + '@commitlint/read@20.5.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1)': dependencies: - '@commitlint/top-level': 17.8.1 - '@commitlint/types': 17.8.1 - fs-extra: 11.3.2 - git-raw-commits: 2.0.11 + '@commitlint/top-level': 20.4.3 + '@commitlint/types': 20.5.0 + git-raw-commits: 5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1) minimist: 1.2.8 + tinyexec: 1.1.2 + transitivePeerDependencies: + - conventional-commits-filter + - conventional-commits-parser - '@commitlint/resolve-extends@17.8.1': + '@commitlint/resolve-extends@20.5.2': dependencies: - '@commitlint/config-validator': 17.8.1 - '@commitlint/types': 17.8.1 - import-fresh: 3.3.1 + '@commitlint/config-validator': 20.5.0 + '@commitlint/types': 20.5.0 + global-directory: 5.0.0 + import-meta-resolve: 4.2.0 lodash.mergewith: 4.6.2 resolve-from: 5.0.0 - resolve-global: 1.0.0 - '@commitlint/rules@17.8.1': + '@commitlint/rules@20.5.0': dependencies: - '@commitlint/ensure': 17.8.1 - '@commitlint/message': 17.8.1 - '@commitlint/to-lines': 17.8.1 - '@commitlint/types': 17.8.1 - execa: 5.1.1 + '@commitlint/ensure': 20.5.0 + '@commitlint/message': 20.4.3 + '@commitlint/to-lines': 20.0.0 + '@commitlint/types': 20.5.0 - '@commitlint/to-lines@17.8.1': {} - - '@commitlint/top-level@17.8.1': - dependencies: - find-up: 5.0.0 + '@commitlint/to-lines@20.0.0': {} - '@commitlint/types@17.8.1': + '@commitlint/top-level@20.4.3': dependencies: - chalk: 4.1.2 + escalade: 3.2.0 '@commitlint/types@19.8.1': dependencies: '@types/conventional-commits-parser': 5.0.2 chalk: 5.6.2 + '@commitlint/types@20.5.0': + dependencies: + conventional-commits-parser: 6.4.0 + picocolors: 1.1.1 + '@conventional-changelog/git-client@1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1)': dependencies: '@types/semver': 7.7.1 @@ -12382,9 +12177,14 @@ snapshots: conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.2.1 - '@cspotcode/source-map-support@0.8.1': + '@conventional-changelog/git-client@2.7.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1)': dependencies: - '@jridgewell/trace-mapping': 0.3.9 + '@simple-libs/child-process-utils': 1.0.2 + '@simple-libs/stream-utils': 1.2.0 + semver: 7.7.4 + optionalDependencies: + conventional-commits-filter: 5.0.0 + conventional-commits-parser: 6.2.1 '@csstools/color-helpers@5.1.0': {} @@ -13497,11 +13297,6 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping@0.3.9': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 - '@js-sdsl/ordered-map@4.4.2': {} '@jsdevtools/ono@7.1.3': {} @@ -14456,6 +14251,12 @@ snapshots: '@sideway/pinpoint@2.0.0': {} + '@simple-libs/child-process-utils@1.0.2': + dependencies: + '@simple-libs/stream-utils': 1.2.0 + + '@simple-libs/stream-utils@1.2.0': {} + '@sindresorhus/is@4.6.0': {} '@sindresorhus/merge-streams@4.0.0': {} @@ -15091,14 +14892,6 @@ snapshots: openapi3-ts: 2.0.2 zod: 3.23.8 - '@tsconfig/node10@1.0.11': {} - - '@tsconfig/node12@1.0.11': {} - - '@tsconfig/node14@1.0.3': {} - - '@tsconfig/node16@1.0.4': {} - '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 @@ -15236,8 +15029,6 @@ snapshots: '@types/mime@1.3.5': {} - '@types/minimist@1.2.5': {} - '@types/mjml-core@4.15.0': {} '@types/mjml@4.7.4': @@ -15254,8 +15045,6 @@ snapshots: dependencies: undici-types: 5.26.5 - '@types/node@20.5.1': {} - '@types/node@24.9.1': dependencies: undici-types: 7.16.0 @@ -15685,11 +15474,6 @@ snapshots: '@vue/shared@3.4.37': {} - JSONStream@1.3.5: - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - abbrev@1.1.1: {} abbrev@2.0.0: {} @@ -15714,10 +15498,6 @@ snapshots: dependencies: acorn: 8.15.0 - acorn-walk@8.3.4: - dependencies: - acorn: 8.15.0 - acorn@8.15.0: {} acorn@8.16.0: {} @@ -15834,8 +15614,6 @@ snapshots: delegates: 1.0.0 readable-stream: 3.6.2 - arg@4.1.3: {} - argparse@2.0.1: {} aria-query@5.3.0: @@ -15871,8 +15649,6 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 - arrify@1.0.1: {} - arrify@2.0.1: {} as-array@2.0.0: {} @@ -16271,14 +16047,6 @@ snapshots: pascal-case: 3.1.2 tslib: 2.8.1 - camelcase-keys@6.2.2: - dependencies: - camelcase: 5.3.1 - map-obj: 4.3.0 - quick-lru: 4.0.1 - - camelcase@5.3.1: {} - camelcase@6.3.0: {} camelize@1.0.1: {} @@ -16586,11 +16354,11 @@ snapshots: content-type@1.0.5: {} - conventional-changelog-angular@6.0.0: + conventional-changelog-angular@8.1.0: dependencies: compare-func: 2.0.0 - conventional-changelog-angular@8.1.0: + conventional-changelog-angular@8.3.1: dependencies: compare-func: 2.0.0 @@ -16660,15 +16428,13 @@ snapshots: conventional-commits-filter@5.0.0: {} - conventional-commits-parser@4.0.0: + conventional-commits-parser@6.2.1: dependencies: - JSONStream: 1.3.5 - is-text-path: 1.0.1 - meow: 8.1.2 - split2: 3.2.2 + meow: 13.2.0 - conventional-commits-parser@6.2.1: + conventional-commits-parser@6.4.0: dependencies: + '@simple-libs/stream-utils': 1.2.0 meow: 13.2.0 convert-source-map@2.0.0: {} @@ -16703,30 +16469,21 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.9.3))(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.9.3))(typescript@5.9.3): + cosmiconfig-typescript-loader@6.3.0(@types/node@24.9.1)(cosmiconfig@9.0.1(typescript@6.0.2))(typescript@6.0.2): dependencies: - '@types/node': 20.5.1 - cosmiconfig: 8.3.6(typescript@5.9.3) - ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.9.3) - typescript: 5.9.3 - - cosmiconfig@8.3.6(typescript@5.9.3): - dependencies: - import-fresh: 3.3.1 - js-yaml: 4.1.1 - parse-json: 5.2.0 - path-type: 4.0.0 - optionalDependencies: - typescript: 5.9.3 + '@types/node': 24.9.1 + cosmiconfig: 9.0.1(typescript@6.0.2) + jiti: 2.6.1 + typescript: 6.0.2 - cosmiconfig@9.0.1(typescript@5.9.3): + cosmiconfig@9.0.1(typescript@6.0.2): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.1.1 parse-json: 5.2.0 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 cpu-features@0.0.10: dependencies: @@ -16741,8 +16498,6 @@ snapshots: crc-32: 1.2.2 readable-stream: 4.5.2 - create-require@1.1.1: {} - cron-parser@4.9.0: dependencies: luxon: 3.4.4 @@ -16818,8 +16573,6 @@ snapshots: damerau-levenshtein@1.0.8: {} - dargs@7.0.0: {} - data-uri-to-buffer@6.0.2: {} data-urls@6.0.0: @@ -16871,13 +16624,6 @@ snapshots: optionalDependencies: supports-color: 5.5.0 - decamelize-keys@1.1.1: - dependencies: - decamelize: 1.2.0 - map-obj: 1.0.1 - - decamelize@1.2.0: {} - decimal.js@10.6.0: {} decko@1.2.0: {} @@ -17019,8 +16765,6 @@ snapshots: asap: 2.0.6 wrappy: 1.0.2 - diff@4.0.2: {} - dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -17505,18 +17249,6 @@ snapshots: events@3.3.0: {} - execa@5.1.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - execa@7.2.0: dependencies: cross-spawn: 7.0.6 @@ -17817,11 +17549,6 @@ snapshots: find-up-simple@1.0.1: {} - find-up@4.1.0: - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - find-up@5.0.0: dependencies: locate-path: 6.0.0 @@ -18177,14 +17904,6 @@ snapshots: transitivePeerDependencies: - supports-color - git-raw-commits@2.0.11: - dependencies: - dargs: 7.0.0 - lodash: 4.17.21 - meow: 8.1.2 - split2: 3.2.2 - through2: 4.0.2 - git-raw-commits@5.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1): dependencies: '@conventional-changelog/git-client': 1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1) @@ -18193,6 +17912,14 @@ snapshots: - conventional-commits-filter - conventional-commits-parser + git-raw-commits@5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1): + dependencies: + '@conventional-changelog/git-client': 2.7.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1) + meow: 13.2.0 + transitivePeerDependencies: + - conventional-commits-filter + - conventional-commits-parser + git-semver-tags@8.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1): dependencies: '@conventional-changelog/git-client': 1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1) @@ -18249,9 +17976,9 @@ snapshots: minimatch: 5.1.9 once: 1.4.0 - global-dirs@0.1.1: + global-directory@5.0.0: dependencies: - ini: 1.3.8 + ini: 6.0.0 global-dirs@3.0.1: dependencies: @@ -18391,8 +18118,6 @@ snapshots: - bufferutil - utf-8-validate - hard-rejection@2.1.0: {} - harfbuzzjs@0.3.6: {} has-bigints@1.1.0: {} @@ -18447,12 +18172,6 @@ snapshots: hookified@2.1.1: {} - hosted-git-info@2.8.9: {} - - hosted-git-info@4.1.0: - dependencies: - lru-cache: 6.0.0 - hosted-git-info@7.0.2: dependencies: lru-cache: 10.4.3 @@ -18561,8 +18280,6 @@ snapshots: transitivePeerDependencies: - supports-color - human-signals@2.1.0: {} - human-signals@4.3.1: {} husky@8.0.1: {} @@ -18632,6 +18349,8 @@ snapshots: ini@2.0.0: {} + ini@6.0.0: {} + inline-style-parser@0.2.7: {} inquirer-autocomplete-prompt@2.0.1(inquirer@8.2.6): @@ -18832,7 +18551,7 @@ snapshots: is-path-inside@4.0.0: {} - is-plain-obj@1.1.0: {} + is-plain-obj@4.1.0: {} is-plain-object@5.0.0: {} @@ -18872,10 +18591,6 @@ snapshots: has-symbols: 1.1.0 safe-regex-test: 1.1.0 - is-text-path@1.0.1: - dependencies: - text-extensions: 1.9.0 - is-typed-array@1.1.15: dependencies: which-typed-array: 1.1.20 @@ -19088,8 +18803,6 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsonparse@1.3.1: {} - jsonpath-rfc9535@1.3.0: {} jsonpointer@5.0.1: {} @@ -19354,10 +19067,6 @@ snapshots: load-tsconfig@0.2.5: {} - locate-path@5.0.0: - dependencies: - p-locate: 4.1.0 - locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -19382,8 +19091,6 @@ snapshots: lodash.isboolean@3.0.3: {} - lodash.isfunction@3.0.9: {} - lodash.isinteger@4.0.4: {} lodash.isnumber@3.0.3: {} @@ -19416,8 +19123,6 @@ snapshots: lodash.truncate@4.4.2: {} - lodash.uniq@4.5.0: {} - lodash.upperfirst@4.3.1: {} lodash@4.17.21: {} @@ -19537,8 +19242,6 @@ snapshots: dependencies: semver: 7.7.4 - make-error@1.3.6: {} - make-fetch-happen@13.0.1: dependencies: '@npmcli/agent': 2.2.2 @@ -19557,12 +19260,8 @@ snapshots: - supports-color optional: true - map-obj@1.0.1: {} - map-obj@2.0.0: {} - map-obj@4.3.0: {} - mark.js@8.11.1: {} marked-terminal@7.1.0(marked@13.0.3): @@ -19599,20 +19298,6 @@ snapshots: meow@14.1.0: {} - meow@8.1.2: - dependencies: - '@types/minimist': 1.2.5 - camelcase-keys: 6.2.2 - decamelize-keys: 1.1.1 - hard-rejection: 2.1.0 - minimist-options: 4.1.0 - normalize-package-data: 3.0.3 - read-pkg-up: 7.0.1 - redent: 3.0.0 - trim-newlines: 3.0.1 - type-fest: 0.18.1 - yargs-parser: 20.2.9 - merge-anything@5.1.7: dependencies: is-what: 4.1.16 @@ -19685,12 +19370,6 @@ snapshots: dependencies: brace-expansion: 2.0.2 - minimist-options@4.1.0: - dependencies: - arrify: 1.0.1 - is-plain-obj: 1.1.0 - kind-of: 6.0.3 - minimist@1.2.8: {} minipass-collect@2.0.1: @@ -20248,20 +19927,6 @@ snapshots: dependencies: abbrev: 2.0.0 - normalize-package-data@2.5.0: - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.11 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 - - normalize-package-data@3.0.3: - dependencies: - hosted-git-info: 4.1.0 - is-core-module: 2.16.1 - semver: 7.7.4 - validate-npm-package-license: 3.0.4 - normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 @@ -20274,10 +19939,6 @@ snapshots: npm-normalize-package-bin@3.0.1: {} - npm-run-path@4.0.1: - dependencies: - path-key: 3.1.1 - npm-run-path@5.3.0: dependencies: path-key: 4.0.0 @@ -20505,18 +20166,10 @@ snapshots: p-defer@3.0.0: {} - p-limit@2.3.0: - dependencies: - p-try: 2.2.0 - p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - p-locate@4.1.0: - dependencies: - p-limit: 2.3.0 - p-locate@5.0.0: dependencies: p-limit: 3.1.0 @@ -20529,8 +20182,6 @@ snapshots: p-throttle@5.1.0: {} - p-try@2.2.0: {} - pac-proxy-agent@7.0.2: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 @@ -20955,8 +20606,6 @@ snapshots: quick-format-unescaped@4.0.4: {} - quick-lru@4.0.1: {} - quote-unquote@1.0.0: {} railroad-diagrams@1.0.0: {} @@ -21039,19 +20688,6 @@ snapshots: read-pkg: 9.0.1 type-fest: 4.41.0 - read-pkg-up@7.0.1: - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - - read-pkg@5.2.0: - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - read-pkg@9.0.1: dependencies: '@types/normalize-package-data': 2.4.4 @@ -21220,10 +20856,6 @@ snapshots: resolve-from@5.0.0: {} - resolve-global@1.0.0: - dependencies: - global-dirs: 0.1.1 - resolve-pkg-maps@1.0.0: {} resolve@1.22.11: @@ -21475,10 +21107,6 @@ snapshots: semver@6.3.1: {} - semver@7.5.4: - dependencies: - lru-cache: 6.0.0 - semver@7.7.3: {} semver@7.7.4: {} @@ -21852,10 +21480,6 @@ snapshots: split-ca@1.0.1: {} - split2@3.2.2: - dependencies: - readable-stream: 3.6.2 - split2@4.2.0: {} sprintf-js@1.1.3: {} @@ -22061,8 +21685,6 @@ snapshots: strip-comments@2.0.1: {} - strip-final-newline@2.0.0: {} - strip-final-newline@3.0.0: {} strip-indent@3.0.0: @@ -22100,33 +21722,33 @@ snapshots: optionalDependencies: react-dom: 18.3.1(react@18.3.1) - stylelint-config-recommended-scss@17.0.0(postcss@8.5.8)(stylelint@17.6.0(typescript@5.9.3)): + stylelint-config-recommended-scss@17.0.0(postcss@8.5.8)(stylelint@17.6.0(typescript@6.0.2)): dependencies: postcss-scss: 4.0.9(postcss@8.5.8) - stylelint: 17.6.0(typescript@5.9.3) - stylelint-config-recommended: 18.0.0(stylelint@17.6.0(typescript@5.9.3)) - stylelint-scss: 7.0.0(stylelint@17.6.0(typescript@5.9.3)) + stylelint: 17.6.0(typescript@6.0.2) + stylelint-config-recommended: 18.0.0(stylelint@17.6.0(typescript@6.0.2)) + stylelint-scss: 7.0.0(stylelint@17.6.0(typescript@6.0.2)) optionalDependencies: postcss: 8.5.8 - stylelint-config-recommended@18.0.0(stylelint@17.6.0(typescript@5.9.3)): + stylelint-config-recommended@18.0.0(stylelint@17.6.0(typescript@6.0.2)): dependencies: - stylelint: 17.6.0(typescript@5.9.3) + stylelint: 17.6.0(typescript@6.0.2) - stylelint-config-standard-scss@17.0.0(postcss@8.5.8)(stylelint@17.6.0(typescript@5.9.3)): + stylelint-config-standard-scss@17.0.0(postcss@8.5.8)(stylelint@17.6.0(typescript@6.0.2)): dependencies: - stylelint: 17.6.0(typescript@5.9.3) - stylelint-config-recommended-scss: 17.0.0(postcss@8.5.8)(stylelint@17.6.0(typescript@5.9.3)) - stylelint-config-standard: 40.0.0(stylelint@17.6.0(typescript@5.9.3)) + stylelint: 17.6.0(typescript@6.0.2) + stylelint-config-recommended-scss: 17.0.0(postcss@8.5.8)(stylelint@17.6.0(typescript@6.0.2)) + stylelint-config-standard: 40.0.0(stylelint@17.6.0(typescript@6.0.2)) optionalDependencies: postcss: 8.5.8 - stylelint-config-standard@40.0.0(stylelint@17.6.0(typescript@5.9.3)): + stylelint-config-standard@40.0.0(stylelint@17.6.0(typescript@6.0.2)): dependencies: - stylelint: 17.6.0(typescript@5.9.3) - stylelint-config-recommended: 18.0.0(stylelint@17.6.0(typescript@5.9.3)) + stylelint: 17.6.0(typescript@6.0.2) + stylelint-config-recommended: 18.0.0(stylelint@17.6.0(typescript@6.0.2)) - stylelint-scss@7.0.0(stylelint@17.6.0(typescript@5.9.3)): + stylelint-scss@7.0.0(stylelint@17.6.0(typescript@6.0.2)): dependencies: css-tree: 3.1.0 is-plain-object: 5.0.0 @@ -22136,9 +21758,9 @@ snapshots: postcss-resolve-nested-selector: 0.1.6 postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - stylelint: 17.6.0(typescript@5.9.3) + stylelint: 17.6.0(typescript@6.0.2) - stylelint@17.6.0(typescript@5.9.3): + stylelint@17.6.0(typescript@6.0.2): dependencies: '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) @@ -22148,7 +21770,7 @@ snapshots: '@csstools/selector-resolve-nested': 4.0.0(postcss-selector-parser@7.1.1) '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) colord: 2.9.3 - cosmiconfig: 9.0.1(typescript@5.9.3) + cosmiconfig: 9.0.1(typescript@6.0.2) css-functions-list: 3.3.3 css-tree: 3.2.1 debug: 4.4.3(supports-color@5.5.0) @@ -22441,8 +22063,6 @@ snapshots: text-decoding@1.0.0: {} - text-extensions@1.9.0: {} - text-hex@1.0.0: {} thenify-all@1.6.0: @@ -22455,10 +22075,6 @@ snapshots: throttle-debounce@5.0.2: {} - through2@4.0.2: - dependencies: - readable-stream: 3.6.2 - through@2.3.8: {} tiny-invariant@1.3.3: {} @@ -22471,6 +22087,8 @@ snapshots: tinyexec@1.0.2: {} + tinyexec@1.1.2: {} + tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.4) @@ -22542,8 +22160,6 @@ snapshots: tree-kill@1.2.2: {} - trim-newlines@3.0.1: {} - triple-beam@1.4.1: {} ts-algebra@1.2.2: {} @@ -22569,24 +22185,6 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-node@10.9.2(@types/node@20.5.1)(typescript@5.9.3): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 20.5.1 - acorn: 8.15.0 - acorn-walk: 8.3.4 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.9.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - tsconfig-paths@4.2.0: dependencies: json5: 2.2.3 @@ -22666,16 +22264,10 @@ snapshots: type-fest@0.16.0: {} - type-fest@0.18.1: {} - type-fest@0.20.2: {} type-fest@0.21.3: {} - type-fest@0.6.0: {} - - type-fest@0.8.1: {} - type-fest@4.41.0: {} type-is@1.6.18: @@ -22877,8 +22469,6 @@ snapshots: uuid@9.0.1: {} - v8-compile-cache-lib@3.0.1: {} - valid-data-url@3.0.1: {} valid-url@1.0.9: {} @@ -23608,8 +23198,6 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 - yn@3.1.1: {} - yocto-queue@0.1.0: {} zip-stream@6.0.1: From 515caf01eead68e161ec391e4e18d8c93cf2d998 Mon Sep 17 00:00:00 2001 From: Ma3ert <85261630+Ma3ert@users.noreply.github.com> Date: Thu, 30 Apr 2026 08:18:56 +0100 Subject: [PATCH 20/31] fix: added z-index to theme button when hovered (@Ma3ert) (#7814) ### Description In the theme section in setting, the selected theme is bigger and outlined, that caused it to appear of top of `themeBubbles`/`themeBubble` of the theme that is hovered on it's left. What I did is instead of only making the button bigger when hovered, I also added `z-index` so that it appears on top of the already selected theme. closes #7797 --- frontend/src/styles/settings.scss | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frontend/src/styles/settings.scss b/frontend/src/styles/settings.scss index 6aa5b86db954..05b4803dd89e 100644 --- a/frontend/src/styles/settings.scss +++ b/frontend/src/styles/settings.scss @@ -546,6 +546,9 @@ gap: 0.5rem; .button { transition: transform 0.125s; + &:hover { + z-index: 10; + } &:hover .themeBubbles { opacity: 1; } From 7666c6bc13833593e26d6fc95a1b557bfe80817a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Apr 2026 09:59:02 +0200 Subject: [PATCH 21/31] chore(deps): bump uuid from 10.0.0 to 14.0.0 (#7812) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [uuid](https://github.com/uuidjs/uuid) from 10.0.0 to 14.0.0.
Release notes

Sourced from uuid's releases.

v14.0.0

14.0.0 (2026-04-19)

⚠ BREAKING CHANGES

  • expect crypto to be global everywhere (requires node@20+) (#935)
  • drop node@18 support (#934)

Features

Bug Fixes

  • expect crypto to be global everywhere (requires node@20+) (#935) (f2c235f)
  • Use GITHUB_TOKEN for release-please and enable npm provenance (#925) (ffa3138)

v13.0.1

13.0.1 (2026-04-27)

Bug Fixes

  • backport fix for GHSA-w5hq-g745-h8pq (9d27ddf)

v13.0.0

13.0.0 (2025-09-08)

⚠ BREAKING CHANGES

  • make browser exports the default (#901)

Bug Fixes

v12.0.1

12.0.1 (2026-04-29)

Bug Fixes

  • backport fix for GHSA-w5hq-g745-h8pq (3d61d6a)

v12.0.0

12.0.0 (2025-09-05)

... (truncated)

Changelog

Sourced from uuid's changelog.

14.0.0 (2026-04-19)

Security

  • Fixes GHSA-w5hq-g745-h8pq: v3(), v5(), and v6() did not validate that writes would remain within the bounds of a caller-supplied buffer, allowing out-of-bounds writes when an invalid offset was provided. A RangeError is now thrown if offset < 0 or offset + 16 > buf.length.

⚠ BREAKING CHANGES

  • crypto is now expected to be globally defined (requires node@20+) (#935)
  • drop node@18 support (#934)
  • upgrade minimum supported TypeScript version to 5.4.3, in keeping with the project's policy of supporting TypeScript versions released within the last two years

13.0.0 (2025-09-08)

⚠ BREAKING CHANGES

  • make browser exports the default (#901)

Bug Fixes

12.0.0 (2025-09-05)

⚠ BREAKING CHANGES

  • update to typescript@5.2 (#887)
  • remove CommonJS support (#886)
  • drop node@16 support (#883)

Features

Bug Fixes

11.1.0 (2025-02-19)

... (truncated)

Commits
  • 7c1ea08 chore(main): release 14.0.0 (#926)
  • 3d2c5b0 Merge commit from fork
  • f2c235f fix!: expect crypto to be global everywhere (requires node@20+) (#935)
  • 529ef08 chore: upgrade TypeScript and fixup types (#927)
  • 086fd79 chore: update dependencies (#933)
  • dc4ddb8 feat!: drop node@18 support (#934)
  • 0f1f9c9 chore: switch to Biome for parsing and linting (#932)
  • e2879e6 chore: use maintained version of npm-run-all (#930)
  • ffa3138 fix: Use GITHUB_TOKEN for release-please and enable npm provenance (#925)
  • 0423d49 docs: remove obsolete v1 option notes (#915)
  • Additional commits viewable in compare view
Maintainer changes

This version was pushed to npm by GitHub Actions, a new releaser for uuid since your current version.

Install script changes

This version adds prepare script that runs during installation. Review the package contents before updating.


Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- backend/package.json | 2 +- pnpm-lock.yaml | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/backend/package.json b/backend/package.json index f82bfc41d38f..2706c897a8c1 100644 --- a/backend/package.json +++ b/backend/package.json @@ -53,7 +53,7 @@ "string-similarity": "4.0.4", "swagger-stats": "0.99.7", "ua-parser-js": "0.7.33", - "uuid": "10.0.0", + "uuid": "14.0.0", "winston": "3.6.0", "zod": "3.23.8" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c7b57528f0d6..18225be6a77b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -177,8 +177,8 @@ importers: specifier: 0.7.33 version: 0.7.33 uuid: - specifier: 10.0.0 - version: 10.0.0 + specifier: 14.0.0 + version: 14.0.0 winston: specifier: 3.6.0 version: 3.6.0 @@ -10692,6 +10692,10 @@ packages: deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true + uuid@14.0.0: + resolution: {integrity: sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==} + hasBin: true + uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). @@ -22465,6 +22469,8 @@ snapshots: uuid@10.0.0: {} + uuid@14.0.0: {} + uuid@8.3.2: {} uuid@9.0.1: {} From 35e1f8a14c084e910f26949915ea23ce7b8e4b87 Mon Sep 17 00:00:00 2001 From: Martin Namukombo Date: Thu, 30 Apr 2026 09:00:19 +0100 Subject: [PATCH 22/31] impr(languages): add Bemba language (@kopachef) (#7819) ### Description Adds Bemba language support to Monkeytype with three word lists: - `bemba` - `bemba_1k` - `bemba_10k` [Bemba](https://en.wikipedia.org/wiki/Bemba_language) is a Bantu language and is the most commonly spoken language in Zambia, with roughly 5-6 million speakers. I have had this language support working on a personal Monkeytype fork at https://typing.martinnn.com, and I wanted to contribute the language data upstream so it can be used by the wider Monkeytype community. Most of this data comes from work I did for my undergraduate thesis, where I built a morphological analyser for Bemba: https://project-archive.inf.ed.ac.uk/ug4/20244657/ug4_proj.pdf The language files use the BCP 47 tag `bem`, and include the metadata requested in the language contribution guide: - `rightToLeft: false` - `ligatures: false` - `orderedByFrequency: false` I also registered the new language variants in the schema and added them to a single Bemba language group. Validation run locally: ```bash pnpm run check-assets-languages ``` Result: Languages are all valid One note: the older checklist item mentions adding languages to `_list` and `_groups`. In the current codebase, those files have been replaced by `packages/schemas/src/ languages.ts` and `frontend/src/ts/constants/languages.ts`. This PR follows the current structure and passes `pnpm run check-assets-languages`. ### Checks - [ ] Adding quotes? - Make sure to follow the [quotes documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/QUOTES.md) - [ ] Make sure to include translations for the quotes in the description (or another comment) so we can verify their content. - [x] Adding a language? - Make sure to follow the [languages documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/LANGUAGES.md) - [x] Add language to `packages/schemas/src/languages.ts` - [x] Add language to exactly one group in `frontend/src/ts/constants/languages.ts` - [x] Add language json file to `frontend/static/languages` - [ ] Adding a theme? - Make sure to follow the [themes documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/THEMES.md) - [ ] Add theme to `packages/schemas/src/themes.ts` - [ ] Add theme to `frontend/src/ts/constants/themes.ts` - [ ] (optional) Add theme css file to `frontend/static/themes` - [ ] Add some screenshots of the theme, especially with different test settings (colorful, flip colors) to your pull request - [ ] Adding a layout? - [ ] Make sure to follow the [layouts documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/LAYOUTS.md) - [ ] Add layout to `packages/schemas/src/layouts.ts` - [ ] Add layout json file to `frontend/static/layouts` - [ ] Adding a font? - Make sure to follow the [fonts documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/FONTS.md) - [ ] Add font file to `frontend/static/webfonts` - [ ] Add font to `packages/schemas/src/fonts.ts` - [ ] Add font to `frontend/src/ts/constants/fonts.ts` - [ ] Check if any open issues are related to this PR; if so, be sure to tag them below. - [x] Make sure the PR title follows the Conventional Commits standard. (https://www.conventionalcommits.org for more info) - [x] Make sure to include your GitHub username prefixed with @ inside parentheses at the end of the PR title. Closes: n/a Co-authored-by: Jack --- frontend/src/ts/constants/languages.ts | 1 + frontend/static/languages/bemba.json | 210 + frontend/static/languages/bemba_10k.json | 10010 +++++++++++++++++++++ frontend/static/languages/bemba_1k.json | 1010 +++ packages/schemas/src/languages.ts | 3 + 5 files changed, 11234 insertions(+) create mode 100644 frontend/static/languages/bemba.json create mode 100644 frontend/static/languages/bemba_10k.json create mode 100644 frontend/static/languages/bemba_1k.json diff --git a/frontend/src/ts/constants/languages.ts b/frontend/src/ts/constants/languages.ts index 99ef9860be58..e5358d046d0e 100644 --- a/frontend/src/ts/constants/languages.ts +++ b/frontend/src/ts/constants/languages.ts @@ -185,6 +185,7 @@ export const LanguageGroups: Record = { jyutping: ["jyutping"], pinyin: ["pinyin", "pinyin_1k", "pinyin_10k"], hausa: ["hausa", "hausa_1k"], + bemba: ["bemba", "bemba_1k", "bemba_10k"], swedish: ["swedish", "swedish_1k", "swedish_diacritics"], serbian: ["serbian", "serbian_latin", "serbian_10k", "serbian_latin_10k"], georgian: ["georgian"], diff --git a/frontend/static/languages/bemba.json b/frontend/static/languages/bemba.json new file mode 100644 index 000000000000..da844649dca3 --- /dev/null +++ b/frontend/static/languages/bemba.json @@ -0,0 +1,210 @@ +{ + "name": "bemba", + "rightToLeft": false, + "ligatures": false, + "orderedByFrequency": false, + "bcp47": "bem", + "words": [ + "menshi", + "boi", + "ncende", + "kuncende", + "naikala", + "fimo", + "ifimuti", + "mumulu", + "bafwele", + "ibumba", + "ilyo", + "mune", + "ica", + "mumbali", + "nabekala", + "ico", + "ilya", + "ati", + "ama", + "moneka", + "buta", + "ba", + "ifyakufwala", + "abana", + "umbi", + "batatu", + "panse", + "elyo", + "anda", + "ilemoneka", + "wa", + "naikata", + "nabeminina", + "incende", + "abengi", + "apa", + "na", + "umuntu", + "naiminina", + "ukuti", + "fita", + "ca", + "kumbali", + "awe", + "buuta", + "ninshi", + "mupepi", + "umupila", + "nangula", + "aya", + "abalumendo", + "ee", + "ifi", + "umwanakashi", + "ishati", + "aka", + "ili", + "bambi", + "efyo", + "no", + "inkanda", + "balemoneka", + "limbi", + "nabafwala", + "ale", + "cine", + "namayo", + "kulemoneka", + "abaume", + "yabo", + "nalimo", + "cipalile", + "bale", + "ni", + "nomba", + "katapa", + "iya", + "kuti", + "shitata", + "kwena", + "mwi", + "abeminine", + "kabalwe", + "palya", + "ameenshi", + "ikwete", + "ishitali", + "petebulo", + "shi", + "uwiminine", + "alemoneka", + "nkanda", + "ici", + "akalumendo", + "yaba", + "muku", + "uyo", + "cilya", + "icilemoneka", + "kulubali", + "finshi", + "fye", + "mulu", + "ukuba", + "afwele", + "nayo", + "nabekata", + "abale", + "kanwa", + "pambali", + "bwangalo", + "nabambi", + "isabi", + "cile", + "ulubilo", + "akatalamukila", + "mumuulu", + "ifya", + "bene", + "munuma", + "wasosa", + "kwisa", + "natoloka", + "noku", + "uku", + "abaletamba", + "aleteya", + "konse", + "panshi", + "amolu", + "katwishi", + "ukumona", + "umukashana", + "tafwele", + "alifye", + "kukulyo", + "meenshi", + "panono", + "ukubomfya", + "pantashi", + "cikuulwa", + "imfula", + "kashikila", + "balumendo", + "untu", + "mpanga", + "alikwata", + "futi", + "amabwe", + "beta", + "ubwato", + "akamupila", + "cakwe", + "nakasote", + "kumulu", + "ncinga", + "walanda", + "abekele", + "icintu", + "insalu", + "ishingi", + "nikwisa", + "lamya", + "sha", + "kamo", + "netoloshi", + "nefyo", + "katapakatapa", + "walungika", + "muli", + "beshile", + "umunankwe", + "iyafita", + "makumbi", + "icimuti", + "bonse", + "abo", + "munshita", + "nakafwala", + "panuma", + "yakasuba", + "toloshi", + "banjo", + "imyotoka", + "lya", + "shile", + "tubili", + "kukuso", + "emulandu", + "pakutila", + "mayo", + "bwino", + "beka", + "pancende", + "shilemoneka", + "akabwa", + "ukuya", + "fili", + "umwana", + "nabika", + "nefimuti" + ] +} diff --git a/frontend/static/languages/bemba_10k.json b/frontend/static/languages/bemba_10k.json new file mode 100644 index 000000000000..4060a04ee951 --- /dev/null +++ b/frontend/static/languages/bemba_10k.json @@ -0,0 +1,10010 @@ +{ + "name": "bemba_10k", + "rightToLeft": false, + "ligatures": false, + "orderedByFrequency": false, + "bcp47": "bem", + "words": [ + "abafuma", + "abakashika", + "abalemonekela", + "abalemu", + "abampendwa", + "abanaka", + "abanakshi", + "abasambi", + "abikileko", + "acimfya", + "afukeme", + "aisanga", + "aishile", + "akaba", + "akakufwala", + "akambayambaya", + "akamwela", + "akontamine", + "alebelengela", + "alebula", + "alecitapo", + "aleeangala", + "aleipusha", + "alelomba", + "alemonekakofye", + "alemu", + "alemyanga", + "alesoma", + "aletolekela", + "aletuusha", + "aleyanga", + "alikanshiwa", + "alikosa", + "alikwati", + "alitula", + "alomfwa", + "amashitolo", + "amatoni", + "ambile", + "amwanakashi", + "angalafye", + "angalilamo", + "apalamine", + "apangile", + "apapita", + "ashitile", + "atoloke", + "ayanoono", + "aye", + "ayenga", + "babuuta", + "baiminika", + "bakepika", + "bakwatile", + "bakwelela", + "baleeya", + "balele", + "balelwishanya", + "balepitila", + "balepyanga", + "balesha", + "baleshelemuka", + "balesonta", + "baletushako", + "baleyangasha", + "balicikula", + "balika", + "baloseshe", + "bamusangonshi", + "bamwene", + "bandume", + "banshi", + "baponena", + "beach", + "bepikila", + "beseni", + "bosa", + "busy", + "cacikulwa", + "cakuicingilila", + "camu", + "cenjela", + "censa", + "chifwile", + "chimbaya", + "chishi", + "chofa", + "christmas", + "cikini", + "cilebutuka", + "cilifye", + "cilola", + "cimwenye", + "cinda", + "cinelubali", + "cipali", + "cipinda", + "cipooma", + "cisungu", + "citambala", + "citemwiko", + "ebale", + "ebele", + "eicena", + "ekale", + "elela", + "emupila", + "engishe", + "epobali", + "eponena", + "eule", + "eyi", + "fifwele", + "fila", + "filimo", + "fitafita", + "foloko", + "fukama", + "fulisha", + "fwaika", + "fwile", + "fyakaba", + "fyakubacingilila", + "fyalikwata", + "golf", + "ibe", + "ibikile", + "ibuku", + "icafina", + "icafunda", + "icamakumbimakumbi", + "ichushi", + "icikolopo", + "icikotikala", + "icilenga", + "icilepilibula", + "icilepita", + "icinanda", + "icingi", + "ifikankala", + "ifimunti", + "ifinga", + "ifwe", + "ifyakosa", + "ifyakwangalilapo", + "iimbwa", + "ikofi", + "ikumbi", + "ileecita", + "ilefumya", + "ileumfwa", + "imbukunya", + "incede", + "inceende", + "injuka", + "intampulo", + "ipekanya", + "ise", + "ishakosa", + "ishinankwe", + "ishishine", + "itaila", + "italanta", + "itatu", + "iyabuutulukila", + "iyilemoneka", + "iyinankwe", + "jeans", + "kabantu", + "kabemba", + "kafitulukila", + "kakaputula", + "kakulu", + "kaleangasha", + "kalebutukila", + "kalemonekafye", + "kalesamba", + "kaleshelemuka", + "kaletamba", + "kaleumfwa", + "kalishiba", + "kamashini", + "kamofye", + "kamutwe", + "karate", + "kasalu", + "kashiba", + "kasunga", + "kemishe", + "koloci", + "kopelako", + "koswe", + "kubali", + "kucofa", + "kufilecitika", + "kukopa", + "kumyabo", + "kunama", + "kunumayabo", + "kwakwa", + "kwalaba", + "kwangalilako", + "kwe", + "kweka", + "kwikalapo", + "kwipika", + "langilila", + "libala", + "linso", + "lishile", + "lishina", + "lishitima", + "lwakucimfyanya", + "lwimbo", + "lyabakemba", + "lyabalumendo", + "mall", + "masanso", + "matabo", + "matumba", + "microphone", + "minyololo", + "mubumi", + "mucangalo", + "mufyalo", + "mukashiba", + "mukayanda", + "mukuicena", + "mukulisha", + "mukulongana", + "mukulungisha", + "mukupanga", + "mukusambilila", + "mukuti", + "mukwingila", + "mulimonshi", + "mulume", + "mumishishi", + "munyanji", + "mutima", + "mwalanda", + "mwamona", + "mweo", + "mweshi", + "nabaana", + "nabafwale", + "nabekele", + "nabiika", + "nabutuka", + "nabutukisha", + "nafilwa", + "nafimbana", + "nafwalamo", + "nakabika", + "nakanina", + "nakuntanshi", + "namabotolo", + "namawilo", + "namufita", + "namumukoshi", + "napeteka", + "napilibula", + "napunamina", + "nasakula", + "nashalila", + "nati", + "naucimona", + "nayabuta", + "nayafita", + "nayafula", + "nayakashika", + "nayikwata", + "nchito", + "ndetontokanya", + "necaani", + "necinshingwa", + "nefimbayambaya", + "nefishilwa", + "nefisolobelo", + "nefyafiita", + "nemifwalile", + "neng", + "nesansa", + "neti", + "ngabale", + "ngakutila", + "ngeci", + "nibakemba", + "nicho", + "nikafundisha", + "nikalya", + "nikululamba", + "nimotoka", + "nipamusebo", + "nokutoloka", + "nokwisa", + "nolukombo", + "nolupwa", + "nomwine", + "noomwanakashi", + "nshatalamonapo", + "ntamfu", + "ooo", + "opo", + "pabukulu", + "pacakwangalilapo", + "pacibelushi", + "pacipanda", + "pacisankano", + "pacitunshi", + "pacungulo", + "pafimpelwa", + "pakowa", + "pakumona", + "pakwangalila", + "pakwipika", + "paleemoneka", + "palembelwe", + "palibemba", + "palibena", + "pamakasa", + "pamayanda", + "pambao", + "pamona", + "pamoolu", + "panta", + "pekele", + "peshati", + "pilibula", + "pintu", + "poka", + "posako", + "pusanako", + "sambilamo", + "sanafye", + "sekesha", + "shalikwata", + "shamalaiti", + "shifwele", + "shilebosa", + "shilelya", + "shileyenda", + "shilili", + "shiteya", + "shupa", + "sikulu", + "sompa", + "surfing", + "tabaposeleko", + "tafikwete", + "takakwata", + "tapale", + "tapalemonekapo", + "tatemwa", + "tukashana", + "tula", + "tulelya", + "tulifye", + "tumishilwa", + "tuputula", + "twaishiba", + "twali", + "twamalangi", + "ubulanda", + "ubulwele", + "ubwamba", + "ukubutusha", + "ukupalile", + "ukupepa", + "ukupwa", + "ukuseka", + "ukusekesha", + "ukutemwa", + "ukutina", + "ukutusha", + "ukutwala", + "ukuwina", + "ukuyako", + "ukwakukulyo", + "ulebakopa", + "uleshelela", + "ulukonto", + "ulwafunda", + "umofye", + "umubali", + "umuchanga", + "umunobe", + "umusambashi", + "umusana", + "umwakwikala", + "utubale", + "utukope", + "utumenso", + "utwakashikila", + "utwakatapakatapa", + "uu", + "uuleensha", + "uwabomba", + "uwainako", + "uwamwentula", + "uwikeleko", + "uwutali", + "violin", + "wabusaka", + "waci", + "wacibumba", + "waina", + "walubilo", + "wamabwe", + "wamwana", + "wanama", + "wanganda", + "wasanga", + "waseka", + "wikete", + "yabutuluka", + "yakwete", + "yalefwaya", + "yalibuta", + "yaliko", + "yalitemwa", + "yamoneka", + "yampepo", + "yamuli", + "yamwanakashi", + "yanshila", + "yapangwa", + "yenda", + "abeshile", + "babika", + "balelya", + "ilyabuta", + "mutanda", + "nabakashana", + "nentambo", + "nokuboko", + "tutu", + "menshi", + "amaka", + "ganda", + "nakaka", + "paku", + "umulimo", + "uwipi", + "yakamana", + "yaku", + "boi", + "abalemoneka", + "hahaha", + "mashini", + "ukwenda", + "yelangi", + "yu", + "ncende", + "kuncende", + "naikala", + "balecimfyanya", + "ifipe", + "ilecita", + "ukutoloka", + "umulandu", + "fimo", + "ifimuti", + "mumulu", + "balepita", + "fyakulya", + "ifimbaya", + "macungwa", + "maka", + "nayasama", + "palana", + "bafumine", + "emishe", + "icabuuta", + "lulamba", + "naumfwa", + "nyina", + "wabantu", + "yalikwata", + "bafwele", + "ifyapala", + "ishafita", + "namaluba", + "pakapuna", + "pene", + "ibumba", + "ilyo", + "alishiba", + "inama", + "indalama", + "ncito", + "yabantu", + "mune", + "ica", + "mumbali", + "amabimbi", + "balebomfya", + "baleimba", + "kambi", + "necisote", + "shileangala", + "utwingi", + "wafita", + "wishi", + "nabekala", + "alelolela", + "bapanga", + "ifyola", + "ileenda", + "mufyani", + "pamubili", + "ukuteya", + "wankanda", + "ico", + "ilya", + "abafishi", + "abaipekanya", + "abaishiba", + "abakutamba", + "abalendo", + "abalwele", + "abapalana", + "abaya", + "abekete", + "abomfya", + "abume", + "acilafwaya", + "afwilefye", + "akadoli", + "akakamwana", + "akalilaya", + "akonteme", + "aleangalafye", + "alebutusha", + "alechofa", + "alefwala", + "aleimya", + "alelele", + "alepikula", + "alepweneka", + "alesansa", + "aletushako", + "aletwala", + "aleyendela", + "alimumulu", + "alipamulu", + "aloseshe", + "amafupa", + "amagalo", + "amakofi", + "amakunda", + "amalata", + "american", + "amoneke", + "ani", + "ayabusaka", + "ayakatapakatapa", + "babwela", + "babyala", + "baci", + "baifimbile", + "baipanga", + "bakufyalo", + "bakumanina", + "balacita", + "balakwata", + "balapanga", + "balechofa", + "baleciluka", + "balelashanya", + "baleshitishapo", + "baletina", + "baletinta", + "balibyalapo", + "balilengapo", + "balingile", + "bamonenepo", + "bangala", + "bapa", + "basangwa", + "basungilamo", + "batontele", + "beene", + "bili", + "blue", + "bonsefye", + "buloko", + "bumbi", + "butilila", + "bwendo", + "bwinobwino", + "cabela", + "cakupapusha", + "capa", + "capwa", + "chafita", + "chapamo", + "chikalamba", + "chingilila", + "chishinka", + "cikashana", + "cilefwaya", + "citali", + "cup", + "cushi", + "efilya", + "efyakufwala", + "eifyo", + "eketeko", + "ekumona", + "ekuncende", + "enga", + "ensesha", + "euku", + "ewa", + "filemonekafye", + "filubi", + "fimpompo", + "fipepala", + "fisangwa", + "fitukutuku", + "fwaala", + "fyabana", + "fyakucingilila", + "fyanshi", + "gilashi", + "ibelele", + "ibuuku", + "ibwa", + "icabutulukila", + "icafitulukila", + "icena", + "ichili", + "icibumbwa", + "icilaka", + "icilelangilila", + "icimpopo", + "icingalenga", + "icipi", + "ififimbile", + "ififwala", + "ifiibi", + "ifisela", + "ifyabutulukila", + "ifyakupanga", + "ifyakushitisha", + "ifyalelema", + "ifyalepa", + "ilelwisha", + "ilenwa", + "ileyangalila", + "iminyololo", + "impongolo", + "ingamila", + "isaka", + "isheti", + "isitolo", + "isunga", + "iyaba", + "iyakatapakatapa", + "iyakuti", + "iyile", + "iyine", + "iyipi", + "kacibansa", + "kaleingila", + "kalepeluka", + "kalesekelela", + "kamawilo", + "kamukati", + "kamwaice", + "kangalila", + "kanoono", + "kanshila", + "kateka", + "koni", + "konka", + "konsefye", + "koowelamo", + "koti", + "kucinga", + "kuka", + "kuluba", + "kulumba", + "kumatobo", + "kupona", + "kutushimbi", + "kwama", + "kwamusango", + "leka", + "leta", + "lisukulu", + "liti", + "londolola", + "lubi", + "lyakwa", + "lyama", + "lyeno", + "mapepala", + "mfuti", + "microscope", + "misebo", + "misepela", + "miwaya", + "mo", + "mucibeseni", + "mucilindi", + "mucimpelwa", + "mucipi", + "mufimuti", + "mufintu", + "mukukopa", + "mukukwata", + "mukusekesha", + "mukwimba", + "mulasangwa", + "mulina", + "mumaluba", + "mumano", + "mupita", + "mwali", + "mwemfu", + "mwishikulu", + "nabacaice", + "nabaikala", + "nabamo", + "nabamwimya", + "nabapanga", + "nabashikakila", + "nabatantika", + "nabobene", + "nabonse", + "nacelwa", + "nacho", + "nacimupapusha", + "nafika", + "nafukamako", + "naibika", + "nainina", + "nakatoloka", + "nakumbata", + "nakumolu", + "napoosa", + "nashikala", + "nashipusana", + "nasuma", + "natambika", + "nateka", + "nayafulisha", + "nayapusana", + "nayi", + "necilemoneka", + "necilimba", + "necitabo", + "nefimiti", + "nefipampa", + "nefyakashika", + "nesapato", + "ngoyu", + "nibakafundisha", + "nibawishi", + "nimona", + "ninkashi", + "nishilya", + "nitulya", + "nkoko", + "nokumona", + "nokuulu", + "notuntu", + "notwabuuta", + "ntambi", + "nyali", + "obe", + "pabo", + "pacimuti", + "pacishimbi", + "pafikope", + "paipi", + "pakubala", + "pamfula", + "pangile", + "pani", + "panti", + "patanshi", + "pulasitiki", + "shamusango", + "shika", + "shikali", + "shiliko", + "skipa", + "sunga", + "taikwete", + "taili", + "takalemoneka", + "tandala", + "tauletontonkanya", + "telemuka", + "tempele", + "tenisi", + "teshibikwe", + "tola", + "tulemona", + "tusha", + "ubucingo", + "ubulangeti", + "ukufumina", + "ukukula", + "ukulala", + "ukulubali", + "ukuputula", + "ukuso", + "ukuuma", + "ukuyemba", + "ukwabuka", + "ukwabuuta", + "ukwashala", + "ukwebati", + "ulelanda", + "ululamba", + "ulupanga", + "ulwauma", + "ulwayemba", + "umulumedo", + "umusangwa", + "umwaana", + "unifomu", + "utushilwa", + "uulelanda", + "uusunsumene", + "uwacikoloci", + "uwafulwa", + "uwaipekanya", + "uwaishiba", + "uwakufyalo", + "uwapapa", + "volleyball", + "wakwanisha", + "walikwata", + "yabakashana", + "yalibutulukila", + "yalifiita", + "yalikosa", + "yalubansa", + "yamabwe", + "yamapepo", + "yamwaume", + "yandi", + "yangalila", + "yapalana", + "yayemba", + "zambia", + "akamana", + "alenina", + "ayapusana", + "bafwalile", + "balitemwa", + "icipampa", + "iikalamba", + "linga", + "munshila", + "tunshi", + "uwafita", + "ati", + "banina", + "iikulu", + "iletoloka", + "we", + "ama", + "moneka", + "buta", + "akaice", + "aliko", + "amoolu", + "ilinga", + "kunshi", + "nagula", + "shine", + "uwansansa", + "ba", + "ifyakufwala", + "abana", + "umbi", + "aleensha", + "balifye", + "icafiita", + "nasumina", + "niba", + "tulemoneka", + "yaiko", + "batatu", + "ayepi", + "nabena", + "nakulubantu", + "palunkoto", + "abanankwe", + "afwalile", + "cakutila", + "fwaka", + "kululamba", + "kwi", + "lyabuuta", + "mwituka", + "naya", + "te", + "umucanga", + "umwenso", + "utusote", + "bakwete", + "kwaba", + "wamupila", + "baleshitisha", + "cungulo", + "ilyashi", + "naima", + "yakashika", + "alebelenga", + "alelya", + "bashi", + "uukwete", + "wakuti", + "panse", + "apona", + "balebutuka", + "kumenso", + "lilemoneka", + "lolesha", + "shilebutuka", + "utumuti", + "elyo", + "ababulanda", + "abafulwa", + "abaleshita", + "abatemwana", + "afwa", + "akabula", + "akamawilo", + "akasuma", + "akete", + "akwatile", + "alebonfya", + "aleeya", + "aleitila", + "alemulolesha", + "alepupuka", + "alesefya", + "aleteyela", + "aletininka", + "aliishiba", + "amanambala", + "amoneka", + "anyantile", + "anyantilepo", + "apabuta", + "awee", + "baaba", + "babana", + "bacilolo", + "bafwale", + "baikakile", + "bakambatika", + "bakambatike", + "bakaputula", + "bakopa", + "bakopwe", + "bakumene", + "balanda", + "baleba", + "balecilikana", + "baleendafye", + "baleisambilisha", + "balelenga", + "balengapo", + "balepepa", + "balesefyapo", + "bamu", + "basket", + "bekabeka", + "bemakene", + "bemya", + "bikamo", + "boomba", + "bungabunga", + "buunga", + "bwitwa", + "caciine", + "caice", + "cakashikila", + "cakucingilila", + "chimo", + "chimuti", + "chinese", + "cilomfwika", + "cricket", + "eh", + "ekate", + "ekeele", + "epela", + "fimabwe", + "fipampa", + "fipe", + "football", + "foto", + "fulwa", + "fwalile", + "fyampepo", + "green", + "icakubaka", + "icakweba", + "ichikwete", + "ichimbaya", + "icipooma", + "icipyango", + "icitenge", + "ifidoli", + "ifiimuti", + "ifilelanga", + "ifiliko", + "ifilingile", + "ifisoselo", + "ifitenge", + "ifyabo", + "ifyakale", + "ifyakuicingililako", + "ifyantunti", + "iikali", + "ilebutukisha", + "iletusha", + "ilye", + "ilyelangi", + "iminika", + "imiputule", + "imishi", + "inciinga", + "inyanji", + "ishabutulukila", + "isitima", + "iwindo", + "iyabutuluka", + "iyama", + "iyapangwa", + "jacket", + "kalefuma", + "kalulu", + "kambatika", + "kaume", + "keensha", + "kolwe", + "kowelamo", + "kubasungu", + "kubili", + "kucintu", + "kukashimbi", + "kulefuma", + "kuloka", + "kumaliketi", + "kumfula", + "kumucingilila", + "kumulumendo", + "kupanga", + "kuposa", + "kwabula", + "kwambwa", + "kwibumba", + "likwete", + "lusuba", + "lwaba", + "lwamusebo", + "lwisha", + "lyabaume", + "lyali", + "lyamaluba", + "mailo", + "matanta", + "matebulo", + "milaini", + "mishipi", + "mone", + "monekele", + "mpoto", + "mucine", + "mukote", + "mukubomba", + "mukucofa", + "mukulumba", + "mukushelela", + "mukwisa", + "mumupila", + "mun", + "mutu", + "mututula", + "nabafika", + "nabaifimba", + "nabaikaka", + "nabamu", + "nabashintilisha", + "nabeminika", + "nafifulisha", + "naibutukisha", + "naikalipa", + "naikatisha", + "naingisha", + "naipeta", + "nakamwentula", + "nakufiita", + "nakufula", + "nakumbi", + "nakuminwe", + "nalo", + "naluba", + "namaloba", + "namatafwali", + "namwikala", + "napena", + "napenta", + "nasha", + "nashimya", + "natulumuna", + "natumbi", + "ncede", + "necikope", + "necimbayambaya", + "nefilimba", + "neluba", + "nemfuti", + "nemfwi", + "neyi", + "ngakuli", + "nincimona", + "nkoto", + "nokubutuka", + "nolubilo", + "nolupili", + "nomucanga", + "nomutenge", + "nomwingila", + "ntile", + "pacipepala", + "pakukopwa", + "pakupona", + "pakuposa", + "pakusamba", + "pakuwamya", + "pampela", + "pan", + "panceende", + "pensulo", + "phone", + "pila", + "pulashitiki", + "sakamana", + "sako", + "sambila", + "shalekana", + "soja", + "tabatemenwe", + "tafishibikwe", + "tambala", + "tampa", + "tantama", + "the", + "tolaika", + "twaba", + "twakwe", + "twala", + "ubukali", + "ubulendo", + "ubunkolanya", + "ukubelele", + "ukubikapofye", + "ukubuta", + "ukucena", + "ukufumishako", + "ukufyalwa", + "ukukuntu", + "ukupilibuka", + "ukupupuka", + "ukuteka", + "ukwafiita", + "ukwakwikala", + "ukwi", + "uleenda", + "ulekopa", + "ulemonekafye", + "ulufumo", + "ululemoneka", + "ulusokoshi", + "umwikala", + "upalile", + "utulimba", + "utumipeto", + "utushishi", + "utwakatapa", + "uukonteme", + "uulebutuka", + "uuletamba", + "uushifwele", + "uwabula", + "uwaishibisha", + "uwapakati", + "uwapangwa", + "uwatemwa", + "wafikope", + "waicena", + "waipusha", + "wakumaboko", + "walandafye", + "yakosa", + "yakumulu", + "yalusuba", + "yamenso", + "yancende", + "yaya", + "yeshitolo", + "yi", + "icani", + "kufyo", + "naku", + "ulwa", + "anda", + "ilemoneka", + "wa", + "naikata", + "cani", + "fitulukila", + "nalolesha", + "yabushiku", + "alepita", + "aleshelela", + "cimbi", + "ilyafita", + "malangi", + "nabeminina", + "incende", + "abengi", + "ayafita", + "calo", + "mumimonekele", + "mumutwe", + "mwine", + "nakobeka", + "nensansa", + "nishi", + "nsapato", + "umubiye", + "abansansa", + "abikile", + "akantu", + "injinga", + "line", + "yambwa", + "apa", + "na", + "umuntu", + "alecofa", + "ifimbayambaya", + "ifyaku", + "pama", + "naiminina", + "ukuti", + "akafita", + "amalaya", + "ayabuta", + "bamayo", + "icimpompo", + "ifyabuuta", + "nacikwata", + "ninshita", + "ukulu", + "yena", + "fita", + "mumeenshi", + "ca", + "kumbali", + "babikile", + "icakufwala", + "kuboko", + "nipa", + "balelanshanya", + "balimo", + "inshi", + "uto", + "abalebutuka", + "abemanine", + "abeni", + "aini", + "akabiye", + "akacinga", + "akakashikila", + "akakato", + "aleciluka", + "aledonsa", + "aleendafye", + "alefumina", + "alei", + "aleipekanya", + "alekunkulusha", + "alelondolola", + "alemukopa", + "aletentemuka", + "aleuma", + "alipa", + "amaala", + "amafya", + "apakalamba", + "ayayemba", + "ayayene", + "bacisa", + "bafwaya", + "baiposele", + "bakabolala", + "bakote", + "balafwala", + "balebonfya", + "baleetamba", + "baleeteya", + "balefunda", + "balefwaisha", + "baleloba", + "baleloleshanya", + "balepela", + "balesenda", + "baleteye", + "baleteyelamo", + "baletukusha", + "baleyendela", + "balongene", + "balyupana", + "banaka", + "baposa", + "basiketi", + "basunga", + "bateyelako", + "batile", + "beya", + "bimbi", + "bomfi", + "bumi", + "caalo", + "caka", + "cakale", + "cakwangalilapo", + "camera", + "capalakwati", + "chakwe", + "chibansa", + "chile", + "chita", + "cibuumba", + "cileenda", + "cilepilibula", + "cilolo", + "coni", + "ese", + "euyuwine", + "filechitika", + "fisote", + "fumba", + "fyabantu", + "fyakushitisha", + "fyalyuma", + "gini", + "gloves", + "ibomba", + "icaba", + "icakale", + "icakucimfyana", + "ichampepo", + "ichikulu", + "icibuumba", + "icimumana", + "icitunshitunshi", + "ifibi", + "ifilambu", + "ifilecita", + "ifima", + "ifyabusaka", + "ifyakulisha", + "ifyapangwa", + "ikete", + "ila", + "ilekonka", + "ilinso", + "imbali", + "imichanga", + "imilando", + "imiloleseshe", + "imisambo", + "impukunya", + "imyamfuli", + "ishatalala", + "ishikali", + "itaba", + "iyamakumbi", + "iyatalala", + "kabwato", + "kaletolokela", + "kamwene", + "kapeti", + "kucinfyanya", + "kukalale", + "kulilamo", + "kumunwe", + "kunkuluka", + "kutashi", + "kwakulyo", + "lala", + "libe", + "lishisha", + "losha", + "lulimi", + "lyamulopa", + "meno", + "moneni", + "mpompo", + "mubomfi", + "mubushiku", + "mucisungu", + "mukowa", + "mukulu", + "mukwensha", + "mulonga", + "mulongo", + "mumapili", + "mumona", + "mumubili", + "mwilangi", + "nababiye", + "nabaikata", + "nabaikumbata", + "nabanabo", + "nabashi", + "nabasunsumana", + "nabeekala", + "nacilila", + "naifika", + "naimininako", + "nakabotolo", + "nakalala", + "nakuli", + "nakwikala", + "nalimbi", + "namatobo", + "napakwikala", + "napapita", + "nashena", + "natambulula", + "natangila", + "nayasabuka", + "nayumfwa", + "necapala", + "nechisote", + "necimbaya", + "necipepala", + "nefipe", + "nendeleshi", + "nibanyina", + "nikemba", + "nimfula", + "nimpanga", + "nimumuputule", + "nincito", + "ninika", + "nipalya", + "nsabwa", + "ntemba", + "ofesi", + "pabula", + "pakashita", + "pakulanda", + "pambilibili", + "patu", + "penti", + "pentwa", + "pepekana", + "pili", + "pyanga", + "salu", + "sambilisha", + "shalishiba", + "shikala", + "shinga", + "shino", + "sumbu", + "taicenene", + "taile", + "takulemonekapo", + "tala", + "tantika", + "tapaba", + "tatemenwe", + "tauni", + "tayala", + "teifyo", + "telela", + "tina", + "tubokoshi", + "tumba", + "ubelele", + "ukubombela", + "ukulefumina", + "ukuloka", + "ukumwikata", + "ukupepeka", + "ukushili", + "ukutendeka", + "ukwabuta", + "ukwayemba", + "ulusapato", + "umubomfi", + "umufwi", + "umusalu", + "umushi", + "umwakusambila", + "umwano", + "usuma", + "utukwete", + "utunama", + "utupimpinya", + "ututabo", + "utwafiita", + "uulele", + "uulepita", + "uwacikalamba", + "uwishile", + "uyumusango", + "wabela", + "wamumana", + "wamusango", + "welangi", + "yabungululu", + "yafituluka", + "yakucimfyanya", + "yaliba", + "yamayanda", + "yampanga", + "yamuntu", + "yatalala", + "baleshana", + "lyafita", + "mumumana", + "nabanakashi", + "uukalamba", + "aletamba", + "ayatali", + "banyina", + "nabana", + "nasekelela", + "natemwa", + "nomwana", + "umwela", + "ifyalekana", + "takuli", + "awe", + "isho", + "lumendo", + "alebomfya", + "alekopa", + "bwangu", + "cakuti", + "mangalo", + "tuli", + "kashana", + "mumenso", + "nasenda", + "amayanda", + "bakateya", + "namenshi", + "ubwalwa", + "ukwikata", + "baali", + "icimbaya", + "ifilembo", + "kumona", + "mubwato", + "tekuti", + "ukusamba", + "umwine", + "kuliko", + "ukucila", + "buuta", + "ninshi", + "ayo", + "icafita", + "mupepi", + "umupila", + "ababomba", + "abalekopa", + "abaninine", + "abapita", + "abasansa", + "abesa", + "abwela", + "aciya", + "aiminina", + "aimya", + "akakalamba", + "akamwaume", + "akapampa", + "akapangwa", + "akwanisha", + "alebasa", + "alecofela", + "alekaka", + "alekweleka", + "aleloba", + "alelonga", + "alingile", + "alo", + "amagelashi", + "amapenga", + "amapindo", + "ameshi", + "apabusaka", + "aposa", + "asunsumene", + "ayashani", + "baantu", + "babe", + "balecimfyana", + "balekanalekana", + "balelangisha", + "balelanshyanya", + "balembapo", + "balembelepo", + "baleninika", + "baleta", + "baletuusha", + "baleyangalafye", + "balicipanga", + "banabwinga", + "bani", + "beeka", + "bulendo", + "bulungana", + "bushi", + "cakatapakatapa", + "caketi", + "camuntu", + "canshi", + "cimocine", + "cintubwingi", + "cipale", + "cipi", + "doli", + "ehee", + "ekucimfya", + "elefwaya", + "enekela", + "ewowine", + "fipalile", + "fyakukabanga", + "fyamalangi", + "fyela", + "fyena", + "hoki", + "icaalo", + "icapentwa", + "icibala", + "icilindi", + "icipepa", + "ififwalo", + "ifilimo", + "ifimpelwa", + "ileangasha", + "ilecitika", + "ilepala", + "iletamba", + "ililemoneka", + "iloleshe", + "imfwi", + "imishe", + "ingila", + "insofu", + "insoni", + "intambi", + "isolo", + "itambo", + "iyakalipa", + "iyaonda", + "iyapusanapusana", + "iyiminine", + "kabati", + "kaleyangasha", + "kanofye", + "kendulo", + "kope", + "kubene", + "kubika", + "kubomfya", + "kuchibumba", + "kukaba", + "kulupili", + "kumana", + "kumwabo", + "kunina", + "kushana", + "kushita", + "kwaiko", + "kwangalilamo", + "kwanisha", + "lonse", + "luntu", + "lyabakashana", + "makufi", + "matuka", + "mfwi", + "mitoi", + "mpunda", + "mubantu", + "mubiye", + "mucingilila", + "mucisankano", + "mucitemwiko", + "mukalashi", + "mukubutuka", + "mukucimona", + "mukutoloka", + "musangwa", + "mutundu", + "naasamuna", + "nacensa", + "nakapuna", + "nakatemwa", + "nakuntu", + "nalema", + "namumona", + "napisha", + "nasonta", + "natambalika", + "natwiminina", + "nauma", + "nchende", + "nda", + "necani", + "necisalu", + "nefimbaya", + "nefyabuuta", + "nefyafita", + "nemfula", + "ngabalya", + "nganinshi", + "ngapali", + "ngati", + "nimulya", + "ninani", + "njelwa", + "nkashi", + "nobwato", + "nokusekelela", + "nomwaice", + "notubana", + "notufyani", + "notwabuta", + "nse", + "nwina", + "pabwangalo", + "pakubomba", + "pakushana", + "parachute", + "park", + "peluka", + "pikica", + "ponena", + "sabuka", + "shabantu", + "shaku", + "shama", + "shimapepo", + "tabala", + "tabalatampa", + "taki", + "tamwaba", + "tangasa", + "tapone", + "tayakwata", + "tekumonafye", + "telyonse", + "tontonkanyo", + "tufwile", + "twena", + "ubwaku", + "uhm", + "ukubikako", + "ukui", + "ukuicingilila", + "ukukaba", + "ukulongana", + "ukulyo", + "ukupanta", + "ukusanga", + "ukusunga", + "ukuwama", + "ukwafitulukila", + "ukwaku", + "ulecita", + "uletipo", + "umuchila", + "umulando", + "umunoono", + "umwabuta", + "umwakupita", + "umwikele", + "utunwa", + "utwakwata", + "utwanakashi", + "utwapala", + "uuleteya", + "uushishibikwe", + "uwafitulukila", + "uwapita", + "wakweba", + "wapita", + "yabwato", + "yakucingilila", + "yakumwafwilisha", + "yakumwenako", + "yalepita", + "yalishiba", + "yamangalo", + "yamasako", + "yapo", + "yapona", + "endita", + "ombe", + "ulya", + "amabula", + "atemwa", + "nangula", + "akakashana", + "aleyangala", + "ifyakashika", + "impanga", + "kumonafye", + "naine", + "nemishishi", + "wakuminwe", + "aya", + "abalumendo", + "bafwala", + "balya", + "nensapato", + "paka", + "wabuta", + "ye", + "ii", + "kakwe", + "maluba", + "mulopa", + "ee", + "ifi", + "ifyafiita", + "ci", + "umwanakashi", + "aleimba", + "itebulo", + "nsansa", + "abaana", + "ifikulu", + "incito", + "lyelangi", + "shakwe", + "yamumana", + "amakalashi", + "baleyangala", + "ifisote", + "iminwe", + "mfula", + "nakutalala", + "ababusaka", + "abafita", + "abekala", + "afyelwe", + "akamushipi", + "akansansa", + "akatoloshi", + "akele", + "alecimfyanya", + "alecinda", + "aleensesha", + "alekutika", + "alelangilila", + "alepona", + "aleputa", + "aleshipula", + "aleyangalafye", + "amatafwali", + "amato", + "amatontonkanyo", + "anwine", + "apalembwa", + "asha", + "atampile", + "ayakwata", + "ayelangi", + "babomfi", + "balabomfya", + "balefumya", + "baleikata", + "balelemba", + "balepeluka", + "balepepeka", + "balepepekana", + "balepitamo", + "baleyensha", + "balupwa", + "banani", + "basalile", + "basenda", + "butusha", + "bwafya", + "calenga", + "cibelele", + "cifwiile", + "ciila", + "cileya", + "cinfyanya", + "cintelelwe", + "cishibikwe", + "cishimbi", + "citunshitunshi", + "enshya", + "fikalamba", + "fimashini", + "fitabo", + "fyakatapa", + "fyakuicingilila", + "fyatikama", + "ichafita", + "icibombelo", + "icilengwa", + "icimwela", + "icipe", + "icuuni", + "ifibusa", + "ifisalu", + "ifitambala", + "ifitekwa", + "ifyaba", + "ifyafina", + "ifyakusambilamo", + "ifyalo", + "ifyuni", + "ilelanga", + "ilyafitulukila", + "ilyakatapa", + "ingombe", + "inkuni", + "insoka", + "intanda", + "intunga", + "ipika", + "ishalekanalekana", + "itolokele", + "iyakosa", + "iyincende", + "iyisuma", + "kaku", + "kapinga", + "kumucila", + "kushelela", + "kwangalilapo", + "lituka", + "lungisha", + "lwendo", + "machungwa", + "macinga", + "monekafye", + "mpempo", + "mukulwisha", + "mukunina", + "mukuya", + "mukwayi", + "mumabumba", + "mumicanga", + "muntula", + "mupalamano", + "mushika", + "mutali", + "mwangashi", + "nabakumana", + "nabalume", + "nabapeta", + "nabasendwa", + "nabeka", + "nachikwata", + "nacimpapusha", + "nafintu", + "nafumya", + "nafwaala", + "naikakila", + "naikatapo", + "nakamupila", + "nakatambala", + "namalaya", + "naumo", + "neloba", + "nembale", + "nenkonto", + "nensala", + "ngechi", + "nicilya", + "nipakati", + "nkonto", + "nobulungu", + "nokupona", + "nokwikala", + "nomubili", + "nyanji", + "nyanta", + "onda", + "pamopene", + "panjinga", + "pansalu", + "papatala", + "pebumba", + "shamawilo", + "sheti", + "shimika", + "shisano", + "shunguluka", + "sitima", + "taata", + "taishiba", + "takule", + "taletina", + "taleumfwa", + "tatwishibe", + "tebonse", + "teshibe", + "tontonkanya", + "tubana", + "tusote", + "twaku", + "tweka", + "ubwiminine", + "ukulungisha", + "ukumu", + "ukushitisha", + "ulebutuka", + "umukaka", + "umulendo", + "umulongo", + "umulungu", + "umusuma", + "umwando", + "uno", + "utubokoshi", + "utubotolo", + "uuleimba", + "uwaba", + "uwasangalala", + "uwimine", + "walungama", + "yakunuma", + "yalupango", + "yamaluba", + "yashiko", + "yauma", + "fyabo", + "kwaliba", + "mung", + "shimbi", + "nefyakufwala", + "shitatu", + "bawishi", + "icikwete", + "mumwela", + "uwacaice", + "fibili", + "kantu", + "olo", + "yakwa", + "ababuuta", + "kumpela", + "lunkoto", + "tapali", + "ishati", + "abene", + "ishitima", + "iyafiita", + "namona", + "ntambo", + "aka", + "aletoloka", + "ifyapalana", + "naumbi", + "batata", + "honda", + "icabuta", + "ifyapusana", + "lyakwe", + "akali", + "amalaiti", + "babo", + "ifyampepo", + "abalelwa", + "abaleshana", + "abanoono", + "akamwaiche", + "akamwanakashi", + "aleebutuka", + "alefunda", + "alepekanisha", + "alikwisa", + "amabele", + "amabuku", + "amafuta", + "amwaume", + "anguka", + "apaku", + "apalile", + "aponena", + "asama", + "asendeme", + "ayakile", + "ayalefuma", + "ayatikama", + "babibili", + "babumba", + "bacitile", + "balekutika", + "balekwela", + "balelanga", + "balelumba", + "baleposa", + "bamona", + "bamwana", + "banabo", + "bekeleko", + "bekelemo", + "bemininefye", + "buntu", + "busuma", + "buuku", + "bwamupila", + "cakulya", + "caliba", + "celo", + "chintu", + "cilikwati", + "cingilisha", + "cinso", + "ciswebebe", + "ebene", + "ekelefye", + "ekelemo", + "elofuti", + "euli", + "filepala", + "filyafine", + "fimiti", + "fyamusangonshi", + "fyauma", + "ibimbi", + "icabulungana", + "icakosa", + "ichikalamba", + "ichintu", + "icifuba", + "iciminine", + "icisoselo", + "iciunda", + "ifiminine", + "ifyaani", + "ifyakuteyelamo", + "ifyama", + "iipi", + "ikali", + "ilesuma", + "imikate", + "imitanto", + "imitengo", + "impoto", + "imyendele", + "ina", + "inkonde", + "inkonya", + "inshiku", + "isa", + "ishilemoneka", + "iyamenshi", + "iyikwete", + "kashita", + "kasuma", + "kayanda", + "kobeka", + "kubwinga", + "kufintu", + "kulepita", + "kusefya", + "kwatalala", + "lubemba", + "lubuli", + "lwamupepi", + "mabele", + "malata", + "mashati", + "matoloshi", + "mpaka", + "muciswebebe", + "mufwile", + "mufya", + "mukabwato", + "mukashi", + "mukushitisha", + "mukwenda", + "mulepita", + "mutamba", + "mwisa", + "nabai", + "nabaposa", + "nabashifwika", + "nafi", + "nafifula", + "nafunga", + "nafuti", + "nagu", + "naicena", + "nakolwa", + "nakontamako", + "nakwaka", + "nalilongana", + "namatipa", + "naolola", + "napeminina", + "natonta", + "nayambi", + "ndeleshi", + "necipuna", + "necushi", + "nenjinga", + "ngabali", + "ngawalolekesha", + "ngoma", + "nikuncende", + "nipali", + "nipesa", + "nokushana", + "nombaline", + "nshiku", + "owa", + "pabwato", + "pachipuna", + "pacinso", + "pafwile", + "pakulya", + "pakushelela", + "panganda", + "panshila", + "pela", + "red", + "sanika", + "shelangi", + "shelemuka", + "shilifye", + "tabalefwaya", + "tacishibikwe", + "takafwele", + "taulemoneka", + "tayalemoneka", + "tebo", + "twalolesha", + "ukubali", + "ukucinfyanya", + "ukulanga", + "ukutampa", + "ukutampila", + "ukwendela", + "ulifye", + "ulukulu", + "uluse", + "umwabusaka", + "umwakwangalila", + "umwinshi", + "utwaku", + "uwacikulile", + "uwakwipikilamo", + "uwashika", + "walolesha", + "wiindo", + "yamusangonshi", + "yilemoneka", + "fyani", + "kucibumba", + "ili", + "ebo", + "umulilo", + "bambi", + "akanwa", + "amagalashi", + "kwine", + "snow", + "uwabuta", + "efyo", + "alelanda", + "cila", + "kuso", + "uutali", + "icikuulwa", + "kwata", + "tali", + "baba", + "ifikalamba", + "mushishi", + "nakulu", + "ukwa", + "umushipi", + "uo", + "no", + "inyimbo", + "napapa", + "nomukashana", + "inkanda", + "balemoneka", + "apatali", + "icakashika", + "umuputule", + "limbi", + "nabafwala", + "capamo", + "musango", + "ale", + "cine", + "abaina", + "abaleangala", + "abaleimba", + "abaleisa", + "abaleya", + "abanakwe", + "abanensu", + "abeene", + "acifuma", + "akatambo", + "alelengela", + "aleloleshapo", + "aleoca", + "aleponena", + "alesenda", + "amasaka", + "amone", + "angalilapo", + "apeminine", + "atemenwe", + "ayakatapa", + "ayamakumbi", + "ayamba", + "bacila", + "baciya", + "bakaka", + "bakulu", + "bakwelele", + "balecena", + "balekonka", + "balepenta", + "baletele", + "balisha", + "bambwa", + "bapangile", + "bapona", + "basambilila", + "butabuta", + "butukisha", + "camakumbi", + "ceka", + "chikulwa", + "chili", + "ciine", + "cilelangisha", + "cilubi", + "cipepala", + "donsa", + "eku", + "eyico", + "fensi", + "fikulu", + "filelanga", + "fimbayambaya", + "finama", + "fisabo", + "fisano", + "four", + "fyapusana", + "icatikama", + "ichimuti", + "icituku", + "icuni", + "ifwele", + "iiminine", + "ilikwati", + "imikalile", + "imilomo", + "imotoka", + "inchende", + "ino", + "intamfu", + "ishisuma", + "isumine", + "iwilo", + "iyamasako", + "jombo", + "kabwa", + "kafifi", + "kafikulwa", + "kapushi", + "kucimana", + "kufibumba", + "kukopelako", + "kulemonekela", + "kumuntu", + "kutamba", + "kwikata", + "kwipikilamo", + "lampi", + "lembwa", + "lukungu", + "lwaku", + "lwila", + "mafi", + "mawilo", + "mbayambaya", + "mendela", + "mpumi", + "mpundu", + "mucani", + "mucimuti", + "mucipatala", + "mufyashi", + "mukubatamba", + "mukukwela", + "mumeshi", + "munono", + "munshiku", + "museke", + "mushilika", + "mutulo", + "mutuntulu", + "mwaiche", + "mwilinga", + "nababikako", + "nabafulisha", + "nabaifwika", + "nabakulu", + "nabale", + "nabutusha", + "naibomba", + "nakumbatila", + "nanguline", + "napamo", + "napantu", + "napekala", + "naposeshako", + "nasakamana", + "nashinta", + "nato", + "ndecetekela", + "nefyabuta", + "nika", + "nokulya", + "nolupango", + "notumaluba", + "pafi", + "palemonekafye", + "palile", + "palufumo", + "pamipando", + "pashi", + "posela", + "sangwa", + "shapusana", + "tabeshibe", + "tungulula", + "ubunono", + "ukufwaya", + "ukulamba", + "ukuloba", + "ukumwena", + "ukusansamuka", + "ukusekelela", + "ukutola", + "ulukalamba", + "ulusuma", + "ulwakatapa", + "umona", + "umuseke", + "umuulu", + "utumishishi", + "utunoono", + "utusalu", + "utwaume", + "uwakosa", + "uwakuminwe", + "uwatekanya", + "wafumineko", + "wali", + "walishiba", + "yabalumendo", + "yabulalo", + "yaciya", + "yaleti", + "yalifita", + "yamotoka", + "yamupila", + "balesefya", + "e", + "lupili", + "mbali", + "ulunkoto", + "namayo", + "abacaice", + "akaputula", + "cibumba", + "intu", + "kufwala", + "nakalya", + "napa", + "tamba", + "wabo", + "kulemoneka", + "eico", + "munshi", + "abaume", + "yabo", + "nalimo", + "icakuti", + "nabemya", + "cipalile", + "bale", + "cangalo", + "napo", + "icola", + "yafiita", + "ehe", + "fyakufwala", + "maboko", + "basano", + "icitali", + "mukoshi", + "pamumana", + "twa", + "ilefwaya", + "nakaputula", + "ubusaka", + "abafumine", + "abaleshitisha", + "abapusanapusa", + "abeengi", + "akabokoshi", + "akakulu", + "akamusebo", + "akeminine", + "alepela", + "alesunka", + "aletusha", + "amasambililo", + "amwana", + "apekele", + "aponene", + "atoloka", + "babikako", + "bacili", + "bacipanga", + "bafika", + "bakashi", + "baleipekanya", + "balelishisha", + "baliba", + "balipanga", + "bekelefye", + "bulya", + "chaba", + "ciibi", + "cisoselo", + "cream", + "efyocilemoneka", + "emukuti", + "euyu", + "fikwete", + "fula", + "fumya", + "fyapalana", + "icinkupiti", + "ifilengwa", + "ifinshingwa", + "ifyakumucingilila", + "ifyakwata", + "ilenunsha", + "ililine", + "ilinono", + "inuma", + "ipala", + "ishakashikila", + "iyalekanalekana", + "iyiyine", + "kakashana", + "kaleenda", + "kalepepeka", + "kambwa", + "kantapa", + "kapinda", + "kolongana", + "kufimuti", + "kuya", + "lamba", + "lila", + "lutali", + "lyafitulukila", + "makamaka", + "makâsa", + "mucila", + "mucipuna", + "mucitabo", + "mukutusha", + "mulungu", + "mulunkoto", + "mumaloba", + "mumbi", + "mutende", + "mwandini", + "myaka", + "nabamufwika", + "nabawishi", + "nabifya", + "nacibutuka", + "naciminina", + "nafiminina", + "nafulwa", + "naibila", + "naikatako", + "nakabwa", + "nakasanika", + "nakatoloshi", + "nakuwama", + "namabala", + "napanta", + "nebotolo", + "nefyakunwa", + "ngaba", + "ngali", + "ngani", + "nibani", + "nokunwa", + "nolukungu", + "nomulilo", + "notuma", + "pakamupando", + "pakusefya", + "pamacinga", + "pamala", + "pantambo", + "pepo", + "pesa", + "punda", + "pupuka", + "sambililo", + "sando", + "stage", + "suba", + "sunsumana", + "tontokanya", + "ubwafwilisho", + "ukufula", + "ukufumya", + "ukula", + "ukunwina", + "ulukombo", + "ulupala", + "umutengo", + "umwanakshi", + "umwele", + "umwina", + "utusapato", + "uulefwaya", + "uusendele", + "uwabulanda", + "uwu", + "wakashikila", + "wakwata", + "wansekesha", + "yabemba", + "yacimana", + "yambusa", + "yamfula", + "yamutwe", + "yelinga", + "yetuka", + "yimbi", + "kucifulo", + "mabwe", + "nifyofine", + "iyabuta", + "mpepo", + "ni", + "ma", + "baliko", + "cimuti", + "ifyabuta", + "lyabuta", + "nomba", + "amashati", + "angalila", + "balelolela", + "katapa", + "kumaboko", + "mukanwa", + "abalekanalekana", + "babomfya", + "ifilecitika", + "mumusana", + "shabo", + "mona", + "abanono", + "bakwe", + "nakabili", + "ntanshi", + "ubushiku", + "abaminshinku", + "aciba", + "afike", + "afikile", + "akabungwe", + "akamusungu", + "alebeya", + "alefumya", + "aleikila", + "aleimbila", + "aleingila", + "aleisa", + "aleninika", + "alepanta", + "alesheleleka", + "aleshita", + "anininepo", + "babikamo", + "balaya", + "balecinfyanya", + "baleingila", + "balemulolesha", + "balenga", + "baleshanina", + "baletota", + "balibelela", + "balibika", + "batamba", + "brown", + "camoneka", + "canga", + "chinshi", + "cibe", + "cinefye", + "cipanda", + "citabo", + "cituku", + "coola", + "emine", + "filemonekela", + "filifye", + "fisuma", + "flag", + "fyaani", + "fyashi", + "icakuicingilila", + "icapangwa", + "icidoli", + "ifilengele", + "ifimuuti", + "ifumine", + "ifyakubacingilila", + "ikumi", + "ilemonekela", + "ileyenda", + "ilipi", + "imitolilo", + "impunda", + "infuti", + "inkafi", + "insale", + "kanya", + "katalamukila", + "kobe", + "kucalo", + "kucikulwa", + "kulisha", + "kumulundu", + "kwensha", + "mabimbi", + "macungwamacungwa", + "masambililo", + "mbeketi", + "mucaani", + "mucimana", + "mucintelelwe", + "mukushana", + "mukutola", + "mumotoka", + "mwilyashi", + "nabafukama", + "nabakobeka", + "nabwino", + "naikobeka", + "nalikolongana", + "namumusana", + "nashifwala", + "natolosha", + "natwikala", + "necikuulwa", + "nefikope", + "nenkoloko", + "njishibe", + "nkoloko", + "pabushiku", + "pacaani", + "pacende", + "pacifulo", + "pakatalamukila", + "pakupanga", + "pamangalo", + "pamu", + "panchende", + "saanafye", + "shilepita", + "sungu", + "swimming", + "taicene", + "tomato", + "tuma", + "twakashika", + "twatila", + "ukuciluka", + "ukukonka", + "ukulefuma", + "ukwakuya", + "ukwakwangalila", + "umufuko", + "umupita", + "umusumba", + "umutemwikwa", + "umutuntula", + "uwakashikila", + "uwasakamana", + "uwelangi", + "wayemba", + "yabwalwa", + "yachikulwa", + "yacimbaya", + "yakwangalilako", + "yanono", + "eyo", + "abakalamba", + "fwaya", + "icimbayambaya", + "mukwangala", + "iya", + "icibansa", + "namaayo", + "yacikulwa", + "bakashana", + "pamuulu", + "nanina", + "neshati", + "onse", + "yeka", + "icibumba", + "lumbi", + "umusango", + "balelisha", + "bashikulu", + "galashi", + "ifilimba", + "iyabuuta", + "kuti", + "filya", + "abaantu", + "abacikulile", + "abalecita", + "abaliko", + "acila", + "akashila", + "akatabo", + "aleefwaya", + "alelangisha", + "aleowa", + "alepunda", + "aleputula", + "aletelemuka", + "amalyashi", + "amatobo", + "amona", + "anaka", + "anga", + "baana", + "bafulile", + "baile", + "bakabomba", + "balaba", + "balecinda", + "baninine", + "batampa", + "bateyelamo", + "bemininepo", + "cakucimfyanya", + "cende", + "cibumbili", + "cilabushiku", + "cilelangilila", + "cilepupuka", + "cimfya", + "cipatala", + "epa", + "eyamukwai", + "fika", + "fikope", + "fitilila", + "fubefube", + "hockey", + "icabusaka", + "icela", + "ifibokoshi", + "ifilimwa", + "ifilyo", + "ifimabwe", + "ifinso", + "ifishilwa", + "ifyamalangi", + "ifyebo", + "ilele", + "imitundu", + "imyefu", + "inkoko", + "intungulushi", + "ipenga", + "itumbo", + "iyafiitulukila", + "jaketi", + "kakwata", + "kamumana", + "kasukulu", + "kubeya", + "kubombelamo", + "kuci", + "kucingilila", + "kukulu", + "kulebako", + "kwebo", + "lucelo", + "malonda", + "mucungulo", + "mukutila", + "musangonshi", + "mutuntulwa", + "mwafwa", + "nabekatilila", + "naikaka", + "naimona", + "nakumbali", + "nali", + "nalikala", + "namashiwi", + "nameno", + "napilibuka", + "nashibata", + "natu", + "nayikala", + "nempanga", + "nencende", + "nici", + "nikumbali", + "niwebo", + "nomunankwe", + "notupuna", + "notuputula", + "pacitesheni", + "ponene", + "pwisha", + "sama", + "shilepepeka", + "shilika", + "sweta", + "ta", + "taposeleko", + "teeti", + "ukubika", + "ukulola", + "ukwimya", + "ulubali", + "umuti", + "umwapita", + "unono", + "utwapusana", + "uulekopa", + "uwimishe", + "uwuli", + "wakata", + "wapona", + "yabela", + "yaci", + "yafitulukila", + "yakuntanshi", + "yampili", + "yasuma", + "yebumba", + "yengi", + "yetebulo", + "yobe", + "abafyashi", + "ifilemoneka", + "ulu", + "icifulo", + "mukutamba", + "nako", + "nefya", + "shikulubantu", + "yabuuta", + "shitata", + "kunse", + "uwikele", + "kwena", + "bola", + "kukuboko", + "ako", + "icili", + "ifyafita", + "nembwa", + "kule", + "namaboko", + "pacipuna", + "abafiita", + "abalecimfyanya", + "abamushinku", + "acili", + "akapala", + "akashita", + "akayanda", + "alepala", + "alepeepa", + "alepilibuka", + "aletelela", + "ayi", + "baciba", + "baikala", + "bakasukulu", + "bakuula", + "balesambilisha", + "baletolokela", + "bama", + "bapenta", + "bese", + "but", + "camangalo", + "cantunti", + "china", + "cibi", + "cilelanga", + "cisankano", + "cisano", + "ebali", + "fishinka", + "fyakashika", + "fyakatapakatapa", + "fyelangi", + "icakumucingilila", + "icakumulu", + "icisolobelo", + "icitemwiko", + "ifilifyonse", + "ilipo", + "imipila", + "in", + "isukulu", + "kanakashi", + "kashimbi", + "kata", + "kensha", + "kumu", + "kumwakwe", + "kusambilamo", + "lifwele", + "lyakatapakatapa", + "lyamutuntula", + "lyashi", + "mafufu", + "mucende", + "mucimbaya", + "mukulya", + "mukupona", + "mukuwa", + "muliko", + "mumikoshi", + "musungu", + "mwakwe", + "nababikapo", + "nabali", + "nafiwama", + "naikumbata", + "nainaka", + "naiponya", + "namumbali", + "nasansamuka", + "nashimbi", + "nashintilila", + "natolokela", + "necipampa", + "necitambala", + "nembao", + "nemishilwa", + "netangasa", + "nimukalale", + "nintemwa", + "nishita", + "nokulu", + "pakantu", + "pakwensha", + "pamatebulo", + "pano", + "pekanya", + "penta", + "petuka", + "states", + "teyela", + "tondolo", + "tuutu", + "twamona", + "ubusanshi", + "ukukwata", + "ukulolela", + "ukunaka", + "ukwima", + "ukwisula", + "umushinku", + "umutima", + "umwaku", + "utwapalana", + "was", + "yafwile", + "yalekanalekana", + "yanganda", + "yashani", + "busaka", + "kulyo", + "utunono", + "butuka", + "ukwabula", + "ukwangala", + "umukalamba", + "alebutuka", + "bumba", + "bwato", + "mwi", + "abeminine", + "kabalwe", + "palya", + "ameenshi", + "ikwete", + "ishitali", + "petebulo", + "shi", + "uwiminine", + "alemoneka", + "nkanda", + "ici", + "akalumendo", + "yaba", + "abalemukopa", + "afwale", + "afweele", + "akabale", + "akabotolo", + "akaiche", + "akalimba", + "akamakumbi", + "akwelelepo", + "alelola", + "amabwato", + "amafunde", + "amasanso", + "ayakashikila", + "ayakwete", + "bacingilila", + "bakobeka", + "bakobeke", + "balembele", + "balesa", + "balibikamo", + "ball", + "bapwisha", + "cabantu", + "camusango", + "chilepala", + "cibomba", + "cingililwa", + "citunshi", + "ekuli", + "emininefye", + "epali", + "fitali", + "ichani", + "icilelanga", + "icishinka", + "ifibala", + "ifyakulwa", + "ileebutuka", + "ilyabutulukila", + "imbushi", + "indyato", + "insamfi", + "isapato", + "ishalekana", + "ishiminine", + "iyaku", + "kalelya", + "kekete", + "kusamba", + "kwenda", + "lanshanya", + "leelo", + "limoline", + "milopa", + "mucalo", + "mukucita", + "mulemonekafye", + "musuma", + "mwenshi", + "nabaikakila", + "nabakaka", + "nabakontama", + "nabasha", + "nabikamo", + "naitemwa", + "nakali", + "nakamana", + "nakwena", + "namakumbi", + "namapulanga", + "nameenshi", + "namoneka", + "namwaka", + "ndalama", + "ndemonako", + "nensokoshi", + "netebulo", + "nimumpanga", + "pabantu", + "pabelele", + "pacipampa", + "pafintu", + "pakweba", + "palina", + "pampumi", + "pamusana", + "pamutenge", + "panoono", + "papa", + "pepa", + "pesamba", + "skate", + "sopo", + "tuleangala", + "twalolekesha", + "u", + "ukubelenga", + "ukucingilila", + "ukukopwa", + "ukuwamya", + "ukwakukuso", + "umulopa", + "umupeto", + "umwaba", + "utusuma", + "uwaku", + "uwamushishi", + "wampili", + "yacibumba", + "yamaboko", + "muku", + "uyo", + "cilya", + "icilemoneka", + "kulubali", + "finshi", + "fye", + "mulu", + "ukuba", + "afwele", + "nayo", + "nabekata", + "abale", + "kanwa", + "pambali", + "bwangalo", + "nabambi", + "isabi", + "abacikoloci", + "abaku", + "abalebatamba", + "abalefwaya", + "akatali", + "akelangi", + "alelanshanya", + "aletukusha", + "amakabe", + "amatebulo", + "baimika", + "balelungisha", + "balemukopa", + "baleowa", + "baleshelela", + "buumba", + "cakwangalilamo", + "calici", + "caliwama", + "cinama", + "epakuti", + "fyangalo", + "icipanda", + "icisebele", + "icitunshi", + "ifiingi", + "ifipi", + "ifyakucingilila", + "ifyoni", + "iinankwe", + "ileangalila", + "ilesamba", + "ilisuma", + "ilyakashikila", + "impendwa", + "inkunda", + "insala", + "iyafitulukila", + "iye", + "kacikulwa", + "kapuna", + "keke", + "kukutwi", + "kumayanda", + "kushitisha", + "kwatifye", + "kwimba", + "lyakatapa", + "maayo", + "matipa", + "matuuka", + "mipeto", + "monekela", + "mubusanso", + "mufyo", + "mululamba", + "mumisebo", + "mundeke", + "nabekela", + "nakasekelela", + "nakwatako", + "namatoloshi", + "nawo", + "nechola", + "nefipuna", + "nififine", + "nokulisha", + "nomusebo", + "nomwaume", + "pacani", + "pakashimbi", + "pakuya", + "pamaloba", + "pambi", + "pamucanga", + "shakwata", + "shiketi", + "shileya", + "twabuuta", + "ukulolekesha", + "ukumonafye", + "ukumoneka", + "ukuponena", + "ulunga", + "umulu", + "united", + "walishibafye", + "wapapa", + "yaciko", + "cile", + "ulubilo", + "akatalamukila", + "mumuulu", + "ifya", + "bene", + "munuma", + "wasosa", + "kwisa", + "natoloka", + "noku", + "uku", + "abaletamba", + "aleteya", + "konse", + "panshi", + "amolu", + "katwishi", + "ukumona", + "umukashana", + "tafwele", + "alifye", + "kukulyo", + "meenshi", + "panono", + "akanama", + "alekopwa", + "alepitamo", + "alepyanga", + "amabaka", + "babikapo", + "balemba", + "balemwentula", + "banankwe", + "bula", + "bwali", + "cakaena", + "cakwangasha", + "fyali", + "icakwangasha", + "icila", + "ifisolobelo", + "inchinga", + "indobo", + "kakwete", + "kamakumbi", + "kamupila", + "kopwa", + "kucita", + "kumbwa", + "loba", + "lyajinisi", + "mabumba", + "mimonekele", + "mucifulo", + "mukufwaya", + "mulukungu", + "mulundu", + "mumayanda", + "mumulongo", + "mumutenge", + "musange", + "nabamoneka", + "nabene", + "nabwila", + "nacena", + "naciwama", + "nafwaka", + "nakashati", + "nalambalala", + "namo", + "naumumona", + "nayimya", + "neco", + "nefishimbi", + "nimupepi", + "nipanse", + "nkomaki", + "pacibansa", + "pakulisha", + "pena", + "sebo", + "shileenda", + "shingi", + "shitali", + "suma", + "tapalemoneka", + "twabo", + "ubukulu", + "ukukopa", + "ukulila", + "umulepita", + "umunwe", + "utumipila", + "utwauma", + "uuleenda", + "uulelisha", + "uusuma", + "uwacilumendo", + "uwaonda", + "uwo", + "yaifi", + "yakatapa", + "ukubomfya", + "pantashi", + "cikuulwa", + "imfula", + "kashikila", + "balumendo", + "untu", + "mpanga", + "alikwata", + "futi", + "amabwe", + "beta", + "ubwato", + "ababiye", + "abateya", + "abe", + "aicene", + "akobeke", + "aleendela", + "alenda", + "alepepeka", + "apepi", + "ayalekanalekana", + "bafweele", + "baleangasha", + "balei", + "baleisa", + "balelolekesha", + "baluni", + "bashita", + "benga", + "bokoshi", + "camenshi", + "citesheni", + "fyama", + "icalo", + "icibwa", + "ifinono", + "ifyakashikila", + "imbila", + "imwene", + "kaka", + "kaki", + "kalecita", + "kalewa", + "kamotoka", + "kano", + "kosa", + "kuleemoneka", + "kulemonekako", + "kuteyelamo", + "kwaciba", + "kwikala", + "lembo", + "lwabemba", + "mabala", + "makwebo", + "mawaya", + "mipando", + "mufipuna", + "mukuboko", + "mukuteya", + "mumakufi", + "mutanto", + "mwena", + "nabalolesha", + "nai", + "naingila", + "nakambi", + "namakasa", + "natufwala", + "nayakwata", + "neko", + "nomu", + "notwa", + "oo", + "pacitukutuku", + "pamulimo", + "pamutanto", + "tefyo", + "tikama", + "ukwanka", + "ukwipika", + "umukasha", + "umukashi", + "umukoshi", + "umukuku", + "umwefu", + "utupepala", + "utwafita", + "uuleangala", + "uwufwele", + "waishiba", + "yane", + "akamupila", + "cakwe", + "nakasote", + "kumulu", + "ncinga", + "walanda", + "abekele", + "icintu", + "insalu", + "ishingi", + "nikwisa", + "lamya", + "sha", + "kamo", + "afika", + "akaku", + "akakwangasha", + "alesambilisha", + "alishibisha", + "apalemoneka", + "ayabutulukila", + "ayakosa", + "baishile", + "baleitomona", + "balemonekela", + "balenda", + "banga", + "capangwa", + "emukutila", + "fimbaya", + "fimofine", + "ibala", + "iciila", + "icikankala", + "icilambu", + "icinono", + "icongo", + "ifibombelo", + "ifimiti", + "ifye", + "iingi", + "ijaketi", + "ikele", + "ileemoneka", + "inyali", + "ishimbwa", + "itangasa", + "kampani", + "kashi", + "ke", + "kufi", + "kumfwa", + "kumwena", + "kwangalila", + "landa", + "lemba", + "lile", + "luli", + "micanga", + "minina", + "mishilwa", + "mucikope", + "mukamusebo", + "mukucimfya", + "mwa", + "mwenye", + "nabalala", + "nafimbipo", + "nalela", + "nasendama", + "nefikuulwa", + "nikulya", + "nomuntu", + "notushimbi", + "of", + "pacintu", + "palwendo", + "tamulemoneka", + "tulya", + "ukulanda", + "ukumwenafye", + "ukusambilila", + "ukutolokela", + "ulo", + "ulubao", + "umukate", + "umunyololo", + "utulemoneka", + "wakosa", + "netoloshi", + "nefyo", + "katapakatapa", + "walungika", + "muli", + "beshile", + "umunankwe", + "iyafita", + "makumbi", + "icimuti", + "bonse", + "abo", + "munshita", + "nakafwala", + "panuma", + "yakasuba", + "acita", + "alelolekesha", + "aletontonkanya", + "amabuula", + "ayale", + "ayapusanapusana", + "bafwelefye", + "balebika", + "baleoba", + "bamone", + "belela", + "belenga", + "bumo", + "busanso", + "bwaba", + "cilengele", + "computer", + "eto", + "fitatu", + "icipalile", + "ilyamaboko", + "imyaka", + "ishinono", + "itenti", + "iyapusana", + "konkili", + "lyabutulukila", + "lyakashikila", + "mapepo", + "mitwe", + "mucimbayambaya", + "mukusenda", + "nafimba", + "nakachola", + "nakatula", + "nakomfwa", + "nakontamina", + "namalangi", + "namotoka", + "nefyampepo", + "nelinga", + "ngacakuti", + "pacilibwe", + "putula", + "sansa", + "sefya", + "seka", + "shabuuta", + "shalitemwa", + "taponene", + "ubukalamba", + "ubwinga", + "ukubonfya", + "ukunwa", + "uleya", + "umbrella", + "utulubi", + "uuninine", + "watila", + "yacungulo", + "toloshi", + "banjo", + "imyotoka", + "lya", + "shile", + "tubili", + "kukuso", + "emulandu", + "pakutila", + "mayo", + "bwino", + "beka", + "pancende", + "shilemoneka", + "akwanishe", + "aleecita", + "aleoba", + "alesambilila", + "apalembelwe", + "apantu", + "atampa", + "ayapalana", + "ayauma", + "babuta", + "baka", + "baleipakisha", + "baleipika", + "balitemwana", + "bamupila", + "bombela", + "caani", + "cama", + "cilimba", + "ekatile", + "fibusa", + "filimu", + "fishimbi", + "gogo", + "icaketi", + "iciibi", + "icintelelwe", + "ifyakubomfya", + "iyakasuba", + "kamenshi", + "kumasanso", + "kwela", + "langa", + "le", + "li", + "libumba", + "lumba", + "lwine", + "maloba", + "mana", + "mukutandala", + "mumu", + "mwishitolo", + "nabatoloka", + "nakasalu", + "naliminina", + "namalembo", + "napalembwa", + "naubamona", + "naukwata", + "nefyaku", + "ngapo", + "nibanani", + "pacimana", + "pakunina", + "pepeka", + "pool", + "shafiita", + "shikipa", + "shopu", + "tacilemoneka", + "tale", + "twafita", + "ubuli", + "ubumi", + "ubutali", + "ukulenga", + "ukutalala", + "ukwiminina", + "umwangashi", + "wakutila", + "walolekesha", + "wambwa", + "windo", + "yabana", + "yalifye", + "akabwa", + "ukuya", + "fili", + "umwana", + "nabika", + "nefimuti", + "panshita", + "langi", + "pe", + "nga", + "umumana", + "uwakwata", + "ifyo", + "mutwe", + "fyonse", + "impili", + "shitaata", + "abombela", + "ah", + "akafwele", + "aleyangalila", + "amakaputula", + "amapulanga", + "baisa", + "bakwata", + "baleecita", + "balekula", + "baleseka", + "balibikako", + "banono", + "bansa", + "bekelepo", + "buku", + "bushilya", + "emanine", + "encito", + "icishimbi", + "icungulo", + "ilebosa", + "ilemonekafye", + "iliko", + "ilyamakumbi", + "imishilwa", + "ipalile", + "iyaina", + "iyelangi", + "kaleya", + "kubutuka", + "kucimfyanya", + "kuteya", + "lileenda", + "lubao", + "manenekela", + "mano", + "monse", + "mpumpumpu", + "mukuba", + "musumba", + "mwiloba", + "nabasansamuka", + "naifimba", + "nailolesha", + "naisala", + "nakumutwe", + "nakwiminina", + "nalikwata", + "nalosha", + "namabimbi", + "nempili", + "pakwimba", + "pamabeya", + "pambale", + "pamukoshi", + "pangwa", + "pelibwe", + "shakashika", + "tailemoneka", + "tambo", + "tenesi", + "tumuti", + "twishibe", + "ukuma", + "ulefwaya", + "uleisa", + "umulemendo", + "umulundu", + "umupando", + "umutolilo", + "umwamfuli", + "utufyola", + "waka", + "wamenshi", + "yabutulukila", + "yalefuma", + "yesu", + "amaluba", + "alelisha", + "umutwe", + "utwa", + "yonse", + "fimuti", + "umunono", + "abasungu", + "cifwile", + "cilemoneka", + "sana", + "amalangi", + "kulya", + "icikulu", + "mupila", + "ukufuma", + "aali", + "abakashi", + "abalemutamba", + "abamishinku", + "akachola", + "akalubi", + "akatambala", + "akwata", + "akwelele", + "alibelela", + "baleimbila", + "balelwisha", + "baletusha", + "balume", + "bamotoka", + "cakwata", + "cimfyana", + "cimotoka", + "emininepo", + "encende", + "ewuyu", + "galasi", + "icampempo", + "icanuma", + "icibokoshi", + "ileloka", + "inankwe", + "ishapusanapusana", + "iyamafufu", + "kalumendo", + "ko", + "kutila", + "lyabo", + "mukashila", + "mupeepi", + "nabaice", + "nabaposako", + "naci", + "nacimbi", + "naimyako", + "nakamuti", + "namashati", + "nikwi", + "nsokoshi", + "pampa", + "pamwela", + "shena", + "shila", + "shofolo", + "twine", + "ubulungu", + "ukwapusana", + "ukwishiba", + "umwipi", + "utumaluba", + "uukulu", + "wakwa", + "yacimuti", + "yalitalala", + "abakwata", + "akwete", + "balelolesha", + "yakwe", + "ekete", + "lyabantu", + "shonse", + "bantu", + "ifikope", + "fine", + "ulupili", + "kumbi", + "tata", + "tebulo", + "aleya", + "lintu", + "mucikulwa", + "umubili", + "ababomfi", + "abatemwikwa", + "ai", + "alepekanya", + "alesonta", + "ameno", + "bafyashi", + "baleemoneka", + "baposele", + "beemba", + "bwaku", + "bwakucimfyanya", + "cifuba", + "fipuna", + "foni", + "fyalekana", + "icakatapa", + "icikombe", + "icishiba", + "impaanga", + "inonshita", + "iyabusaka", + "kaletoloka", + "keminine", + "kubwaice", + "kukamana", + "kulina", + "lyamakumbimakumbi", + "machine", + "mpaanga", + "mukwangalila", + "muntuntula", + "mushipi", + "nabanani", + "nabemakana", + "naimbi", + "nakena", + "nalyo", + "namupita", + "nebumba", + "nefisote", + "nelya", + "nipamulandu", + "pacibumbili", + "sambilila", + "shibantu", + "ukuntu", + "ukupitila", + "ukwafita", + "umulume", + "umunabo", + "wakashika", + "wamya", + "wina", + "yafuma", + "yakatapakatapa", + "mukashana", + "muncende", + "amenso", + "imbi", + "pamenshi", + "makumbimakumbi", + "inshita", + "baleangala", + "ifikulwa", + "saana", + "limo", + "alelungisha", + "alepenta", + "amatuka", + "amatuuka", + "ayalengama", + "bakakile", + "baku", + "bashikulubantu", + "bemanine", + "cakwa", + "ciletulangilila", + "cipampa", + "eyaye", + "fifwile", + "ifyamakumbi", + "iko", + "ishitolo", + "iyayemba", + "iyikulu", + "kaleyangala", + "kamuti", + "kula", + "kumpanga", + "kumusebo", + "kunchende", + "mukali", + "mushi", + "nabanamayo", + "nacimona", + "nafwalako", + "nakufita", + "nawishiba", + "nayiminina", + "nikumpanga", + "nomucila", + "noyu", + "nsolokoto", + "pabulendo", + "pacikope", + "shilepepekana", + "shiminine", + "taba", + "ukuposa", + "wanyimbo", + "window", + "yakalamba", + "yamusango", + "yangu", + "yine", + "fimbi", + "yali", + "kuntashi", + "yafita", + "umwaume", + "bena", + "ifyani", + "emo", + "mutuntula", + "uwabuuta", + "akamwana", + "yalemoneka", + "ne", + "bushiku", + "icikalamba", + "aleipakisha", + "alipo", + "amapepala", + "apakwikala", + "ayaku", + "balenina", + "basketball", + "bateya", + "cakufwala", + "cisebele", + "ekafye", + "esho", + "fiko", + "fikuulwa", + "funda", + "fyamusango", + "ibili", + "icauma", + "icile", + "ifitukutuku", + "imendela", + "insolokoto", + "ipofu", + "ishakwata", + "ishapalana", + "kalifye", + "kanye", + "kunwa", + "kwaku", + "mabula", + "mumi", + "mumusumba", + "mushita", + "nayaka", + "nefimpompo", + "nefyakulya", + "noko", + "nokumwentula", + "nolunkoto", + "pabusanshi", + "paci", + "pakwebati", + "tabale", + "utwana", + "wacikope", + "wamanenekela", + "yafikulwa", + "yapa", + "icampepo", + "uli", + "aleangala", + "bafwile", + "icangalo", + "mumpanga", + "abalume", + "abatemwa", + "akapuna", + "akoni", + "aleyensha", + "alina", + "aliponene", + "amagogo", + "apapile", + "balelola", + "balelwila", + "balesekelela", + "batini", + "bulanda", + "bwine", + "cingeleshi", + "ekala", + "fyalekanalekana", + "i", + "icende", + "ifyafunda", + "ifyangalo", + "imipando", + "ishina", + "isumbu", + "iyabutulukila", + "iyinono", + "jinisi", + "kabo", + "kama", + "kulemonekafye", + "kumoolu", + "mufyakufwala", + "mwitumba", + "nabakumbatana", + "nabanyina", + "nabikapo", + "nacimo", + "nalolekesha", + "napali", + "nepo", + "nimbamona", + "nomumana", + "shifwile", + "shileangalila", + "tekutila", + "ukukana", + "ukwingisha", + "umupitile", + "muputule", + "umuli", + "aleenda", + "cintu", + "kalemoneka", + "balefwaya", + "abena", + "akakene", + "akakwata", + "alebombela", + "aleesha", + "aleikata", + "alepepa", + "aninine", + "asia", + "ciba", + "cimana", + "ekalile", + "elemoneka", + "ichi", + "icinama", + "ifiko", + "ifyofine", + "iine", + "ilibwe", + "iluba", + "imingila", + "inshimbi", + "iyikalamba", + "kabuuta", + "kuba", + "kumenshi", + "kumokwine", + "kutoloka", + "kwandi", + "makubi", + "muchikulwa", + "mushili", + "nabakalamba", + "nabamwentula", + "nabanaka", + "nabikako", + "nafwale", + "naibutuka", + "naimakana", + "namoolu", + "napona", + "nenkanda", + "nokwimba", + "nomushipi", + "nomutwe", + "nshimbi", + "ofeshi", + "po", + "senda", + "shaba", + "shali", + "shilefwaya", + "tafilemoneka", + "tumo", + "tupuna", + "ukweba", + "uletontonkanya", + "ulubuuto", + "umutanto", + "utwabuuta", + "uwabusaka", + "uwasansamuka", + "yabunga", + "nao", + "ing", + "menso", + "nankwe", + "kaputula", + "ukutila", + "nifinshi", + "abashala", + "alele", + "aletina", + "amba", + "bacaice", + "bakalamba", + "baleendela", + "balemona", + "basungila", + "ce", + "ichisote", + "icilengele", + "icinshingwa", + "ifipepala", + "ilaiti", + "kaleangala", + "kuleisa", + "likalamba", + "lupango", + "matobo", + "mucishiba", + "mulifye", + "mumatwi", + "mumusango", + "muno", + "mushinku", + "nabemina", + "naishiba", + "nakamwana", + "nayema", + "neminwe", + "nolulimi", + "sanso", + "shilya", + "twabuta", + "umfwa", + "umushilika", + "umwafita", + "utumabwe", + "wakwipikilamo", + "wandi", + "yang", + "kwakwe", + "baleenda", + "banakashi", + "ine", + "kunuma", + "mumuputule", + "bwa", + "iyi", + "fwala", + "mulemoneka", + "abasekelela", + "aleseka", + "aletinika", + "balishiba", + "cabwalwa", + "cikulu", + "cisuma", + "ewo", + "fyantunti", + "fyola", + "icakatapakatapa", + "ifyakaba", + "ifyayemba", + "ilefuma", + "imibili", + "ishile", + "ituuka", + "kakashika", + "kalisha", + "katapakatapaka", + "kubusanso", + "kwalifula", + "kwalitalala", + "maliketi", + "mbale", + "mfwalashi", + "mukumoneka", + "mukusamba", + "nabakwela", + "nabatantama", + "nafikwata", + "naitolokela", + "nakabalika", + "nakantu", + "nemyotoka", + "ngafilya", + "pona", + "rugby", + "tabali", + "tuleyangala", + "wabuuta", + "icisote", + "beminine", + "minwe", + "cifulo", + "ifili", + "ukuli", + "caba", + "ulemoneka", + "aleposa", + "aposele", + "balebutukila", + "balelosha", + "balibikapo", + "basendele", + "batantike", + "cakuteyelamo", + "cena", + "cikankala", + "ele", + "fyabuuta", + "fyafita", + "icimpelwa", + "ifibumba", + "inambala", + "ishabuuta", + "kashikilila", + "kekele", + "kelangi", + "makalashi", + "mishinku", + "moolu", + "mukusefya", + "nabalongana", + "namu", + "nayasamuna", + "necimpompo", + "pakutoloka", + "pamabwe", + "pancito", + "posa", + "sacha", + "shilebutukila", + "sitolo", + "tabakwete", + "taila", + "tukutuku", + "ukumfwa", + "weka", + "yamakumbi", + "baleya", + "filemoneka", + "lyena", + "abafwele", + "umo", + "akasuba", + "alechita", + "alelanga", + "alemwentula", + "balesambilila", + "baseball", + "batemwikwa", + "board", + "cilumendo", + "emwine", + "fyabuta", + "fyafiita", + "icayemba", + "icelangi", + "imisebo", + "itali", + "kumpili", + "mapulanga", + "milimo", + "mucipanda", + "mutenge", + "nabaume", + "nafimo", + "nashitata", + "necibumba", + "necintu", + "pacikulwa", + "pepi", + "shilecena", + "shileyangala", + "tenti", + "ukupoka", + "ukwatalala", + "umutende", + "utali", + "utubaice", + "utwakashika", + "wacikulwa", + "wafiita", + "wama", + "yamalangi", + "akasote", + "yabuta", + "pamenso", + "pamusebo", + "bana", + "ali", + "eminine", + "yamusebo", + "numa", + "afwile", + "umushishi", + "abalelisha", + "akakile", + "balechita", + "baleyangalila", + "balomfwa", + "besukulu", + "ekelepo", + "ekuti", + "esha", + "fwayo", + "icamakumbi", + "ifyelangi", + "iilemoneka", + "ileyangala", + "imfwalashi", + "imipeto", + "kaiko", + "kubelele", + "kufyalo", + "kumatwi", + "lolekesha", + "lwabo", + "muci", + "mulilo", + "mwandi", + "naiwe", + "nambala", + "namumulu", + "naposako", + "nde", + "ngefyo", + "pamolu", + "tunono", + "ubwafya", + "ukucofa", + "ukuulu", + "umulemoneka", + "utwaice", + "yalupili", + "icikulwa", + "ukuboko", + "mukwai", + "nimbona", + "ekele", + "amangalo", + "cinshi", + "ifitali", + "ile", + "akakwete", + "akana", + "amwene", + "balepekanya", + "bulauni", + "cikwete", + "eba", + "eo", + "icitendwe", + "ikulu", + "iletolokela", + "imbeketi", + "iyingi", + "iyitali", + "kompyuta", + "kumangalo", + "kumulandu", + "kwangala", + "mucintu", + "mumabwe", + "mumatumba", + "mumucanga", + "nafula", + "nashiminina", + "notusote", + "sabi", + "tabakwata", + "takulemoneka", + "ukwangasha", + "waiko", + "wiminine", + "wishibe", + "yakaena", + "yalya", + "yamwana", + "nafwala", + "ilangi", + "kasuba", + "mbwa", + "nabakwata", + "kukanwa", + "cibansa", + "icine", + "insapato", + "mumukoshi", + "abakwete", + "baleensha", + "balemutamba", + "cingalenga", + "ifyakucita", + "ifyakwangasha", + "ifyela", + "ilikwete", + "kucimuti", + "kuicingilila", + "kumpepo", + "lubilo", + "matwi", + "mumo", + "nailala", + "nakabala", + "napaapa", + "puna", + "shana", + "shilelwila", + "suti", + "ububi", + "ukuicena", + "ukushelela", + "ulutali", + "umufyashi", + "yaka", + "kali", + "bane", + "amasako", + "ku", + "cikulwa", + "mulandu", + "ya", + "ababantu", + "abaiche", + "akasalu", + "aleipika", + "alelosha", + "aleyangasha", + "bakula", + "balebelenga", + "balefuma", + "balewamya", + "basungu", + "bulemoneka", + "cimashini", + "gilasi", + "icakukopelako", + "icha", + "icingilila", + "ishafiita", + "kalashi", + "libwe", + "magalashi", + "monafye", + "mwaka", + "namayanda", + "nomupila", + "pacifuba", + "plastic", + "sansamuka", + "shelela", + "tennis", + "ukupita", + "umukote", + "umutenge", + "utukashana", + "uunono", + "wafilimba", + "yafimuti", + "bekele", + "naka", + "kwa", + "babili", + "pantu", + "umulumendo", + "yabili", + "alebika", + "alelila", + "amakasa", + "balala", + "fuma", + "fyeka", + "icakashikila", + "icibi", + "icoola", + "ilili", + "imfuti", + "infula", + "ishikwete", + "liletamba", + "lolela", + "mukasuba", + "mulya", + "namano", + "notumuti", + "ntunti", + "pala", + "ufwile", + "umufishi", + "utuli", + "walupili", + "utu", + "shili", + "incinga", + "baume", + "abakote", + "aleyenda", + "balebombela", + "bateyela", + "be", + "filimba", + "fyalo", + "ice", + "icisalu", + "imimonekele", + "inganda", + "kaba", + "kabola", + "kucibansa", + "kusuma", + "kwangasha", + "lemoneka", + "lutwe", + "nabanankwe", + "napeta", + "nefilembo", + "nefyola", + "nimumona", + "nsale", + "pabulalo", + "pushi", + "takwaba", + "ukulwa", + "ukusangwa", + "ukwamba", + "uwayemba", + "yapusanapusana", + "bali", + "ilebutuka", + "imishishi", + "shati", + "umusebo", + "mu", + "akalemoneka", + "aleciita", + "alemonekafye", + "america", + "bacita", + "bakafundisha", + "baloleshe", + "bashilika", + "beminike", + "buli", + "cimpompo", + "citika", + "iciine", + "icipepala", + "impiya", + "ishikulu", + "lyaba", + "mukucimfyanya", + "mulubilo", + "namutekenya", + "nanyanta", + "naposa", + "neci", + "nelangi", + "niwe", + "paliko", + "pamutwe", + "patebulo", + "ponse", + "shita", + "talefwaya", + "ubusuma", + "ulubuli", + "utufyani", + "makasa", + "ufwele", + "bemba", + "ababene", + "abelele", + "amaloba", + "amatipa", + "atolweke", + "balemonekafye", + "cali", + "citukutuku", + "icaku", + "ichikulwa", + "ilikulu", + "indeleshi", + "ishikalamba", + "jinga", + "kafiita", + "kalikwata", + "kopa", + "kwishilya", + "luba", + "mule", + "munganda", + "nabaya", + "namabwe", + "sheka", + "ukulolesha", + "umumwine", + "wikele", + "yamulumendo", + "yanda", + "fiita", + "kuntu", + "mumana", + "angala", + "elo", + "akanono", + "cili", + "muminwe", + "nabantu", + "abati", + "alelemba", + "balesamba", + "baletoloka", + "bemishe", + "cabuuta", + "camupila", + "icakutila", + "icilibwe", + "icitambala", + "ifipalile", + "ifipampa", + "ifyakuicingilila", + "ikata", + "ilifye", + "ishakashika", + "mulandunshi", + "muti", + "mwaba", + "nabashitata", + "nabemanina", + "nanamayo", + "neya", + "nokuba", + "pacisebele", + "pancinga", + "shikwete", + "ukupanga", + "ukusenda", + "ulubansa", + "utuma", + "waba", + "wamona", + "yamukashana", + "enda", + "a", + "afwala", + "ayafiita", + "balecofa", + "baleisha", + "balipo", + "banamaayo", + "bekalile", + "fyaku", + "ifikwete", + "ifyakunwa", + "kwakukulyo", + "mucingeleshi", + "mumatipa", + "mwenso", + "nakwe", + "necimuti", + "nencinga", + "oma", + "tushimbi", + "ukwikala", + "ukwingila", + "uule", + "uyuwine", + "baletamba", + "icikope", + "umusungu", + "amano", + "eee", + "naumona", + "abashi", + "abashili", + "abekeele", + "abele", + "abemakene", + "abuka", + "abwelele", + "acilalila", + "acilalya", + "acisa", + "aeba", + "afilwa", + "afwela", + "afweleko", + "afwilisha", + "ahh", + "aichene", + "aikala", + "aikata", + "aile", + "aiposele", + "aisa", + "akabeketi", + "akabelele", + "akabomba", + "akacepesha", + "akafulukutu", + "akaikata", + "akalefumya", + "akalipo", + "akalipulanga", + "akamafufu", + "akamuputule", + "akane", + "akantelelwe", + "akasebwa", + "akaye", + "ake", + "alaba", + "alafika", + "alateya", + "alebafunda", + "alebatamba", + "alebeba", + "alebutukafye", + "alebuumba", + "alecofe", + "alee", + "aleelemba", + "aleelya", + "aleengala", + "aleetoloka", + "alefula", + "alefumyamo", + "alefwaisha", + "aleikopa", + "aleima", + "aleiteyanya", + "alekulula", + "alekunkuluka", + "alekutikisha", + "alekwanisha", + "alelandisha", + "alelansha", + "alelishe", + "alelumba", + "alemonekelafye", + "alemutamba", + "alemwentwila", + "aleolola", + "alepangila", + "alepituluka", + "alesabusha", + "alesekela", + "alesekelelela", + "aleshimikila", + "aleshunguluka", + "aletema", + "aletontokanya", + "aletontonkaya", + "aleyolola", + "aliishibisha", + "alikucifulo", + "alikwatako", + "alimulwelele", + "alimumwela", + "alimupepi", + "alinensansa", + "alipali", + "alipanshi", + "alisambilila", + "alolesheko", + "am", + "amakalata", + "amakompyuta", + "amala", + "amalinga", + "amaliti", + "amanone", + "amapepo", + "amasumbu", + "amataba", + "amataki", + "amatete", + "amboko", + "anakile", + "apakosa", + "apakwimbila", + "apalepwila", + "apapelele", + "apasansuka", + "apasuma", + "apentele", + "apetele", + "apose", + "apupweko", + "apusa", + "arab", + "are", + "asanga", + "asangwe", + "asende", + "ashile", + "at", + "atewmwa", + "ateya", + "atolokele", + "atolwekefye", + "atwikile", + "ayabipa", + "ayakankala", + "ayakowelamo", + "ayamangalo", + "ayamenshi", + "ayapanga", + "ayatekanya", + "baane", + "babamo", + "babikilemo", + "babusaka", + "baciisa", + "bacingilile", + "bacitila", + "baeba", + "bafula", + "bafulisha", + "bafumishe", + "bafwilefye", + "baikakila", + "baikele", + "baiko", + "baingila", + "baingisha", + "bainuka", + "bakabwalala", + "bakashika", + "bakesa", + "bakokola", + "bakolongana", + "balabomba", + "balakwanisha", + "balasansamuka", + "balaubomfya", + "balecinta", + "balecitapo", + "baleefwaya", + "baleendauka", + "balefolesha", + "balefwala", + "baleicingilila", + "baleifunda", + "baleikala", + "baleikansha", + "baleikila", + "baleipitila", + "baleiteyanya", + "balekonkamo", + "balekosha", + "balekumana", + "balelembapo", + "balelishe", + "balelonda", + "balelonga", + "baleloshanya", + "balemupela", + "balemusunka", + "balengele", + "balenwako", + "balenyanta", + "baleonta", + "balepikula", + "balesekesha", + "baletambila", + "baletampa", + "baletantika", + "baleteyelapo", + "balibyalako", + "balicingako", + "balifula", + "baliisambilisha", + "baliishiba", + "balikunuma", + "balili", + "balimba", + "balimu", + "balimucibansa", + "balipakati", + "balishilamo", + "balishisha", + "balisunga", + "baliupanga", + "baliwamya", + "balumba", + "balunshi", + "balwa", + "balyeko", + "bamilimo", + "bamubikile", + "bamukakile", + "bamupunka", + "bamwebele", + "banakuulu", + "bangasha", + "banwina", + "banwine", + "bapang", + "bapikula", + "bapitamo", + "bapoopa", + "baposeleko", + "bapwishe", + "basha", + "bashibwinga", + "bashifwikile", + "bashiketi", + "bashila", + "bashintilishe", + "bashiteko", + "bashitishe", + "bashitishishamo", + "basi", + "bataata", + "batandashi", + "bateye", + "batoloke", + "batumina", + "batusheko", + "batushisha", + "batuukutuuku", + "beengi", + "benchi", + "benda", + "bengacita", + "bengala", + "besako", + "bikile", + "biscuit", + "bluu", + "bo", + "bobe", + "bodi", + "bombele", + "bombelo", + "bomfwa", + "bomfweko", + "bomfwikishe", + "boonse", + "bowa", + "bukalamba", + "bulaleta", + "buleila", + "bupe", + "bupipi", + "butisha", + "butukafye", + "bwakucilikana", + "bwakulwa", + "bwakuti", + "bwe", + "byala", + "caacine", + "cachine", + "cakula", + "cakunwa", + "cakupanga", + "cakusambilamo", + "cakwangalipo", + "cakweba", + "cakwebati", + "calishupa", + "camawilo", + "camusangonshi", + "camutuntula", + "canada", + "caso", + "cee", + "chapala", + "chena", + "chinga", + "chishiba", + "chofwa", + "chonse", + "church", + "chuulu", + "cibeseni", + "cibombelo", + "cibusa", + "cikupiti", + "cilaleta", + "cilelenga", + "cilemonaka", + "cilemonekafye", + "cileshunguluka", + "cilolani", + "ciminine", + "cimiti", + "cimu", + "cinfyana", + "cinono", + "cintunshi", + "cipalila", + "citenge", + "ciyanda", + "co", + "cobe", + "coca", + "como", + "cungamu", + "dishi", + "ebanyina", + "ebeshile", + "ebile", + "ebunda", + "ecikulwa", + "ecilelenga", + "ecintu", + "efilecitika", + "efintu", + "efyakulya", + "efyocipalile", + "ekalila", + "ekusefya", + "elefye", + "elintu", + "elyofye", + "emangalo", + "eminefye", + "emininine", + "emobali", + "emye", + "engacita", + "eswile", + "ewaku", + "eyaba", + "eyili", + "fiba", + "fibe", + "ficitika", + "fiine", + "fikopa", + "filebomba", + "filelondolola", + "filesangwa", + "finishi", + "fishilwa", + "fituku", + "fo", + "fulagi", + "fundisha", + "funya", + "fweele", + "fyabafye", + "fyafula", + "fyakumucingilila", + "fyakupangila", + "fyakuteyelamo", + "fyaliba", + "fyalifula", + "fyaliwama", + "fyamu", + "fyapusanapusana", + "fyulu", + "goma", + "hahahaha", + "hotel", + "ibula", + "icabalala", + "icabela", + "icabula", + "icacine", + "icakubomfya", + "icakucingilila", + "icakuicingililako", + "icakuicingilishako", + "icakupanga", + "icakuposamo", + "icakuteyelako", + "icakwangalilamo", + "icakwenseshako", + "icalenga", + "icalunkoto", + "icamaboko", + "icamupila", + "icapalako", + "icapalana", + "icapangilwa", + "icapapatala", + "icaputulwa", + "icebo", + "iceswa", + "ichakashika", + "ichakuichingilila", + "ichakumulu", + "ichisalu", + "ichitali", + "icibusa", + "icifimbile", + "icifunda", + "iciintu", + "icikopelo", + "icikuku", + "icilelangila", + "icilelangisha", + "icilelenga", + "icilembelo", + "icilupili", + "icinefye", + "icintubwingi", + "icipendo", + "iciputula", + "icishingwa", + "icitupa", + "iciyanda", + "icocine", + "icoongo", + "icooni", + "icupo", + "ifakufwala", + "ifiba", + "ifibekobeko", + "ificitikako", + "ifikansa", + "ifike", + "ifikuti", + "ifilecitikako", + "ifilelangilila", + "ifilemusekesha", + "ifilemushupa", + "ifilengo", + "ifingaba", + "ifipendo", + "ifipondo", + "ifipunda", + "ifishibilo", + "ifishili", + "ifupa", + "ifyabalala", + "ifyabula", + "ifyacitike", + "ifyakucimfyanya", + "ifyakufimbana", + "ifyakui", + "ifyakuichingilila", + "ifyakulemba", + "ifyakulishishako", + "ifyakwikata", + "ifyalamba", + "ifyamakumbimakumbi", + "ifyapalamana", + "ifyapentwa", + "ifyasankanamo", + "ifyatalala", + "ifyatantikwa", + "ifyauminina", + "ifyushi", + "igalashi", + "iifwele", + "iilipo", + "iinoono", + "iipitile", + "ijacket", + "ijinga", + "ikaka", + "ikakilwe", + "ikatana", + "ileciita", + "ileendela", + "ilelolela", + "ilemukonka", + "ilemyanga", + "ilepitana", + "ilesambilila", + "ilikunuma", + "ilikwetemo", + "ilikwisa", + "ilimumenshi", + "ilimumpanga", + "ilolesha", + "ilyaba", + "ilyaku", + "ilyamakumbimakumbi", + "ilyamutuntula", + "imanine", + "imbilo", + "imibutukile", + "imine", + "imipaipi", + "imishila", + "imishipa", + "imisomali", + "imoneka", + "imyenge", + "inginga", + "injanji", + "inkalata", + "inkanshi", + "inkoli", + "inkolo", + "inkumba", + "inkupiko", + "insaka", + "inshindishi", + "iofeshi", + "ipanga", + "ipi", + "isala", + "isansa", + "isembe", + "isenda", + "isende", + "ishafina", + "ishakale", + "ishamalaiti", + "ishatelela", + "ishilefika", + "ishilelya", + "ishilepita", + "ishipitile", + "isume", + "ita", + "itayala", + "iyabomba", + "iyafitilila", + "iyakakwa", + "iyakwangalilako", + "iyalinga", + "iyamalangi", + "iyatali", + "iyawama", + "kabelele", + "kabi", + "kabumba", + "kabutuka", + "kafuma", + "kafya", + "kaice", + "kakashikila", + "kakatapakatapa", + "kalelolela", + "kalepunda", + "kalepupuka", + "kalesonta", + "kaleyangalafye", + "kalipo", + "kalupili", + "kalusangu", + "kamulonga", + "kamuputule", + "kankala", + "kanyantile", + "kanyekanye", + "kapala", + "kapanga", + "kapona", + "karati", + "kasa", + "kashikilako", + "katampa", + "kateiya", + "katilila", + "katulile", + "kele", + "kepika", + "key", + "kolona", + "komputa", + "kristu", + "kubakalamba", + "kubanankwe", + "kubutukila", + "kubwato", + "kucaalo", + "kuchifyana", + "kucibuumba", + "kucilibwe", + "kucinshingwa", + "kucipuna", + "kufishimbi", + "kufulile", + "kuicinga", + "kuki", + "kukoso", + "kukwata", + "kulanshanya", + "kulatalala", + "kulemoka", + "kulesha", + "kulongana", + "kulukobo", + "kulukungu", + "kumacito", + "kumafundisho", + "kumasukulu", + "kumi", + "kumilimo", + "kumubiye", + "kumukashana", + "kumulimo", + "kumuma", + "kumupaipi", + "kumushi", + "kumushishi", + "kun", + "kunsapato", + "kupisha", + "kusekesha", + "kushelelela", + "kutemwa", + "kuticaba", + "kutika", + "kutilimbi", + "kutolokela", + "kuulwa", + "kwaati", + "kwabana", + "kwaisa", + "kwakweba", + "kwaleba", + "kwalibapo", + "kwamba", + "kwatinakalimo", + "kwawama", + "kwesha", + "kwilinga", + "kwiminina", + "kwingilila", + "kwingisha", + "kwisaya", + "kwisukulu", + "kwitumbo", + "landishana", + "lanshyanya", + "lele", + "lengela", + "lengele", + "liimbi", + "lilesefya", + "lise", + "litebulo", + "loleshanya", + "londa", + "lowa", + "lunga", + "lupanga", + "lwacikulwa", + "lwakwa", + "lwali", + "lwama", + "lwati", + "lyabana", + "lyabanamayo", + "lyacimuti", + "lyakaena", + "lyamasambililo", + "lyamumana", + "lyapangwa", + "lyo", + "machuungwa", + "malamba", + "man", + "mapeya", + "masha", + "matenti", + "mazembe", + "mena", + "michanga", + "mikate", + "mikoshi", + "mimana", + "miminwe", + "mindoloshi", + "mingoloshi", + "misalu", + "moneko", + "monika", + "monk", + "mubika", + "mubukulu", + "mubusanshi", + "mucapala", + "muchimbaya", + "muchisungu", + "muchitemwiko", + "mucibwato", + "mucintubwingi", + "mucipicipi", + "mufishi", + "mukacola", + "mukaka", + "mukuichingila", + "mukuipekanya", + "mukulanda", + "mukulolekesha", + "mukulolela", + "mukumonafye", + "mukupupwako", + "mukusefyapo", + "mukutambapo", + "mukwangalafye", + "mukwangasha", + "mulanga", + "mulemonaka", + "mulwele", + "mumabotolo", + "mumatuka", + "mumatuuka", + "mumichanga", + "mumilimo", + "mumone", + "mumupando", + "mumushipi", + "munabo", + "munani", + "munchende", + "mupili", + "mupitile", + "musenda", + "mushiika", + "mushila", + "mutelemuko", + "mwaana", + "mwabusaka", + "mwakubombela", + "mwalimena", + "mwanfuli", + "mwee", + "mweh", + "mwibuku", + "mwiine", + "mwikala", + "mwisaamba", + "mwitoloshi", + "myefu", + "naababiye", + "naabana", + "naabika", + "naamenshi", + "nababiika", + "nababomba", + "nababuungana", + "nabacensa", + "nabafuula", + "nabafwa", + "nabafwla", + "nabaikobeka", + "nabaipekanya", + "nabalamba", + "nabalambalala", + "nabamwita", + "nabanyanta", + "nabapaapa", + "nabapalamina", + "nabapona", + "nabasankana", + "nabashinta", + "nabashintilila", + "nabatitikana", + "nabatu", + "nabawina", + "nabeemya", + "nabemika", + "nabofwa", + "nachilila", + "naciba", + "nacibuuta", + "nacilolesha", + "nacisula", + "nadabwa", + "nafibapapusha", + "nafifimbwa", + "nafifina", + "nafikosa", + "nafisalwa", + "nafulamuka", + "naicingilila", + "naikalafye", + "naikula", + "naikwatamo", + "nailalako", + "nailoka", + "nailuba", + "nailwala", + "naintini", + "naisabusha", + "nakaasama", + "nakabale", + "nakabuta", + "nakabutuka", + "nakadoli", + "nakaice", + "nakakamo", + "nakakopo", + "nakakwa", + "nakala", + "nakalipa", + "nakamwaice", + "nakanyanta", + "nakapanga", + "nakapula", + "nakasangalala", + "nakasansamuka", + "nakasekela", + "nakashimbi", + "nakasunsumana", + "nakatabo", + "nakengila", + "nakula", + "nakulya", + "nakumo", + "nakunse", + "nakupita", + "nakutumana", + "nakwima", + "nalaala", + "nalamba", + "naleka", + "nalimya", + "nalintu", + "nalyaka", + "namajinga", + "namajombo", + "namakwebo", + "nameshi", + "namubuta", + "namufiita", + "namulungama", + "namumutwe", + "namumuulu", + "namunshiku", + "namwenso", + "nanakulu", + "nanda", + "nanima", + "napafiita", + "napamona", + "napancende", + "napiba", + "napompa", + "naposaika", + "napusha", + "nasendalala", + "nashibatika", + "nashibatilila", + "nashifula", + "nashifulwa", + "nashikakila", + "nashilala", + "nashisula", + "nashisuma", + "nashumfwa", + "nasonteka", + "natina", + "natumbula", + "natwika", + "nau", + "naulolekesha", + "naumone", + "nausosa", + "nautusote", + "nawaka", + "nawina", + "nayafiita", + "nayeminina", + "nayima", + "nayisula", + "nceende", + "nceshi", + "ndetontonkanya", + "ndimi", + "ndobo", + "necakashika", + "necakukopelako", + "necakumulu", + "necakwangasha", + "nechimpompo", + "nechintu", + "necifimbo", + "necimana", + "nefibi", + "nefiko", + "nefimalaiti", + "nefisalu", + "nefitabo", + "nefyakwe", + "nefyushi", + "neinankwe", + "nekoloko", + "nemicila", + "nemilomo", + "nempepo", + "nenambala", + "nendupwa", + "nenshimbi", + "nepepala", + "nesalu", + "neshi", + "neshitolo", + "ngabafika", + "ngabaisa", + "ngabalefwaya", + "ngabaleya", + "ngabapona", + "ngacakutila", + "ngacakwebati", + "ngacinshi", + "ngakale", + "ngala", + "ngamila", + "ngolofwani", + "ngomulopa", + "ngu", + "ngula", + "nibamunyina", + "nibashi", + "nicifye", + "nikanyekanye", + "nikateya", + "nikucifulo", + "nikucitesheni", + "nikumabala", + "nikusukulu", + "nimalonda", + "nimbale", + "nimbo", + "nimbonapo", + "nimpapa", + "nimpili", + "nimuciswebebe", + "nimucungulo", + "nimuli", + "nindume", + "ninjimona", + "ninjishiba", + "ninshimona", + "nintambi", + "nipakuti", + "nipanshila", + "njanji", + "nkolo", + "nkonya", + "nobu", + "nobusaka", + "nobwangalo", + "nokufita", + "nokufwala", + "nokukashika", + "nokulanda", + "nokumu", + "nokuposa", + "nokutamba", + "nokwaka", + "nolufumo", + "nombafye", + "nomukuku", + "nomulandu", + "nomuseke", + "nomushilwa", + "nomutengo", + "nomwele", + "notoni", + "notulubi", + "notumishilwa", + "nsansamuka", + "nshaishiba", + "nshilemonapo", + "ntemenweko", + "ntontoka", + "nyabo", + "nyense", + "nyumomwine", + "oba", + "obo", + "olenji", + "ololeko", + "olympics", + "onta", + "owela", + "paapa", + "pabafye", + "pacakutolokapo", + "pacela", + "pachifuba", + "pachitesheni", + "pacibokoshi", + "pacishelemuko", + "pacitabo", + "pafifuba", + "pafimabwe", + "pafitunshi", + "pafyakulya", + "pakangalo", + "pakapampa", + "pakashila", + "pakona", + "pakubasa", + "pakufwaya", + "pakulwisha", + "pakwikila", + "pakwingila", + "palasangwa", + "palemonekela", + "palifintu", + "palipita", + "palyaba", + "pamabele", + "pamabimbi", + "pambili", + "pamitanto", + "pamuku", + "pamulando", + "pamulilo", + "pamusambo", + "pamushinku", + "panchinga", + "pangako", + "pange", + "pangilako", + "pango", + "paper", + "parashuti", + "patuntu", + "pekala", + "pelaya", + "pepela", + "pepipepi", + "peteka", + "petubulo", + "peya", + "pitile", + "planga", + "posele", + "pupusha", + "pupwako", + "pususha", + "putika", + "putulwa", + "pyeni", + "referee", + "roboti", + "saaca", + "saacha", + "saan", + "sakula", + "sala", + "sango", + "sebeka", + "sesha", + "shabanani", + "shafuma", + "shafyalwa", + "shaka", + "shakale", + "shalifita", + "shamabwe", + "shamakumbi", + "shamona", + "shanshi", + "shapalana", + "shibelele", + "shikalamba", + "shilacita", + "shilalya", + "shilecenena", + "shileecita", + "shileemoneka", + "shiletintanina", + "shilwa", + "shima", + "shimoshine", + "shintilisha", + "shipite", + "show", + "shukulu", + "shumba", + "shungulusha", + "soko", + "soshanya", + "speaker", + "station", + "sungila", + "supuni", + "taamba", + "tabaishiba", + "tabalemonekela", + "tabatemwa", + "tacilemwenekesha", + "tacili", + "tafwale", + "tafwalile", + "tafwaya", + "tailefwaya", + "taishibe", + "taka", + "takali", + "takulemonekako", + "takwikala", + "talakita", + "talalisha", + "talanta", + "talelolesha", + "talifye", + "taliko", + "tangile", + "tanwine", + "tapakokwele", + "tapilisha", + "tashilelwa", + "tauli", + "tawishibe", + "teba", + "tecisuma", + "tepatali", + "tifyaba", + "tolweke", + "trampoline", + "tubwa", + "tufyola", + "tulecena", + "tulefwaya", + "tulesansa", + "tuleteya", + "tuleya", + "tuloli", + "tumbo", + "tunti", + "tuntumana", + "tushako", + "tutila", + "twakwangasha", + "twamakumbi", + "twaya", + "twelangi", + "twiminine", + "ububumbo", + "ubulwi", + "ubuntungwa", + "ubupusano", + "ubwakwensha", + "ubwangaalo", + "ubwishibilo", + "ufukeme", + "ufwaika", + "ufwala", + "ufwilefye", + "ukubatwala", + "ukubeba", + "ukubula", + "ukubutukisha", + "ukucenjela", + "ukuchila", + "ukucilikana", + "ukufikafye", + "ukufumyako", + "ukufunishako", + "ukuikata", + "ukuiposa", + "ukuisuma", + "ukukankala", + "ukukopelako", + "ukulanshanya", + "ukuloleshafye", + "ukumupoka", + "ukumwafwa", + "ukumwenekesha", + "ukusambilisha", + "ukusangwako", + "ukusanika", + "ukusha", + "ukusheleleka", + "ukutelemuka", + "ukuteyela", + "ukuteyelako", + "ukuwisha", + "ukwalekana", + "ukwambila", + "ukwangalilamo", + "ukwanishe", + "ukwasha", + "ukwashupa", + "ukwatalalila", + "ukwauma", + "ukwibila", + "ukwibukisha", + "ukwisha", + "ulawama", + "ulefuma", + "ulelya", + "uletontonkaya", + "ulikunuma", + "ulukasu", + "ulwabuta", + "ulwabuuta", + "ulwamusebo", + "ulwipi", + "um", + "uminina", + "ummmm", + "umukasahana", + "umukulupo", + "umukumo", + "umukushana", + "umulamba", + "umulefuma", + "umulonga", + "umumtu", + "umusalaba", + "umusambi", + "umusheleleko", + "umutu", + "umwabula", + "umwabuuta", + "umwacingililwa", + "umwakulila", + "umwakupelela", + "umwatelela", + "umwemfu", + "umwna", + "umwume", + "unwine", + "up", + "uponene", + "utolweke", + "utubungwe", + "utujinga", + "utukulwa", + "utulo", + "utumalaya", + "utumishipi", + "utumupila", + "utupampa", + "utusafu", + "ututambo", + "ututoloshi", + "ututwine", + "utuyanda", + "utwakunyantapo", + "utwakuti", + "utwamutuntula", + "uufukeme", + "uulambalele", + "uulefuma", + "uuleisa", + "uulelya", + "uulemukopa", + "uulenina", + "uulepepa", + "uuleshita", + "uuletolokela", + "uulifye", + "uushalile", + "uushintilile", + "uutangile", + "uwaiteyanya", + "uwakata", + "uwakulekelesha", + "uwalacimfya", + "uwalamba", + "uwansasa", + "uwashipa", + "uwensha", + "uwimanine", + "uwimineko", + "uyi", + "uyumutundu", + "volley", + "wacimbaya", + "wacimuti", + "wacipanda", + "wafyani", + "wakasuba", + "wakayena", + "wakubalilapo", + "wakuma", + "wakusendamamo", + "wamaloba", + "wamaluba", + "wamangalo", + "wamasambililo", + "wamfwi", + "wamishishi", + "wamu", + "wamulilo", + "wamusangonshi", + "wancinga", + "wapiita", + "waponena", + "wasebwa", + "watikama", + "watina", + "wemunandi", + "wemwana", + "wene", + "wesabi", + "wikala", + "wimanine", + "yabafyashi", + "yabanakashi", + "yabatata", + "yabutuka", + "yabuutulukila", + "yachi", + "yacila", + "yacilibwe", + "yacishiba", + "yafika", + "yafimbaya", + "yafula", + "yafulisha", + "yafwaika", + "yakabwa", + "yakayena", + "yakuboko", + "yakukuso", + "yakulilapo", + "yakwanisha", + "yakwatafye", + "yakwishibilako", + "yalaleta", + "yalamba", + "yalebomba", + "yalelolesha", + "yalemonekela", + "yalepona", + "yalesabuka", + "yaleya", + "yalimumulu", + "yalokele", + "yalunkoto", + "yamakumbimakumbi", + "yamakwebo", + "yamukati", + "yamumumana", + "yanakashi", + "yancinga", + "yapamulu", + "yapentwa", + "yasabuka", + "yaseme", + "yeshitima", + "yilefwaya", + "amaano", + "babombela", + "boko", + "calikwata", + "iinono", + "ilingiline", + "ilitali", + "isendele", + "lyamaboko", + "mwentula", + "mwishitima", + "nabakolongana", + "nabapapa", + "nabomfwa", + "nashi", + "necikulwa", + "nyimbo", + "tu", + "tutatu", + "ukwaba", + "umutali", + "wakaena", + "waya", + "yalekana", + "intambo", + "banamayo", + "itoloshi", + "mbaya", + "naikwata", + "pa", + "abakoloci", + "abomba", + "aicena", + "baleumfwa", + "bankanda", + "busanshi", + "cakashika", + "cha", + "icakwata", + "ikoti", + "imicanga", + "ingoma", + "kalelolesha", + "kalya", + "kanono", + "kucende", + "kusukulu", + "laya", + "mulimo", + "mumangalo", + "mwati", + "naifumya", + "nayena", + "ndesubila", + "nensalu", + "skateboard", + "tabalemoneka", + "tolokela", + "utulumendo", + "yacikuulwa", + "yene", + "ilaya", + "kale", + "akashimbi", + "amabotolo", + "amasha", + "batila", + "cofa", + "icicine", + "icisuma", + "ilyafiita", + "kamusebo", + "masako", + "miti", + "nabakashi", + "naimanina", + "nakemya", + "neca", + "nshishibe", + "pakubutuka", + "shafita", + "shilelwa", + "ukowa", + "uwingi", + "yakako", + "yakashikila", + "isha", + "mulumendo", + "imbwa", + "akabwato", + "akaume", + "alelenga", + "beminina", + "icipesha", + "imitwe", + "kati", + "mitomito", + "muka", + "pafipuna", + "ubo", + "ukubomba", + "yintu", + "ubu", + "baleteya", + "aleemoneka", + "bakalisha", + "butukila", + "epona", + "fwele", + "icimana", + "icipuna", + "ifishimbi", + "kasote", + "nakanwa", + "nashintilisha", + "pamwinshi", + "sekelela", + "ukufwala", + "ukushita", + "utwabuta", + "abantu", + "alelolesha", + "kumo", + "nelyo", + "abalekana", + "asendele", + "ayalemoneka", + "caku", + "ekutila", + "fititi", + "fyakwe", + "icakulya", + "icushi", + "ifile", + "ipepala", + "kala", + "kumwenafye", + "laiti", + "mumfula", + "mwituuka", + "napamenso", + "nifilya", + "nina", + "njinga", + "nomwanakashi", + "paba", + "shibwinga", + "shitima", + "ukukwela", + "uma", + "umunakwe", + "wakumakasa", + "yatatu", + "nshita", + "lwa", + "amaboko", + "alesekelela", + "chilemoneka", + "cilamuntu", + "horse", + "imbao", + "inkomaki", + "insokoshi", + "kamwana", + "lenga", + "mubwangalo", + "mupanga", + "musana", + "naulungika", + "ndeke", + "nimbwa", + "pulanga", + "shabuta", + "shitolo", + "takwata", + "ukucimfyanya", + "yamu", + "yangala", + "yemba", + "ayengi", + "abalepita", + "aleshelemuka", + "cabo", + "cilibwe", + "iikwete", + "kwakukuso", + "mubali", + "mwaliba", + "nabafyashi", + "nono", + "ukusuma", + "palemoneka", + "cimo", + "nabo", + "apali", + "abankanda", + "akale", + "alimo", + "amawilo", + "besa", + "file", + "ibaka", + "icinso", + "ifisoso", + "ilepita", + "kung", + "kwete", + "lwamumana", + "mayanda", + "me", + "mulubansa", + "nabekalako", + "namenso", + "pakwenda", + "paliba", + "ukushana", + "yale", + "mwanakashi", + "pantanshi", + "uuli", + "ifyakulya", + "abasansamuka", + "acitile", + "aleangasha", + "alelwisha", + "aleshana", + "aleumfwa", + "baleshita", + "bengi", + "bika", + "bwabo", + "celangi", + "fyo", + "icilubi", + "ikala", + "inkonto", + "kakopa", + "kapu", + "kukasuba", + "kuntambo", + "mumpili", + "munankwe", + "nabasekelela", + "nabasenda", + "naisenda", + "nakasuba", + "ubwingi", + "ukulemoneka", + "ukusefya", + "apo", + "fintu", + "aamba", + "ababelele", + "abafulile", + "abafye", + "abakwelele", + "abalele", + "abalemana", + "abalemusekesha", + "abaleshimika", + "abaleyendela", + "abalipo", + "abanesu", + "abangala", + "abapanga", + "abapungwe", + "abasangalala", + "abasankana", + "abasano", + "abashana", + "abekelepo", + "abenga", + "abifishe", + "abikilemo", + "abili", + "abwangalo", + "acilalolela", + "acilasamba", + "afimbile", + "africa", + "afrika", + "afulile", + "ahhh", + "aicingilile", + "aipusha", + "akacela", + "akafifi", + "akafiitulukila", + "akakatapa", + "akakatapakatapa", + "akakosa", + "akakulwa", + "akakushelemukilako", + "akamuntu", + "akanankwe", + "akantambo", + "akasekelela", + "alalile", + "alambile", + "alapona", + "alebebeta", + "alebelengapo", + "alecitamo", + "aleeba", + "aleepeluka", + "aleetolokela", + "alefwayafye", + "aleifunda", + "aleipikila", + "alekoneka", + "alekonka", + "alekonkamo", + "alekopela", + "alelepo", + "aleloleshako", + "alengala", + "alepekanishisha", + "alepitafye", + "alepoosa", + "alesala", + "aleshitishisha", + "aleshungulusha", + "aletambakofye", + "aleti", + "aleyimba", + "alicenjela", + "alifita", + "alikumbali", + "alikunuma", + "alikwato", + "aliluka", + "alipancinga", + "alipofye", + "alisunga", + "alitemwisha", + "alongele", + "alyanguka", + "amabala", + "amafilimu", + "amakumi", + "amalwa", + "amasama", + "amasengo", + "ambe", + "amepusho", + "angalako", + "aninineko", + "anyatilepo", + "apabelele", + "apafiita", + "apakutantala", + "apakutushisha", + "apalefuma", + "apapusana", + "apatalala", + "apatelela", + "aposelefye", + "aposeleko", + "asala", + "asekele", + "ashintilile", + "ashita", + "asonteke", + "atantike", + "atolokela", + "ayaba", + "ayakuntanshi", + "ayakushitisha", + "ayalelema", + "ayalenga", + "ayamalangi", + "ayamu", + "ayasalangana", + "ayatalala", + "baamba", + "babikileko", + "babonfya", + "baciiposela", + "bacipangila", + "back", + "bafimba", + "bafume", + "baicene", + "baikata", + "baipangila", + "bakakopa", + "bakali", + "bakanike", + "bakanyekanye", + "bakatamba", + "bakaya", + "bakensha", + "bakopele", + "bakulile", + "bakulilila", + "bakumana", + "bakwele", + "balaisa", + "balalya", + "balangala", + "balatampa", + "balatina", + "baleangalafye", + "baleanshika", + "balebila", + "balecingilila", + "balecite", + "baleengala", + "balefumina", + "balefwayafye", + "baleilolesha", + "baleipekanishisha", + "baleipela", + "baleipusha", + "balekopelwa", + "balekopesha", + "balekumbatana", + "balekuula", + "balelila", + "balelisisha", + "balelolelapo", + "balemubeya", + "balemupepeka", + "balemusambilisha", + "balemwensha", + "balemwetula", + "balepala", + "balepekanisha", + "balepitana", + "balepokelela", + "balepopa", + "balesala", + "baleshinguluka", + "baletinika", + "baletontonkanya", + "balewina", + "balibyala", + "balikako", + "balimofye", + "balinensansa", + "balipa", + "baliposako", + "baliya", + "balloon", + "balolesha", + "balonga", + "balongele", + "bamba", + "bambe", + "bamufwikile", + "bamuletele", + "bamushile", + "bamwita", + "banensu", + "banshiwa", + "bapangafye", + "bapekenye", + "bapone", + "basa", + "basakamana", + "basambi", + "basefya", + "bashimakwebo", + "bashitile", + "batampe", + "batantamika", + "batantu", + "bateka", + "batema", + "batukutuku", + "bawina", + "baye", + "beba", + "bedi", + "beeshile", + "bekafye", + "bekatilile", + "belecita", + "bembila", + "bemisha", + "bench", + "bepikilamo", + "bepona", + "beswile", + "bombelamo", + "boss", + "bowling", + "bu", + "bufwaika", + "bulangeti", + "buleenda", + "bunda", + "bunkolanya", + "bwakucinfyanya", + "bwakushelela", + "bwala", + "bwena", + "cabafye", + "cabutulukila", + "cafiitulukila", + "cafyangalo", + "cakubombelamo", + "cakumucingililako", + "cakushelelapo", + "cakutelelapo", + "calikosa", + "calipentwa", + "caliyemba", + "calyuma", + "cangalilo", + "cansambu", + "castle", + "cauma", + "celwa", + "ceshitima", + "chakashika", + "chibumba", + "chila", + "chimbayambaya", + "chine", + "chinkupiti", + "cibelushi", + "cifimbo", + "ciifwile", + "cikocikala", + "cikwepe", + "cileepala", + "cilefumya", + "cimbusu", + "cimpeelwa", + "cingaba", + "cisabo", + "citike", + "ciwamefye", + "ciwemefye", + "cungwa", + "cuni", + "cuulu", + "dilinki", + "ebantu", + "ebwangalo", + "eci", + "ecilenga", + "ekobali", + "ekokwine", + "ekwaba", + "ekwikala", + "elobambi", + "elya", + "embwa", + "eminene", + "emukalamba", + "emulimo", + "entungulushi", + "eu", + "eumu", + "eyengi", + "famu", + "farm", + "fifuma", + "fileenda", + "filekalipa", + "filelanda", + "filembelwe", + "filengele", + "fiminine", + "fimpelwa", + "fire", + "fitambala", + "fitenge", + "fuka", + "fwailikisha", + "fwale", + "fwika", + "fyabanensu", + "fyacitika", + "fyakaena", + "fyakubombelamo", + "fyakwa", + "fyakwata", + "fyamena", + "fyansale", + "fyapala", + "fyofine", + "game", + "glove", + "glovu", + "hindu", + "hosi", + "ibiye", + "ibungano", + "icafiitulukila", + "icaina", + "icakubumba", + "icakulandilamo", + "icakuminako", + "icakusambilamo", + "icakwempwa", + "icakwimbilako", + "icama", + "icamangalo", + "icapempo", + "icapona", + "icefyani", + "ichanuma", + "iche", + "ichelangi", + "ichinga", + "ichoni", + "icibe", + "icikwepe", + "icilengo", + "icilepala", + "icinecine", + "icinshigwa", + "icipale", + "icipangile", + "icisankano", + "icisendo", + "iciswike", + "icitebo", + "idonki", + "ifibaka", + "ifibimbi", + "ifiipi", + "ifilechitika", + "ifilemonekela", + "ifipendwa", + "ifipya", + "ifisangwa", + "ifisooso", + "ifiswango", + "ifitu", + "ifmuti", + "ifula", + "ifwakufwala", + "ify", + "ifyacindama", + "ifyafitulukila", + "ifyaibela", + "ifyakucinga", + "ifyakukopelako", + "ifyakumakasa", + "ifyalembwapo", + "ifyalingana", + "ifyalowa", + "ifyamabula", + "ifyamusango", + "ifyonaike", + "ifyoola", + "ihosi", + "iitolweke", + "iiyi", + "ikwatile", + "ileangalafye", + "ileetoloka", + "ilelosha", + "ilenda", + "ilesela", + "ileteya", + "iletina", + "ililetamba", + "ilimo", + "ilintu", + "ilishile", + "ilongo", + "ilyakatapakatapa", + "imbalala", + "imbokoshi", + "imendele", + "imifuko", + "imisumba", + "imitolokele", + "imoneke", + "impasa", + "impombo", + "imwemfu", + "imyando", + "imyele", + "imyenfu", + "imyeo", + "indale", + "indume", + "inembo", + "infalashi", + "infintu", + "infungulo", + "ingala", + "inindaminwe", + "insafi", + "insambu", + "intanfu", + "intoloshi", + "intontoka", + "inyeleti", + "inyunshipepala", + "ipaka", + "iponene", + "isambilisha", + "ishabomba", + "ishaina", + "ishayemba", + "ishiingi", + "ishiko", + "ishila", + "ishita", + "isikiyo", + "isuka", + "isula", + "it", + "itambula", + "itoloke", + "iwa", + "iyabantu", + "iyakwangalilamo", + "iyalekana", + "iyaume", + "iyayina", + "iyibiye", + "iyu", + "jersey", + "kabala", + "kabe", + "kabela", + "kabikile", + "kabutulukila", + "kacikuulwa", + "kacitile", + "kacola", + "kakila", + "kakwelele", + "kaleemoneka", + "kalefwayo", + "kalelwisha", + "kalemonekela", + "kalesambilila", + "kaleshelela", + "kaletantala", + "kaleteya", + "kaleyenda", + "kalipa", + "kalubao", + "kalubi", + "kamu", + "kantemba", + "kapa", + "kapata", + "kashati", + "kashilila", + "kashitisha", + "kasiketi", + "katande", + "kepona", + "keshile", + "kobelako", + "kola", + "koma", + "kubumba", + "kucikope", + "kuco", + "kufumya", + "kuicena", + "kukulongana", + "kukuulu", + "kulenga", + "kulepala", + "kumabumba", + "kumutenge", + "kumwafwa", + "kumwela", + "kumwenso", + "kumwentula", + "kunumayakwe", + "kupikula", + "kusangwa", + "kusenda", + "kusendamamo", + "kushelefye", + "kutambo", + "kuteyelako", + "kutu", + "kwacitika", + "kwaliko", + "kwatako", + "kwendelamo", + "kwilibwe", + "kwimbilako", + "kwiminine", + "laini", + "lelya", + "lembaula", + "lesha", + "letamba", + "life", + "lileimba", + "lilelisha", + "limolimo", + "lisuma", + "litali", + "loka", + "loleshafye", + "lubana", + "lubuto", + "lubuuto", + "lumeendo", + "lumolwine", + "lumu", + "lungu", + "lupala", + "lwabuta", + "lwamabwe", + "lwamawaya", + "lwapangwa", + "lyabashitata", + "lyabwalwa", + "lyakuntanshi", + "lyamapulanga", + "lyene", + "maato", + "mafuta", + "malaya", + "mashine", + "mati", + "mbilibili", + "mbola", + "mbuya", + "meshi", + "mfukwe", + "mi", + "mibili", + "milamba", + "mipila", + "mishila", + "mono", + "mpendwa", + "mpiya", + "muceni", + "mucipimo", + "muciputulwa", + "mucitesheni", + "mucitundu", + "muco", + "mufilindi", + "mufuko", + "mukakopo", + "mukaputula", + "mukola", + "mukuchifyana", + "mukucinfyanya", + "mukuloba", + "mukulunga", + "mukupalamisha", + "mukutandalila", + "mukutushako", + "mukwangufyanya", + "mukweba", + "mukwikala", + "mulibemba", + "mulukombo", + "mulupango", + "mumalangi", + "mumasambililo", + "mumatanta", + "mumbale", + "mumibombele", + "mumisana", + "mumitwe", + "mumpaanga", + "mumpoto", + "mumulamba", + "mumulonga", + "mumuna", + "mumushishi", + "mumutende", + "munakwe", + "munfula", + "mupunga", + "musalu", + "mutubungwe", + "mutufyani", + "mwalifula", + "mwamfuli", + "mwaya", + "mwibotolo", + "mwibuumba", + "mwisitima", + "mwitempele", + "naaba", + "naabanakashi", + "nababomfi", + "nabacelwa", + "nabafule", + "nabakafwika", + "nabakobekako", + "nabakoloci", + "nabalemba", + "nabaloleshanya", + "nabalya", + "nabamusha", + "nabanakwe", + "nabapalamana", + "nabapenta", + "nabashalila", + "nabatangila", + "nabatonta", + "nabeeminina", + "nabekatako", + "nabeminikako", + "nabesala", + "nabfwala", + "nabu", + "nabukwata", + "nacibipa", + "nacifina", + "nacimoneka", + "nafipusana", + "nafuma", + "nafwele", + "nafyena", + "nafyonse", + "naifiita", + "naifimuti", + "naipekanya", + "naipita", + "naisa", + "naishinga", + "naitalala", + "naitangila", + "naiyikata", + "naiyimya", + "nakabola", + "nakabwato", + "nakachintu", + "nakafukama", + "nakakashana", + "nakaku", + "nakalotoka", + "nakapampa", + "nakasenda", + "nakasendama", + "nakashibata", + "nakasuma", + "nakatanga", + "nakatango", + "nakatolokela", + "nakontamika", + "nakubuuta", + "nakukashimbi", + "nakumaboko", + "nakuntambo", + "nakutala", + "nalamya", + "nalesa", + "nalisa", + "naluka", + "namabwato", + "namamotoka", + "namangalo", + "namatuka", + "namubali", + "namuli", + "namuma", + "namumusebo", + "namwena", + "namwisula", + "nangufye", + "napambali", + "napapene", + "napeshiwa", + "napetebulo", + "nasangalala", + "nashasamuna", + "nasunsumanako", + "natumfwa", + "naufimbwa", + "naufimona", + "naukamona", + "naunaka", + "nayabomba", + "nayabuuta", + "nayololoka", + "ndesumina", + "nebeminina", + "nebo", + "necakucinga", + "nechampepo", + "nechani", + "necilubi", + "necinso", + "necishimbi", + "nefibombelo", + "nefibusa", + "nefinshingwa", + "nefisabo", + "nefyakucita", + "nefyakwangasha", + "nelinso", + "nemilimo", + "nemimonekele", + "nemiti", + "nemitwe", + "nemyefu", + "nemyendele", + "nensana", + "nesabi", + "nesha", + "nesheti", + "ngacakweba", + "ngaliponene", + "ngaulya", + "ngele", + "nibashitata", + "nifi", + "nikanshi", + "nikucibansa", + "nikuma", + "nililine", + "nimbonako", + "nimucikuulwa", + "nimucipatala", + "ninshila", + "nintambo", + "nipalubansa", + "nipanganda", + "nipasukulu", + "nisotambe", + "nkonde", + "nkuni", + "nokubomba", + "nokucita", + "nokufiita", + "nokuli", + "nokutila", + "nolusokoshi", + "nombona", + "nomukoshi", + "nomulomo", + "nomutemwikwa", + "nomutima", + "nomwinshi", + "notushilwa", + "notwafiita", + "notwakashika", + "notwaku", + "nsaka", + "nshatala", + "nsoni", + "nu", + "oca", + "offices", + "one", + "ontela", + "pabakashana", + "pacakutelelapo", + "pachimuti", + "pacikwepe", + "pacimpeelwa", + "pafishimbi", + "pafitukutuku", + "pafyakufwala", + "paibiye", + "pakampelwa", + "pakukopa", + "pakulungisha", + "pakupeluka", + "pakushelemuka", + "pakutampa", + "pakwe", + "palamya", + "palilembwa", + "palubao", + "pamaliketi", + "pamapeya", + "pamatanta", + "pameshi", + "pamitwe", + "pamofye", + "pampanga", + "pamwakwe", + "pamyona", + "panda", + "panshimbi", + "pashita", + "pasuma", + "pata", + "pikula", + "pima", + "playing", + "pole", + "ponya", + "popa", + "poto", + "restaurant", + "samfya", + "sangalala", + "sansamusha", + "shakumulu", + "shamalangi", + "shangala", + "she", + "shekasheka", + "shibe", + "shilimo", + "shina", + "shinankwe", + "shindano", + "sokoshi", + "sosa", + "suit", + "tabafulile", + "tabalati", + "tabalaya", + "tabaleumfwa", + "taca", + "tafwali", + "takalefwaya", + "takuibelele", + "talepona", + "tanta", + "tasekelemo", + "tatulemona", + "tayaba", + "tayali", + "tea", + "teka", + "telemukila", + "teleningi", + "telenini", + "teleshikopu", + "temwana", + "tenge", + "ti", + "tila", + "to", + "toys", + "tukwete", + "tulelwa", + "twafiita", + "twamutuntula", + "twapangwa", + "twapusana", + "twingi", + "ubukwebo", + "ubulemoneka", + "ubunga", + "ubwabuta", + "ubwali", + "ubwangala", + "ubwendo", + "ukokwine", + "ukubeya", + "ukubikapo", + "ukubutukila", + "ukubuuta", + "ukucilapo", + "ukuipekanya", + "ukukalipa", + "ukukanaicena", + "ukukosha", + "ukukwanisha", + "ukukwatako", + "ukulasa", + "ukuleka", + "ukulima", + "ukulwala", + "ukumumona", + "ukumwentula", + "ukupapa", + "ukupitamo", + "ukupitana", + "ukusela", + "ukushakofye", + "ukushelelela", + "ukushinguluka", + "ukushitako", + "ukushitapo", + "ukutinya", + "ukutoba", + "ukutolosha", + "ukutukusha", + "ukutushako", + "ukutwishika", + "ukuyi", + "ukwabe", + "ukwasama", + "ukwikalapo", + "ukwikila", + "ulebomba", + "ulepita", + "uleteya", + "ulushimu", + "ulwendo", + "umufundo", + "umukali", + "umukashyana", + "umupili", + "umupungwe", + "umupusa", + "umushilwa", + "umuswaki", + "umutundu", + "umutuntulu", + "umwafitulukila", + "umwiminine", + "uniform", + "untushibi", + "utumabimbi", + "utumisambo", + "utumolu", + "utupunda", + "utusolobelo", + "utwaba", + "utwabulungana", + "utwakwikalapo", + "utwamena", + "uufweele", + "uulemonekakofye", + "uulemonekela", + "uulesamba", + "uuletoloka", + "uuletukusha", + "uupalile", + "uushenda", + "uwabutulukila", + "uwacikashana", + "uwadabwa", + "uwafuma", + "uwakubalilapo", + "uwakwibele", + "uwala", + "uwamaka", + "uwapala", + "uwikalile", + "uwitwa", + "uwulemoneka", + "wabwangalo", + "wacikulile", + "wafikulwa", + "wakatapa", + "wakumunwe", + "wakwebati", + "wakwikalamo", + "wamfula", + "wamumukoshi", + "wamutwe", + "wamwena", + "washita", + "watipo", + "wetuka", + "wishile", + "yabafye", + "yabamo", + "yabelele", + "yacalo", + "yachibumba", + "yacifuma", + "yacilaloka", + "yacimbayambaya", + "yacitukutuku", + "yafiitulukila", + "yafyakufwala", + "yafyakulya", + "yafyani", + "yakashikilila", + "yakukulyo", + "yakulya", + "yakunwa", + "yakwensha", + "yakwipikilamo", + "yalatinya", + "yalefika", + "yaleisa", + "yalemonekafye", + "yaleta", + "yalibuuta", + "yalucelo", + "yamulamba", + "yamuputule", + "yanke", + "yanshimbi", + "yasama", + "yellow", + "yetuuka", + "yikwete", + "yile", + "akakashika", + "akamulumendo", + "alekwela", + "balikwata", + "bunga", + "endela", + "iconi", + "ifimenwa", + "ifisabo", + "ilyabuuta", + "iminine", + "kulifye", + "lisha", + "malaiti", + "nakeminina", + "namaka", + "namakalashi", + "nefintu", + "pakuteya", + "utupuna", + "bashitata", + "uwa", + "aba", + "akanoono", + "ayalekana", + "bakemba", + "cimbaya", + "fingi", + "ifyatikama", + "imifwalile", + "ishapusana", + "iyakwata", + "kalefwaya", + "kufwile", + "nabe", + "nakacola", + "namatwi", + "nampo", + "nasho", + "necola", + "nicinshi", + "pakwangala", + "pang", + "siketi", + "tumbi", + "ulubuto", + "umwingila", + "naimya", + "alefwaya", + "amalembo", + "ayanono", + "bangalila", + "bashitaata", + "batemwa", + "cabuta", + "cishiba", + "naco", + "naimina", + "namalaiti", + "nimu", + "somone", + "utubana", + "yapusana", + "motoka", + "lekana", + "abaice", + "ena", + "ababuta", + "afwelefye", + "apapene", + "ayasuma", + "cimpelwa", + "ichola", + "ileya", + "iyoo", + "kafwile", + "mwela", + "naikatilila", + "ntashi", + "pacimpelwa", + "pafyo", + "pamushili", + "patupuna", + "shimo", + "tuuka", + "ubusanso", + "ubwa", + "ulukungu", + "uwasekelela", + "waku", + "bamo", + "eko", + "lubali", + "abanakashi", + "abanabo", + "angasha", + "bashitishamo", + "bwakwe", + "capala", + "cikalamba", + "fi", + "ifilubi", + "ifipuna", + "imishinku", + "kalale", + "naisuma", + "nakakwata", + "nomwenso", + "umushili", + "wilo", + "muulu", + "ng", + "abaleenda", + "afumine", + "alenwa", + "ayabuuta", + "imilimo", + "indeke", + "inkoloko", + "kemba", + "kuncito", + "lulya", + "lyamakumbi", + "nico", + "pacibumba", + "pakanwa", + "ukulisha", + "ukunina", + "eco", + "mucibansa", + "ala", + "epo", + "pali", + "teti", + "akacola", + "alepeluka", + "bafuma", + "bwingi", + "ibotolo", + "imba", + "kene", + "lesa", + "mulwelele", + "nabafula", + "nabanina", + "naena", + "nafukama", + "nakekala", + "ngo", + "pafyani", + "pakuboko", + "palupili", + "sote", + "tuntu", + "ukwimba", + "ulupwa", + "umwaiche", + "pamulu", + "mwana", + "amashiwi", + "babomba", + "balelwa", + "balepanga", + "ilyakashika", + "imishipi", + "kubantu", + "kuno", + "nganda", + "pakamana", + "ukwensha", + "ulupango", + "umucila", + "utwipi", + "pakuti", + "umwaice", + "akafiita", + "alewamya", + "balekopa", + "baleteyela", + "conse", + "fyaba", + "icaani", + "inono", + "lubansa", + "napanshi", + "nelaya", + "palubansa", + "temwa", + "yama", + "wakwe", + "mukati", + "nama", + "nakalimo", + "mumusebo", + "muntu", + "shikulu", + "alemona", + "alesamba", + "imisepela", + "namwentula", + "ukupona", + "ukutali", + "umwa", + "uwikete", + "eya", + "ubwangalo", + "kaili", + "ababombela", + "abacimfyanya", + "abakolongene", + "abakufyalo", + "abaleetamba", + "abalelanda", + "abalesamba", + "abalesefya", + "abaleyenda", + "abalumemdo", + "abamyaka", + "abanankashi", + "abaonda", + "abaupana", + "abeminina", + "abensha", + "abikako", + "abli", + "afumishe", + "afwaya", + "afwe", + "afwila", + "aikele", + "akabango", + "akabwangalo", + "akafitulukila", + "akakushelelapo", + "akalale", + "akama", + "akamipeto", + "akampani", + "akamumana", + "akasansamuka", + "akashiba", + "akayemba", + "aketwa", + "alabombesha", + "alacita", + "alakwanisha", + "alala", + "alebakopa", + "alebutukisha", + "aleemonekela", + "aleesamba", + "alefwaila", + "alefwenya", + "aleingisha", + "alekumpauka", + "alelanguluka", + "alelilila", + "alenga", + "alensha", + "alepama", + "alepitila", + "alepopa", + "alepweluka", + "aleshelelapo", + "aleshimika", + "aletantala", + "aletola", + "aletontonkanyapo", + "aletumbika", + "aleyelela", + "aleyesha", + "alikuncende", + "alimucibansa", + "alisha", + "aliyemba", + "alosheshe", + "alyo", + "amabuuku", + "amagalasi", + "amakapu", + "amalila", + "amanenekela", + "amapili", + "amashina", + "amashindano", + "an", + "apakubika", + "apakunyanta", + "apakushelela", + "apakwangalila", + "apaliko", + "apanga", + "apashili", + "apple", + "asalile", + "asangwa", + "asekelele", + "ashintilishe", + "asontele", + "atusheko", + "ayafunda", + "ayakucingilila", + "ayakumwenako", + "ayakunuma", + "ayama", + "ayambwa", + "ayaponene", + "babetile", + "babiika", + "bacikulile", + "bacilateya", + "bafilimba", + "bafimbile", + "bag", + "baibikile", + "baishiba", + "bakacofa", + "bakapanga", + "bakateka", + "bakese", + "bakolongene", + "bakumanine", + "bakwela", + "bakwelelepo", + "bakwempa", + "balafwaya", + "balashitishamo", + "balasunga", + "baleafwana", + "balebilisha", + "balebombelapo", + "balebutauka", + "balecitila", + "balecofela", + "baleeangala", + "baleimya", + "balekweleka", + "balelandapo", + "balelanshanyapo", + "balelima", + "balepikana", + "balepima", + "baleposako", + "baleputula", + "balesefesha", + "baletentemuka", + "baleumfwafye", + "baleyanga", + "baleyapo", + "baleyendafye", + "baleyolola", + "balicipenta", + "balimukati", + "balimutemwa", + "balina", + "balishibisha", + "balonganine", + "bambuya", + "bamoneka", + "banamutekenya", + "banco", + "bangalilako", + "bangalilamo", + "bapisha", + "bapusana", + "basambila", + "bashala", + "bashishe", + "basukwise", + "batolweke", + "bed", + "beele", + "beena", + "bekalamo", + "bekale", + "bekalila", + "bekeele", + "bemine", + "bengaya", + "bengile", + "beni", + "beshibe", + "bubi", + "bule", + "bumbwa", + "bungo", + "bungwe", + "busali", + "butukilamo", + "bwakwensha", + "bwaliba", + "cafyakulya", + "cakubomfya", + "cakumucingilila", + "cakuteyelako", + "cakwikalapo", + "calicingililwa", + "calipangwa", + "camalangi", + "cansale", + "cela", + "cesu", + "chain", + "che", + "chimfyanya", + "chungulo", + "cibili", + "cibwato", + "cifumine", + "cilaba", + "cilecitika", + "cilepita", + "cilindi", + "cilupili", + "cimazembe", + "cimoneka", + "cimoneke", + "cinanda", + "cinshinka", + "cisalu", + "cishi", + "crossing", + "dangali", + "eaba", + "ebanina", + "ebumba", + "ecalenga", + "ecile", + "eeee", + "ekeleko", + "emabumba", + "emakene", + "emuku", + "endele", + "enditaye", + "enshila", + "enshita", + "epakutila", + "eshilefye", + "ewikete", + "ewishi", + "ewu", + "eyae", + "fifi", + "filebutuka", + "filepita", + "fimbwa", + "fimenwa", + "fimoneka", + "fishi", + "fitekwa", + "fituluka", + "fumine", + "fwebantu", + "fyabasungu", + "fyapa", + "fyoni", + "ic", + "icaisuka", + "icaka", + "icakufimba", + "icakushelelako", + "icalelema", + "icamutwe", + "icatunti", + "ichakufwala", + "ichitabo", + "icibwato", + "icikocikala", + "icikopo", + "icilecitika", + "icinyau", + "icitesheni", + "icuushi", + "ifibata", + "ifibumbwa", + "ifileecitika", + "ifilesangwa", + "ifinanda", + "ifinkolonkolo", + "ifinshi", + "ifiputula", + "ifishilemoneka", + "ifitupa", + "ifntu", + "ifyakubombelamo", + "ifyakumulu", + "ifyakwe", + "ifyalecitika", + "ifyapusanako", + "ifyaputulwa", + "ifyatitikana", + "iibiye", + "iile", + "iitangile", + "ikate", + "ilaloka", + "ileciluka", + "ileefwaya", + "ileisa", + "ileowa", + "ilifwele", + "iliminine", + "ilini", + "ilisendele", + "ilyabula", + "ilyamalangi", + "ilyenshi", + "imfwa", + "imilaini", + "imishanine", + "imoine", + "imputula", + "imyengelele", + "indupwa", + "inimbo", + "inkashi", + "insamba", + "intemba", + "inyantile", + "is", + "ishabusaka", + "ishaonda", + "ishilelwa", + "istima", + "itolweke", + "itwa", + "iyabatama", + "iyakwangala", + "iyatikama", + "kaale", + "kabasa", + "kabli", + "kaena", + "kaiti", + "kakwangasha", + "kaleangalila", + "kalelosha", + "kalenyanta", + "kaliko", + "kalitemwa", + "kamaboko", + "kamusange", + "kapone", + "katenesi", + "katolika", + "kekala", + "kekata", + "kiliketi", + "kofi", + "kofye", + "kompo", + "kona", + "konkamo", + "konkana", + "kubacingilila", + "kubana", + "kubukali", + "kucikuulwa", + "kucingililako", + "kucipatala", + "kufikulwa", + "kufimba", + "kufya", + "kufyangalo", + "kukabanga", + "kulala", + "kulalenga", + "kuleba", + "kulomfwika", + "kumbatana", + "kuminako", + "kumoneka", + "kumunakwe", + "kumusana", + "kumwana", + "kumwenako", + "kunchito", + "kunnuma", + "kupalile", + "kushelelapo", + "kutukusha", + "kutushishapo", + "kwabe", + "kwakuso", + "kwaliwama", + "kwamuntu", + "kweba", + "kwempa", + "kwingila", + "laptop", + "libili", + "likele", + "lilefwaya", + "limba", + "lipulanga", + "lishitolo", + "lukalamba", + "lukombo", + "luno", + "luse", + "lwe", + "lyabuutulukila", + "lyaku", + "lyakunuma", + "machunga", + "macunga", + "mala", + "masukulu", + "matafwali", + "mbona", + "mbwene", + "meenso", + "mpukunya", + "mubwendo", + "mucipepala", + "mucipinda", + "mufipalile", + "mufyaku", + "mufyakulya", + "mukate", + "mukolwe", + "mukulenga", + "mukulwa", + "mukumfwa", + "mukunwa", + "mukunwina", + "mukwamba", + "mukwisula", + "muleemoneka", + "mulolesha", + "mulupili", + "mumabala", + "mumbafu", + "mumikalile", + "muncito", + "muntwe", + "mutanu", + "mutengo", + "mutolilo", + "mutupuna", + "mutushimbi", + "mwabo", + "mwafwako", + "mwalipita", + "mweba", + "mwibeseni", + "mwicinka", + "mwishi", + "mwitenti", + "myendele", + "nababungana", + "nabacita", + "nabafwele", + "nabakafundisha", + "nabalekopa", + "nabalembapo", + "nabamotoka", + "nabamubika", + "nabanakulu", + "nabani", + "nabapalana", + "nabasangalala", + "nabasendama", + "nabashikaka", + "nabashinguluka", + "nabashunguluka", + "nabatantikapo", + "nabeminima", + "nabengisha", + "nabesula", + "nabomba", + "nabonfwa", + "nacikata", + "nacimya", + "nacinkupiti", + "nacisuka", + "nafipalana", + "nafundumana", + "naifulwa", + "naikila", + "nailamba", + "naiminika", + "naipalana", + "naipona", + "naiposa", + "nakabokoshi", + "nakafuma", + "nakalubi", + "nakalumendo", + "nake", + "nakema", + "nakesuka", + "nakucilisha", + "nakufika", + "nakuntashi", + "nakwanisha", + "nakwapila", + "nakwate", + "nakwikata", + "naloshako", + "namabumba", + "namagalshi", + "namakunda", + "namasikiyo", + "namataki", + "namukanwa", + "namwetula", + "namyo", + "nangulafye", + "nani", + "nanyata", + "napabomba", + "napacifuba", + "napama", + "napanse", + "napanuma", + "napatalala", + "napokelela", + "nasamina", + "nasendamako", + "nashasama", + "nashibomba", + "nashika", + "nashikakililwa", + "nashipalana", + "nashipula", + "natambalala", + "natukwata", + "nayapona", + "nayengila", + "nayikata", + "ndupwa", + "necha", + "nechikulwa", + "necilaka", + "necipyango", + "nefinama", + "nefipepala", + "nefitu", + "nefyapala", + "nemi", + "nencito", + "nenkoto", + "nenshita", + "nepala", + "nesumbu", + "netambo", + "ngaifi", + "ngakwali", + "ngalo", + "ngapona", + "ngefifine", + "ngeleshi", + "ngolefwaya", + "nibampundu", + "nibanina", + "nikucende", + "nikunuma", + "nimucibansa", + "nimwe", + "nipamulu", + "nipamuulu", + "nipanshi", + "nishitata", + "niulya", + "nkwanishe", + "nobe", + "nokusenda", + "nokushibata", + "nokwangala", + "nolupala", + "nolusapato", + "nomukalamba", + "nomushili", + "noono", + "notusalu", + "notusapato", + "ololoka", + "pabili", + "pabulo", + "pacangalo", + "pachi", + "paciba", + "pacilimba", + "paco", + "pafulile", + "pafya", + "pakacinga", + "pakasuba", + "pakubelenga", + "pakulu", + "pakulwa", + "pakwikata", + "palashuti", + "palifimo", + "palukungu", + "palwakwe", + "pamakwebo", + "pamicanga", + "pamulundu", + "pamwabo", + "pamwishi", + "pancede", + "panchito", + "patapata", + "pekufi", + "petuuka", + "pipe", + "plastiki", + "pofye", + "pokelela", + "pombana", + "pompi", + "puta", + "s", + "saaana", + "sefa", + "sela", + "sendele", + "shalekanalekana", + "shanina", + "shapala", + "shelelapo", + "shelemuko", + "shiko", + "shilemonekafye", + "shiwi", + "shop", + "sikisi", + "skiyo", + "skulu", + "table", + "tabomfwa", + "taciishibikwe", + "tafweleko", + "tanshi", + "tanto", + "tashili", + "tatu", + "teiya", + "teku", + "tembwa", + "temwikwa", + "tentemuka", + "tetifye", + "tinya", + "toba", + "tolauka", + "toyi", + "tubotolo", + "tufwele", + "tulande", + "tumone", + "tunoono", + "tunshitunshi", + "tusano", + "tuukatuuka", + "tuukutuuku", + "tv", + "twakatapakatapa", + "twalanda", + "ubusali", + "ubwakucimfyanya", + "ukubikakofye", + "ukubomfye", + "ukucilishapo", + "ukucinda", + "ukucitika", + "ukuilanga", + "ukukumana", + "ukulemba", + "ukulinga", + "ukulosha", + "ukunyanta", + "ukupokelela", + "ukushunguluka", + "ukuwa", + "ukwabusaka", + "ukwangalako", + "ukwendelako", + "ukwenshya", + "ukwikatana", + "ukwiminine", + "ukwingilamo", + "ulandile", + "uleensha", + "ulelisha", + "ulelolekesha", + "ulelolesha", + "ulunkonto", + "ulunshingwa", + "ulwakwata", + "umowine", + "umukansu", + "umukashan", + "umulemfwe", + "umupini", + "umupunga", + "umushelemuko", + "umutoto", + "umutuntulwa", + "umwafula", + "umwaka", + "umwakashi", + "umwakubika", + "umwakuposa", + "umwankashi", + "umwefi", + "umwene", + "umwenfu", + "unwana", + "upapile", + "upitile", + "ushifwele", + "utubwato", + "utukato", + "utukopo", + "utumabula", + "utunya", + "ututambala", + "utwapangwa", + "utwayemba", + "utwiingi", + "uulebakopa", + "uulelolesha", + "uuntu", + "uupapile", + "uutolweke", + "uwafunda", + "uwakanshiwa", + "uwamu", + "uwatelela", + "wabana", + "wacikalamba", + "waciko", + "wafika", + "wafimuti", + "wakako", + "wakulilamo", + "wakumoolu", + "wakutalala", + "wakutanusha", + "walikosa", + "wamotoka", + "wamushishi", + "wamutuntula", + "wanu", + "wapangwa", + "wasosela", + "watemwa", + "waumfwa", + "winifomu", + "wino", + "yabakapokola", + "yabanamayo", + "yabanani", + "yabaume", + "yabuunga", + "yaciba", + "yacikope", + "yacintu", + "yacipuna", + "yafikuulwa", + "yafumya", + "yaici", + "yakamusebo", + "yakanwa", + "yakubutuka", + "yakulu", + "yalecimfyanya", + "yalifwa", + "yaliyemba", + "yamatuka", + "yamona", + "yamoyene", + "yamumenso", + "yamumukoshi", + "yanga", + "yapala", + "yatali", + "yatuko", + "yekafye", + "yekayeka", + "yenu", + "yeshati", + "yili", + "zebra", + "cafiita", + "eehe", + "filecitika", + "kalebutuka", + "muchibansa", + "mwibala", + "nakekata", + "palifye", + "saca", + "takwete", + "ululimi", + "uwamushinku", + "cacine", + "kuminwe", + "abashilika", + "akepi", + "bele", + "echo", + "ifyapusanapusana", + "iwe", + "mucanga", + "nabalumendo", + "nakukanwa", + "nomushishi", + "shintu", + "tuka", + "tule", + "ukwangalila", + "fya", + "alefuma", + "amabumba", + "amakumbi", + "icilimba", + "kumubili", + "lupwa", + "mwapita", + "namasako", + "nibalya", + "patali", + "shilecita", + "talala", + "ukalamba", + "utubwa", + "yamenshi", + "kuntanshi", + "bushe", + "alebomba", + "alepanga", + "baleangalila", + "campepo", + "cikope", + "lyonse", + "mukalamba", + "mupando", + "mwinshi", + "naikalako", + "nasunsumana", + "ngefi", + "notu", + "samba", + "kabili", + "abakashana", + "butuluka", + "cafita", + "cawama", + "ifitabo", + "lilya", + "lye", + "namabula", + "kumutwe", + "ifingi", + "emukwai", + "pakati", + "akamukashana", + "balelanda", + "botolo", + "bwalwa", + "kumuulu", + "mukushita", + "mwasosa", + "nabatemwa", + "nabekatana", + "pameenshi", + "pita", + "pusanapusana", + "ukutamba", + "uwaina", + "eka", + "ndemona", + "akabuuta", + "akashati", + "alebutukila", + "baice", + "baleyenda", + "ibuumba", + "ifyakatapakatapa", + "ilikalamba", + "kwali", + "mishishi", + "molu", + "nakukaba", + "nefi", + "talemoneka", + "utuntu", + "uwakashika", + "yacibansa", + "yamo", + "mwaume", + "abakulu", + "alitemwa", + "amafufu", + "ayakashika", + "iyili", + "mucikuulwa", + "nabesa", + "nafimbi", + "tamuli", + "tuku", + "ulwimbo", + "umukoloci", + "abali", + "mumenshi", + "abikapo", + "amacinga", + "bakapokola", + "balenwa", + "bekala", + "cinga", + "cisote", + "eicho", + "icitabo", + "ifimpompo", + "ituka", + "keka", + "kumitwe", + "kutanshi", + "myotoka", + "naifwala", + "namagalashi", + "shitisha", + "ukwete", + "umukulu", + "iyo", + "afuma", + "aleangalila", + "icinga", + "ishili", + "lulemoneka", + "mumaboko", + "mwe", + "ukulya", + "cishinka", + "abafwala", + "abaiteyanya", + "abakosa", + "abalebomba", + "abaleipitila", + "abalelumba", + "abalisha", + "abasangwa", + "abashile", + "abayemba", + "abemishe", + "abepi", + "aci", + "acipona", + "afukamine", + "aikakile", + "aisi", + "akabusaka", + "akakope", + "akalubao", + "akamakumbimakumbi", + "akonkele", + "alale", + "aleamfula", + "aleanga", + "alebalolesha", + "alebila", + "aleelolesha", + "aleendesha", + "aleeteya", + "aleitulula", + "alekula", + "alelandapo", + "alelembapo", + "alelolelapo", + "alelondolwela", + "alemonekako", + "alepapa", + "alepokelela", + "aleposha", + "aleputaula", + "alesontelela", + "alesosa", + "alesuka", + "aletolosha", + "aletomona", + "aliba", + "aliina", + "alimu", + "alipanse", + "alya", + "amabaluni", + "amabanjo", + "amakoti", + "amalwele", + "amani", + "amasabi", + "amashitima", + "amatabo", + "amataila", + "ameeno", + "amfula", + "anine", + "apafita", + "apalepita", + "apange", + "apataliko", + "apron", + "aumfwa", + "ayafitulukila", + "ayakuntashi", + "ayalecimfyanya", + "ayapala", + "bacibomfya", + "bacifuma", + "bafike", + "bafita", + "bafwa", + "bafwikile", + "baiswile", + "bakakila", + "bakateiya", + "bakeemba", + "bakulila", + "bakwanishe", + "balashitisha", + "baleanga", + "balebatamba", + "balee", + "baleelolesha", + "baleendesha", + "baleikopa", + "baleka", + "balekwata", + "balemufunda", + "balemulanga", + "baleoca", + "balepembela", + "balepunda", + "baletaya", + "baleyi", + "balicikuula", + "balicingilila", + "baliisunga", + "balikanshiwa", + "balikosa", + "balikulako", + "balipamo", + "balishibana", + "balitemwisha", + "bamashini", + "bambile", + "bamukope", + "bamwenye", + "banakulubantu", + "banamoyo", + "bangaleko", + "bangalilapo", + "banshike", + "banyantile", + "bapalile", + "bapita", + "bashilile", + "batampile", + "batantika", + "bekatile", + "bela", + "belefye", + "belile", + "bemike", + "bengishe", + "bepika", + "besabi", + "bikako", + "bikapo", + "bize", + "bololeko", + "bridge", + "buleya", + "bundama", + "bwabantu", + "bwaila", + "bwalikwata", + "bwapangwa", + "cabipa", + "calimo", + "calunkoto", + "cayemba", + "ceni", + "chibusa", + "ciko", + "cikulile", + "cilebomba", + "cilefuma", + "dabwa", + "drum", + "efya", + "eifi", + "ekatilile", + "elebutuka", + "ene", + "etuka", + "eukwete", + "euleshitisha", + "euletungulula", + "fibokoshi", + "fibumba", + "fina", + "fingalenga", + "fyakunwa", + "fyakusambilamo", + "fyamakumbi", + "fyapangwa", + "gole", + "icakucimfyanya", + "icakucinga", + "icayanguka", + "ichabuta", + "ichikope", + "ichimbayambaya", + "icibaka", + "icibata", + "icilola", + "icilolani", + "icimupila", + "icingulungulu", + "icipalene", + "icipendwa", + "icipikicala", + "iciponene", + "icipunda", + "icipya", + "icisabi", + "iciweme", + "ickope", + "if", + "ificitika", + "ificitike", + "ififwele", + "ifikopo", + "ifilelenga", + "ifilindi", + "ifilipo", + "ifinsabwa", + "ifishikwete", + "ifishingulwike", + "ifituku", + "ifiunda", + "ifo", + "ifunda", + "ifyaiminina", + "ifyakucingila", + "ifyakula", + "ifyakuti", + "ifyakutoloka", + "ifyakwangala", + "ifyalenga", + "ifyanso", + "ifyawama", + "iilume", + "ikalashi", + "ikwata", + "ilampi", + "ilebomba", + "ileebutukila", + "ileesha", + "ilefwaisha", + "ilelola", + "ilelya", + "ilemonaka", + "iletwala", + "ileyangasha", + "ilyabantu", + "ilyabutuluka", + "ima", + "imisango", + "imitenge", + "imitima", + "imwe", + "imyona", + "inchito", + "india", + "inkondo", + "inoono", + "insakwe", + "inyunshi", + "ishama", + "ishamipeto", + "ishapala", + "ishelangi", + "ishiba", + "ishiwi", + "ishya", + "itauni", + "itole", + "iyabushiku", + "iyakatapa", + "iyalamba", + "iyapala", + "iyee", + "japan", + "kachola", + "kacofa", + "kafi", + "kakaena", + "kakwa", + "kalelila", + "kalenga", + "kaleyangalila", + "kaloleshe", + "kambola", + "kamokene", + "kampelwa", + "kampili", + "kamukashana", + "kapumpe", + "kashila", + "katapaka", + "katapakata", + "katundu", + "kawa", + "kolwa", + "kubafyashi", + "kubomba", + "kuchende", + "kucila", + "kufitile", + "kui", + "kuku", + "kulapita", + "kulasangwa", + "kumanina", + "kumasambililo", + "kumifwalile", + "kumishishi", + "kumwine", + "kumyakwe", + "kunganda", + "kutwi", + "kwalibako", + "kwapa", + "kwipikila", + "kwisamba", + "kwitebulo", + "kwitobo", + "langisha", + "lelema", + "lifwile", + "likulu", + "lilebutuka", + "lilepita", + "lileya", + "lituuka", + "longana", + "lu", + "luncingi", + "lusuma", + "lyafyakulya", + "lyamishilwa", + "mafunde", + "malembo", + "malila", + "mama", + "masaka", + "mashitolo", + "mashiwi", + "mboo", + "minine", + "mitanto", + "mitundu", + "monapo", + "moneke", + "moona", + "mpeepo", + "mpelwa", + "mpongolo", + "muchi", + "mucibemba", + "mucibumba", + "mufulile", + "mukasote", + "mukopa", + "mukupana", + "mukutontonkanya", + "mukuwamya", + "mukwisha", + "mulando", + "mulomo", + "mulusuba", + "mumbwe", + "mumifwalile", + "mumpepo", + "mumuseke", + "munwe", + "munyololo", + "mupepifye", + "mwaku", + "mwenekesha", + "mwilaya", + "mwipi", + "my", + "myabo", + "myona", + "naabantu", + "naabeminina", + "naafwala", + "naasama", + "nababikamo", + "nabafuma", + "nabafumya", + "nabaipenta", + "nabakwate", + "nabalela", + "nabaloshanya", + "nabamayo", + "nabamona", + "nabamwikata", + "nabashala", + "nabatolokela", + "nabenuka", + "nabeshiba", + "nacila", + "nafulako", + "naibukisha", + "naikakwa", + "naimyo", + "nakafumya", + "nakakila", + "nakale", + "nakanya", + "nakapu", + "nakatambo", + "nakumakasa", + "nakumbwa", + "nakuncende", + "nakunshi", + "nakwatapo", + "nakwisa", + "nalalako", + "nalima", + "naliwama", + "nalwikala", + "namukati", + "namuntu", + "namwikata", + "nanomba", + "napafita", + "napanga", + "naponena", + "naponya", + "napunda", + "nasalala", + "naseka", + "nashibutuka", + "nashibwinga", + "nashikulu", + "natomboka", + "naunfwa", + "nawena", + "nayasanika", + "nayasha", + "ndemonapo", + "ndi", + "necaku", + "necisoselo", + "necoola", + "nefili", + "nefyakuicingilila", + "nefyapalana", + "nendalama", + "nenekela", + "new", + "news", + "nikapokola", + "nikuncito", + "nimunshita", + "nimwisa", + "ninamayo", + "nindaminwe", + "ning", + "ninsala", + "niyalya", + "nkanshi", + "nkunda", + "nokuicena", + "nokukopa", + "nokusamba", + "nokushitisha", + "nokuya", + "nokwasama", + "nokwikata", + "nomwela", + "noti", + "notubotolo", + "notumishishi", + "nsala", + "oh", + "pabali", + "pabalumendo", + "pabana", + "pachibumba", + "pacipeya", + "pafinso", + "pakabale", + "pakali", + "pakalubao", + "pakucimfyanya", + "pakufika", + "pakufuma", + "pakukwela", + "pakuma", + "pakwamba", + "pakwimya", + "palaba", + "palepita", + "palu", + "pamakufi", + "pamapulanga", + "pamilimo", + "paminwe", + "pampili", + "pamukumo", + "pamupila", + "pando", + "papusha", + "party", + "patufyani", + "patushimbi", + "peminine", + "peta", + "pilibuka", + "pitila", + "pulemu", + "putule", + "saka", + "salangana", + "science", + "sendama", + "shala", + "shamu", + "shifumine", + "shifwika", + "shilaba", + "shilecimfyanya", + "shilelolesha", + "shilemonekela", + "shimoneka", + "shing", + "shinguluka", + "shinono", + "shipi", + "shishile", + "shisuma", + "sondo", + "tabafwaya", + "tabaicenene", + "tabatina", + "tabo", + "takuba", + "takupita", + "tambalala", + "tamule", + "tashile", + "tatufwele", + "taumwene", + "tawaishiba", + "taya", + "teyelamo", + "tolokelapo", + "tolosha", + "tulelolesha", + "tuletamba", + "tumabwe", + "tusuma", + "twalikwata", + "twanshi", + "ububwine", + "ukoba", + "ukobali", + "ukufiita", + "ukufina", + "ukufita", + "ukukweleka", + "ukule", + "ukulesha", + "ukulonga", + "ukulumba", + "ukulundapo", + "ukupalana", + "ukupeepa", + "ukupela", + "ukupeluka", + "ukutwi", + "ukwakaba", + "ukwangalilapo", + "ukwelela", + "ukwesha", + "ukwisala", + "ulecofa", + "ulemonekela", + "ululuka", + "ummm", + "umule", + "umulomo", + "umushanga", + "umusowa", + "umusunga", + "umwanashi", + "umweo", + "uninine", + "utumenshi", + "utumilundu", + "utumipando", + "utumishilwa", + "utumiti", + "utuni", + "utusabi", + "utushati", + "utwabula", + "utwakufwala", + "utwakulya", + "utwakunwa", + "utwalekana", + "uubelele", + "uwabela", + "uwalinga", + "uwaluba", + "uwamakumbi", + "uwamanenekela", + "uwana", + "uwaume", + "uwe", + "uwukulu", + "wachikulwa", + "wacikuulwa", + "wacita", + "wafiitulukila", + "wafwa", + "waici", + "wakufyalo", + "wakumolu", + "wakusambililamo", + "waliba", + "wamakumbi", + "wamuntu", + "wang", + "wati", + "wee", + "white", + "wire", + "wonse", + "yabomba", + "yachibansa", + "yaciloka", + "yafiko", + "yaikalila", + "yaisa", + "yakile", + "yakucinfyanya", + "yakusefya", + "yakuti", + "yakwangalilamo", + "yakwashitata", + "yaleenda", + "yalenga", + "yaleteya", + "yalibelela", + "yalipona", + "yalubilo", + "yamalaiti", + "yameenshi", + "yamunankwe", + "yangasha", + "yatoloka", + "yilebutuka", + "yimo", + "yunifomu", + "ifinama", + "imiti", + "ishabuta", + "nafyo", + "nakunuma", + "nefyani", + "tonse", + "nshi", + "kanshi", + "amatwi", + "babelele", + "bapangila", + "impepo", + "teya", + "alecita", + "ishi", + "akamwaice", + "baleciita", + "ifikuulwa", + "kulu", + "kulwa", + "naisula", + "nshila", + "utushimbi", + "kuli", + "ayakalamba", + "balekopwa", + "fikulwa", + "kutali", + "nalala", + "ukufika", + "nganshi", + "ifintu", + "wine", + "musebo", + "pamo", + "bashitisha", + "ififine", + "iyakashikila", + "kamela", + "mwaice", + "nabwinga", + "pepala", + "ukubutuka", + "utuputula", + "shani", + "uko", + "umu", + "aletolokela", + "ayakulu", + "bulalo", + "ifyalekanalekana", + "lyakashika", + "nababika", + "nashikwata", + "nincende", + "nsalu", + "ukucimfya", + "ukukwine", + "baya", + "cita", + "iitali", + "ilebutukila", + "ilelolesha", + "ilepepeka", + "mwisamba", + "ngashi", + "nifyo", + "pakubeya", + "pamupando", + "uyu", + "balecita", + "cilepala", + "akanakashi", + "aleshitisha", + "amakwebo", + "banakulu", + "chipalile", + "cingilila", + "kabuta", + "kalamba", + "kulaba", + "mpela", + "n", + "nakontama", + "nefikulwa", + "tabafwele", + "imo", + "kwati", + "balebomba", + "ecilengele", + "eshile", + "ifisuma", + "mukumona", + "nomulumendo", + "panga", + "ubulalo", + "ule", + "wena", + "yambi", + "lelo", + "uufwele", + "nakwela", + "namolu", + "nge", + "ulemona", + "kashika", + "ababa", + "abacikalamba", + "abalamba", + "abalelolela", + "abalelolesha", + "abaleyangala", + "abamwentula", + "abangeleshi", + "abasambilila", + "abatali", + "abekeleko", + "abeshikulu", + "abika", + "abikamo", + "aishiba", + "akabutulukila", + "akakopo", + "akamasako", + "akamela", + "akamu", + "akamutuntula", + "akapepala", + "akapita", + "akasolobelo", + "akula", + "akwate", + "al", + "alapanga", + "alaya", + "aleelela", + "aleepita", + "aleeshelela", + "alefwayo", + "aleita", + "alelishisha", + "alelisisha", + "alemba", + "alepima", + "aletinta", + "aletoba", + "alibeya", + "alibuta", + "alife", + "alimofye", + "alyonda", + "amaato", + "amajinga", + "amajombo", + "amakufi", + "amawindo", + "ameenso", + "anwina", + "apaba", + "apabuuta", + "apakupita", + "apale", + "apashikele", + "apwisha", + "asamuna", + "ashitisha", + "asuka", + "atila", + "atontele", + "awa", + "awakwata", + "awina", + "ayabomba", + "ayalamba", + "babikilepo", + "babomfeshe", + "bacite", + "bafule", + "bafunda", + "bafwalila", + "baibomfya", + "baicena", + "baili", + "baiminina", + "bakacimfyanya", + "bakaena", + "bakako", + "bakonkele", + "balamya", + "balebeya", + "baleesha", + "baleitila", + "balekana", + "balelengela", + "balemu", + "baleshitishisha", + "baletambafye", + "baletambapo", + "baletwala", + "balicenjela", + "balikwisa", + "balilembapo", + "balolele", + "bamalonda", + "bamupele", + "bamushitile", + "bapapile", + "bapite", + "baputula", + "basaano", + "basala", + "basambilisha", + "bashile", + "batwala", + "baupana", + "bebele", + "beicena", + "bekata", + "belemoneka", + "beshilefe", + "beshilefye", + "biye", + "bomfwe", + "bufwile", + "bukali", + "bukulu", + "bulungu", + "bungululu", + "busakabusaka", + "butali", + "buteko", + "bwiino", + "cabe", + "cakatapa", + "cakucinfyanya", + "cakukopelako", + "cakumutwe", + "cakupapa", + "cakushelemuka", + "capalile", + "capangilwa", + "cetekela", + "chi", + "cibokoshi", + "cidoli", + "ciluka", + "cinshingwa", + "cishika", + "cisotwe", + "color", + "eeka", + "ekeete", + "eme", + "eminineko", + "emuli", + "endesha", + "engile", + "ewuku", + "eylo", + "fibomba", + "filecita", + "filelangilila", + "filembo", + "filiko", + "filipo", + "fimba", + "fishibikwe", + "fisoso", + "fosholo", + "fumina", + "fyakale", + "fyakubomfya", + "golide", + "icakulwa", + "icakunwa", + "icakwangalilapo", + "icakwebati", + "icalinga", + "icamutuntula", + "ichibansa", + "icibotolo", + "icibumbili", + "icilangililo", + "icisabo", + "ifibotolo", + "ifikopa", + "ifilekula", + "ifilepita", + "ifipushi", + "ifyakushana", + "ifyalembwa", + "ifyamena", + "ifyongo", + "ilenyanta", + "iletolauka", + "ileyangalafye", + "ilibumba", + "ilyakwata", + "imbuto", + "imi", + "imisalu", + "imiseke", + "imyangalile", + "imyemfu", + "indaka", + "ingisha", + "inkoto", + "inongo", + "intafu", + "intunti", + "ipulanga", + "iyafunda", + "iyalepa", + "iyauma", + "iyimbwa", + "kabomba", + "kabungwe", + "kacelo", + "kadoli", + "kaleshana", + "kamakumbimakumbi", + "kana", + "kapangwa", + "kapuntula", + "kashiika", + "keemba", + "kekakeka", + "keyboard", + "kilimu", + "kontama", + "kowa", + "kubako", + "kube", + "kubwangalo", + "kucimfyana", + "kucisankano", + "kucishimbi", + "kufyakufwala", + "kulila", + "kumasako", + "kumucingililako", + "kumukoshi", + "kumunankwe", + "kumuputule", + "kuncinga", + "kunumba", + "kupita", + "kutalala", + "kutiyaba", + "kutunwa", + "kwabantu", + "kwakaba", + "kwakwangalila", + "kwempwa", + "kwenafye", + "lisabi", + "lwang", + "lyakashikilila", + "lyalikwata", + "lyamenshi", + "lyenshi", + "mabotolo", + "mbaula", + "mubelele", + "mucola", + "mucungwa", + "mufi", + "mufikulwa", + "mukoloci", + "mukukopwa", + "mukulila", + "mukuloka", + "mukupekanya", + "mukushitapo", + "mukwikata", + "mulaba", + "mulamba", + "mulopamulopa", + "mulubali", + "mulupwa", + "mumaliketi", + "mumatontonkanyo", + "mumolu", + "mumushili", + "mumyendele", + "munsalu", + "munyina", + "mupeto", + "mutumtula", + "mwafwilisha", + "mwamwena", + "mwanakshi", + "mweneka", + "mwikalashi", + "nabafimba", + "nabema", + "nabemba", + "nabeminine", + "nacilamona", + "nacimfya", + "nacita", + "nafungulula", + "naifwe", + "naipenta", + "nakalolesha", + "nakamo", + "nakamona", + "nakangalilo", + "nakapapa", + "nakasama", + "nakasamuna", + "nakayanda", + "nakucibumba", + "nakumulu", + "nalongana", + "nalukwata", + "namapepala", + "namatebulo", + "namulungika", + "namwiminina", + "napakanwa", + "napamulu", + "napwisha", + "nasendwa", + "natekanya", + "naufwa", + "nayalamba", + "nchinga", + "necakufwala", + "nefilemoneka", + "nefyela", + "nekoti", + "nemishipi", + "ngabapwisha", + "ngabo", + "ngakuti", + "ngawalolesha", + "ngánda", + "nibana", + "nimukati", + "nimumbali", + "nimung", + "nimwi", + "nokulila", + "nokumoneka", + "nokuseka", + "nokutina", + "nokwishiba", + "nomukashi", + "not", + "notufyola", + "notumiti", + "nsaale", + "nsenlegeti", + "nsofu", + "ntamba", + "ntoloshi", + "nwa", + "o", + "ofoloshi", + "pacikuulwa", + "pakakushelemukilako", + "pakuba", + "pakucita", + "pakucofa", + "pakulolesha", + "pakutamba", + "pakwikala", + "paline", + "pangila", + "papita", + "pasukulu", + "peka", + "piano", + "pusapusana", + "sabusha", + "sankana", + "sano", + "sapato", + "shaifi", + "shaliba", + "shatemwa", + "shiba", + "shileyangalila", + "shilomfwa", + "shipalile", + "sikiyo", + "sino", + "skating", + "sosha", + "stairs", + "tacikwete", + "tafyakwata", + "takakwete", + "tecakutwishika", + "tenishi", + "tent", + "tinika", + "toy", + "tufyani", + "tuleyangalila", + "tune", + "twakwikalapo", + "ububwangalo", + "ukuculuka", + "ukufumishakofye", + "ukufunda", + "ukufwa", + "ukukaka", + "ukukosa", + "ukulangilila", + "ukupekanya", + "ukupoosa", + "ukusala", + "ukutelela", + "ulele", + "ulemonapo", + "uleshitisha", + "uletamba", + "uletoloka", + "uloleshe", + "ulukasa", + "ulukwete", + "ululi", + "ulunono", + "ulupiya", + "ulwingi", + "umucinshi", + "umunani", + "umusukupala", + "umwafiita", + "umwame", + "umwanfuli", + "umweshi", + "utoni", + "utule", + "utusela", + "ututali", + "utwakwangasha", + "uuleshitisha", + "uuleya", + "uuloleshe", + "uwakalipa", + "uwakumakasa", + "uwamishishi", + "uwanaka", + "uyumuntu", + "wafyakulya", + "wakupona", + "wakusambilamo", + "wamusebo", + "wapa", + "wemwine", + "yaaba", + "yabusaka", + "yakale", + "yako", + "yakuntashi", + "yakushitisha", + "yala", + "yalelanga", + "yalesansa", + "yalicenjela", + "yaliwama", + "yamutuntula", + "yanshi", + "yapita", + "yatona", + "yauyu", + "icapala", + "imya", + "inshila", + "isuma", + "kafita", + "kateya", + "kuma", + "muma", + "umusepela", + "abaleteya", + "alemonekela", + "bomfya", + "cileemoneka", + "fube", + "ifyakatapa", + "ileangala", + "ilingi", + "mubili", + "mwibumba", + "necampepo", + "uwafiita", + "nangu", + "cimfyanya", + "iisuma", + "iloba", + "imbale", + "inga", + "kumumana", + "kwabo", + "pamulandu", + "toloka", + "ka", + "abapusanapusana", + "bomba", + "iminina", + "kafwele", + "kumakasa", + "mukamana", + "pale", + "ukucita", + "wapakati", + "aloleshe", + "ayali", + "bakabalwe", + "chola", + "cinkupiti", + "insansa", + "ishipi", + "iyakashika", + "lumo", + "mito", + "mukalale", + "ukwisa", + "shibili", + "kafundisha", + "lyafiita", + "makaasa", + "nakuba", + "wacaice", + "nakwata", + "abapusana", + "akanya", + "amatoloshi", + "baleshimika", + "bekete", + "butulukila", + "ensha", + "ifyauma", + "kena", + "lwakwe", + "so", + "yakwata", + "pusana", + "akamuti", + "apone", + "bala", + "ikalamba", + "kumolu", + "mbao", + "naitoloka", + "nanaka", + "sukulu", + "bwinga", + "cola", + "ifwile", + "iili", + "kamana", + "mpili", + "niku", + "uwankanda", + "akabuta", + "cimbayambaya", + "cipuna", + "icho", + "icitukutuku", + "kapokola", + "lili", + "ukulingana", + "uulemoneka", + "yantu", + "amenshi", + "naba", + "mumitima" + ] +} diff --git a/frontend/static/languages/bemba_1k.json b/frontend/static/languages/bemba_1k.json new file mode 100644 index 000000000000..9b41d53479d5 --- /dev/null +++ b/frontend/static/languages/bemba_1k.json @@ -0,0 +1,1010 @@ +{ + "name": "bemba_1k", + "rightToLeft": false, + "ligatures": false, + "orderedByFrequency": false, + "bcp47": "bem", + "words": [ + "abeshile", + "babika", + "balelya", + "ilyabuta", + "mutanda", + "nabakashana", + "nentambo", + "nokuboko", + "tutu", + "menshi", + "amaka", + "ganda", + "nakaka", + "paku", + "umulimo", + "uwipi", + "yakamana", + "yaku", + "boi", + "abalemoneka", + "hahaha", + "mashini", + "ukwenda", + "yelangi", + "yu", + "ncende", + "kuncende", + "naikala", + "balecimfyanya", + "ifipe", + "ilecita", + "ukutoloka", + "umulandu", + "fimo", + "ifimuti", + "mumulu", + "balepita", + "fyakulya", + "ifimbaya", + "macungwa", + "maka", + "nayasama", + "palana", + "bafumine", + "emishe", + "icabuuta", + "lulamba", + "naumfwa", + "nyina", + "wabantu", + "yalikwata", + "bafwele", + "ifyapala", + "ishafita", + "namaluba", + "pakapuna", + "pene", + "ibumba", + "ilyo", + "alishiba", + "inama", + "indalama", + "ncito", + "yabantu", + "mune", + "ica", + "mumbali", + "amabimbi", + "balebomfya", + "baleimba", + "kambi", + "necisote", + "shileangala", + "utwingi", + "wafita", + "wishi", + "nabekala", + "alelolela", + "bapanga", + "ifyola", + "ileenda", + "mufyani", + "pamubili", + "ukuteya", + "wankanda", + "ico", + "ilya", + "akamana", + "alenina", + "ayapusana", + "bafwalile", + "balitemwa", + "icipampa", + "iikalamba", + "linga", + "munshila", + "tunshi", + "uwafita", + "ati", + "banina", + "iikulu", + "iletoloka", + "we", + "ama", + "moneka", + "buta", + "akaice", + "aliko", + "amoolu", + "ilinga", + "kunshi", + "nagula", + "shine", + "uwansansa", + "ba", + "ifyakufwala", + "abana", + "umbi", + "aleensha", + "balifye", + "icafiita", + "nasumina", + "niba", + "tulemoneka", + "yaiko", + "batatu", + "ayepi", + "nabena", + "nakulubantu", + "palunkoto", + "abanankwe", + "afwalile", + "cakutila", + "fwaka", + "kululamba", + "kwi", + "lyabuuta", + "mwituka", + "naya", + "te", + "umucanga", + "umwenso", + "utusote", + "bakwete", + "kwaba", + "wamupila", + "baleshitisha", + "cungulo", + "ilyashi", + "naima", + "yakashika", + "alebelenga", + "alelya", + "bashi", + "uukwete", + "wakuti", + "panse", + "apona", + "balebutuka", + "kumenso", + "lilemoneka", + "lolesha", + "shilebutuka", + "utumuti", + "elyo", + "icani", + "kufyo", + "naku", + "ulwa", + "anda", + "ilemoneka", + "wa", + "naikata", + "cani", + "fitulukila", + "nalolesha", + "yabushiku", + "alepita", + "aleshelela", + "cimbi", + "ilyafita", + "malangi", + "nabeminina", + "incende", + "abengi", + "ayafita", + "calo", + "mumimonekele", + "mumutwe", + "mwine", + "nakobeka", + "nensansa", + "nishi", + "nsapato", + "umubiye", + "abansansa", + "abikile", + "akantu", + "injinga", + "line", + "yambwa", + "apa", + "na", + "umuntu", + "alecofa", + "ifimbayambaya", + "ifyaku", + "pama", + "naiminina", + "ukuti", + "akafita", + "amalaya", + "ayabuta", + "bamayo", + "icimpompo", + "ifyabuuta", + "nacikwata", + "ninshita", + "ukulu", + "yena", + "fita", + "mumeenshi", + "ca", + "kumbali", + "babikile", + "icakufwala", + "kuboko", + "nipa", + "balelanshanya", + "balimo", + "inshi", + "uto", + "baleshana", + "lyafita", + "mumumana", + "nabanakashi", + "uukalamba", + "aletamba", + "ayatali", + "banyina", + "nabana", + "nasekelela", + "natemwa", + "nomwana", + "umwela", + "ifyalekana", + "takuli", + "awe", + "isho", + "lumendo", + "alebomfya", + "alekopa", + "bwangu", + "cakuti", + "mangalo", + "tuli", + "kashana", + "mumenso", + "nasenda", + "amayanda", + "bakateya", + "namenshi", + "ubwalwa", + "ukwikata", + "baali", + "icimbaya", + "ifilembo", + "kumona", + "mubwato", + "tekuti", + "ukusamba", + "umwine", + "kuliko", + "ukucila", + "buuta", + "ninshi", + "ayo", + "icafita", + "mupepi", + "umupila", + "endita", + "ombe", + "ulya", + "amabula", + "atemwa", + "nangula", + "akakashana", + "aleyangala", + "ifyakashika", + "impanga", + "kumonafye", + "naine", + "nemishishi", + "wakuminwe", + "aya", + "abalumendo", + "bafwala", + "balya", + "nensapato", + "paka", + "wabuta", + "ye", + "ii", + "kakwe", + "maluba", + "mulopa", + "ee", + "ifi", + "ifyafiita", + "ci", + "umwanakashi", + "aleimba", + "itebulo", + "nsansa", + "abaana", + "ifikulu", + "incito", + "lyelangi", + "shakwe", + "yamumana", + "amakalashi", + "baleyangala", + "ifisote", + "iminwe", + "mfula", + "nakutalala", + "fyabo", + "kwaliba", + "mung", + "shimbi", + "nefyakufwala", + "shitatu", + "bawishi", + "icikwete", + "mumwela", + "uwacaice", + "fibili", + "kantu", + "olo", + "yakwa", + "ababuuta", + "kumpela", + "lunkoto", + "tapali", + "ishati", + "abene", + "ishitima", + "iyafiita", + "namona", + "ntambo", + "aka", + "aletoloka", + "ifyapalana", + "naumbi", + "batata", + "honda", + "icabuta", + "ifyapusana", + "lyakwe", + "akali", + "amalaiti", + "babo", + "ifyampepo", + "fyani", + "kucibumba", + "ili", + "ebo", + "umulilo", + "bambi", + "akanwa", + "amagalashi", + "kwine", + "snow", + "uwabuta", + "efyo", + "alelanda", + "cila", + "kuso", + "uutali", + "icikuulwa", + "kwata", + "tali", + "baba", + "ifikalamba", + "mushishi", + "nakulu", + "ukwa", + "umushipi", + "uo", + "no", + "inyimbo", + "napapa", + "nomukashana", + "inkanda", + "balemoneka", + "apatali", + "icakashika", + "umuputule", + "limbi", + "nabafwala", + "capamo", + "musango", + "ale", + "cine", + "balesefya", + "e", + "lupili", + "mbali", + "ulunkoto", + "namayo", + "abacaice", + "akaputula", + "cibumba", + "intu", + "kufwala", + "nakalya", + "napa", + "tamba", + "wabo", + "kulemoneka", + "eico", + "munshi", + "abaume", + "yabo", + "nalimo", + "icakuti", + "nabemya", + "cipalile", + "bale", + "cangalo", + "napo", + "icola", + "yafiita", + "ehe", + "fyakufwala", + "maboko", + "basano", + "icitali", + "mukoshi", + "pamumana", + "twa", + "ilefwaya", + "nakaputula", + "ubusaka", + "kucifulo", + "mabwe", + "nifyofine", + "iyabuta", + "mpepo", + "ni", + "ma", + "baliko", + "cimuti", + "ifyabuta", + "lyabuta", + "nomba", + "amashati", + "angalila", + "balelolela", + "katapa", + "kumaboko", + "mukanwa", + "abalekanalekana", + "babomfya", + "ifilecitika", + "mumusana", + "shabo", + "mona", + "abanono", + "bakwe", + "nakabili", + "ntanshi", + "ubushiku", + "eyo", + "abakalamba", + "fwaya", + "icimbayambaya", + "mukwangala", + "iya", + "icibansa", + "namaayo", + "yacikulwa", + "bakashana", + "pamuulu", + "nanina", + "neshati", + "onse", + "yeka", + "icibumba", + "lumbi", + "umusango", + "balelisha", + "bashikulu", + "galashi", + "ifilimba", + "iyabuuta", + "kuti", + "filya", + "abafyashi", + "ifilemoneka", + "ulu", + "icifulo", + "mukutamba", + "nako", + "nefya", + "shikulubantu", + "yabuuta", + "shitata", + "kunse", + "uwikele", + "kwena", + "bola", + "kukuboko", + "ako", + "icili", + "ifyafita", + "nembwa", + "kule", + "namaboko", + "pacipuna", + "busaka", + "kulyo", + "utunono", + "butuka", + "ukwabula", + "ukwangala", + "umukalamba", + "alebutuka", + "bumba", + "bwato", + "mwi", + "abeminine", + "kabalwe", + "palya", + "ameenshi", + "ikwete", + "ishitali", + "petebulo", + "shi", + "uwiminine", + "alemoneka", + "nkanda", + "ici", + "akalumendo", + "yaba", + "muku", + "uyo", + "cilya", + "icilemoneka", + "kulubali", + "finshi", + "fye", + "mulu", + "ukuba", + "afwele", + "nayo", + "nabekata", + "abale", + "kanwa", + "pambali", + "bwangalo", + "nabambi", + "isabi", + "cile", + "ulubilo", + "akatalamukila", + "mumuulu", + "ifya", + "bene", + "munuma", + "wasosa", + "kwisa", + "natoloka", + "noku", + "uku", + "abaletamba", + "aleteya", + "konse", + "panshi", + "amolu", + "katwishi", + "ukumona", + "umukashana", + "tafwele", + "alifye", + "kukulyo", + "meenshi", + "panono", + "ukubomfya", + "pantashi", + "cikuulwa", + "imfula", + "kashikila", + "balumendo", + "untu", + "mpanga", + "alikwata", + "futi", + "amabwe", + "beta", + "ubwato", + "akamupila", + "cakwe", + "nakasote", + "kumulu", + "ncinga", + "walanda", + "abekele", + "icintu", + "insalu", + "ishingi", + "nikwisa", + "lamya", + "sha", + "kamo", + "netoloshi", + "nefyo", + "katapakatapa", + "walungika", + "muli", + "beshile", + "umunankwe", + "iyafita", + "makumbi", + "icimuti", + "bonse", + "abo", + "munshita", + "nakafwala", + "panuma", + "yakasuba", + "toloshi", + "banjo", + "imyotoka", + "lya", + "shile", + "tubili", + "kukuso", + "emulandu", + "pakutila", + "mayo", + "bwino", + "beka", + "pancende", + "shilemoneka", + "akabwa", + "ukuya", + "fili", + "umwana", + "nabika", + "nefimuti", + "panshita", + "langi", + "pe", + "nga", + "umumana", + "uwakwata", + "ifyo", + "mutwe", + "fyonse", + "impili", + "shitaata", + "amaluba", + "alelisha", + "umutwe", + "utwa", + "yonse", + "fimuti", + "umunono", + "abasungu", + "cifwile", + "cilemoneka", + "sana", + "amalangi", + "kulya", + "icikulu", + "mupila", + "ukufuma", + "abakwata", + "akwete", + "balelolesha", + "yakwe", + "ekete", + "lyabantu", + "shonse", + "bantu", + "ifikope", + "fine", + "ulupili", + "kumbi", + "tata", + "tebulo", + "aleya", + "lintu", + "mucikulwa", + "umubili", + "mukashana", + "muncende", + "amenso", + "imbi", + "pamenshi", + "makumbimakumbi", + "inshita", + "baleangala", + "ifikulwa", + "saana", + "limo", + "fimbi", + "yali", + "kuntashi", + "yafita", + "umwaume", + "bena", + "ifyani", + "emo", + "mutuntula", + "uwabuuta", + "akamwana", + "yalemoneka", + "ne", + "bushiku", + "icikalamba", + "icampepo", + "uli", + "aleangala", + "bafwile", + "icangalo", + "mumpanga", + "muputule", + "umuli", + "aleenda", + "cintu", + "kalemoneka", + "balefwaya", + "nao", + "ing", + "menso", + "nankwe", + "kaputula", + "ukutila", + "nifinshi", + "kwakwe", + "baleenda", + "banakashi", + "ine", + "kunuma", + "mumuputule", + "bwa", + "iyi", + "fwala", + "mulemoneka", + "icisote", + "beminine", + "minwe", + "cifulo", + "ifili", + "ukuli", + "caba", + "ulemoneka", + "baleya", + "filemoneka", + "lyena", + "abafwele", + "umo", + "akasuba", + "imisebo", + "itali", + "kumpili", + "mapulanga", + "milimo", + "mucipanda", + "mutenge", + "nabaume", + "nafimo", + "nashitata", + "necibumba", + "necintu", + "pacikulwa", + "pepi", + "shilecena", + "shileyangala", + "tenti", + "ukupoka", + "ukwatalala", + "umutende", + "utali", + "utubaice", + "utwakashika", + "wacikulwa", + "wafiita", + "wama", + "yamalangi", + "akasote", + "yabuta", + "pamenso", + "pamusebo", + "bana", + "ali", + "eminine", + "yamusebo", + "numa", + "afwile", + "umushishi", + "abalelisha", + "akakile", + "balechita", + "baleyangalila", + "balomfwa", + "besukulu", + "ekelepo", + "ekuti", + "esha", + "fwayo", + "icamakumbi", + "ifyelangi", + "iilemoneka", + "ileyangala", + "imfwalashi", + "imipeto", + "kaiko", + "kubelele", + "kufyalo", + "kumatwi", + "lolekesha", + "lwabo", + "muci", + "mulilo", + "mwandi", + "naiwe", + "nambala", + "namumulu", + "naposako", + "nde", + "ngefyo", + "pamolu", + "tunono", + "ubwafya", + "ukucofa", + "ukuulu", + "umulemoneka", + "utwaice", + "yalupili", + "icikulwa", + "ukuboko", + "mukwai", + "nimbona", + "ekele", + "amangalo", + "cinshi", + "ifitali", + "ile", + "akakwete", + "akana", + "amwene", + "balepekanya", + "bulauni", + "cikwete", + "eba", + "eo", + "icitendwe", + "ikulu", + "iletolokela", + "imbeketi", + "iyingi", + "iyitali", + "kompyuta", + "kumangalo", + "kumulandu", + "kwangala", + "mucintu", + "mumabwe", + "mumatumba", + "mumucanga", + "nafula", + "nashiminina", + "notusote", + "sabi", + "tabakwata", + "takulemoneka", + "ukwangasha", + "waiko", + "wiminine", + "wishibe", + "yakaena", + "yalya", + "yamwana", + "nafwala", + "ilangi", + "kasuba", + "mbwa", + "nabakwata", + "kukanwa", + "cibansa", + "icine", + "insapato", + "mumukoshi", + "abakwete", + "baleensha", + "balemutamba", + "cingalenga", + "ifyakucita", + "ifyakwangasha", + "ifyela", + "ilikwete", + "kucimuti", + "kuicingilila", + "kumpepo", + "lubilo", + "matwi", + "mumo", + "nailala", + "nakabala", + "napaapa", + "puna", + "shana", + "shilelwila", + "suti", + "ububi", + "ukuicena", + "ukushelela", + "ulutali", + "umufyashi", + "yaka", + "kali", + "bane", + "amasako", + "ku", + "cikulwa", + "mulandu", + "ya", + "ababantu", + "abaiche", + "akasalu", + "aleipika", + "alelosha", + "aleyangasha", + "bakula", + "balebelenga", + "balefuma", + "balewamya", + "basungu", + "bulemoneka", + "cimashini", + "gilasi", + "icakukopelako", + "icha", + "icingilila", + "ishafiita", + "kalashi", + "libwe", + "magalashi", + "monafye", + "mwaka", + "namayanda", + "nomupila", + "pacifuba", + "plastic", + "sansamuka", + "shelela", + "tennis", + "ukupita", + "umukote", + "umutenge", + "utukashana", + "uunono", + "wafilimba", + "yafimuti", + "bekele", + "naka", + "kwa", + "babili", + "pantu", + "umulumendo", + "yabili", + "alebika", + "alelila", + "amakasa", + "balala", + "fuma", + "fyeka", + "icakashikila", + "icibi", + "icoola", + "ilili", + "imfuti", + "infula", + "ishikwete", + "liletamba", + "lolela", + "mukasuba", + "mulya", + "namano", + "notumuti", + "ntunti", + "pala", + "ufwile", + "umufishi", + "utuli", + "walupili", + "utu", + "shili" + ] +} diff --git a/packages/schemas/src/languages.ts b/packages/schemas/src/languages.ts index 0cd95490e981..49cf122b5b45 100644 --- a/packages/schemas/src/languages.ts +++ b/packages/schemas/src/languages.ts @@ -222,6 +222,9 @@ export const LanguageSchema = z.enum( "pinyin_10k", "hausa", "hausa_1k", + "bemba", + "bemba_1k", + "bemba_10k", "swedish", "swedish_1k", "swedish_diacritics", From 36784956d3606fcd6cf8a757402e70a6832030c5 Mon Sep 17 00:00:00 2001 From: Akshat Kashyap Date: Thu, 30 Apr 2026 13:30:46 +0530 Subject: [PATCH 23/31] docs: add oxford comma to support section (@akshattkashyap) (#7820) ### Description Added an Oxford comma to the final line in the "Support" section of `README.md` to improve readability and grammatical consistency. ### Checks - [ ] Adding quotes? - [ ] Adding a language? - [ ] Adding a theme? - [ ] Adding a layout? - [ ] Adding a font? - [x] Check if any open issues are related to this PR; if so, be sure to tag them below. - [x] Make sure the PR title follows the Conventional Commits standard. (https://www.conventionalcommits.org for more info) - [x] Make sure to include your GitHub username prefixed with @ inside parentheses at the end of the PR title. Closes # --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bdb5ad5c39aa..0e52fed331b0 100644 --- a/README.md +++ b/README.md @@ -69,4 +69,4 @@ All of the [contributors](https://github.com/monkeytypegame/monkeytype/graphs/co # Support -If you wish to support further development and feel extra awesome, you can [donate](https://ko-fi.com/monkeytype), [become a Patron](https://www.patreon.com/monkeytype) or [buy a t-shirt](https://www.monkeytype.store/). +If you wish to support further development and feel extra awesome, you can [donate](https://ko-fi.com/monkeytype), [become a Patron](https://www.patreon.com/monkeytype), or [buy a t-shirt](https://www.monkeytype.store/). From 36c51035ff4a418bda1ab054cb875dcaba0a3be6 Mon Sep 17 00:00:00 2001 From: Aaron Benmohan John Date: Thu, 30 Apr 2026 21:32:59 +0530 Subject: [PATCH 24/31] refactor using ts/form --- .../components/pages/profile/UserDetails.tsx | 9 +++---- .../src/ts/components/popups/EditProfile.tsx | 25 +++++++++++-------- frontend/src/ts/states/modals.ts | 3 ++- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/frontend/src/ts/components/pages/profile/UserDetails.tsx b/frontend/src/ts/components/pages/profile/UserDetails.tsx index 6dcecd3e2eb0..394e4c8fa5a4 100644 --- a/frontend/src/ts/components/pages/profile/UserDetails.tsx +++ b/frontend/src/ts/components/pages/profile/UserDetails.tsx @@ -37,6 +37,8 @@ import { DiscordAvatar } from "../../common/DiscordAvatar"; import { UserBadge } from "../../common/UserBadge"; import { UserFlags } from "../../common/UserFlags"; import { EditProfile } from "../../popups/EditProfile"; +import { showModal } from "../../../states/modals"; + type Variant = "basic" | "hasSocials" | "hasBioOrKeyboard" | "full"; @@ -110,7 +112,6 @@ function ActionButtons(props: { const isUsersProfile = () => props.profile.uid !== undefined && props.profile.uid === (getUserId() ?? ""); - const [showEditProfile, setShowEditProfile] = createSignal(false); const [hasFriendRequest, setHasFriendRequest] = createSignal(false); const showFriendsButton = () => isAuthenticated() && !isUsersProfile() && !hasFriendRequest(); @@ -150,13 +151,11 @@ function ActionButtons(props: { ); return; } - setShowEditProfile(true); + showModal("EditProfile"); }} /> - - setShowEditProfile(false)} /> - + - + ); } diff --git a/frontend/src/ts/states/modals.ts b/frontend/src/ts/states/modals.ts index fa2fac25505e..02ff77e9950d 100644 --- a/frontend/src/ts/states/modals.ts +++ b/frontend/src/ts/states/modals.ts @@ -23,7 +23,8 @@ export type ModalId = | "TestDuration" | "ShareTestSettings" | "CustomWordAmount" - | "MobileTestConfig"; + | "MobileTestConfig" + | "EditProfile"; export type ModalVisibility = { visible: boolean; From 37899706e8eb3020aa55bd3d0eb7346882d4f8cf Mon Sep 17 00:00:00 2001 From: Jack Date: Sat, 2 May 2026 20:25:40 +0200 Subject: [PATCH 25/31] refactor: remove conditional and animeconditional (@miodec) (#7898) --- .../components/common/Conditional.spec.tsx | 214 ---------------- .../common/anime/AnimeConditional.spec.tsx | 230 ------------------ .../src/ts/components/common/AsyncContent.tsx | 12 +- frontend/src/ts/components/common/Button.tsx | 60 +++-- .../src/ts/components/common/Conditional.tsx | 15 -- .../ts/components/common/DiscordAvatar.tsx | 49 ++-- .../ts/components/common/LoadingCircle.tsx | 40 ++- .../src/ts/components/common/Separator.tsx | 50 ++-- frontend/src/ts/components/common/User.tsx | 74 +++--- .../common/anime/AnimeConditional.tsx | 82 ------- .../src/ts/components/common/anime/index.ts | 1 - .../src/ts/components/layout/header/Nav.tsx | 168 +++++++------ .../ts/components/layout/overlays/Banners.tsx | 45 ++-- .../layout/overlays/Notifications.tsx | 16 +- .../ts/components/pages/leaderboard/Table.tsx | 30 ++- .../components/pages/leaderboard/UserRank.tsx | 26 +- .../ts/components/pages/login/LoginPage.tsx | 22 +- .../components/pages/profile/UserDetails.tsx | 80 +++--- .../popups/alerts/NotificationHistory.tsx | 22 +- .../src/ts/components/ui/table/DataTable.tsx | 140 ++++++----- .../stories/AnimeConditional.stories.tsx | 79 ------ .../storybook/stories/Conditional.stories.tsx | 52 ---- 22 files changed, 408 insertions(+), 1099 deletions(-) delete mode 100644 frontend/__tests__/components/common/Conditional.spec.tsx delete mode 100644 frontend/__tests__/components/common/anime/AnimeConditional.spec.tsx delete mode 100644 frontend/src/ts/components/common/Conditional.tsx delete mode 100644 frontend/src/ts/components/common/anime/AnimeConditional.tsx delete mode 100644 frontend/storybook/stories/AnimeConditional.stories.tsx delete mode 100644 frontend/storybook/stories/Conditional.stories.tsx diff --git a/frontend/__tests__/components/common/Conditional.spec.tsx b/frontend/__tests__/components/common/Conditional.spec.tsx deleted file mode 100644 index 267cdf13dfc8..000000000000 --- a/frontend/__tests__/components/common/Conditional.spec.tsx +++ /dev/null @@ -1,214 +0,0 @@ -import { cleanup, render, screen } from "@solidjs/testing-library"; -import { createSignal } from "solid-js"; -import { afterEach, describe, expect, it } from "vitest"; - -import { Conditional } from "../../../src/ts/components/common/Conditional"; - -describe("Conditional", () => { - afterEach(() => { - cleanup(); - }); - - describe("static rendering", () => { - it("renders then when if is true", () => { - render(() => then content} />); - - expect(screen.getByText("then content")).toBeInTheDocument(); - }); - - it("renders then when if is a truthy object", () => { - render(() => ( - then content} /> - )); - - expect(screen.getByText("then content")).toBeInTheDocument(); - }); - - it("renders then when if is a truthy string", () => { - render(() => then content} />); - - expect(screen.getByText("then content")).toBeInTheDocument(); - }); - - it("renders else fallback when if is false", () => { - render(() => ( - then content} - else={
else content
} - /> - )); - - expect(screen.queryByText("then content")).not.toBeInTheDocument(); - expect(screen.getByText("else content")).toBeInTheDocument(); - }); - - it("renders else fallback when if is null", () => { - render(() => ( - then content} - else={
else content
} - /> - )); - - expect(screen.queryByText("then content")).not.toBeInTheDocument(); - expect(screen.getByText("else content")).toBeInTheDocument(); - }); - - it("renders else fallback when if is undefined", () => { - render(() => ( - then content} - else={
else content
} - /> - )); - - expect(screen.queryByText("then content")).not.toBeInTheDocument(); - expect(screen.getByText("else content")).toBeInTheDocument(); - }); - - it("renders else fallback when if is 0", () => { - render(() => ( - then content} - else={
else content
} - /> - )); - - expect(screen.queryByText("then content")).not.toBeInTheDocument(); - expect(screen.getByText("else content")).toBeInTheDocument(); - }); - - it("renders nothing when if is falsy and else is not provided", () => { - const { container } = render(() => ( - then content} /> - )); - - expect(screen.queryByText("then content")).not.toBeInTheDocument(); - expect(container.firstChild).toBeNull(); - }); - }); - - describe("then as function", () => { - it("passes the truthy value to then function", () => { - const obj: { label: string } | null = { label: "hello" }; - render(() => ( -
{value().label}
} /> - )); - - expect(screen.getByText("hello")).toBeInTheDocument(); - }); - - it("does not call then function when if is falsy", () => { - const obj: { label: string } | null = null; - render(() => ( - then content} - else={
else content
} - /> - )); - - expect(screen.queryByText("then content")).not.toBeInTheDocument(); - expect(screen.getByText("else content")).toBeInTheDocument(); - }); - }); - - describe("reactivity", () => { - it("switches from else to then when if becomes truthy", async () => { - const [condition, setCondition] = createSignal(false); - - render(() => ( - then content} - else={
else content
} - /> - )); - - expect(screen.queryByText("then content")).not.toBeInTheDocument(); - expect(screen.getByText("else content")).toBeInTheDocument(); - - setCondition(true); - - expect(screen.getByText("then content")).toBeInTheDocument(); - expect(screen.queryByText("else content")).not.toBeInTheDocument(); - }); - - it("switches from then to else when if becomes falsy", async () => { - const [condition, setCondition] = createSignal(true); - - render(() => ( - then content} - else={
else content
} - /> - )); - - expect(screen.getByText("then content")).toBeInTheDocument(); - - setCondition(false); - - expect(screen.queryByText("then content")).not.toBeInTheDocument(); - expect(screen.getByText("else content")).toBeInTheDocument(); - }); - - it("then JSXElement updates reactively when inner signal changes", async () => { - const [label, setLabel] = createSignal("initial"); - - render(() => {label()}} />); - - expect(screen.getByText("initial")).toBeInTheDocument(); - - setLabel("updated"); - - expect(screen.getByText("updated")).toBeInTheDocument(); - }); - - it("then JSXElement updates reactively when if changes from a signal", async () => { - const [data, setData] = createSignal(undefined); - - render(() => ( - {data()}} - else={
no data
} - /> - )); - - expect(screen.getByText("no data")).toBeInTheDocument(); - expect(screen.queryByTestId("content")).not.toBeInTheDocument(); - - setData("resolved"); - - expect(screen.getByTestId("content")).toHaveTextContent("resolved"); - expect(screen.queryByText("no data")).not.toBeInTheDocument(); - }); - - it("then function value accessor tracks reactive if", () => { - const [data, setData] = createSignal<{ name: string } | null>(null); - - render(() => ( -
{value().name}
} - else={
no data
} - /> - )); - - expect(screen.getByText("no data")).toBeInTheDocument(); - - setData({ name: "Alice" }); - - expect(screen.getByTestId("content")).toHaveTextContent("Alice"); - - setData({ name: "Bob" }); - - expect(screen.getByTestId("content")).toHaveTextContent("Bob"); - }); - }); -}); diff --git a/frontend/__tests__/components/common/anime/AnimeConditional.spec.tsx b/frontend/__tests__/components/common/anime/AnimeConditional.spec.tsx deleted file mode 100644 index a120611baebf..000000000000 --- a/frontend/__tests__/components/common/anime/AnimeConditional.spec.tsx +++ /dev/null @@ -1,230 +0,0 @@ -import { cleanup, render, screen } from "@solidjs/testing-library"; -import { createSignal } from "solid-js"; -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; - -const { mockAnimate } = vi.hoisted(() => ({ - mockAnimate: vi.fn().mockImplementation(() => ({ - pause: vi.fn(), - then: vi.fn((cb: () => void) => { - cb(); - return Promise.resolve(); - }), - })), -})); - -vi.mock("animejs", () => ({ - animate: mockAnimate, -})); - -vi.mock("../../../../src/ts/utils/misc", () => ({ - applyReducedMotion: vi.fn((duration: number) => duration), -})); - -import { AnimeConditional } from "../../../../src/ts/components/common/anime/AnimeConditional"; - -describe("AnimeConditional", () => { - beforeEach(() => { - vi.clearAllMocks(); - }); - - afterEach(() => { - cleanup(); - }); - - it("renders `then` content when `if` is truthy", () => { - render(() => ( - then} - else={
else
} - /> - )); - - expect(screen.getByTestId("then-content")).toBeInTheDocument(); - expect(screen.queryByTestId("else-content")).not.toBeInTheDocument(); - }); - - it("renders `else` content when `if` is falsy", () => { - render(() => ( - then} - else={
else
} - /> - )); - - expect(screen.queryByTestId("then-content")).not.toBeInTheDocument(); - expect(screen.getByTestId("else-content")).toBeInTheDocument(); - }); - - it("renders `else` content when `if` is null", () => { - render(() => ( - then} - else={
else
} - /> - )); - - expect(screen.queryByTestId("then-content")).not.toBeInTheDocument(); - expect(screen.getByTestId("else-content")).toBeInTheDocument(); - }); - - it("switches reactively from `then` to `else`", () => { - const [condition, setCondition] = createSignal(true); - - render(() => ( - then} - else={
else
} - /> - )); - - expect(screen.getByTestId("then-content")).toBeInTheDocument(); - - setCondition(false); - - expect(screen.queryByTestId("then-content")).not.toBeInTheDocument(); - expect(screen.getByTestId("else-content")).toBeInTheDocument(); - }); - - it("switches reactively from `else` to `then`", () => { - const [condition, setCondition] = createSignal(false); - - render(() => ( - then} - else={
else
} - /> - )); - - expect(screen.getByTestId("else-content")).toBeInTheDocument(); - - setCondition(true); - - expect(screen.getByTestId("then-content")).toBeInTheDocument(); - expect(screen.queryByTestId("else-content")).not.toBeInTheDocument(); - }); - - it("supports `then` as a function and passes the truthy value", () => { - const obj = { label: "hello" }; - render(() => ( -
{value().label}
} - /> - )); - - expect(screen.getByTestId("fn-content")).toHaveTextContent("hello"); - }); - - it("does not throw without `else` prop", () => { - expect(() => { - render(() => ( - then} - /> - )); - }).not.toThrow(); - - expect(screen.getByTestId("then-content")).toBeInTheDocument(); - }); - - it("does not throw on mount/unmount", () => { - const [show, setShow] = createSignal(true); - - expect(() => { - render(() => ( - then} - else={
else
} - /> - )); - }).not.toThrow(); - - expect(() => setShow(false)).not.toThrow(); - expect(() => setShow(true)).not.toThrow(); - }); - - describe("default animations (opacity fade)", () => { - it("applies default opacity animate on `then` branch", () => { - render(() => then} />); - - expect(mockAnimate).toHaveBeenCalledWith( - expect.any(HTMLElement), - expect.objectContaining({ opacity: 1, duration: 125 }), - ); - }); - - it("applies default opacity initial state on `then` branch", () => { - render(() => then} />); - - // Initial call: opacity:0 with duration:0 - expect(mockAnimate).toHaveBeenCalledWith( - expect.any(HTMLElement), - expect.objectContaining({ opacity: 0, duration: 0 }), - ); - }); - }); - - describe("custom animeProps", () => { - it("uses custom animate params when animeProps provided", () => { - render(() => ( - then} - animeProps={{ - initial: { opacity: 0, translateY: -10 }, - animate: { opacity: 1, translateY: 0, duration: 400 }, - exit: { opacity: 0, translateY: -10, duration: 200 }, - }} - /> - )); - - expect(mockAnimate).toHaveBeenCalledWith( - expect.any(HTMLElement), - expect.objectContaining({ opacity: 1, translateY: 0, duration: 400 }), - ); - }); - - it("uses custom initial state when animeProps provided", () => { - render(() => ( - then} - animeProps={{ - initial: { opacity: 0, translateY: -10 }, - animate: { opacity: 1, translateY: 0, duration: 400 }, - }} - /> - )); - - // Initial state applied with duration:0 - expect(mockAnimate).toHaveBeenCalledWith( - expect.any(HTMLElement), - expect.objectContaining({ opacity: 0, translateY: -10, duration: 0 }), - ); - }); - }); - - it("exitBeforeEnter prop does not throw on condition change", () => { - const [cond, setCond] = createSignal(true); - - expect(() => { - render(() => ( - then} - else={
else
} - /> - )); - }).not.toThrow(); - - expect(() => setCond(false)).not.toThrow(); - }); -}); diff --git a/frontend/src/ts/components/common/AsyncContent.tsx b/frontend/src/ts/components/common/AsyncContent.tsx index 45c65fbab2b3..4890f7635bd2 100644 --- a/frontend/src/ts/components/common/AsyncContent.tsx +++ b/frontend/src/ts/components/common/AsyncContent.tsx @@ -12,7 +12,6 @@ import { import { showErrorNotification } from "../../states/notifications"; import { createErrorMessage } from "../../utils/error"; import { typedKeys } from "../../utils/misc"; -import { Conditional } from "./Conditional"; import { LoadingCircle } from "./LoadingCircle"; type AsyncEntry = { @@ -154,15 +153,16 @@ export default function AsyncContent( {loader()} - {props.children(value())}} - else={ + {props.children(value())} } - /> + > + {props.children(value())} + } > diff --git a/frontend/src/ts/components/common/Button.tsx b/frontend/src/ts/components/common/Button.tsx index 6527f74c9643..4510ee5e90dc 100644 --- a/frontend/src/ts/components/common/Button.tsx +++ b/frontend/src/ts/components/common/Button.tsx @@ -2,7 +2,6 @@ import { JSXElement, Show } from "solid-js"; import { cn } from "../../utils/cn"; import { BalloonProps, buildBalloonHtmlProperties } from "./Balloon"; -import { Conditional } from "./Conditional"; import { Fa, FaProps } from "./Fa"; type BaseProps = { @@ -80,35 +79,9 @@ export function Button(props: ButtonProps | AnchorProps): JSXElement { }; return ( - props.onClick?.(e)} - onMouseEnter={(e) => props.onMouseEnter?.(e)} - onMouseLeave={(e) => props.onMouseLeave?.(e)} - data-ui-variant={variant()} - data-ui-element="button" - {...props.dataset} - > - {content} - - } - else={ + } - /> + > + props.onClick?.(e)} + onMouseEnter={(e) => props.onMouseEnter?.(e)} + onMouseLeave={(e) => props.onMouseLeave?.(e)} + data-ui-variant={variant()} + data-ui-element="button" + {...props.dataset} + > + {content} + + ); } diff --git a/frontend/src/ts/components/common/Conditional.tsx b/frontend/src/ts/components/common/Conditional.tsx deleted file mode 100644 index ad315aa59acd..000000000000 --- a/frontend/src/ts/components/common/Conditional.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { Accessor, JSXElement, Show } from "solid-js"; - -export function Conditional(props: { - if: T; - then: JSXElement | ((value: Accessor>) => JSXElement); - else?: JSXElement; -}): JSXElement { - return ( - - {typeof props.then === "function" - ? props.then - : () => props.then as JSXElement} - - ); -} diff --git a/frontend/src/ts/components/common/DiscordAvatar.tsx b/frontend/src/ts/components/common/DiscordAvatar.tsx index 28dc30d0ee7b..501ccac673f7 100644 --- a/frontend/src/ts/components/common/DiscordAvatar.tsx +++ b/frontend/src/ts/components/common/DiscordAvatar.tsx @@ -2,7 +2,6 @@ import { createSignal, JSXElement, Show } from "solid-js"; import { createStore } from "solid-js/store"; import { cn } from "../../utils/cn"; -import { Conditional } from "./Conditional"; import { LoadingCircle } from "./LoadingCircle"; //cache successful and missing avatars @@ -59,33 +58,27 @@ export function DiscordAvatar(props: { props.class, )} > - - - - - { - setAvatar(cacheKey(), true); - setShowSpinner(false); - }} - onError={() => { - setAvatar(cacheKey(), false); - setShowSpinner(false); - }} - /> - - } - else={fallback()} - /> + + + + + { + setAvatar(cacheKey(), true); + setShowSpinner(false); + }} + onError={() => { + setAvatar(cacheKey(), false); + setShowSpinner(false); + }} + /> + ); } diff --git a/frontend/src/ts/components/common/LoadingCircle.tsx b/frontend/src/ts/components/common/LoadingCircle.tsx index 5d7ac78fca05..6feaddb8a38a 100644 --- a/frontend/src/ts/components/common/LoadingCircle.tsx +++ b/frontend/src/ts/components/common/LoadingCircle.tsx @@ -1,7 +1,6 @@ -import { JSXElement } from "solid-js"; +import { JSXElement, Show } from "solid-js"; import { cn } from "../../utils/cn"; -import { Conditional } from "./Conditional"; import { Fa } from "./Fa"; export function LoadingCircle(props: { @@ -10,24 +9,9 @@ export function LoadingCircle(props: { class?: string; }): JSXElement { return ( - - - - } - else={ + } - /> + > +
+ +
+
); } diff --git a/frontend/src/ts/components/common/Separator.tsx b/frontend/src/ts/components/common/Separator.tsx index 4e0594b83c9e..ddb4caa10bbf 100644 --- a/frontend/src/ts/components/common/Separator.tsx +++ b/frontend/src/ts/components/common/Separator.tsx @@ -1,7 +1,6 @@ -import { JSXElement } from "solid-js"; +import { JSXElement, Show } from "solid-js"; import { cn } from "../../utils/cn"; -import { Conditional } from "./Conditional"; export function Separator(props: { class?: string; @@ -9,40 +8,39 @@ export function Separator(props: { text?: string; }): JSXElement { return ( - -
-
{props.text}
-
- + > } - else={ + > +
- } - /> +
{props.text}
+
+
+ ); } diff --git a/frontend/src/ts/components/common/User.tsx b/frontend/src/ts/components/common/User.tsx index d5b57acde2e1..ebb53d6c25af 100644 --- a/frontend/src/ts/components/common/User.tsx +++ b/frontend/src/ts/components/common/User.tsx @@ -8,9 +8,9 @@ import { UserFlagOptions, } from "../../controllers/user-flag-controller"; import { cn } from "../../utils/cn"; -import { Anime, AnimeConditional } from "./anime"; +import { Anime } from "./anime"; +import { AnimePresence } from "./anime/AnimePresence"; import { Button } from "./Button"; -import { Conditional } from "./Conditional"; import { DiscordAvatar } from "./DiscordAvatar"; import { Fa } from "./Fa"; import { NotificationBubble } from "./NotificationBubble"; @@ -85,23 +85,37 @@ export function User(props: Props): JSXElement { class="z-2 m-0.5" />
- } - else={ - - } - /> + + + + + } + > + + + + +
@@ -110,19 +124,15 @@ export function User(props: Props): JSXElement { "hidden sm:block": props.hideNameOnSmallScreens, })} > - - } - else={props.user.name} - /> + + - ( - <> -
{ - if (isCoarse()) { - if (e.target instanceof HTMLAnchorElement) { - if (e.target.dataset["navItem"] === "account") { - e.preventDefault(); - e.stopPropagation(); - } - setAccountMenuOpen((prev) => !prev); - } - } - }} + + + + + - - { - // if (isCoarse()) { - // setAccountMenuOpen(false); - // } - // }} - /> -
-
- -
- - )} - else={ - - } - /> + > + + ); diff --git a/frontend/src/ts/components/layout/overlays/Notifications.tsx b/frontend/src/ts/components/layout/overlays/Notifications.tsx index 425e6ee8518d..2ecc6f4a039c 100644 --- a/frontend/src/ts/components/layout/overlays/Notifications.tsx +++ b/frontend/src/ts/components/layout/overlays/Notifications.tsx @@ -1,5 +1,5 @@ import { AnimationParams } from "animejs"; -import { For, JSXElement } from "solid-js"; +import { For, JSXElement, Show } from "solid-js"; import { getGlobalOffsetTop, getIsScreenshotting } from "../../../states/core"; import { @@ -13,7 +13,6 @@ import { cn } from "../../../utils/cn"; import { Anime } from "../../common/anime/Anime"; import { AnimePresence } from "../../common/anime/AnimePresence"; import { AnimeShow } from "../../common/anime/AnimeShow"; -import { Conditional } from "../../common/Conditional"; import { Fa, FaProps } from "../../common/Fa"; const levelConfig = { @@ -97,12 +96,13 @@ function NotificationItem(props: { notification: Notification }): JSXElement { {title()} - } - else={
{props.notification.message}
} - /> + {props.notification.message}} + > + {/* oxlint-disable-next-line solid/no-innerhtml */} +
+
diff --git a/frontend/src/ts/components/pages/leaderboard/Table.tsx b/frontend/src/ts/components/pages/leaderboard/Table.tsx index 27c1d8cb8b68..a3301a5600e6 100644 --- a/frontend/src/ts/components/pages/leaderboard/Table.tsx +++ b/frontend/src/ts/components/pages/leaderboard/Table.tsx @@ -5,7 +5,7 @@ import { import { createColumnHelper } from "@tanstack/solid-table"; import { format as dateFormat } from "date-fns/format"; import { formatDistanceToNow } from "date-fns/formatDistanceToNow"; -import { Accessor, createMemo, JSXElement } from "solid-js"; +import { Accessor, createMemo, JSXElement, Show } from "solid-js"; import { getConfig } from "../../../config/store"; import { isFriend } from "../../../db"; @@ -17,7 +17,6 @@ import { secondsToString } from "../../../utils/date-and-time"; import { qs } from "../../../utils/dom"; import { Formatting } from "../../../utils/format"; import { abbreviateNumber } from "../../../utils/numbers"; -import { Conditional } from "../../common/Conditional"; import { Fa } from "../../common/Fa"; import { User } from "../../common/User"; import { DataTable, DataTableColumnDef } from "../../ui/table/DataTable"; @@ -99,19 +98,9 @@ export function Table( ); return ( - , - }} - /> - } - else={ + } - /> + > + , + }} + /> + ); } diff --git a/frontend/src/ts/components/pages/leaderboard/UserRank.tsx b/frontend/src/ts/components/pages/leaderboard/UserRank.tsx index 77ab276bea08..2143df9a5caa 100644 --- a/frontend/src/ts/components/pages/leaderboard/UserRank.tsx +++ b/frontend/src/ts/components/pages/leaderboard/UserRank.tsx @@ -7,7 +7,6 @@ import { createMemo, JSXElement, Match, Show, Switch } from "solid-js"; import { getConfig } from "../../../config/store"; import { Formatting } from "../../../utils/format"; -import { Conditional } from "../../common/Conditional"; import { Fa } from "../../common/Fa"; import { LoadingCircle } from "../../common/LoadingCircle"; import { Table, TableEntry } from "./Table"; @@ -75,18 +74,9 @@ export function UserRank(props: { when={props.data !== undefined && props.total !== undefined} fallback={} > - - } - else={ + @@ -120,7 +110,15 @@ export function UserRank(props: { } - /> + > + + ); diff --git a/frontend/src/ts/components/pages/login/LoginPage.tsx b/frontend/src/ts/components/pages/login/LoginPage.tsx index 13c37430805f..6e3c5f248bf9 100644 --- a/frontend/src/ts/components/pages/login/LoginPage.tsx +++ b/frontend/src/ts/components/pages/login/LoginPage.tsx @@ -4,7 +4,6 @@ import { JSXElement, Show } from "solid-js"; import { getServerConfigurationQueryOptions } from "../../../queries/server-configuration"; import { getActivePage } from "../../../states/core"; import { getLoginPageInputsEnabled } from "../../../states/login"; -import { Conditional } from "../../common/Conditional"; import { Login } from "./Login"; import { Register } from "./Register"; @@ -22,22 +21,21 @@ export function LoginPage(): JSXElement { - -

- Login/Signup is disabled or the server is down/under maintenance. -

- - } - else={ + } - /> + > +
+

+ Login/Signup is disabled or the server is down/under maintenance. +

+
+
); } diff --git a/frontend/src/ts/components/pages/profile/UserDetails.tsx b/frontend/src/ts/components/pages/profile/UserDetails.tsx index 6bf7746ea68d..6dd15828a218 100644 --- a/frontend/src/ts/components/pages/profile/UserDetails.tsx +++ b/frontend/src/ts/components/pages/profile/UserDetails.tsx @@ -33,7 +33,6 @@ import { AutoShrink } from "../../common/AutoShrink"; import { Balloon, BalloonProps } from "../../common/Balloon"; import { Bar } from "../../common/Bar"; import { Button } from "../../common/Button"; -import { Conditional } from "../../common/Conditional"; import { DiscordAvatar } from "../../common/DiscordAvatar"; import { UserBadge } from "../../common/UserBadge"; import { UserFlags } from "../../common/UserFlags"; @@ -135,47 +134,9 @@ function ActionButtons(props: { }; return ( - - - - } - else={ + ( } - /> + > + + + + )} diff --git a/frontend/storybook/stories/AnimeConditional.stories.tsx b/frontend/storybook/stories/AnimeConditional.stories.tsx deleted file mode 100644 index 66d758fca8bc..000000000000 --- a/frontend/storybook/stories/AnimeConditional.stories.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import preview from "#.storybook/preview"; -import { Accessor, Component, createSignal, JSXElement } from "solid-js"; - -import { AnimeConditional } from "../../src/ts/components/common/anime/AnimeConditional"; - -type AnimeConditionalProps = { - if: boolean; - then: JSXElement | ((value: Accessor>) => JSXElement); - else?: JSXElement; - exitBeforeEnter?: boolean; -}; - -const meta = preview.meta({ - title: "Common/Anime/AnimeConditional", - component: AnimeConditional as Component, - parameters: { - layout: "centered", - }, - tags: ["autodocs"], - argTypes: { - if: { control: "boolean" }, - exitBeforeEnter: { control: "boolean" }, - }, -}); - -export const Default = meta.story({ - args: { - if: true, - exitBeforeEnter: true, - then: ( -
- Condition is true -
- ), - else: ( -
- Condition is false -
- ), - }, -}); - -export const InteractiveToggle = meta.story({ - render: () => { - const [show, setShow] = createSignal(true); - return ( -
- - - Condition is true -
- } - else={ -
- Condition is false -
- } - /> - - ); - }, -}); diff --git a/frontend/storybook/stories/Conditional.stories.tsx b/frontend/storybook/stories/Conditional.stories.tsx deleted file mode 100644 index eae8fdb4cd7d..000000000000 --- a/frontend/storybook/stories/Conditional.stories.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import preview from "#.storybook/preview"; -import { Component, JSXElement } from "solid-js"; - -import { Conditional } from "../../src/ts/components/common/Conditional"; - -type ConditionalProps = { - if: boolean; - then: JSXElement; - else?: JSXElement; -}; - -const meta = preview.meta({ - title: "Common/Conditional", - component: Conditional as Component, - parameters: { - layout: "centered", - }, - tags: ["autodocs"], - argTypes: { - if: { control: "boolean" }, - }, -}); - -export const Truthy = meta.story({ - args: { - if: true, - then:
Condition is true
, - else:
Condition is false
, - }, -}); - -export const Falsy = meta.story({ - args: { - if: false, - then:
Condition is true
, - else:
Condition is false
, - }, -}); - -export const NoFallback = meta.story({ - args: { - if: true, - then:
Visible content
, - }, -}); - -export const FalsyNoFallback = meta.story({ - args: { - if: false, - then:
Hidden content
, - }, -}); From 2fad9eb66116b74d39c7b3d64fc5e9162b9241f2 Mon Sep 17 00:00:00 2001 From: Aaron Benmohan John Date: Sun, 3 May 2026 10:49:42 +0530 Subject: [PATCH 26/31] refactor --- frontend/src/styles/popups.scss | 2 +- .../src/ts/components/popups/EditProfile.tsx | 405 ++++++++---------- 2 files changed, 189 insertions(+), 218 deletions(-) diff --git a/frontend/src/styles/popups.scss b/frontend/src/styles/popups.scss index 5de0f1b4f917..0cebbf2a70a4 100644 --- a/frontend/src/styles/popups.scss +++ b/frontend/src/styles/popups.scss @@ -673,7 +673,7 @@ body.darkMode { } } -#editProfileModal { +#EditProfileModal { .modal { max-width: 600px; max-height: 100%; diff --git a/frontend/src/ts/components/popups/EditProfile.tsx b/frontend/src/ts/components/popups/EditProfile.tsx index 5bb583be0c82..d8d977a9c9a4 100644 --- a/frontend/src/ts/components/popups/EditProfile.tsx +++ b/frontend/src/ts/components/popups/EditProfile.tsx @@ -4,9 +4,7 @@ import { UserProfileDetails, WebsiteSchema, } from "@monkeytype/schemas/users"; -import { createSignal, For, Show } from "solid-js"; -import { ZodSchema } from "zod"; - +import { For } from "solid-js"; import Ape from "../../ape"; import { getHTMLById } from "../../controllers/badge-controller"; import * as DB from "../../db"; @@ -17,131 +15,81 @@ import { import { AnimatedModal } from "../common/AnimatedModal"; import { hideModal } from "../../states/modals"; +import { Checkbox } from "../ui/form/Checkbox"; +import { InputField } from "../ui/form/InputField"; +import { TextareaField } from "../ui/form/TextareaField"; +import { createForm } from "@tanstack/solid-form"; +import { SubmitButton } from "../ui/form/SubmitButton"; export function EditProfile() { const snapshot = DB.getSnapshot(); if (!snapshot) return; const badges = snapshot.inventory?.badges ?? []; - const originalState = { - bio: snapshot.details?.bio ?? "", - keyboard: snapshot.details?.keyboard ?? "", - github: snapshot.details?.socialProfiles?.github ?? "", - twitter: snapshot.details?.socialProfiles?.twitter ?? "", - website: snapshot.details?.socialProfiles?.website ?? "", - showActivityOnPublicProfile: - snapshot.details?.showActivityOnPublicProfile ?? true, - badgeId: badges.find((b) => b.selected)?.id ?? -1, - }; - - const [bio, setBio] = createSignal(originalState.bio); - const [keyboard, setKeyboard] = createSignal(originalState.keyboard); - const [github, setGithub] = createSignal(originalState.github); - const [twitter, setTwitter] = createSignal(originalState.twitter); - const [website, setWebsite] = createSignal(originalState.website); - const [showActivity, setShowActivity] = createSignal( - originalState.showActivityOnPublicProfile, - ); - const [selectedBadgeId, setSelectedBadgeId] = createSignal( - originalState.badgeId, - ); - - const hasChanges = () => - bio() !== originalState.bio || - keyboard() !== originalState.keyboard || - github() !== originalState.github || - twitter() !== originalState.twitter || - website() !== originalState.website || - selectedBadgeId() !== originalState.badgeId || - showActivity() !== originalState.showActivityOnPublicProfile; - - const isValid = (value: string, schema: ZodSchema): boolean => - schema.safeParse(value).success; - - const twitterValid = () => isValid(twitter(), TwitterProfileSchema); - const githubValid = () => isValid(github(), GithubProfileSchema); - const websiteValid = () => isValid(website(), WebsiteSchema); - - const isSaveDisabled = () => - !hasChanges() || - (twitter() !== "" && !twitterValid()) || - (github() !== "" && !githubValid()) || - (website() !== "" && !websiteValid()); - - const Indicator = (props: { - valid: boolean; - initial: string; - value: string; - }) => ( - -
- -
- -
-
- -
- -
-
-
-
- ); - - const handleSubmit = async (e: SubmitEvent) => { - e.preventDefault(); - - const updates: UserProfileDetails = { - bio: bio(), - keyboard: keyboard(), - socialProfiles: { - twitter: twitter() || undefined, - github: github() || undefined, - website: website() || undefined, - }, - showActivityOnPublicProfile: showActivity(), - }; - - const response = await Ape.users.updateProfile({ - body: { - ...updates, - selectedBadgeId: selectedBadgeId(), - }, - }); + const form = createForm(() => ({ + defaultValues: { + bio: snapshot.details?.bio ?? "", + keyboard: snapshot.details?.keyboard ?? "", + github: snapshot.details?.socialProfiles?.github ?? "", + twitter: snapshot.details?.socialProfiles?.twitter ?? "", + website: snapshot.details?.socialProfiles?.website ?? "", + showActivityOnPublicProfile: + snapshot.details?.showActivityOnPublicProfile ?? true, + badgeId: badges.find((b) => b.selected)?.id ?? -1, + }, + onSubmit: async ({ value }) => { + const updates: UserProfileDetails = { + bio: value.bio, + keyboard: value.keyboard, + socialProfiles: { + twitter: value.twitter || undefined, + github: value.github || undefined, + website: value.website || undefined, + }, + showActivityOnPublicProfile: value.showActivityOnPublicProfile, + }; - if (response.status !== 200) { - showErrorNotification("Failed to update profile", { response }); - return; - } + const response = await Ape.users.updateProfile({ + body: { + ...updates, + selectedBadgeId: value.badgeId, + }, + }); - snapshot.details = response.body.data ?? updates; - snapshot.inventory?.badges.forEach((badge) => { - if (badge.id === selectedBadgeId()) { - badge.selected = true; - } else { - delete badge.selected; + if (response.status !== 200) { + showErrorNotification("Failed to update profile", { response }); + return; } - }); - - DB.setSnapshot(snapshot); - showSuccessNotification("Profile updated"); - hideModal("EditProfile"); - }; - - const isNotDefault = (value: string, initial: string) => - value !== initial && value !== ""; - + snapshot.details = response.body.data ?? updates; + snapshot.inventory?.badges.forEach((badge) => { + if (badge.id === value.badgeId) { + badge.selected = true; + } else { + delete badge.selected; + } + }); + + form.reset(value); + hideModal("EditProfile"); + DB.setSnapshot(snapshot); + showSuccessNotification("Profile updated"); + }, + })); return ( -
+ { + e.preventDefault(); + void form.handleSubmit(); + }} + >
@@ -149,6 +97,7 @@ export function EditProfile() { account name
+
@@ -157,151 +106,173 @@ export function EditProfile() { click "Update Avatar"{" "}
+
- -
{bio().length}/250
+ + {(field) => ( + <> + +
+ {(field().state.value).length}/250 +
+ + )} +
+
- -
{keyboard().length}/75
+ + {(field) => ( + <> + +
+ {(field().state.value).length}/75 +
+ + )} +
+

https://github.com/

- setGithub(e.currentTarget.value)} - style={{ - "padding-right": isNotDefault(github(), originalState.github) - ? "2.1em" - : "0.5em", + { + if (value === "") return undefined; + return GithubProfileSchema.safeParse(value).success + ? undefined + : "Invalid GitHub username"; + }, }} - /> - + > + {(field) => { + return ( + + ); + }} +
+

https://x.com/

- setTwitter(e.currentTarget.value)} - style={{ - "padding-right": isNotDefault( - twitter(), - originalState.twitter, - ) - ? "2.1em" - : "0.5em", + { + if (value === "") return undefined; + return TwitterProfileSchema.safeParse(value).success + ? undefined + : "Invalid Twitter username"; + }, }} - /> - + > + {(field) => { + return ( +
+
- setWebsite(e.currentTarget.value)} - style={{ - "padding-right": isNotDefault(website(), originalState.website) - ? "2.1em" - : "0.5em", + { + if (value === "") return undefined; + + return WebsiteSchema.safeParse(value).success + ? undefined + : "Invalid website URL"; + }, + }} + > + {(field) => { + return ( + + ); }} - /> - +
+
-
- - - {(badge) => ( + + {(field) => ( +
- )} - -
+ classList={{ selected: field().state.value === -1 }} + onClick={() => field().handleChange(-1)} + > +
+ +
none
+
+ + + {(badge) => ( + + )} + +
+ )} +
+
- + + {(field) => ( + + )} +
- + save
); From c984a1b71226d10c4e7e9cbf6b261c5cd0e6f455 Mon Sep 17 00:00:00 2001 From: Miodec Date: Sun, 3 May 2026 09:08:51 +0200 Subject: [PATCH 27/31] style: fix testconfig shifting on some widths --- frontend/src/html/pages/test.html | 2 +- frontend/src/ts/components/pages/test/TestConfig.tsx | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/frontend/src/html/pages/test.html b/frontend/src/html/pages/test.html index de4b16820652..49f01e1ba8a9 100644 --- a/frontend/src/html/pages/test.html +++ b/frontend/src/html/pages/test.html @@ -1,5 +1,5 @@
setScrollToUser(false)} @@ -270,7 +287,9 @@ export function LeaderboardPage(): JSXElement {
- - {(profile) => } + + {({ profileQueryData }) => ( + + )}
diff --git a/frontend/src/ts/components/popups/alerts/Inbox.tsx b/frontend/src/ts/components/popups/alerts/Inbox.tsx index 1783575f238b..ecdf629cdac6 100644 --- a/frontend/src/ts/components/popups/alerts/Inbox.tsx +++ b/frontend/src/ts/components/popups/alerts/Inbox.tsx @@ -117,12 +117,14 @@ export function Inbox(): JSXElement { } body={ } > - {(inbox) => ( + {({ inboxQueryData }) => ( <> - it.status === "unclaimed")}> + it.status === "unclaimed")} + >
} > {(entry) => } diff --git a/frontend/storybook/stories/AsyncContent.stories.tsx b/frontend/storybook/stories/AsyncContent.stories.tsx index e4b53b9fdbd5..8a6f71393417 100644 --- a/frontend/storybook/stories/AsyncContent.stories.tsx +++ b/frontend/storybook/stories/AsyncContent.stories.tsx @@ -35,7 +35,9 @@ function LoadingExample(): ReturnType { })); return ( - {(data) =>
{data}
}
+ + {({ queryData }) =>
{queryData()}
} +
); } @@ -46,8 +48,10 @@ function SuccessExample(): ReturnType { })); return ( - - {(data) =>
{data}
} + + {({ queryData }) => ( +
{queryData()}
+ )}
); } @@ -61,7 +65,7 @@ function ErrorExample(): ReturnType { })); return ( - + {() =>
This won't render
}
); From 94b22a77839dbc4618e264194a631514792c066c Mon Sep 17 00:00:00 2001 From: Miodec Date: Sun, 3 May 2026 10:59:36 +0200 Subject: [PATCH 30/31] impr: enhance ChartJs component with theme handling and data updates !nuf --- frontend/src/ts/components/common/ChartJs.tsx | 34 +++++++++++++++---- .../src/ts/components/pages/AboutPage.tsx | 1 + 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/frontend/src/ts/components/common/ChartJs.tsx b/frontend/src/ts/components/common/ChartJs.tsx index a38fbdb452cf..916fb539eee2 100644 --- a/frontend/src/ts/components/common/ChartJs.tsx +++ b/frontend/src/ts/components/common/ChartJs.tsx @@ -8,17 +8,23 @@ import { ScaleChartOptions, } from "chart.js"; import chartTrendline from "chartjs-plugin-trendline"; -import { createEffect, JSXElement, onCleanup, onMount } from "solid-js"; +import { createDeferred, JSXElement, onCleanup, onMount } from "solid-js"; import { Theme } from "../../constants/themes"; +import { createEffectOn } from "../../hooks/effects"; import { useRefWithUtils } from "../../hooks/useRefWithUtils"; import { getTheme } from "../../states/theme"; +function getThemeHash(): string { + return Object.values(getTheme()).join(""); +} + Chart.register(chartTrendline); type ChartJSProps< T extends ChartType = ChartType, TData = DefaultDataPoint, > = { + name: string; type: T; data: ChartData; options?: ChartOptions; @@ -32,28 +38,44 @@ export function ChartJs>( const [canvasRef, canvasEl] = useRefWithUtils(); let chart: Chart | undefined; + let theme = ""; onMount(() => { const canvas = canvasEl(); if (canvas === undefined) return; + if (chart !== undefined) return; + chart = new Chart(canvas.native, { type: props.type, data: props.data, options: addColorsToOptions(props.options as ChartOptions, getTheme), }); - + theme = getThemeHash(); props.onChartInit?.(chart); }); - createEffect(() => { + const updateChart = (data: ChartData): void => { if (!chart) return; - chart.config.type = props.type; - chart.data = props.data; + chart.data = data; + if (props.options) { chart.options = addColorsToOptions(props.options, getTheme); } - chart.update(); + + chart.update("none"); + }; + + const deferredData = createDeferred(() => props.data, { timeoutMs: 500 }); + + createEffectOn(deferredData, (data) => updateChart(data)); + + createEffectOn(getTheme, () => { + if (!chart) return; + const newTheme = getThemeHash(); + if (theme === newTheme) return; + theme = newTheme; + updateChart(deferredData()); }); onCleanup(() => { diff --git a/frontend/src/ts/components/pages/AboutPage.tsx b/frontend/src/ts/components/pages/AboutPage.tsx index 6dd0cf73855e..29cdf9620978 100644 --- a/frontend/src/ts/components/pages/AboutPage.tsx +++ b/frontend/src/ts/components/pages/AboutPage.tsx @@ -105,6 +105,7 @@ export function AboutPage(): JSXElement { {({ speedHistogramData }) => ( <> Date: Sun, 3 May 2026 16:03:33 +0530 Subject: [PATCH 31/31] refactor(profile): migrate edit profile modal to SolidJS --- frontend/src/ts/components/pages/profile/UserDetails.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/frontend/src/ts/components/pages/profile/UserDetails.tsx b/frontend/src/ts/components/pages/profile/UserDetails.tsx index 6f34bf030f72..1b2790556dac 100644 --- a/frontend/src/ts/components/pages/profile/UserDetails.tsx +++ b/frontend/src/ts/components/pages/profile/UserDetails.tsx @@ -19,6 +19,7 @@ import { addFriend, isFriend } from "../../../db"; import * as UserReportModal from "../../../modals/user-report"; import { bp } from "../../../states/breakpoints"; import { getUserId, isAuthenticated } from "../../../states/core"; +import { showModal } from "../../../states/modals"; import { showNoticeNotification, showErrorNotification, @@ -36,8 +37,6 @@ import { DiscordAvatar } from "../../common/DiscordAvatar"; import { UserBadge } from "../../common/UserBadge"; import { UserFlags } from "../../common/UserFlags"; import { EditProfile } from "../../popups/EditProfile"; -import { showModal } from "../../../states/modals"; - type Variant = "basic" | "hasSocials" | "hasBioOrKeyboard" | "full"; @@ -100,6 +99,9 @@ export function UserDetails(props: { isAccountPage={props.isAccountPage} />
+ + +
); } @@ -178,7 +180,7 @@ function ActionButtons(props: { showNoticeNotification("Banned users cannot edit their profile"); return; } - EditProfileModal.show(); + showModal("EditProfile"); }} />