├── src
├── content
│ ├── styles
│ │ ├── uno.css
│ │ ├── index.css
│ │ ├── firefox
│ │ │ └── style-compat.css
│ │ ├── style-polyfillForTwitter.css
│ │ ├── features
│ │ │ ├── style-discoverMore.css
│ │ │ └── style-iconSettings.css
│ │ └── style-tlui.css
│ ├── modules
│ │ ├── settings
│ │ │ ├── safemode
│ │ │ │ ├── isSafemode.ts
│ │ │ │ └── safemode.ts
│ │ │ └── display.ts
│ │ ├── utils
│ │ │ ├── getValues.ts
│ │ │ ├── fontSize.ts
│ │ │ ├── dateAndTime.ts
│ │ │ ├── toastMessage.tsx
│ │ │ └── color.ts
│ │ ├── observer
│ │ │ ├── functions
│ │ │ │ ├── profile
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── followersListButton
│ │ │ │ │ │ ├── buttons.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── initProfileTab.ts
│ │ │ │ ├── fixTwittersBugs.ts
│ │ │ │ ├── fixDM.ts
│ │ │ │ ├── composeTweet.ts
│ │ │ │ ├── tweetSettings
│ │ │ │ │ └── _data.ts
│ │ │ │ └── postingDialog.ts
│ │ │ ├── functions.ts
│ │ │ └── errorDialog.ts
│ │ ├── i18n
│ │ │ └── index.ts
│ │ └── htmlClass
│ │ │ └── classManager.ts
│ ├── icons
│ │ ├── logo
│ │ │ ├── dog.png
│ │ │ ├── empty.svg
│ │ │ ├── x.svg
│ │ │ └── twitter.svg
│ │ ├── arrow
│ │ │ ├── arrow_down.svg
│ │ │ ├── arrow_left.svg
│ │ │ ├── arrow_right.svg
│ │ │ ├── arrow_up.svg
│ │ │ └── reset.svg
│ │ ├── brand
│ │ │ ├── x.svg
│ │ │ └── twitter.svg
│ │ ├── common
│ │ │ ├── arrow_right.svg
│ │ │ ├── arrow_right_enabled.svg
│ │ │ ├── github.svg
│ │ │ ├── sidebar_enabled.svg
│ │ │ ├── reveal.svg
│ │ │ ├── pencil_enabled.svg
│ │ │ ├── information.svg
│ │ │ ├── more.svg
│ │ │ ├── profile_enabled.svg
│ │ │ ├── pencil.svg
│ │ │ ├── sidebar.svg
│ │ │ ├── dm_enabled.svg
│ │ │ ├── home_enabled.svg
│ │ │ ├── sparkles_enabled.svg
│ │ │ ├── brush.svg
│ │ │ ├── none.svg
│ │ │ ├── tweet_enabled.svg
│ │ │ ├── reset.svg
│ │ │ ├── twitter.svg
│ │ │ ├── dm.svg
│ │ │ ├── home.svg
│ │ │ ├── profile.svg
│ │ │ ├── sparkles.svg
│ │ │ ├── more_circle.svg
│ │ │ ├── brush_enabled.svg
│ │ │ ├── more_circle_enabled.svg
│ │ │ ├── tweet.svg
│ │ │ ├── verified.svg
│ │ │ └── transparent.svg
│ │ ├── arrow_cutter
│ │ │ ├── arrow_down.svg
│ │ │ ├── arrow_up.svg
│ │ │ ├── arrow_toleft.svg
│ │ │ └── arrow_toright.svg
│ │ ├── home
│ │ │ ├── home_twitter.svg
│ │ │ ├── home_x.svg
│ │ │ └── home_tuic.svg
│ │ ├── branding
│ │ │ ├── tuic_unilogo_gray.svg
│ │ │ └── tuic_unilogo.svg
│ │ └── figure
│ │ │ └── import_append.svg
│ └── printPref.tsx
├── shared
│ ├── testError.ts
│ ├── tlui
│ │ ├── components
│ │ │ ├── Component.ts
│ │ │ ├── ContainerComponent.ts
│ │ │ ├── DivBox.ts
│ │ │ ├── ButtonComponent.ts
│ │ │ └── TextboxComponent.ts
│ │ └── observer.ts
│ ├── settings
│ │ ├── components
│ │ │ ├── SectionTitle.vue
│ │ │ ├── SectionTitle2.vue
│ │ │ ├── settingSubtitle2.vue
│ │ │ ├── settingSubTitleNomargin.vue
│ │ │ ├── IconButton.vue
│ │ │ ├── ColorResetButton.vue
│ │ │ ├── RoundedColorPicker.vue
│ │ │ ├── TransparentToggleButton.vue
│ │ │ ├── detailsBox.vue
│ │ │ └── defaultPrefButton.vue
│ │ └── modules
│ │ │ ├── settingTimeline.vue
│ │ │ ├── settingDM.vue
│ │ │ ├── settingUncategorized.vue
│ │ │ ├── SettingsHeader.vue
│ │ │ ├── settingProfile.vue
│ │ │ ├── settingEffectText.vue
│ │ │ ├── settingLogo.vue
│ │ │ └── settingSidebar.vue
│ ├── options
│ │ ├── store.ts
│ │ ├── components
│ │ │ ├── RadioButtonList.vue
│ │ │ ├── IconButton.vue
│ │ │ ├── CheckBoxList.vue
│ │ │ ├── textParts
│ │ │ │ └── settingSubTitle.vue
│ │ │ ├── IconRadioButtonList.vue
│ │ │ ├── ColorsList.vue
│ │ │ ├── ThreeColorSetting.vue
│ │ │ ├── CheckBox.vue
│ │ │ ├── RadioButton.vue
│ │ │ ├── IconRadioButtonBase64Support.vue
│ │ │ ├── IconRadioButton.vue
│ │ │ └── UploadImageFile.vue
│ │ ├── injectOption2Entry.ts
│ │ ├── modules
│ │ │ └── customCSS.vue
│ │ ├── scripts
│ │ │ └── changePrefScript.ts
│ │ └── injectSafeMode.ts
│ └── sourcemap
│ │ └── index.ts
├── global.ts
├── options
│ ├── options.ts
│ └── tuic_logo_gray.svg
└── popup
│ └── tuic_logo_gray.svg
├── third-party
└── sourcemap
│ ├── .gitignore
│ ├── dist
│ ├── sourcemap_js_bg.wasm
│ ├── sourcemap_js_bg.wasm.d.ts
│ └── sourcemap_js.d.ts
│ ├── README.md
│ ├── src
│ ├── main.rs
│ └── lib.rs
│ └── Cargo.toml
├── i18n
├── ig.json
├── th.json
├── ar.json
├── bg.json
├── bn.json
├── ca.json
├── cs.json
├── da.json
├── el.json
├── eu.json
├── fa.json
├── fi.json
├── fil.json
├── fr.json
├── ga.json
├── gl.json
├── gu.json
├── ha.json
├── he.json
├── hi.json
├── hr.json
├── hu.json
├── id.json
├── it.json
├── kn.json
├── mr.json
├── ms.json
├── nl.json
├── pl.json
├── pt.json
├── sk.json
├── sr.json
├── sv.json
├── ta.json
├── ur.json
├── vi.json
├── yo.json
├── ro.json
├── ar-x-fm.json
├── nb.json
├── en-ss.json
├── en-xx.json
├── en-GB.json
├── es.json
├── _langList.ts
├── tr.json
├── de.json
└── _officialTwitterI18nConfig.ts
├── pnpm-workspace.yaml
├── public
├── icon
│ ├── header.png
│ ├── icon128.png
│ ├── icon16.png
│ ├── icon48.png
│ ├── newIcon_TUIC_C_Blue.png
│ └── newIcon_TUIC_C_Blue.svg
├── inject.js
└── safemode.html
├── .gitignore
├── .prettierrc.js
├── crowdin.yml
├── tsconfig.json
├── tsconfig.node.json
├── .vscode
├── extensions.json
└── settings.json
├── scripts
├── pwa-manifest
│ └── generate-manifest.ts
├── generate-crx.ts
├── change-manifest.ts
└── vite-plugin
│ └── unocss.ts
├── _locales
└── en-GB
│ └── messages.json
├── tsconfig.main.json
├── .stylelintrc.js
├── docs
├── manifest_build.md
├── vite_build.md
└── i18n.md
├── LICENSE
├── .env.local.example
├── .github
└── workflows
│ ├── i18nUpdate.yml
│ └── lint.yml
├── uno.config.ts
├── CONTRIBUTING.md
└── package.json
/src/content/styles/uno.css:
--------------------------------------------------------------------------------
1 | @unocss;
2 |
--------------------------------------------------------------------------------
/third-party/sourcemap/.gitignore:
--------------------------------------------------------------------------------
1 | /target
2 |
--------------------------------------------------------------------------------
/i18n/ig.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "イボ語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/th.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "タイ語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/ar.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "アラビア語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/bg.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "ブルガリア語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/bn.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "ベンガル語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/ca.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "カタロニア語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/cs.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "チェコ語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/da.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "デンマーク語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/el.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "ギリシャ語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/eu.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "バスク語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/fa.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "ペルシア語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/fi.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "フィンランド語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/fil.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "フィリピノ語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/fr.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "フランス語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/ga.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "アイルランド語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/gl.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "ガリシア語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/gu.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "グジャラート語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/ha.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "ハウサ語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/he.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "ヘブライ語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/hi.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "ヒンディー語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/hr.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "クロアチア語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/hu.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "ハンガリー語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/id.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "インドネシア語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/it.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "イタリア語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/kn.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "カンナダ語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/mr.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "マラーティー語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/ms.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "マレー語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/nl.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "オランダ語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/pl.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "ポーランド語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/pt.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "ポルトガル語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/sk.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "スロバキア語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/sr.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "セルビア語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/sv.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "スウェーデン語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/ta.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "タミル語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/ur.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "ウルドゥー語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/vi.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "ベトナム語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/yo.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "ヨルバ語"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/ro.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "ルーマニア語・モルドバ語"
3 | }
4 |
--------------------------------------------------------------------------------
/pnpm-workspace.yaml:
--------------------------------------------------------------------------------
1 | minimumReleaseAge: '10080' # in minutes (7 days)
2 |
--------------------------------------------------------------------------------
/i18n/ar-x-fm.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "アラビア語(女性形)"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/nb.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "ノルウェー語[ブークモール]"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/en-ss.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "アメリカ英語 (翻訳キー確認用?)"
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/en-xx.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "アメリカ英語 (テスト用?)"
3 | }
4 |
--------------------------------------------------------------------------------
/src/shared/testError.ts:
--------------------------------------------------------------------------------
1 | export function throwTestError() {
2 | throw new Error("Test");
3 | }
4 |
--------------------------------------------------------------------------------
/i18n/en-GB.json:
--------------------------------------------------------------------------------
1 | {
2 | "@JapaneseLanguageName": "イギリス英語",
3 | "profileSetting-profile": "Profile"
4 | }
5 |
--------------------------------------------------------------------------------
/public/icon/header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ablaze-MIRAI/Twitter-UI-Customizer/HEAD/public/icon/header.png
--------------------------------------------------------------------------------
/public/icon/icon128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ablaze-MIRAI/Twitter-UI-Customizer/HEAD/public/icon/icon128.png
--------------------------------------------------------------------------------
/public/icon/icon16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ablaze-MIRAI/Twitter-UI-Customizer/HEAD/public/icon/icon16.png
--------------------------------------------------------------------------------
/public/icon/icon48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ablaze-MIRAI/Twitter-UI-Customizer/HEAD/public/icon/icon48.png
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.zip
2 | *.xpi
3 | /manifest.json
4 | /node_modules/
5 | /dist/
6 | .env.local
7 | dependency-graph.svg
8 |
--------------------------------------------------------------------------------
/src/content/modules/settings/safemode/isSafemode.ts:
--------------------------------------------------------------------------------
1 | export const isSafemode = location.pathname === "/tuic/safemode";
2 |
--------------------------------------------------------------------------------
/public/inject.js:
--------------------------------------------------------------------------------
1 | (async () => {
2 | const src = chrome.runtime.getURL("index.js");
3 | await import(src);
4 | })();
5 |
--------------------------------------------------------------------------------
/src/content/icons/logo/dog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ablaze-MIRAI/Twitter-UI-Customizer/HEAD/src/content/icons/logo/dog.png
--------------------------------------------------------------------------------
/public/icon/newIcon_TUIC_C_Blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ablaze-MIRAI/Twitter-UI-Customizer/HEAD/public/icon/newIcon_TUIC_C_Blue.png
--------------------------------------------------------------------------------
/third-party/sourcemap/dist/sourcemap_js_bg.wasm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ablaze-MIRAI/Twitter-UI-Customizer/HEAD/third-party/sourcemap/dist/sourcemap_js_bg.wasm
--------------------------------------------------------------------------------
/src/shared/tlui/components/Component.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * コンポーネント
3 | */
4 | export interface Component {
5 | /**
6 | * コンポーネントの実要素
7 | */
8 | element: Element;
9 | }
10 |
--------------------------------------------------------------------------------
/.prettierrc.js:
--------------------------------------------------------------------------------
1 | /** @type {import("prettier").Config} */
2 | export default {
3 | tabWidth: 4,
4 | semi: true,
5 | singleQuote: false,
6 | endOfLine: "auto",
7 | printWidth: 300,
8 | };
9 |
--------------------------------------------------------------------------------
/crowdin.yml:
--------------------------------------------------------------------------------
1 | files:
2 | - source: /i18n/ja.json
3 | translation: /i18n/%two_letters_code%.json
4 | - source: /_locales/ja/messages.json
5 | translation: /_locales/%locale%/messages.json
6 |
--------------------------------------------------------------------------------
/src/content/icons/logo/empty.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/content/icons/arrow/arrow_down.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/content/icons/arrow/arrow_left.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/content/icons/arrow/arrow_right.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/content/icons/arrow/arrow_up.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/third-party/sourcemap/README.md:
--------------------------------------------------------------------------------
1 | # sourcemap-js
2 |
3 | how to build
4 |
5 | install wasm-pack
6 | run:
7 | wasm-pack build --target web
8 |
9 | and use pkg/
10 |
11 | Please move pkg/ files to dist (without .gitignore in pkg/) to use in TUIC.
12 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "include": [],
4 | "references": [
5 | {
6 | "path": "tsconfig.main.json",
7 | },
8 | {
9 | "path": "tsconfig.node.json",
10 | },
11 | ],
12 | }
13 |
--------------------------------------------------------------------------------
/third-party/sourcemap/src/main.rs:
--------------------------------------------------------------------------------
1 | use sourcemap_js::NRSourceMap;
2 |
3 | fn main() {
4 | println!(
5 | "{:?}",
6 | NRSourceMap::new(&String::from_utf8(include_bytes!("../srcmap.js.map").to_vec()).unwrap())
7 | .lookup(1, 710)
8 | )
9 | }
10 |
--------------------------------------------------------------------------------
/src/content/styles/index.css:
--------------------------------------------------------------------------------
1 | @import url("./style-polyfillForTwitter.css");
2 | @import url("./style-tlui.css");
3 | @import url("./style-tuicColor.css");
4 | @import url("./style-tuicFeatures.css");
5 | @import url("./style-tuicSettingPage.css");
6 | @import url("./firefox/style-compat.css");
7 |
--------------------------------------------------------------------------------
/src/shared/settings/components/SectionTitle.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ TUICI18N.get(titleI18N) }}
4 |
5 |
6 |
7 |
14 |
--------------------------------------------------------------------------------
/src/shared/settings/components/SectionTitle2.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ TUICI18N.get(titleI18N) }}
4 |
5 |
6 |
7 |
14 |
--------------------------------------------------------------------------------
/src/shared/settings/components/settingSubtitle2.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ TUICI18N.get(titleI18N) }}
4 |
5 |
6 |
7 |
14 |
--------------------------------------------------------------------------------
/src/shared/settings/components/settingSubTitleNomargin.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ TUICI18N.get(i18n) }}
4 |
5 |
6 |
7 |
14 |
--------------------------------------------------------------------------------
/src/shared/options/store.ts:
--------------------------------------------------------------------------------
1 | import { defineStore } from "pinia";
2 |
3 | // editingColorType : 指定する色のタイプがベース / ダーク / ライトどれで使用されるかを保持
4 | export const useStore = defineStore("optionMain", {
5 | state: () =>
6 | ({
7 | editingColorType: "buttonColor",
8 | }) as {
9 | editingColorType: "buttonColor" | "buttonColorLight" | "buttonColorDark";
10 | },
11 | });
12 |
--------------------------------------------------------------------------------
/third-party/sourcemap/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "sourcemap-js"
3 | version = "0.1.0"
4 | edition = "2021"
5 |
6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7 |
8 | #when testing with main.rs, commentout these two lines
9 | [lib]
10 | crate-type = ["cdylib", "rlib"]
11 |
12 | [dependencies]
13 | sourcemap = "8.0.1"
14 | wasm-bindgen = "0.2.92"
15 |
--------------------------------------------------------------------------------
/public/safemode.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 | {{ TUICI18N.get("temp-notice-hideDMSheetOnBottomRight") }} 8 |
9 |
15 |
16 | ### Twitter上でのTUICの翻訳
17 |
18 | - Twitterで使用できる言語は全て(ファイルだけでも)用意していて、一番最初の`@JapaneseLanguageName`に、言語名を書いています
19 |
20 | #### 翻訳の仕方
21 |
22 | 1. `i18n/<言語タグ名>.json`を開く
23 | 2. `i18n/ja.json`をもとに翻訳する
24 |
25 | ### ポップアップなどTUIC自体の翻訳
26 |
27 | [こちらの記事](https://developer.mozilla.org/ja/docs/Mozilla/Add-ons/WebExtensions/Internationalization)と[`_locales/ja/messages.json`](./_locales/ja/messages.json)を参照してください
28 |
29 | ## アドオンのデバッグ方法
30 |
31 | **Chromium、またはFirefoxでのデバッグの詳細は [`docs/vite_build`](./docs/vite_build.md)を御覧ください。**
32 |
33 | manifest.jsonなどのデバッグ・ソースコードの情報は[`docs/manifest_build`](./docs/manifest_build.md)を見てください!
34 |
35 | **重要**: Firefox ブラウザーが事前にインストールされている必要があります。
36 | また、新しいプロファイルを "about:profiles" で "development" といった名前で作成する必要があります。
37 | プロファイルや環境によるバグを防ぐためにプロファイルは分けられます。
38 |
39 | ```bash
40 |
41 | pnpm i --frozen-lockfile
42 |
43 | ## Firefox でデバッグする場合(引数なしの場合はデフォルトで Firefox でデバッグします)
44 | pnpm debug
45 |
46 | # or
47 | pnpm debug:firefox
48 |
49 | ## Chrome または Chromium 系ブラウザー でデバッグする場合
50 | pnpm debug:chromium
51 |
52 | ## Firefox または Firefox 系ブラウザーでデバッグする場合
53 |
54 | # .env.local で `TUIC_WEBEXT_FIREFOX_EXECUTABLE`を使いたいFirefoxの経路に設定した後に
55 | pnpm debug:firefox
56 |
57 | # 例
58 | # TUIC_WEBEXT_FIREFOX_EXECUTABLE="C:\Program Files\Firefox Developer Edition\firefox.exe"
59 | # プロファイルでエラーが出る場合や直接指定したい場合
60 | # TUIC_WEBEXT_FIREFOX_PROFILE="C:\Users\user\AppData\Roaming\Mozilla\Firefox\Profiles\h6jvvuqd.dev_tuic"
61 | pnpm debug:firefox
62 |
63 | ```
64 |
65 | デバッグでは web-ext を使用しているためデバッグ中に加えた変更はブラウザーをリロードしなくても反映されます。
66 |
--------------------------------------------------------------------------------
/src/shared/tlui/components/ButtonComponent.ts:
--------------------------------------------------------------------------------
1 | import { Component } from "./Component";
2 |
3 | export interface ButtonComponentInit {
4 | /**
5 | * ボタンの幅を最大にするかどうか(初期値: `true`)
6 | */
7 | fullWidth?: boolean;
8 | /**
9 | * ボタンの色を反転させるかどうか(初期値: `false`)
10 | */
11 | invertColor?: boolean;
12 | }
13 |
14 | type OnclickListener = GlobalEventHandlers["onclick"];
15 |
16 | /**
17 | * Twitterのボタン風要素
18 | */
19 | export class ButtonComponent implements Component {
20 | public element: HTMLButtonElement;
21 |
22 | /**
23 | * ボタンコンポーネントのクリックイベント
24 | */
25 | public onclick: OnclickListener;
26 |
27 | /**
28 | * @param text ボタンテキスト
29 | * @param onclick クリックイベント
30 | * @param options オプション
31 | */
32 | constructor(text: string, onclick: OnclickListener, options: ButtonComponentInit = {}) {
33 | this.element = new DOMParser().parseFromString(
34 | `
35 |
36 | `,
37 | "text/html",
38 | ).body.children[0] as HTMLButtonElement;
39 | this.onclick = onclick;
40 |
41 | this.element.onclick = onclick;
42 |
43 | for (const [key, value] of Object.entries(Object.assign({}, options))) {
44 | this[key] = value;
45 | }
46 | }
47 |
48 | /**
49 | * ボタンの幅を最大にするかどうか(初期値: `true`)
50 | */
51 | public get fullWidth(): boolean {
52 | return this.element.classList.contains("full-width");
53 | }
54 | public set fullWidth(value: boolean) {
55 | if (value) {
56 | this.element.classList.add("full-width");
57 | } else {
58 | this.element.classList.remove("full-width");
59 | }
60 | }
61 |
62 | /**
63 | * ボタンの色を反転させるかどうか(初期値: `false`)
64 | */
65 | public get invertColor(): boolean {
66 | return this.element.classList.contains("invert-color");
67 | }
68 | public set invertColor(value: boolean) {
69 | if (value) {
70 | this.element.classList.add("invert-color");
71 | } else {
72 | this.element.classList.remove("invert-color");
73 | }
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/src/content/icons/common/verified.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
--------------------------------------------------------------------------------
/src/content/modules/observer/functions/profile/followersListButton/buttons.tsx:
--------------------------------------------------------------------------------
1 | import { fontSizeClass } from "@modules/utils/fontSize";
2 | import { backgroundColorClass } from "@content/modules/utils/color";
3 | import { JSX } from "solid-js";
4 | import { data } from "./data";
5 |
6 | export function followersListButton(id: string, baseElement: HTMLElement): () => JSX.Element {
7 | return (): JSX.Element => (
8 | 6 | {{ TUICI18N.get("twitterIcon-nowIcon") }} 7 |
8 | 9 |