logo

pleroma-fe

My custom branche(s) on git.pleroma.social/pleroma/pleroma-fe git clone https://hacktivis.me/git/pleroma-fe.git

theme_tab.vue (38570B)


  1. <template>
  2. <div class="theme-tab">
  3. <div class="presets-container">
  4. <div class="save-load">
  5. <div
  6. v-if="themeWarning"
  7. class="theme-warning"
  8. >
  9. <div class="alert warning">
  10. {{ themeWarningHelp }}
  11. </div>
  12. <div class="buttons">
  13. <template v-if="themeWarning.type === 'snapshot_source_mismatch'">
  14. <button
  15. class="btn button-default"
  16. @click="forceLoad"
  17. >
  18. {{ $t('settings.style.switcher.use_source') }}
  19. </button>
  20. <button
  21. class="btn button-default"
  22. @click="forceSnapshot"
  23. >
  24. {{ $t('settings.style.switcher.use_snapshot') }}
  25. </button>
  26. </template>
  27. <template v-else-if="themeWarning.noActionsPossible">
  28. <button
  29. class="btn button-default"
  30. @click="dismissWarning"
  31. >
  32. {{ $t('general.dismiss') }}
  33. </button>
  34. </template>
  35. <template v-else>
  36. <button
  37. class="btn button-default"
  38. @click="forceLoad"
  39. >
  40. {{ $t('settings.style.switcher.load_theme') }}
  41. </button>
  42. <button
  43. class="btn button-default"
  44. @click="dismissWarning"
  45. >
  46. {{ $t('settings.style.switcher.keep_as_is') }}
  47. </button>
  48. </template>
  49. </div>
  50. </div>
  51. <div class="top">
  52. <div class="presets">
  53. {{ $t('settings.presets') }}
  54. <label
  55. for="preset-switcher"
  56. class="select"
  57. >
  58. <Select
  59. id="preset-switcher"
  60. v-model="selected"
  61. class="preset-switcher"
  62. >
  63. <option
  64. v-for="style in availableStyles"
  65. :key="style.name"
  66. :value="style.name || style[0]"
  67. :style="{
  68. backgroundColor: style[1] || (style.theme || style.source).colors.bg,
  69. color: style[3] || (style.theme || style.source).colors.text
  70. }"
  71. >
  72. {{ style[0] || style.name }}
  73. </option>
  74. </Select>
  75. </label>
  76. </div>
  77. <div class="export-import">
  78. <button
  79. class="btn button-default"
  80. @click="importTheme"
  81. >
  82. {{ $t(&quot;settings.import_theme&quot;) }}
  83. </button>
  84. <button
  85. class="btn button-default"
  86. @click="exportTheme"
  87. >
  88. {{ $t(&quot;settings.export_theme&quot;) }}
  89. </button>
  90. </div>
  91. </div>
  92. </div>
  93. <div class="save-load-options">
  94. <span class="keep-option">
  95. <Checkbox v-model="keepColor">
  96. {{ $t('settings.style.switcher.keep_color') }}
  97. </Checkbox>
  98. </span>
  99. <span class="keep-option">
  100. <Checkbox v-model="keepShadows">
  101. {{ $t('settings.style.switcher.keep_shadows') }}
  102. </Checkbox>
  103. </span>
  104. <span class="keep-option">
  105. <Checkbox v-model="keepOpacity">
  106. {{ $t('settings.style.switcher.keep_opacity') }}
  107. </Checkbox>
  108. </span>
  109. <span class="keep-option">
  110. <Checkbox v-model="keepRoundness">
  111. {{ $t('settings.style.switcher.keep_roundness') }}
  112. </Checkbox>
  113. </span>
  114. <span class="keep-option">
  115. <Checkbox v-model="keepFonts">
  116. {{ $t('settings.style.switcher.keep_fonts') }}
  117. </Checkbox>
  118. </span>
  119. <p>{{ $t('settings.style.switcher.save_load_hint') }}</p>
  120. </div>
  121. </div>
  122. <preview :style="previewRules" />
  123. <keep-alive>
  124. <tab-switcher key="style-tweak">
  125. <div
  126. :label="$t('settings.style.common_colors._tab_label')"
  127. class="color-container"
  128. >
  129. <div class="tab-header">
  130. <p>{{ $t('settings.theme_help') }}</p>
  131. <div class="tab-header-buttons">
  132. <button
  133. class="btn button-default"
  134. @click="clearOpacity"
  135. >
  136. {{ $t('settings.style.switcher.clear_opacity') }}
  137. </button>
  138. <button
  139. class="btn button-default"
  140. @click="clearV1"
  141. >
  142. {{ $t('settings.style.switcher.clear_all') }}
  143. </button>
  144. </div>
  145. </div>
  146. <p>{{ $t('settings.theme_help_v2_1') }}</p>
  147. <h4>{{ $t('settings.style.common_colors.main') }}</h4>
  148. <div class="color-item">
  149. <ColorInput
  150. v-model="bgColorLocal"
  151. name="bgColor"
  152. :label="$t('settings.background')"
  153. />
  154. <OpacityInput
  155. v-model="bgOpacityLocal"
  156. name="bgOpacity"
  157. :fallback="previewTheme.opacity.bg"
  158. />
  159. <ColorInput
  160. v-model="textColorLocal"
  161. name="textColor"
  162. :label="$t('settings.text')"
  163. />
  164. <ContrastRatio :contrast="previewContrast.bgText" />
  165. <ColorInput
  166. v-model="accentColorLocal"
  167. name="accentColor"
  168. :fallback="previewTheme.colors.link"
  169. :label="$t('settings.accent')"
  170. :show-optional-tickbox="typeof linkColorLocal !== 'undefined'"
  171. />
  172. <ColorInput
  173. v-model="linkColorLocal"
  174. name="linkColor"
  175. :fallback="previewTheme.colors.accent"
  176. :label="$t('settings.links')"
  177. :show-optional-tickbox="typeof accentColorLocal !== 'undefined'"
  178. />
  179. <ContrastRatio :contrast="previewContrast.bgLink" />
  180. </div>
  181. <div class="color-item">
  182. <ColorInput
  183. v-model="fgColorLocal"
  184. name="fgColor"
  185. :label="$t('settings.foreground')"
  186. />
  187. <ColorInput
  188. v-model="fgTextColorLocal"
  189. name="fgTextColor"
  190. :label="$t('settings.text')"
  191. :fallback="previewTheme.colors.fgText"
  192. />
  193. <ColorInput
  194. v-model="fgLinkColorLocal"
  195. name="fgLinkColor"
  196. :label="$t('settings.links')"
  197. :fallback="previewTheme.colors.fgLink"
  198. />
  199. <p>{{ $t('settings.style.common_colors.foreground_hint') }}</p>
  200. </div>
  201. <h4>{{ $t('settings.style.common_colors.rgbo') }}</h4>
  202. <div class="color-item">
  203. <ColorInput
  204. v-model="cRedColorLocal"
  205. name="cRedColor"
  206. :label="$t('settings.cRed')"
  207. />
  208. <ContrastRatio :contrast="previewContrast.bgCRed" />
  209. <ColorInput
  210. v-model="cBlueColorLocal"
  211. name="cBlueColor"
  212. :label="$t('settings.cBlue')"
  213. />
  214. <ContrastRatio :contrast="previewContrast.bgCBlue" />
  215. </div>
  216. <div class="color-item">
  217. <ColorInput
  218. v-model="cGreenColorLocal"
  219. name="cGreenColor"
  220. :label="$t('settings.cGreen')"
  221. />
  222. <ContrastRatio :contrast="previewContrast.bgCGreen" />
  223. <ColorInput
  224. v-model="cOrangeColorLocal"
  225. name="cOrangeColor"
  226. :label="$t('settings.cOrange')"
  227. />
  228. <ContrastRatio :contrast="previewContrast.bgCOrange" />
  229. </div>
  230. <p>{{ $t('settings.theme_help_v2_2') }}</p>
  231. </div>
  232. <div
  233. :label="$t('settings.style.advanced_colors._tab_label')"
  234. class="color-container"
  235. >
  236. <div class="tab-header">
  237. <p>{{ $t('settings.theme_help') }}</p>
  238. <button
  239. class="btn button-default"
  240. @click="clearOpacity"
  241. >
  242. {{ $t('settings.style.switcher.clear_opacity') }}
  243. </button>
  244. <button
  245. class="btn button-default"
  246. @click="clearV1"
  247. >
  248. {{ $t('settings.style.switcher.clear_all') }}
  249. </button>
  250. </div>
  251. <div class="color-item">
  252. <h4>{{ $t('settings.style.advanced_colors.post') }}</h4>
  253. <ColorInput
  254. v-model="postLinkColorLocal"
  255. name="postLinkColor"
  256. :fallback="previewTheme.colors.accent"
  257. :label="$t('settings.links')"
  258. />
  259. <ContrastRatio :contrast="previewContrast.postLink" />
  260. <ColorInput
  261. v-model="postGreentextColorLocal"
  262. name="postGreentextColor"
  263. :fallback="previewTheme.colors.cGreen"
  264. :label="$t('settings.greentext')"
  265. />
  266. <ContrastRatio :contrast="previewContrast.postGreentext" />
  267. <h4>{{ $t('settings.style.advanced_colors.alert') }}</h4>
  268. <ColorInput
  269. v-model="alertErrorColorLocal"
  270. name="alertError"
  271. :label="$t('settings.style.advanced_colors.alert_error')"
  272. :fallback="previewTheme.colors.alertError"
  273. />
  274. <ColorInput
  275. v-model="alertErrorTextColorLocal"
  276. name="alertErrorText"
  277. :label="$t('settings.text')"
  278. :fallback="previewTheme.colors.alertErrorText"
  279. />
  280. <ContrastRatio
  281. :contrast="previewContrast.alertErrorText"
  282. large
  283. />
  284. <ColorInput
  285. v-model="alertWarningColorLocal"
  286. name="alertWarning"
  287. :label="$t('settings.style.advanced_colors.alert_warning')"
  288. :fallback="previewTheme.colors.alertWarning"
  289. />
  290. <ColorInput
  291. v-model="alertWarningTextColorLocal"
  292. name="alertWarningText"
  293. :label="$t('settings.text')"
  294. :fallback="previewTheme.colors.alertWarningText"
  295. />
  296. <ContrastRatio
  297. :contrast="previewContrast.alertWarningText"
  298. large
  299. />
  300. <ColorInput
  301. v-model="alertNeutralColorLocal"
  302. name="alertNeutral"
  303. :label="$t('settings.style.advanced_colors.alert_neutral')"
  304. :fallback="previewTheme.colors.alertNeutral"
  305. />
  306. <ColorInput
  307. v-model="alertNeutralTextColorLocal"
  308. name="alertNeutralText"
  309. :label="$t('settings.text')"
  310. :fallback="previewTheme.colors.alertNeutralText"
  311. />
  312. <ContrastRatio
  313. :contrast="previewContrast.alertNeutralText"
  314. large
  315. />
  316. <OpacityInput
  317. v-model="alertOpacityLocal"
  318. name="alertOpacity"
  319. :fallback="previewTheme.opacity.alert"
  320. />
  321. </div>
  322. <div class="color-item">
  323. <h4>{{ $t('settings.style.advanced_colors.badge') }}</h4>
  324. <ColorInput
  325. v-model="badgeNotificationColorLocal"
  326. name="badgeNotification"
  327. :label="$t('settings.style.advanced_colors.badge_notification')"
  328. :fallback="previewTheme.colors.badgeNotification"
  329. />
  330. <ColorInput
  331. v-model="badgeNotificationTextColorLocal"
  332. name="badgeNotificationText"
  333. :label="$t('settings.text')"
  334. :fallback="previewTheme.colors.badgeNotificationText"
  335. />
  336. <ContrastRatio
  337. :contrast="previewContrast.badgeNotificationText"
  338. large
  339. />
  340. </div>
  341. <div class="color-item">
  342. <h4>{{ $t('settings.style.advanced_colors.panel_header') }}</h4>
  343. <ColorInput
  344. v-model="panelColorLocal"
  345. name="panelColor"
  346. :fallback="previewTheme.colors.panel"
  347. :label="$t('settings.background')"
  348. />
  349. <OpacityInput
  350. v-model="panelOpacityLocal"
  351. name="panelOpacity"
  352. :fallback="previewTheme.opacity.panel"
  353. :disabled="panelColorLocal === 'transparent'"
  354. />
  355. <ColorInput
  356. v-model="panelTextColorLocal"
  357. name="panelTextColor"
  358. :fallback="previewTheme.colors.panelText"
  359. :label="$t('settings.text')"
  360. />
  361. <ContrastRatio
  362. :contrast="previewContrast.panelText"
  363. large
  364. />
  365. <ColorInput
  366. v-model="panelLinkColorLocal"
  367. name="panelLinkColor"
  368. :fallback="previewTheme.colors.panelLink"
  369. :label="$t('settings.links')"
  370. />
  371. <ContrastRatio
  372. :contrast="previewContrast.panelLink"
  373. large
  374. />
  375. </div>
  376. <div class="color-item">
  377. <h4>{{ $t('settings.style.advanced_colors.top_bar') }}</h4>
  378. <ColorInput
  379. v-model="topBarColorLocal"
  380. name="topBarColor"
  381. :fallback="previewTheme.colors.topBar"
  382. :label="$t('settings.background')"
  383. />
  384. <ColorInput
  385. v-model="topBarTextColorLocal"
  386. name="topBarTextColor"
  387. :fallback="previewTheme.colors.topBarText"
  388. :label="$t('settings.text')"
  389. />
  390. <ContrastRatio :contrast="previewContrast.topBarText" />
  391. <ColorInput
  392. v-model="topBarLinkColorLocal"
  393. name="topBarLinkColor"
  394. :fallback="previewTheme.colors.topBarLink"
  395. :label="$t('settings.links')"
  396. />
  397. <ContrastRatio :contrast="previewContrast.topBarLink" />
  398. </div>
  399. <div class="color-item">
  400. <h4>{{ $t('settings.style.advanced_colors.inputs') }}</h4>
  401. <ColorInput
  402. v-model="inputColorLocal"
  403. name="inputColor"
  404. :fallback="previewTheme.colors.input"
  405. :label="$t('settings.background')"
  406. />
  407. <OpacityInput
  408. v-model="inputOpacityLocal"
  409. name="inputOpacity"
  410. :fallback="previewTheme.opacity.input"
  411. :disabled="inputColorLocal === 'transparent'"
  412. />
  413. <ColorInput
  414. v-model="inputTextColorLocal"
  415. name="inputTextColor"
  416. :fallback="previewTheme.colors.inputText"
  417. :label="$t('settings.text')"
  418. />
  419. <ContrastRatio :contrast="previewContrast.inputText" />
  420. </div>
  421. <div class="color-item">
  422. <h4>{{ $t('settings.style.advanced_colors.buttons') }}</h4>
  423. <ColorInput
  424. v-model="btnColorLocal"
  425. name="btnColor"
  426. :fallback="previewTheme.colors.btn"
  427. :label="$t('settings.background')"
  428. />
  429. <OpacityInput
  430. v-model="btnOpacityLocal"
  431. name="btnOpacity"
  432. :fallback="previewTheme.opacity.btn"
  433. :disabled="btnColorLocal === 'transparent'"
  434. />
  435. <ColorInput
  436. v-model="btnTextColorLocal"
  437. name="btnTextColor"
  438. :fallback="previewTheme.colors.btnText"
  439. :label="$t('settings.text')"
  440. />
  441. <ContrastRatio :contrast="previewContrast.btnText" />
  442. <ColorInput
  443. v-model="btnPanelTextColorLocal"
  444. name="btnPanelTextColor"
  445. :fallback="previewTheme.colors.btnPanelText"
  446. :label="$t('settings.style.advanced_colors.panel_header')"
  447. />
  448. <ContrastRatio :contrast="previewContrast.btnPanelText" />
  449. <ColorInput
  450. v-model="btnTopBarTextColorLocal"
  451. name="btnTopBarTextColor"
  452. :fallback="previewTheme.colors.btnTopBarText"
  453. :label="$t('settings.style.advanced_colors.top_bar')"
  454. />
  455. <ContrastRatio :contrast="previewContrast.btnTopBarText" />
  456. <h5>{{ $t('settings.style.advanced_colors.pressed') }}</h5>
  457. <ColorInput
  458. v-model="btnPressedColorLocal"
  459. name="btnPressedColor"
  460. :fallback="previewTheme.colors.btnPressed"
  461. :label="$t('settings.background')"
  462. />
  463. <ColorInput
  464. v-model="btnPressedTextColorLocal"
  465. name="btnPressedTextColor"
  466. :fallback="previewTheme.colors.btnPressedText"
  467. :label="$t('settings.text')"
  468. />
  469. <ContrastRatio :contrast="previewContrast.btnPressedText" />
  470. <ColorInput
  471. v-model="btnPressedPanelTextColorLocal"
  472. name="btnPressedPanelTextColor"
  473. :fallback="previewTheme.colors.btnPressedPanelText"
  474. :label="$t('settings.style.advanced_colors.panel_header')"
  475. />
  476. <ContrastRatio :contrast="previewContrast.btnPressedPanelText" />
  477. <ColorInput
  478. v-model="btnPressedTopBarTextColorLocal"
  479. name="btnPressedTopBarTextColor"
  480. :fallback="previewTheme.colors.btnPressedTopBarText"
  481. :label="$t('settings.style.advanced_colors.top_bar')"
  482. />
  483. <ContrastRatio :contrast="previewContrast.btnPressedTopBarText" />
  484. <h5>{{ $t('settings.style.advanced_colors.disabled') }}</h5>
  485. <ColorInput
  486. v-model="btnDisabledColorLocal"
  487. name="btnDisabledColor"
  488. :fallback="previewTheme.colors.btnDisabled"
  489. :label="$t('settings.background')"
  490. />
  491. <ColorInput
  492. v-model="btnDisabledTextColorLocal"
  493. name="btnDisabledTextColor"
  494. :fallback="previewTheme.colors.btnDisabledText"
  495. :label="$t('settings.text')"
  496. />
  497. <ColorInput
  498. v-model="btnDisabledPanelTextColorLocal"
  499. name="btnDisabledPanelTextColor"
  500. :fallback="previewTheme.colors.btnDisabledPanelText"
  501. :label="$t('settings.style.advanced_colors.panel_header')"
  502. />
  503. <ColorInput
  504. v-model="btnDisabledTopBarTextColorLocal"
  505. name="btnDisabledTopBarTextColor"
  506. :fallback="previewTheme.colors.btnDisabledTopBarText"
  507. :label="$t('settings.style.advanced_colors.top_bar')"
  508. />
  509. <h5>{{ $t('settings.style.advanced_colors.toggled') }}</h5>
  510. <ColorInput
  511. v-model="btnToggledColorLocal"
  512. name="btnToggledColor"
  513. :fallback="previewTheme.colors.btnToggled"
  514. :label="$t('settings.background')"
  515. />
  516. <ColorInput
  517. v-model="btnToggledTextColorLocal"
  518. name="btnToggledTextColor"
  519. :fallback="previewTheme.colors.btnToggledText"
  520. :label="$t('settings.text')"
  521. />
  522. <ContrastRatio :contrast="previewContrast.btnToggledText" />
  523. <ColorInput
  524. v-model="btnToggledPanelTextColorLocal"
  525. name="btnToggledPanelTextColor"
  526. :fallback="previewTheme.colors.btnToggledPanelText"
  527. :label="$t('settings.style.advanced_colors.panel_header')"
  528. />
  529. <ContrastRatio :contrast="previewContrast.btnToggledPanelText" />
  530. <ColorInput
  531. v-model="btnToggledTopBarTextColorLocal"
  532. name="btnToggledTopBarTextColor"
  533. :fallback="previewTheme.colors.btnToggledTopBarText"
  534. :label="$t('settings.style.advanced_colors.top_bar')"
  535. />
  536. <ContrastRatio :contrast="previewContrast.btnToggledTopBarText" />
  537. </div>
  538. <div class="color-item">
  539. <h4>{{ $t('settings.style.advanced_colors.tabs') }}</h4>
  540. <ColorInput
  541. v-model="tabColorLocal"
  542. name="tabColor"
  543. :fallback="previewTheme.colors.tab"
  544. :label="$t('settings.background')"
  545. />
  546. <ColorInput
  547. v-model="tabTextColorLocal"
  548. name="tabTextColor"
  549. :fallback="previewTheme.colors.tabText"
  550. :label="$t('settings.text')"
  551. />
  552. <ContrastRatio :contrast="previewContrast.tabText" />
  553. <ColorInput
  554. v-model="tabActiveTextColorLocal"
  555. name="tabActiveTextColor"
  556. :fallback="previewTheme.colors.tabActiveText"
  557. :label="$t('settings.text')"
  558. />
  559. <ContrastRatio :contrast="previewContrast.tabActiveText" />
  560. </div>
  561. <div class="color-item">
  562. <h4>{{ $t('settings.style.advanced_colors.borders') }}</h4>
  563. <ColorInput
  564. v-model="borderColorLocal"
  565. name="borderColor"
  566. :fallback="previewTheme.colors.border"
  567. :label="$t('settings.style.common.color')"
  568. />
  569. <OpacityInput
  570. v-model="borderOpacityLocal"
  571. name="borderOpacity"
  572. :fallback="previewTheme.opacity.border"
  573. :disabled="borderColorLocal === 'transparent'"
  574. />
  575. </div>
  576. <div class="color-item">
  577. <h4>{{ $t('settings.style.advanced_colors.faint_text') }}</h4>
  578. <ColorInput
  579. v-model="faintColorLocal"
  580. name="faintColor"
  581. :fallback="previewTheme.colors.faint"
  582. :label="$t('settings.text')"
  583. />
  584. <ColorInput
  585. v-model="faintLinkColorLocal"
  586. name="faintLinkColor"
  587. :fallback="previewTheme.colors.faintLink"
  588. :label="$t('settings.links')"
  589. />
  590. <ColorInput
  591. v-model="panelFaintColorLocal"
  592. name="panelFaintColor"
  593. :fallback="previewTheme.colors.panelFaint"
  594. :label="$t('settings.style.advanced_colors.panel_header')"
  595. />
  596. <OpacityInput
  597. v-model="faintOpacityLocal"
  598. name="faintOpacity"
  599. :fallback="previewTheme.opacity.faint"
  600. />
  601. </div>
  602. <div class="color-item">
  603. <h4>{{ $t('settings.style.advanced_colors.underlay') }}</h4>
  604. <ColorInput
  605. v-model="underlayColorLocal"
  606. name="underlay"
  607. :label="$t('settings.style.advanced_colors.underlay')"
  608. :fallback="previewTheme.colors.underlay"
  609. />
  610. <OpacityInput
  611. v-model="underlayOpacityLocal"
  612. name="underlayOpacity"
  613. :fallback="previewTheme.opacity.underlay"
  614. :disabled="underlayOpacityLocal === 'transparent'"
  615. />
  616. </div>
  617. <div class="color-item">
  618. <h4>{{ $t('settings.style.advanced_colors.wallpaper') }}</h4>
  619. <ColorInput
  620. v-model="wallpaperColorLocal"
  621. name="wallpaper"
  622. :label="$t('settings.style.advanced_colors.wallpaper')"
  623. :fallback="previewTheme.colors.wallpaper"
  624. />
  625. </div>
  626. <div class="color-item">
  627. <h4>{{ $t('settings.style.advanced_colors.poll') }}</h4>
  628. <ColorInput
  629. v-model="pollColorLocal"
  630. name="poll"
  631. :label="$t('settings.background')"
  632. :fallback="previewTheme.colors.poll"
  633. />
  634. <ColorInput
  635. v-model="pollTextColorLocal"
  636. name="pollText"
  637. :label="$t('settings.text')"
  638. :fallback="previewTheme.colors.pollText"
  639. />
  640. </div>
  641. <div class="color-item">
  642. <h4>{{ $t('settings.style.advanced_colors.icons') }}</h4>
  643. <ColorInput
  644. v-model="iconColorLocal"
  645. name="icon"
  646. :label="$t('settings.style.advanced_colors.icons')"
  647. :fallback="previewTheme.colors.icon"
  648. />
  649. </div>
  650. <div class="color-item">
  651. <h4>{{ $t('settings.style.advanced_colors.highlight') }}</h4>
  652. <ColorInput
  653. v-model="highlightColorLocal"
  654. name="highlight"
  655. :label="$t('settings.background')"
  656. :fallback="previewTheme.colors.highlight"
  657. />
  658. <ColorInput
  659. v-model="highlightTextColorLocal"
  660. name="highlightText"
  661. :label="$t('settings.text')"
  662. :fallback="previewTheme.colors.highlightText"
  663. />
  664. <ContrastRatio :contrast="previewContrast.highlightText" />
  665. <ColorInput
  666. v-model="highlightLinkColorLocal"
  667. name="highlightLink"
  668. :label="$t('settings.links')"
  669. :fallback="previewTheme.colors.highlightLink"
  670. />
  671. <ContrastRatio :contrast="previewContrast.highlightLink" />
  672. </div>
  673. <div class="color-item">
  674. <h4>{{ $t('settings.style.advanced_colors.popover') }}</h4>
  675. <ColorInput
  676. v-model="popoverColorLocal"
  677. name="popover"
  678. :label="$t('settings.background')"
  679. :fallback="previewTheme.colors.popover"
  680. />
  681. <OpacityInput
  682. v-model="popoverOpacityLocal"
  683. name="popoverOpacity"
  684. :fallback="previewTheme.opacity.popover"
  685. :disabled="popoverOpacityLocal === 'transparent'"
  686. />
  687. <ColorInput
  688. v-model="popoverTextColorLocal"
  689. name="popoverText"
  690. :label="$t('settings.text')"
  691. :fallback="previewTheme.colors.popoverText"
  692. />
  693. <ContrastRatio :contrast="previewContrast.popoverText" />
  694. <ColorInput
  695. v-model="popoverLinkColorLocal"
  696. name="popoverLink"
  697. :label="$t('settings.links')"
  698. :fallback="previewTheme.colors.popoverLink"
  699. />
  700. <ContrastRatio :contrast="previewContrast.popoverLink" />
  701. </div>
  702. <div class="color-item">
  703. <h4>{{ $t('settings.style.advanced_colors.selectedPost') }}</h4>
  704. <ColorInput
  705. v-model="selectedPostColorLocal"
  706. name="selectedPost"
  707. :label="$t('settings.background')"
  708. :fallback="previewTheme.colors.selectedPost"
  709. />
  710. <ColorInput
  711. v-model="selectedPostTextColorLocal"
  712. name="selectedPostText"
  713. :label="$t('settings.text')"
  714. :fallback="previewTheme.colors.selectedPostText"
  715. />
  716. <ContrastRatio :contrast="previewContrast.selectedPostText" />
  717. <ColorInput
  718. v-model="selectedPostLinkColorLocal"
  719. name="selectedPostLink"
  720. :label="$t('settings.links')"
  721. :fallback="previewTheme.colors.selectedPostLink"
  722. />
  723. <ContrastRatio :contrast="previewContrast.selectedPostLink" />
  724. </div>
  725. <div class="color-item">
  726. <h4>{{ $t('settings.style.advanced_colors.selectedMenu') }}</h4>
  727. <ColorInput
  728. v-model="selectedMenuColorLocal"
  729. name="selectedMenu"
  730. :label="$t('settings.background')"
  731. :fallback="previewTheme.colors.selectedMenu"
  732. />
  733. <ColorInput
  734. v-model="selectedMenuTextColorLocal"
  735. name="selectedMenuText"
  736. :label="$t('settings.text')"
  737. :fallback="previewTheme.colors.selectedMenuText"
  738. />
  739. <ContrastRatio :contrast="previewContrast.selectedMenuText" />
  740. <ColorInput
  741. v-model="selectedMenuLinkColorLocal"
  742. name="selectedMenuLink"
  743. :label="$t('settings.links')"
  744. :fallback="previewTheme.colors.selectedMenuLink"
  745. />
  746. <ContrastRatio :contrast="previewContrast.selectedMenuLink" />
  747. </div>
  748. <div class="color-item">
  749. <h4>{{ $t('chats.chats') }}</h4>
  750. <ColorInput
  751. v-model="chatBgColorLocal"
  752. name="chatBgColor"
  753. :fallback="previewTheme.colors.bg"
  754. :label="$t('settings.background')"
  755. />
  756. <h5>{{ $t('settings.style.advanced_colors.chat.incoming') }}</h5>
  757. <ColorInput
  758. v-model="chatMessageIncomingBgColorLocal"
  759. name="chatMessageIncomingBgColor"
  760. :fallback="previewTheme.colors.bg"
  761. :label="$t('settings.background')"
  762. />
  763. <ColorInput
  764. v-model="chatMessageIncomingTextColorLocal"
  765. name="chatMessageIncomingTextColor"
  766. :fallback="previewTheme.colors.text"
  767. :label="$t('settings.text')"
  768. />
  769. <ColorInput
  770. v-model="chatMessageIncomingLinkColorLocal"
  771. name="chatMessageIncomingLinkColor"
  772. :fallback="previewTheme.colors.link"
  773. :label="$t('settings.links')"
  774. />
  775. <ColorInput
  776. v-model="chatMessageIncomingBorderColorLocal"
  777. name="chatMessageIncomingBorderLinkColor"
  778. :fallback="previewTheme.colors.fg"
  779. :label="$t('settings.style.advanced_colors.chat.border')"
  780. />
  781. <h5>{{ $t('settings.style.advanced_colors.chat.outgoing') }}</h5>
  782. <ColorInput
  783. v-model="chatMessageOutgoingBgColorLocal"
  784. name="chatMessageOutgoingBgColor"
  785. :fallback="previewTheme.colors.bg"
  786. :label="$t('settings.background')"
  787. />
  788. <ColorInput
  789. v-model="chatMessageOutgoingTextColorLocal"
  790. name="chatMessageOutgoingTextColor"
  791. :fallback="previewTheme.colors.text"
  792. :label="$t('settings.text')"
  793. />
  794. <ColorInput
  795. v-model="chatMessageOutgoingLinkColorLocal"
  796. name="chatMessageOutgoingLinkColor"
  797. :fallback="previewTheme.colors.link"
  798. :label="$t('settings.links')"
  799. />
  800. <ColorInput
  801. v-model="chatMessageOutgoingBorderColorLocal"
  802. name="chatMessageOutgoingBorderLinkColor"
  803. :fallback="previewTheme.colors.bg"
  804. :label="$t('settings.style.advanced_colors.chat.border')"
  805. />
  806. </div>
  807. </div>
  808. <div
  809. :label="$t('settings.style.radii._tab_label')"
  810. class="radius-container"
  811. >
  812. <div class="tab-header">
  813. <p>{{ $t('settings.radii_help') }}</p>
  814. <button
  815. class="btn button-default"
  816. @click="clearRoundness"
  817. >
  818. {{ $t('settings.style.switcher.clear_all') }}
  819. </button>
  820. </div>
  821. <RangeInput
  822. v-model="btnRadiusLocal"
  823. name="btnRadius"
  824. :label="$t('settings.btnRadius')"
  825. :fallback="previewTheme.radii.btn"
  826. max="16"
  827. hard-min="0"
  828. />
  829. <RangeInput
  830. v-model="inputRadiusLocal"
  831. name="inputRadius"
  832. :label="$t('settings.inputRadius')"
  833. :fallback="previewTheme.radii.input"
  834. max="9"
  835. hard-min="0"
  836. />
  837. <RangeInput
  838. v-model="checkboxRadiusLocal"
  839. name="checkboxRadius"
  840. :label="$t('settings.checkboxRadius')"
  841. :fallback="previewTheme.radii.checkbox"
  842. max="16"
  843. hard-min="0"
  844. />
  845. <RangeInput
  846. v-model="panelRadiusLocal"
  847. name="panelRadius"
  848. :label="$t('settings.panelRadius')"
  849. :fallback="previewTheme.radii.panel"
  850. max="50"
  851. hard-min="0"
  852. />
  853. <RangeInput
  854. v-model="avatarRadiusLocal"
  855. name="avatarRadius"
  856. :label="$t('settings.avatarRadius')"
  857. :fallback="previewTheme.radii.avatar"
  858. max="28"
  859. hard-min="0"
  860. />
  861. <RangeInput
  862. v-model="avatarAltRadiusLocal"
  863. name="avatarAltRadius"
  864. :label="$t('settings.avatarAltRadius')"
  865. :fallback="previewTheme.radii.avatarAlt"
  866. max="28"
  867. hard-min="0"
  868. />
  869. <RangeInput
  870. v-model="attachmentRadiusLocal"
  871. name="attachmentRadius"
  872. :label="$t('settings.attachmentRadius')"
  873. :fallback="previewTheme.radii.attachment"
  874. max="50"
  875. hard-min="0"
  876. />
  877. <RangeInput
  878. v-model="tooltipRadiusLocal"
  879. name="tooltipRadius"
  880. :label="$t('settings.tooltipRadius')"
  881. :fallback="previewTheme.radii.tooltip"
  882. max="50"
  883. hard-min="0"
  884. />
  885. <RangeInput
  886. v-model="chatMessageRadiusLocal"
  887. name="chatMessageRadius"
  888. :label="$t('settings.chatMessageRadius')"
  889. :fallback="previewTheme.radii.chatMessage || 2"
  890. max="50"
  891. hard-min="0"
  892. />
  893. </div>
  894. <div
  895. :label="$t('settings.style.shadows._tab_label')"
  896. class="shadow-container"
  897. >
  898. <div class="tab-header shadow-selector">
  899. <div class="select-container">
  900. {{ $t('settings.style.shadows.component') }}
  901. {{ ' ' }}
  902. <Select
  903. id="shadow-switcher"
  904. v-model="shadowSelected"
  905. class="shadow-switcher"
  906. >
  907. <option
  908. v-for="shadow in shadowsAvailable"
  909. :key="shadow"
  910. :value="shadow"
  911. >
  912. {{ $t('settings.style.shadows.components.' + shadow) }}
  913. </option>
  914. </Select>
  915. </div>
  916. <div class="override">
  917. <label
  918. for="override"
  919. class="label"
  920. >
  921. {{ $t('settings.style.shadows.override') }}
  922. </label>
  923. {{ ' ' }}
  924. <input
  925. id="override"
  926. v-model="currentShadowOverriden"
  927. name="override"
  928. class="input-override"
  929. type="checkbox"
  930. >
  931. <label
  932. class="checkbox-label"
  933. for="override"
  934. />
  935. </div>
  936. <button
  937. class="btn button-default"
  938. @click="clearShadows"
  939. >
  940. {{ $t('settings.style.switcher.clear_all') }}
  941. </button>
  942. </div>
  943. <ShadowControl
  944. v-model="currentShadow"
  945. :ready="!!currentShadowFallback"
  946. :fallback="currentShadowFallback"
  947. />
  948. <div v-if="shadowSelected === 'avatar' || shadowSelected === 'avatarStatus'">
  949. <i18n-t
  950. scope="global"
  951. keypath="settings.style.shadows.filter_hint.always_drop_shadow"
  952. tag="p"
  953. >
  954. <code>filter: drop-shadow()</code>
  955. </i18n-t>
  956. <p>{{ $t('settings.style.shadows.filter_hint.avatar_inset') }}</p>
  957. <i18n-t
  958. scope="global"
  959. keypath="settings.style.shadows.filter_hint.drop_shadow_syntax"
  960. tag="p"
  961. >
  962. <code>drop-shadow</code>
  963. <code>spread-radius</code>
  964. <code>inset</code>
  965. </i18n-t>
  966. <i18n-t
  967. scope="global"
  968. keypath="settings.style.shadows.filter_hint.inset_classic"
  969. tag="p"
  970. >
  971. <code>box-shadow</code>
  972. </i18n-t>
  973. <p>{{ $t('settings.style.shadows.filter_hint.spread_zero') }}</p>
  974. </div>
  975. </div>
  976. <div
  977. :label="$t('settings.style.fonts._tab_label')"
  978. class="fonts-container"
  979. >
  980. <div class="tab-header">
  981. <p>{{ $t('settings.style.fonts.help') }}</p>
  982. <button
  983. class="btn button-default"
  984. @click="clearFonts"
  985. >
  986. {{ $t('settings.style.switcher.clear_all') }}
  987. </button>
  988. </div>
  989. <FontControl
  990. v-model="fontsLocal.interface"
  991. name="ui"
  992. :label="$t('settings.style.fonts.components.interface')"
  993. :fallback="previewTheme.fonts.interface"
  994. no-inherit="1"
  995. />
  996. <FontControl
  997. v-model="fontsLocal.input"
  998. name="input"
  999. :label="$t('settings.style.fonts.components.input')"
  1000. :fallback="previewTheme.fonts.input"
  1001. />
  1002. <FontControl
  1003. v-model="fontsLocal.post"
  1004. name="post"
  1005. :label="$t('settings.style.fonts.components.post')"
  1006. :fallback="previewTheme.fonts.post"
  1007. />
  1008. <FontControl
  1009. v-model="fontsLocal.postCode"
  1010. name="postCode"
  1011. :label="$t('settings.style.fonts.components.postCode')"
  1012. :fallback="previewTheme.fonts.postCode"
  1013. />
  1014. </div>
  1015. </tab-switcher>
  1016. </keep-alive>
  1017. <teleport
  1018. v-if="isActive"
  1019. to="#unscrolled-content"
  1020. >
  1021. <div class="apply-container">
  1022. <button
  1023. class="btn button-default submit"
  1024. :disabled="!themeValid"
  1025. @click="setCustomTheme"
  1026. >
  1027. {{ $t('general.apply') }}
  1028. </button>
  1029. <button
  1030. class="btn button-default"
  1031. @click="clearAll"
  1032. >
  1033. {{ $t('settings.style.switcher.reset') }}
  1034. </button>
  1035. </div>
  1036. </teleport>
  1037. </div>
  1038. </template>
  1039. <script src="./theme_tab.js"></script>
  1040. <style src="./theme_tab.scss" lang="scss"></style>