vuetify.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. import { createVuetify } from 'vuetify'
  2. import 'vuetify/styles'
  3. import { aliases, fa } from 'vuetify/iconsets/fa'
  4. import '@fortawesome/fontawesome-free/css/all.css'
  5. import { en } from 'vuetify/locale'
  6. import { defineNuxtPlugin } from '#app'
  7. interface Theme {
  8. dark: boolean,
  9. colors: {
  10. /**
  11. * @see Cf. doc/colors.md pour le rôle de chaque couleur
  12. */
  13. // Global
  14. 'background': string,
  15. 'on-background': string,
  16. 'surface': string,
  17. 'on-surface': string,
  18. 'primary': string,
  19. 'on-primary': string,
  20. 'primary-alt': string,
  21. 'on-primary-alt': string,
  22. 'secondary': string,
  23. 'on-secondary': string,
  24. 'neutral-strong': string,
  25. 'on-neutral-strong': string,
  26. 'neutral': string,
  27. 'on-neutral': string,
  28. 'on-neutral--clickable': string,
  29. 'neutral-soft': string,
  30. 'on-neutral-soft': string,
  31. 'danger': string,
  32. 'on-danger': string,
  33. 'success': string,
  34. 'on-success': string,
  35. 'warning': string,
  36. 'on-warning': string,
  37. 'info': string,
  38. 'on-info': string,
  39. }
  40. }
  41. export const lightTheme: Theme = {
  42. dark: false,
  43. colors: {
  44. 'background': '#ffffff',
  45. 'on-background': '#000000',
  46. 'code-background': '#f6f8fa',
  47. 'on-code-background': '#000000',
  48. 'surface': '#ffffff',
  49. 'on-surface': '#000000',
  50. 'primary': '#515794',
  51. 'on-primary': '#ffffff',
  52. 'primary-alt': '#a9e0d6',
  53. 'on-primary-alt': '#777777',
  54. 'secondary': '#ced0e4',
  55. 'on-secondary': '#f5f5f5',
  56. 'neutral-strong': '#777777',
  57. 'on-neutral-strong': '#ecf0f5',
  58. 'neutral': '#ffffff',
  59. 'on-neutral': '#404040',
  60. 'on-neutral--clickable': '#515794',
  61. 'neutral-soft': '#ecf0f5',
  62. 'on-neutral-soft': '#464646',
  63. // Content
  64. 'danger': '#f56954',
  65. 'on-danger': '#ffffff',
  66. 'success': '#00a65a',
  67. 'on-success': '#ffffff',
  68. 'warning': '#f39c12',
  69. 'on-warning': '#ffffff',
  70. 'info': '#3c8dbc',
  71. 'on-info': '#ffffff',
  72. }
  73. }
  74. export const darkTheme: Theme = {
  75. dark: true,
  76. colors: {
  77. 'background': '#1a1a1a',
  78. 'on-background': '#ffffff',
  79. 'code-background': '#161b22',
  80. 'on-code-background': '#ffffff',
  81. 'surface': '#262626',
  82. 'on-surface': '#ffffff',
  83. 'primary': '#adb2d2',
  84. 'on-primary': '#404040',
  85. 'primary-alt': '#a9e0d6',
  86. 'on-primary-alt': '#777777',
  87. 'secondary': '#324150',
  88. 'on-secondary': '#f5f5f5',
  89. 'neutral-strong': '#595959',
  90. 'on-neutral-strong': '#ecf0f5',
  91. 'neutral': '#131a20',
  92. 'on-neutral': '#cccccc',
  93. 'on-neutral--clickable': '#9ca1c9',
  94. 'neutral-soft': '#090c11',
  95. 'on-neutral-soft': '#cccccc',
  96. // Content
  97. 'danger': '#f56954',
  98. 'on-danger': '#ffffff',
  99. 'success': '#00a65a',
  100. 'on-success': '#ffffff',
  101. 'warning': '#f39c12',
  102. 'on-warning': '#ffffff',
  103. 'info': '#3c8dbc',
  104. 'on-info': '#ffffff',
  105. }
  106. }
  107. export default defineNuxtPlugin((nuxtApp) => {
  108. const vuetify = createVuetify({
  109. ssr: true,
  110. locale: {
  111. locale: 'en',
  112. messages: { en },
  113. },
  114. theme: {
  115. defaultTheme: 'dark',
  116. themes: {
  117. light: lightTheme,
  118. dark: darkTheme
  119. },
  120. },
  121. icons: {
  122. defaultSet: 'fa',
  123. aliases,
  124. sets: {
  125. fa,
  126. },
  127. },
  128. })
  129. nuxtApp.vueApp.use(vuetify)
  130. })