@aerogel/core 0.0.0-next.f9394854509d71d644498ac087706a2f8f8eea1c → 0.0.0-next.fb0f08b1df2e4aff5b34e23b9927b06b58484c98

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 (207) hide show
  1. package/dist/aerogel-core.css +1 -0
  2. package/dist/aerogel-core.d.ts +2054 -1811
  3. package/dist/aerogel-core.js +3541 -0
  4. package/dist/aerogel-core.js.map +1 -0
  5. package/package.json +32 -37
  6. package/src/bootstrap/bootstrap.test.ts +4 -7
  7. package/src/bootstrap/index.ts +21 -19
  8. package/src/bootstrap/options.ts +1 -1
  9. package/src/components/AppLayout.vue +14 -0
  10. package/src/components/{AGAppModals.vue → AppModals.vue} +3 -4
  11. package/src/components/AppOverlays.vue +9 -0
  12. package/src/components/AppToasts.vue +16 -0
  13. package/src/components/contracts/AlertModal.ts +19 -0
  14. package/src/components/contracts/Button.ts +16 -0
  15. package/src/components/contracts/ConfirmModal.ts +48 -0
  16. package/src/components/contracts/DropdownMenu.ts +25 -0
  17. package/src/components/contracts/ErrorReportModal.ts +33 -0
  18. package/src/components/contracts/Input.ts +26 -0
  19. package/src/components/contracts/LoadingModal.ts +26 -0
  20. package/src/components/contracts/Modal.ts +21 -0
  21. package/src/components/contracts/PromptModal.ts +34 -0
  22. package/src/components/contracts/Select.ts +45 -0
  23. package/src/components/contracts/Toast.ts +15 -0
  24. package/src/components/contracts/index.ts +11 -0
  25. package/src/components/headless/HeadlessButton.vue +51 -0
  26. package/src/components/headless/HeadlessInput.vue +59 -0
  27. package/src/components/headless/{forms/AGHeadlessInputDescription.vue → HeadlessInputDescription.vue} +7 -8
  28. package/src/components/headless/{forms/AGHeadlessInputError.vue → HeadlessInputError.vue} +4 -8
  29. package/src/components/headless/{forms/AGHeadlessInputInput.vue → HeadlessInputInput.vue} +17 -26
  30. package/src/components/headless/{forms/AGHeadlessInputLabel.vue → HeadlessInputLabel.vue} +3 -7
  31. package/src/components/headless/{forms/AGHeadlessInputTextArea.vue → HeadlessInputTextArea.vue} +10 -13
  32. package/src/components/headless/HeadlessModal.vue +57 -0
  33. package/src/components/headless/HeadlessModalContent.vue +30 -0
  34. package/src/components/headless/HeadlessModalDescription.vue +12 -0
  35. package/src/components/headless/HeadlessModalOverlay.vue +12 -0
  36. package/src/components/headless/HeadlessModalTitle.vue +12 -0
  37. package/src/components/headless/HeadlessSelect.vue +120 -0
  38. package/src/components/headless/{forms/AGHeadlessSelectError.vue → HeadlessSelectError.vue} +5 -6
  39. package/src/components/headless/HeadlessSelectLabel.vue +25 -0
  40. package/src/components/headless/HeadlessSelectOption.vue +34 -0
  41. package/src/components/headless/HeadlessSelectOptions.vue +42 -0
  42. package/src/components/headless/HeadlessSelectTrigger.vue +22 -0
  43. package/src/components/headless/HeadlessSelectValue.vue +18 -0
  44. package/src/components/headless/HeadlessSwitch.vue +96 -0
  45. package/src/components/headless/HeadlessToast.vue +18 -0
  46. package/src/components/headless/HeadlessToastAction.vue +13 -0
  47. package/src/components/headless/index.ts +20 -3
  48. package/src/components/index.ts +6 -11
  49. package/src/components/ui/AdvancedOptions.vue +18 -0
  50. package/src/components/ui/AlertModal.vue +17 -0
  51. package/src/components/ui/Button.vue +100 -0
  52. package/src/components/ui/Checkbox.vue +56 -0
  53. package/src/components/ui/ConfirmModal.vue +50 -0
  54. package/src/components/ui/DropdownMenu.vue +32 -0
  55. package/src/components/ui/DropdownMenuOption.vue +22 -0
  56. package/src/components/ui/DropdownMenuOptions.vue +44 -0
  57. package/src/components/ui/EditableContent.vue +82 -0
  58. package/src/components/ui/ErrorLogs.vue +19 -0
  59. package/src/components/ui/ErrorLogsModal.vue +48 -0
  60. package/src/components/ui/ErrorMessage.vue +15 -0
  61. package/src/components/ui/ErrorReportModal.vue +73 -0
  62. package/src/components/{modals/AGErrorReportModalButtons.vue → ui/ErrorReportModalButtons.vue} +34 -27
  63. package/src/components/ui/ErrorReportModalTitle.vue +24 -0
  64. package/src/components/{forms/AGForm.vue → ui/Form.vue} +4 -5
  65. package/src/components/ui/Input.vue +56 -0
  66. package/src/components/ui/Link.vue +12 -0
  67. package/src/components/ui/LoadingModal.vue +34 -0
  68. package/src/components/ui/Markdown.vue +97 -0
  69. package/src/components/ui/Modal.vue +123 -0
  70. package/src/components/ui/ModalContext.vue +31 -0
  71. package/src/components/ui/ProgressBar.vue +51 -0
  72. package/src/components/ui/PromptModal.vue +38 -0
  73. package/src/components/ui/Select.vue +27 -0
  74. package/src/components/ui/SelectLabel.vue +21 -0
  75. package/src/components/ui/SelectOption.vue +29 -0
  76. package/src/components/ui/SelectOptions.vue +35 -0
  77. package/src/components/ui/SelectTrigger.vue +29 -0
  78. package/src/components/ui/SettingsModal.vue +15 -0
  79. package/src/components/{lib/AGStartupCrash.vue → ui/StartupCrash.vue} +8 -8
  80. package/src/components/ui/Switch.vue +11 -0
  81. package/src/components/ui/Toast.vue +46 -0
  82. package/src/components/ui/index.ts +33 -0
  83. package/src/directives/index.ts +9 -5
  84. package/src/directives/measure.ts +12 -6
  85. package/src/errors/Errors.state.ts +1 -1
  86. package/src/errors/Errors.ts +29 -27
  87. package/src/errors/JobCancelledError.ts +3 -0
  88. package/src/errors/index.ts +9 -6
  89. package/src/errors/utils.ts +1 -1
  90. package/src/forms/{Form.test.ts → FormController.test.ts} +32 -8
  91. package/src/forms/{Form.ts → FormController.ts} +42 -38
  92. package/src/forms/index.ts +2 -3
  93. package/src/forms/utils.ts +35 -35
  94. package/src/index.css +73 -0
  95. package/src/jobs/Job.ts +144 -2
  96. package/src/jobs/index.ts +4 -1
  97. package/src/jobs/listeners.ts +3 -0
  98. package/src/jobs/status.ts +4 -0
  99. package/src/lang/DefaultLangProvider.ts +7 -4
  100. package/src/lang/Lang.state.ts +1 -1
  101. package/src/lang/Lang.ts +1 -1
  102. package/src/lang/index.ts +12 -6
  103. package/src/lang/settings/Debug.vue +39 -0
  104. package/src/lang/settings/Language.vue +48 -0
  105. package/src/lang/settings/index.ts +15 -0
  106. package/src/plugins/Plugin.ts +1 -1
  107. package/src/plugins/index.ts +10 -7
  108. package/src/services/App.state.ts +23 -4
  109. package/src/services/App.ts +16 -3
  110. package/src/services/Cache.ts +1 -1
  111. package/src/services/Events.test.ts +8 -8
  112. package/src/services/Events.ts +16 -12
  113. package/src/services/Service.ts +116 -53
  114. package/src/services/Storage.ts +20 -0
  115. package/src/services/index.ts +14 -5
  116. package/src/services/utils.ts +18 -0
  117. package/src/testing/index.ts +4 -3
  118. package/src/testing/setup.ts +5 -13
  119. package/src/ui/UI.state.ts +8 -13
  120. package/src/ui/UI.ts +209 -123
  121. package/src/ui/index.ts +27 -28
  122. package/src/utils/classes.ts +41 -0
  123. package/src/utils/composition/events.ts +4 -6
  124. package/src/utils/composition/forms.ts +20 -4
  125. package/src/utils/composition/persistent.test.ts +33 -0
  126. package/src/utils/composition/persistent.ts +11 -0
  127. package/src/utils/composition/state.test.ts +47 -0
  128. package/src/utils/composition/state.ts +33 -0
  129. package/src/utils/index.ts +5 -1
  130. package/src/utils/markdown.test.ts +50 -0
  131. package/src/utils/markdown.ts +53 -6
  132. package/src/utils/types.ts +3 -0
  133. package/src/utils/vue.ts +38 -141
  134. package/dist/aerogel-core.cjs.js +0 -2
  135. package/dist/aerogel-core.cjs.js.map +0 -1
  136. package/dist/aerogel-core.esm.js +0 -2
  137. package/dist/aerogel-core.esm.js.map +0 -1
  138. package/histoire.config.ts +0 -7
  139. package/noeldemartin.config.js +0 -5
  140. package/postcss.config.js +0 -6
  141. package/src/assets/histoire.css +0 -3
  142. package/src/components/AGAppLayout.vue +0 -16
  143. package/src/components/AGAppOverlays.vue +0 -41
  144. package/src/components/AGAppSnackbars.vue +0 -13
  145. package/src/components/composition.ts +0 -23
  146. package/src/components/constants.ts +0 -8
  147. package/src/components/forms/AGButton.vue +0 -44
  148. package/src/components/forms/AGCheckbox.vue +0 -41
  149. package/src/components/forms/AGInput.vue +0 -40
  150. package/src/components/forms/AGSelect.story.vue +0 -46
  151. package/src/components/forms/AGSelect.vue +0 -60
  152. package/src/components/forms/index.ts +0 -5
  153. package/src/components/headless/forms/AGHeadlessButton.ts +0 -3
  154. package/src/components/headless/forms/AGHeadlessButton.vue +0 -62
  155. package/src/components/headless/forms/AGHeadlessInput.ts +0 -34
  156. package/src/components/headless/forms/AGHeadlessInput.vue +0 -70
  157. package/src/components/headless/forms/AGHeadlessSelect.ts +0 -42
  158. package/src/components/headless/forms/AGHeadlessSelect.vue +0 -77
  159. package/src/components/headless/forms/AGHeadlessSelectButton.vue +0 -24
  160. package/src/components/headless/forms/AGHeadlessSelectLabel.vue +0 -24
  161. package/src/components/headless/forms/AGHeadlessSelectOption.ts +0 -4
  162. package/src/components/headless/forms/AGHeadlessSelectOption.vue +0 -39
  163. package/src/components/headless/forms/AGHeadlessSelectOptions.ts +0 -3
  164. package/src/components/headless/forms/composition.ts +0 -10
  165. package/src/components/headless/forms/index.ts +0 -18
  166. package/src/components/headless/modals/AGHeadlessModal.ts +0 -34
  167. package/src/components/headless/modals/AGHeadlessModal.vue +0 -86
  168. package/src/components/headless/modals/AGHeadlessModalPanel.vue +0 -28
  169. package/src/components/headless/modals/AGHeadlessModalTitle.vue +0 -13
  170. package/src/components/headless/modals/index.ts +0 -4
  171. package/src/components/headless/snackbars/AGHeadlessSnackbar.vue +0 -10
  172. package/src/components/headless/snackbars/index.ts +0 -40
  173. package/src/components/interfaces.ts +0 -24
  174. package/src/components/lib/AGErrorMessage.vue +0 -16
  175. package/src/components/lib/AGLink.vue +0 -9
  176. package/src/components/lib/AGMarkdown.vue +0 -41
  177. package/src/components/lib/AGMeasured.vue +0 -16
  178. package/src/components/lib/index.ts +0 -5
  179. package/src/components/modals/AGAlertModal.ts +0 -15
  180. package/src/components/modals/AGAlertModal.vue +0 -14
  181. package/src/components/modals/AGConfirmModal.ts +0 -33
  182. package/src/components/modals/AGConfirmModal.vue +0 -26
  183. package/src/components/modals/AGErrorReportModal.ts +0 -46
  184. package/src/components/modals/AGErrorReportModal.vue +0 -54
  185. package/src/components/modals/AGErrorReportModalTitle.vue +0 -25
  186. package/src/components/modals/AGLoadingModal.ts +0 -23
  187. package/src/components/modals/AGLoadingModal.vue +0 -15
  188. package/src/components/modals/AGModal.ts +0 -10
  189. package/src/components/modals/AGModal.vue +0 -39
  190. package/src/components/modals/AGModalContext.ts +0 -8
  191. package/src/components/modals/AGModalContext.vue +0 -22
  192. package/src/components/modals/AGModalTitle.vue +0 -9
  193. package/src/components/modals/AGPromptModal.ts +0 -36
  194. package/src/components/modals/AGPromptModal.vue +0 -34
  195. package/src/components/modals/index.ts +0 -17
  196. package/src/components/snackbars/AGSnackbar.vue +0 -36
  197. package/src/components/snackbars/index.ts +0 -3
  198. package/src/components/utils.ts +0 -10
  199. package/src/directives/initial-focus.ts +0 -11
  200. package/src/forms/composition.ts +0 -6
  201. package/src/main.histoire.ts +0 -1
  202. package/src/utils/tailwindcss.test.ts +0 -26
  203. package/src/utils/tailwindcss.ts +0 -7
  204. package/tailwind.config.js +0 -4
  205. package/tsconfig.json +0 -11
  206. package/vite.config.ts +0 -17
  207. /package/src/{main.ts → index.ts} +0 -0
@@ -1,22 +0,0 @@
1
- <template>
2
- <component :is="modal.component" v-bind="modal.properties" />
3
- </template>
4
-
5
- <script setup lang="ts">
6
- import { provide, toRef } from 'vue';
7
-
8
- import { requiredNumberProp, requiredObjectProp } from '@/utils/vue';
9
- import type { Modal } from '@/ui/UI.state';
10
-
11
- import type { IAGModalContext } from './AGModalContext';
12
-
13
- const props = defineProps({
14
- modal: requiredObjectProp<Modal>(),
15
- childIndex: requiredNumberProp(),
16
- });
17
-
18
- provide<IAGModalContext>('modal', {
19
- modal: toRef(props, 'modal'),
20
- childIndex: toRef(props, 'childIndex'),
21
- });
22
- </script>
@@ -1,9 +0,0 @@
1
- <template>
2
- <AGHeadlessModalTitle class="mb-2 font-semibold">
3
- <slot />
4
- </AGHeadlessModalTitle>
5
- </template>
6
-
7
- <script setup lang="ts">
8
- import AGHeadlessModalTitle from '../headless/modals/AGHeadlessModalTitle.vue';
9
- </script>
@@ -1,36 +0,0 @@
1
- import { computed } from 'vue';
2
- import type { ExtractPropTypes } from 'vue';
3
- import type { ObjectWithoutEmpty, SubPartial } from '@noeldemartin/utils';
4
-
5
- import { Colors } from '@/components/constants';
6
- import { enumProp, requiredStringProp, stringProp } from '@/utils';
7
- import { translateWithDefault } from '@/lang';
8
-
9
- export const promptModalProps = {
10
- title: stringProp(),
11
- message: requiredStringProp(),
12
- label: stringProp(),
13
- defaultValue: stringProp(),
14
- placeholder: stringProp(),
15
- acceptText: stringProp(),
16
- acceptColor: enumProp(Colors, Colors.Primary),
17
- cancelText: stringProp(),
18
- cancelColor: enumProp(Colors, Colors.Clear),
19
- };
20
-
21
- export type AGPromptModalProps = SubPartial<
22
- ObjectWithoutEmpty<ExtractPropTypes<typeof promptModalProps>>,
23
- 'acceptColor' | 'cancelColor'
24
- >;
25
-
26
- export function usePromptModalProps(): typeof promptModalProps {
27
- return promptModalProps;
28
- }
29
-
30
- // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
31
- export function usePromptModal(props: ExtractPropTypes<typeof promptModalProps>) {
32
- const renderedAcceptText = computed(() => props.acceptText ?? translateWithDefault('ui.accept', 'Ok'));
33
- const renderedCancelText = computed(() => props.cancelText ?? translateWithDefault('ui.cancel', 'Cancel'));
34
-
35
- return { renderedAcceptText, renderedCancelText };
36
- }
@@ -1,34 +0,0 @@
1
- <template>
2
- <AGModal v-slot="{ close }: IAGModalDefaultSlotProps" :cancellable="false" :title="title">
3
- <AGMarkdown :text="message" />
4
-
5
- <AGForm :form="form" @submit="close(form.draft)">
6
- <AGInput name="draft" :placeholder="placeholder" :label="label" />
7
-
8
- <div class="mt-2 flex flex-row-reverse gap-2">
9
- <AGButton :color="acceptColor" submit>
10
- {{ renderedAcceptText }}
11
- </AGButton>
12
- <AGButton :color="cancelColor" @click="close()">
13
- {{ renderedCancelText }}
14
- </AGButton>
15
- </div>
16
- </AGForm>
17
- </AGModal>
18
- </template>
19
-
20
- <script setup lang="ts">
21
- import AGModal from './AGModal.vue';
22
- import { usePromptModal, usePromptModalProps } from './AGPromptModal';
23
- import type { IAGModalDefaultSlotProps } from './AGModal';
24
-
25
- import AGButton from '../forms/AGButton.vue';
26
- import AGForm from '../forms/AGForm.vue';
27
- import AGInput from '../forms/AGInput.vue';
28
- import AGMarkdown from '../lib/AGMarkdown.vue';
29
- import { requiredStringInput, useForm } from '../../forms';
30
-
31
- const props = defineProps(usePromptModalProps());
32
- const form = useForm({ draft: requiredStringInput(props.defaultValue ?? '') });
33
- const { renderedAcceptText, renderedCancelText } = usePromptModal(props);
34
- </script>
@@ -1,17 +0,0 @@
1
- export * from './AGAlertModal';
2
- export * from './AGConfirmModal';
3
- export * from './AGErrorReportModal';
4
- export * from './AGLoadingModal';
5
- export * from './AGModal';
6
- export * from './AGModalContext';
7
- export * from './AGPromptModal';
8
-
9
- export { default as AGAlertModal } from './AGAlertModal.vue';
10
- export { default as AGConfirmModal } from './AGConfirmModal.vue';
11
- export { default as AGErrorReportModalButtons } from './AGErrorReportModalButtons.vue';
12
- export { default as AGErrorReportModalTitle } from './AGErrorReportModalTitle.vue';
13
- export { default as AGLoadingModal } from './AGLoadingModal.vue';
14
- export { default as AGModal } from './AGModal.vue';
15
- export { default as AGModalContext } from './AGModalContext.vue';
16
- export { default as AGModalTitle } from './AGModalTitle.vue';
17
- export { default as AGPromptModal } from './AGPromptModal.vue';
@@ -1,36 +0,0 @@
1
- <template>
2
- <AGHeadlessSnackbar class="flex flex-row items-center justify-center gap-3 p-4" :class="styleClasses">
3
- <AGMarkdown :text="message" inline />
4
- <AGButton
5
- v-for="(action, i) of actions"
6
- :key="i"
7
- :color="color"
8
- @click="activate(action)"
9
- >
10
- {{ action.text }}
11
- </AGButton>
12
- </AGHeadlessSnackbar>
13
- </template>
14
-
15
- <script setup lang="ts">
16
- import { computed } from 'vue';
17
-
18
- import { Colors } from '@/components/constants';
19
- import { useSnackbar, useSnackbarProps } from '@/components/headless/snackbars';
20
-
21
- import AGButton from '../forms/AGButton.vue';
22
- import AGHeadlessSnackbar from '../headless/snackbars/AGHeadlessSnackbar.vue';
23
- import AGMarkdown from '../lib/AGMarkdown.vue';
24
-
25
- const props = defineProps(useSnackbarProps());
26
- const { activate } = useSnackbar(props);
27
- const styleClasses = computed(() => {
28
- switch (props.color) {
29
- case Colors.Danger:
30
- return 'bg-red-200 text-red-900';
31
- default:
32
- case Colors.Secondary:
33
- return 'bg-gray-900 text-white';
34
- }
35
- });
36
- </script>
@@ -1,3 +0,0 @@
1
- import AGSnackbar from './AGSnackbar.vue';
2
-
3
- export { AGSnackbar };
@@ -1,10 +0,0 @@
1
- export function extractComponentProps<T extends Record<string, unknown>>(
2
- values: Record<string, unknown>,
3
- definitions: Record<string, unknown>,
4
- ): T {
5
- return Object.keys(definitions).reduce((extracted, prop) => {
6
- extracted[prop] = values[prop];
7
-
8
- return extracted;
9
- }, {} as Record<string, unknown>) as T;
10
- }
@@ -1,11 +0,0 @@
1
- import { defineDirective } from '@/utils/vue';
2
-
3
- export default defineDirective({
4
- mounted(element: HTMLElement, { value }) {
5
- if (value === false) {
6
- return;
7
- }
8
-
9
- element.focus();
10
- },
11
- });
@@ -1,6 +0,0 @@
1
- import Form from '@/forms/Form';
2
- import type { FormData, FormFieldDefinitions } from '@/forms/Form';
3
-
4
- export function useForm<const T extends FormFieldDefinitions>(fields: T): Form<T> & FormData<T> {
5
- return new Form(fields) as Form<T> & FormData<T>;
6
- }
@@ -1 +0,0 @@
1
- import './assets/histoire.css';
@@ -1,26 +0,0 @@
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
- });
@@ -1,7 +0,0 @@
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
- }
@@ -1,4 +0,0 @@
1
- /** @type {import('tailwindcss').Config} */
2
- module.exports = {
3
- content: ['./src/**/*.{vue,ts}'],
4
- };
package/tsconfig.json DELETED
@@ -1,11 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.json",
3
- "compilerOptions": {
4
- "types": ["unplugin-icons/types/vue3", "@aerogel/vite/dist/virtual"],
5
- "baseUrl": ".",
6
- "paths": {
7
- "@/*": ["./src/*"]
8
- }
9
- },
10
- "include": ["src/**/*.ts", "src/**/*.vue"]
11
- }
package/vite.config.ts DELETED
@@ -1,17 +0,0 @@
1
- import Aerogel from '@aerogel/vite';
2
- import Icons from 'unplugin-icons/vite';
3
- import { defineConfig } from 'vitest/config';
4
- import { resolve } from 'path';
5
-
6
- export default defineConfig({
7
- test: {
8
- clearMocks: true,
9
- setupFiles: ['./src/testing/setup.ts'],
10
- },
11
- plugins: [Aerogel(), Icons()],
12
- resolve: {
13
- alias: {
14
- '@': resolve(__dirname, './src'),
15
- },
16
- },
17
- });
File without changes