@aerogel/core 0.0.0-next.980a397d575dcb5ff8c5a0bff769d09f938ea03c → 0.0.0-next.9f9564ab9f8da05f60d7868db361edbc5601ee39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/aerogel-core.cjs.js +1 -1
  2. package/dist/aerogel-core.cjs.js.map +1 -1
  3. package/dist/aerogel-core.d.ts +689 -140
  4. package/dist/aerogel-core.esm.js +1 -1
  5. package/dist/aerogel-core.esm.js.map +1 -1
  6. package/package.json +2 -2
  7. package/src/bootstrap/bootstrap.test.ts +3 -3
  8. package/src/bootstrap/index.ts +16 -5
  9. package/src/bootstrap/options.ts +3 -0
  10. package/src/components/AGAppLayout.vue +3 -2
  11. package/src/components/AGAppOverlays.vue +5 -1
  12. package/src/components/AGAppSnackbars.vue +1 -1
  13. package/src/components/forms/AGCheckbox.vue +7 -1
  14. package/src/components/forms/AGForm.vue +9 -10
  15. package/src/components/forms/AGInput.vue +10 -6
  16. package/src/components/forms/AGSelect.story.vue +21 -3
  17. package/src/components/forms/AGSelect.vue +10 -3
  18. package/src/components/headless/forms/AGHeadlessButton.vue +17 -12
  19. package/src/components/headless/forms/AGHeadlessInput.ts +12 -13
  20. package/src/components/headless/forms/AGHeadlessInput.vue +3 -3
  21. package/src/components/headless/forms/AGHeadlessInputDescription.vue +28 -0
  22. package/src/components/headless/forms/AGHeadlessInputInput.vue +40 -4
  23. package/src/components/headless/forms/AGHeadlessInputTextArea.vue +40 -0
  24. package/src/components/headless/forms/AGHeadlessSelect.ts +20 -22
  25. package/src/components/headless/forms/AGHeadlessSelect.vue +23 -22
  26. package/src/components/headless/forms/AGHeadlessSelectOption.vue +6 -6
  27. package/src/components/headless/forms/composition.ts +10 -0
  28. package/src/components/headless/forms/index.ts +3 -0
  29. package/src/components/headless/modals/AGHeadlessModal.ts +19 -1
  30. package/src/components/headless/modals/AGHeadlessModal.vue +3 -5
  31. package/src/components/headless/snackbars/index.ts +23 -8
  32. package/src/components/lib/AGErrorMessage.vue +2 -2
  33. package/src/components/lib/AGMarkdown.vue +9 -4
  34. package/src/components/lib/AGMeasured.vue +15 -0
  35. package/src/components/lib/index.ts +1 -0
  36. package/src/components/modals/AGAlertModal.ts +15 -0
  37. package/src/components/modals/AGAlertModal.vue +3 -14
  38. package/src/components/modals/AGConfirmModal.ts +17 -0
  39. package/src/components/modals/AGConfirmModal.vue +6 -10
  40. package/src/components/modals/AGErrorReportModal.ts +27 -1
  41. package/src/components/modals/AGErrorReportModal.vue +7 -15
  42. package/src/components/modals/AGErrorReportModalButtons.vue +4 -2
  43. package/src/components/modals/AGLoadingModal.ts +14 -0
  44. package/src/components/modals/AGLoadingModal.vue +3 -7
  45. package/src/components/modals/AGModal.vue +14 -12
  46. package/src/components/modals/AGPromptModal.ts +30 -0
  47. package/src/components/modals/AGPromptModal.vue +34 -0
  48. package/src/components/modals/index.ts +11 -19
  49. package/src/components/snackbars/AGSnackbar.vue +2 -8
  50. package/src/components/utils.ts +10 -0
  51. package/src/directives/index.ts +5 -1
  52. package/src/directives/measure.ts +21 -0
  53. package/src/errors/Errors.ts +26 -24
  54. package/src/errors/index.ts +2 -11
  55. package/src/errors/utils.ts +19 -0
  56. package/src/forms/Form.ts +43 -3
  57. package/src/forms/index.ts +1 -0
  58. package/src/forms/utils.ts +15 -0
  59. package/src/jobs/Job.ts +5 -0
  60. package/src/jobs/index.ts +7 -0
  61. package/src/lang/Lang.ts +14 -22
  62. package/src/main.ts +3 -0
  63. package/src/services/App.state.ts +1 -2
  64. package/src/services/App.ts +21 -3
  65. package/src/services/Cache.ts +43 -0
  66. package/src/services/Events.test.ts +39 -0
  67. package/src/services/Events.ts +100 -30
  68. package/src/services/Service.ts +42 -12
  69. package/src/services/index.ts +5 -2
  70. package/src/services/store.ts +8 -5
  71. package/src/testing/index.ts +25 -0
  72. package/src/ui/UI.ts +101 -15
  73. package/src/ui/index.ts +8 -3
  74. package/src/utils/composition/events.ts +1 -0
  75. package/src/utils/index.ts +1 -0
  76. package/src/utils/tailwindcss.test.ts +26 -0
  77. package/src/utils/tailwindcss.ts +7 -0
  78. package/src/utils/vue.ts +10 -1
package/src/ui/index.ts CHANGED
@@ -8,13 +8,16 @@ import AGAlertModal from '../components/modals/AGAlertModal.vue';
8
8
  import AGConfirmModal from '../components/modals/AGConfirmModal.vue';
9
9
  import AGErrorReportModal from '../components/modals/AGErrorReportModal.vue';
10
10
  import AGLoadingModal from '../components/modals/AGLoadingModal.vue';
11
+ import AGPromptModal from '../components/modals/AGPromptModal.vue';
11
12
  import AGSnackbar from '../components/snackbars/AGSnackbar.vue';
13
+ import AGStartupCrash from '../components/lib/AGStartupCrash.vue';
12
14
  import type { UIComponent } from './UI';
13
15
 
14
- export { UI, UIComponents, UIComponent };
15
-
16
16
  const services = { $ui: UI };
17
17
 
18
+ export * from './UI';
19
+ export { default as UI } from './UI';
20
+
18
21
  export type UIServices = typeof services;
19
22
 
20
23
  export default definePlugin({
@@ -24,7 +27,9 @@ export default definePlugin({
24
27
  [UIComponents.ConfirmModal]: AGConfirmModal,
25
28
  [UIComponents.ErrorReportModal]: AGErrorReportModal,
26
29
  [UIComponents.LoadingModal]: AGLoadingModal,
30
+ [UIComponents.PromptModal]: AGPromptModal,
27
31
  [UIComponents.Snackbar]: AGSnackbar,
32
+ [UIComponents.StartupCrash]: AGStartupCrash,
28
33
  };
29
34
 
30
35
  Object.entries({
@@ -37,7 +42,7 @@ export default definePlugin({
37
42
  });
38
43
 
39
44
  declare module '@/bootstrap/options' {
40
- interface AerogelOptions {
45
+ export interface AerogelOptions {
41
46
  components?: Partial<Record<UIComponent, Component>>;
42
47
  }
43
48
  }
@@ -14,6 +14,7 @@ export function useEvent<Event extends EventWithPayload>(
14
14
  event: Event,
15
15
  listener: EventListener<EventsPayload[Event]>
16
16
  ): void;
17
+ export function useEvent<Payload>(event: string, listener: (payload: Payload) => unknown): void;
17
18
  export function useEvent<Event extends string>(event: UnknownEvent<Event>, listener: EventListener): void;
18
19
 
19
20
  export function useEvent(event: string, listener: EventListener): void {
@@ -1,4 +1,5 @@
1
1
  export * from './composition/events';
2
2
  export * from './composition/forms';
3
3
  export * from './composition/hooks';
4
+ export * from './tailwindcss';
4
5
  export * from './vue';
@@ -0,0 +1,26 @@
1
+ import { describe, expect, it } from 'vitest';
2
+
3
+ import { removeInteractiveClasses } from './tailwindcss';
4
+
5
+ describe('TailwindCSS utils', () => {
6
+
7
+ it('Removes interactive classes', () => {
8
+ const cases: [string, string][] = [
9
+ ['text-red hover:text-green', 'text-red'],
10
+ ['text-red hover:text-green text-lg', 'text-red text-lg'],
11
+ [
12
+ `
13
+ text-red text-lg
14
+ focus:text-yellow
15
+ hover:focus:text-black
16
+ `,
17
+ 'text-red text-lg',
18
+ ],
19
+ ];
20
+
21
+ cases.forEach(([original, expected]) => {
22
+ expect(removeInteractiveClasses(original)).toEqual(expected);
23
+ });
24
+ });
25
+
26
+ });
@@ -0,0 +1,7 @@
1
+ export function removeInteractiveClasses(classes: string): string {
2
+ return classes
3
+ .split(/\s+/)
4
+ .filter((className) => !/^(hover|focus|focus-visible):/.test(className))
5
+ .join(' ')
6
+ .trim();
7
+ }
package/src/utils/vue.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { fail } from '@noeldemartin/utils';
2
- import { inject, reactive, ref } from 'vue';
2
+ import { computed, inject, reactive, ref, watch } from 'vue';
3
3
  import type { Directive, InjectionKey, PropType, Ref, UnwrapNestedRefs } from 'vue';
4
4
 
5
5
  type BaseProp<T> = {
@@ -30,6 +30,15 @@ export function componentRef<T>(): Ref<UnwrapNestedRefs<T> | undefined> {
30
30
  return ref<UnwrapNestedRefs<T>>();
31
31
  }
32
32
 
33
+ export function computedAsync<T>(getter: () => Promise<T>): Ref<T | undefined> {
34
+ const result = ref<T>();
35
+ const asyncValue = computed(getter);
36
+
37
+ watch(asyncValue, async () => (result.value = await asyncValue.value), { immediate: true });
38
+
39
+ return result;
40
+ }
41
+
33
42
  export function defineDirective(directive: Directive): Directive {
34
43
  return directive;
35
44
  }