framework.mjs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. // Composables
  2. import { createDate, DateAdapterSymbol, DateOptionsSymbol } from "./composables/date/date.mjs";
  3. import { createDefaults, DefaultsSymbol } from "./composables/defaults.mjs";
  4. import { createDisplay, DisplaySymbol } from "./composables/display.mjs";
  5. import { createGoTo, GoToSymbol } from "./composables/goto.mjs";
  6. import { createIcons, IconSymbol } from "./composables/icons.mjs";
  7. import { createLocale, LocaleSymbol } from "./composables/locale.mjs";
  8. import { createTheme, ThemeSymbol } from "./composables/theme.mjs"; // Utilities
  9. import { nextTick, reactive } from 'vue';
  10. import { defineComponent, getUid, IN_BROWSER, mergeDeep } from "./util/index.mjs"; // Types
  11. export * from "./composables/index.mjs";
  12. export function createVuetify() {
  13. let vuetify = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  14. const {
  15. blueprint,
  16. ...rest
  17. } = vuetify;
  18. const options = mergeDeep(blueprint, rest);
  19. const {
  20. aliases = {},
  21. components = {},
  22. directives = {}
  23. } = options;
  24. const defaults = createDefaults(options.defaults);
  25. const display = createDisplay(options.display, options.ssr);
  26. const theme = createTheme(options.theme);
  27. const icons = createIcons(options.icons);
  28. const locale = createLocale(options.locale);
  29. const date = createDate(options.date, locale);
  30. const goTo = createGoTo(options.goTo, locale);
  31. const install = app => {
  32. for (const key in directives) {
  33. app.directive(key, directives[key]);
  34. }
  35. for (const key in components) {
  36. app.component(key, components[key]);
  37. }
  38. for (const key in aliases) {
  39. app.component(key, defineComponent({
  40. ...aliases[key],
  41. name: key,
  42. aliasName: aliases[key].name
  43. }));
  44. }
  45. theme.install(app);
  46. app.provide(DefaultsSymbol, defaults);
  47. app.provide(DisplaySymbol, display);
  48. app.provide(ThemeSymbol, theme);
  49. app.provide(IconSymbol, icons);
  50. app.provide(LocaleSymbol, locale);
  51. app.provide(DateOptionsSymbol, date.options);
  52. app.provide(DateAdapterSymbol, date.instance);
  53. app.provide(GoToSymbol, goTo);
  54. if (IN_BROWSER && options.ssr) {
  55. if (app.$nuxt) {
  56. app.$nuxt.hook('app:suspense:resolve', () => {
  57. display.update();
  58. });
  59. } else {
  60. const {
  61. mount
  62. } = app;
  63. app.mount = function () {
  64. const vm = mount(...arguments);
  65. nextTick(() => display.update());
  66. app.mount = mount;
  67. return vm;
  68. };
  69. }
  70. }
  71. getUid.reset();
  72. if (typeof __VUE_OPTIONS_API__ !== 'boolean' || __VUE_OPTIONS_API__) {
  73. app.mixin({
  74. computed: {
  75. $vuetify() {
  76. return reactive({
  77. defaults: inject.call(this, DefaultsSymbol),
  78. display: inject.call(this, DisplaySymbol),
  79. theme: inject.call(this, ThemeSymbol),
  80. icons: inject.call(this, IconSymbol),
  81. locale: inject.call(this, LocaleSymbol),
  82. date: inject.call(this, DateAdapterSymbol)
  83. });
  84. }
  85. }
  86. });
  87. }
  88. };
  89. return {
  90. install,
  91. defaults,
  92. display,
  93. theme,
  94. icons,
  95. locale,
  96. date,
  97. goTo
  98. };
  99. }
  100. export const version = "3.7.6";
  101. createVuetify.version = version;
  102. // Vue's inject() can only be used in setup
  103. function inject(key) {
  104. const vm = this.$;
  105. const provides = vm.parent?.provides ?? vm.vnode.appContext?.provides;
  106. if (provides && key in provides) {
  107. return provides[key];
  108. }
  109. }
  110. //# sourceMappingURL=framework.mjs.map