firstly 0.3.0 → 0.4.1

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 (177) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/esm/SqlDatabase/FF_LogToConsole.js +9 -14
  3. package/esm/carbone/CarboneController.js +2 -1
  4. package/esm/changeLog/index.d.ts +0 -5
  5. package/esm/core/FF_Allow.d.ts +55 -0
  6. package/esm/core/FF_Allow.js +54 -0
  7. package/esm/core/FF_Filter.d.ts +55 -0
  8. package/esm/core/FF_Filter.js +57 -0
  9. package/esm/core/helper.d.ts +2 -0
  10. package/esm/core/helper.js +3 -0
  11. package/esm/core/index.d.ts +0 -0
  12. package/esm/core/index.js +5 -0
  13. package/esm/core/tailwind.d.ts +21 -0
  14. package/esm/core/tailwind.js +22 -0
  15. package/esm/core/tryCatch.d.ts +44 -0
  16. package/esm/core/tryCatch.js +34 -0
  17. package/esm/cron/server/index.js +1 -1
  18. package/esm/feedback/FeedbackController.js +3 -2
  19. package/esm/feedback/index.d.ts +7 -2
  20. package/esm/feedback/index.js +1 -2
  21. package/esm/feedback/server/index.d.ts +0 -5
  22. package/esm/feedback/server/index.js +1 -1
  23. package/esm/formats/strings.js +2 -2
  24. package/esm/index.d.ts +18 -0
  25. package/esm/index.js +15 -0
  26. package/esm/sqlAdmin/Roles_SqlAdmin.d.ts +3 -0
  27. package/esm/sqlAdmin/Roles_SqlAdmin.js +3 -0
  28. package/esm/sqlAdmin/SqlAdminController.d.ts +9 -0
  29. package/esm/sqlAdmin/SqlAdminController.js +23 -0
  30. package/esm/sqlAdmin/index.d.ts +6 -0
  31. package/esm/sqlAdmin/index.js +6 -0
  32. package/esm/sqlAdmin/server/index.d.ts +40 -0
  33. package/esm/sqlAdmin/server/index.js +40 -0
  34. package/esm/sqlAdmin/ui/SqlAdmin.svelte +146 -0
  35. package/esm/sqlAdmin/ui/SqlAdmin.svelte.d.ts +3 -0
  36. package/esm/svelte/FF_Repo.svelte.d.ts +0 -2
  37. package/esm/svelte/FF_Repo.svelte.js +1 -17
  38. package/esm/svelte/helpers/debounce.js +1 -1
  39. package/esm/svelte/index.d.ts +2 -24
  40. package/esm/svelte/index.js +2 -22
  41. package/esm/{ui → svelte/ui}/Icon.svelte +1 -1
  42. package/esm/virtual/StateDemoEnum.d.ts +3 -3
  43. package/esm/virtual/StateDemoEnum.js +3 -3
  44. package/esm/virtual/UIEntity.js +1 -2
  45. package/package.json +15 -24
  46. package/esm/bin/cmd.d.ts +0 -1
  47. package/esm/bin/cmd.js +0 -638
  48. package/esm/feedback/ui/DialogIssue.svelte +0 -149
  49. package/esm/feedback/ui/DialogIssue.svelte.d.ts +0 -22
  50. package/esm/feedback/ui/DialogIssues.svelte +0 -114
  51. package/esm/feedback/ui/DialogIssues.svelte.d.ts +0 -22
  52. package/esm/feedback/ui/DialogMilestones.svelte +0 -43
  53. package/esm/feedback/ui/DialogMilestones.svelte.d.ts +0 -20
  54. package/esm/feedback/ui/Feedback.svelte +0 -16
  55. package/esm/feedback/ui/Feedback.svelte.d.ts +0 -18
  56. package/esm/internals/FF_Entity.d.ts +0 -2
  57. package/esm/internals/FF_Fields.d.ts +0 -11
  58. package/esm/internals/FF_Fields.js +0 -144
  59. package/esm/internals/cellsBuildor.d.ts +0 -47
  60. package/esm/internals/cellsBuildor.js +0 -141
  61. package/esm/internals/helper.d.ts +0 -49
  62. package/esm/internals/helper.js +0 -162
  63. package/esm/internals/index.d.ts +0 -78
  64. package/esm/internals/index.js +0 -45
  65. package/esm/internals/storeItem.d.ts +0 -19
  66. package/esm/internals/storeItem.js +0 -190
  67. package/esm/internals/storeList.d.ts +0 -34
  68. package/esm/internals/storeList.js +0 -108
  69. package/esm/internals/theme.d.ts +0 -4
  70. package/esm/internals/theme.js +0 -4
  71. package/esm/server/index.d.ts +0 -52
  72. package/esm/server/index.js +0 -87
  73. package/esm/svelte/FF_Cell.svelte +0 -103
  74. package/esm/svelte/FF_Cell.svelte.d.ts +0 -33
  75. package/esm/svelte/FF_Cell_Caption.svelte +0 -20
  76. package/esm/svelte/FF_Cell_Caption.svelte.d.ts +0 -31
  77. package/esm/svelte/FF_Cell_Display.svelte +0 -61
  78. package/esm/svelte/FF_Cell_Display.svelte.d.ts +0 -29
  79. package/esm/svelte/FF_Cell_Edit.svelte +0 -104
  80. package/esm/svelte/FF_Cell_Edit.svelte.d.ts +0 -32
  81. package/esm/svelte/FF_Cell_Error.svelte +0 -20
  82. package/esm/svelte/FF_Cell_Error.svelte.d.ts +0 -31
  83. package/esm/svelte/FF_Cell_Hint.svelte +0 -20
  84. package/esm/svelte/FF_Cell_Hint.svelte.d.ts +0 -31
  85. package/esm/svelte/FF_Config.svelte +0 -29
  86. package/esm/svelte/FF_Config.svelte.d.ts +0 -9
  87. package/esm/svelte/FF_Form.svelte +0 -155
  88. package/esm/svelte/FF_Form.svelte.d.ts +0 -37
  89. package/esm/svelte/FF_Grid.svelte +0 -257
  90. package/esm/svelte/FF_Grid.svelte.d.ts +0 -37
  91. package/esm/svelte/FF_Layout.svelte +0 -62
  92. package/esm/svelte/FF_Layout.svelte.d.ts +0 -31
  93. package/esm/svelte/actions/intersection.d.ts +0 -6
  94. package/esm/svelte/actions/intersection.js +0 -17
  95. package/esm/svelte/customField.d.ts +0 -69
  96. package/esm/svelte/customField.js +0 -4
  97. package/esm/svelte/dialog/DialogManagement.svelte +0 -98
  98. package/esm/svelte/dialog/DialogManagement.svelte.d.ts +0 -18
  99. package/esm/svelte/dialog/DialogPrimitive.svelte +0 -156
  100. package/esm/svelte/dialog/DialogPrimitive.svelte.d.ts +0 -38
  101. package/esm/svelte/dialog/dialog.d.ts +0 -58
  102. package/esm/svelte/dialog/dialog.js +0 -130
  103. package/esm/svelte/ff_Config.svelte.d.ts +0 -91
  104. package/esm/svelte/ff_Config.svelte.js +0 -111
  105. package/esm/svelte/firstly.css +0 -14
  106. package/esm/svelte/helpers.d.ts +0 -30
  107. package/esm/svelte/helpers.js +0 -38
  108. package/esm/svelte/tryCatch.d.ts +0 -12
  109. package/esm/svelte/tryCatch.js +0 -18
  110. package/esm/sveltekit/server/index.d.ts +0 -5
  111. package/esm/sveltekit/server/index.js +0 -24
  112. package/esm/ui/Button.svelte +0 -90
  113. package/esm/ui/Button.svelte.d.ts +0 -11
  114. package/esm/ui/Clipboardable.svelte +0 -25
  115. package/esm/ui/Clipboardable.svelte.d.ts +0 -12
  116. package/esm/ui/Field.svelte +0 -391
  117. package/esm/ui/Field.svelte.d.ts +0 -40
  118. package/esm/ui/FieldGroup.svelte +0 -117
  119. package/esm/ui/FieldGroup.svelte.d.ts +0 -44
  120. package/esm/ui/Grid.svelte +0 -262
  121. package/esm/ui/Grid.svelte.d.ts +0 -57
  122. package/esm/ui/Grid2.svelte +0 -290
  123. package/esm/ui/Grid2.svelte.d.ts +0 -57
  124. package/esm/ui/GridLoading.svelte +0 -58
  125. package/esm/ui/GridLoading.svelte.d.ts +0 -23
  126. package/esm/ui/GridPaginate.svelte +0 -69
  127. package/esm/ui/GridPaginate.svelte.d.ts +0 -23
  128. package/esm/ui/GridPaginate2.svelte +0 -25
  129. package/esm/ui/GridPaginate2.svelte.d.ts +0 -7
  130. package/esm/ui/Loading.svelte +0 -16
  131. package/esm/ui/Loading.svelte.d.ts +0 -31
  132. package/esm/ui/Tooltip.svelte +0 -45
  133. package/esm/ui/Tooltip.svelte.d.ts +0 -32
  134. package/esm/ui/dialog/DialogForm.svelte +0 -76
  135. package/esm/ui/dialog/DialogForm.svelte.d.ts +0 -21
  136. package/esm/ui/dialog/DialogManagement.svelte +0 -96
  137. package/esm/ui/dialog/DialogManagement.svelte.d.ts +0 -26
  138. package/esm/ui/dialog/DialogPrimitive.svelte +0 -90
  139. package/esm/ui/dialog/DialogPrimitive.svelte.d.ts +0 -38
  140. package/esm/ui/dialog/FormEditAction.svelte +0 -62
  141. package/esm/ui/dialog/FormEditAction.svelte.d.ts +0 -31
  142. package/esm/ui/dialog/dialog.d.ts +0 -60
  143. package/esm/ui/dialog/dialog.js +0 -100
  144. package/esm/ui/index.d.ts +0 -6
  145. package/esm/ui/index.js +0 -20
  146. package/esm/ui/internals/FieldContainer.svelte +0 -39
  147. package/esm/ui/internals/FieldContainer.svelte.d.ts +0 -18
  148. package/esm/ui/internals/Input.svelte +0 -143
  149. package/esm/ui/internals/Input.svelte.d.ts +0 -37
  150. package/esm/ui/internals/Textarea.svelte +0 -66
  151. package/esm/ui/internals/Textarea.svelte.d.ts +0 -33
  152. package/esm/ui/internals/select/MultiSelectMelt.svelte +0 -260
  153. package/esm/ui/internals/select/MultiSelectMelt.svelte.d.ts +0 -32
  154. package/esm/ui/internals/select/Select2.svelte +0 -88
  155. package/esm/ui/internals/select/Select2.svelte.d.ts +0 -12
  156. package/esm/ui/internals/select/SelectMelt.svelte +0 -289
  157. package/esm/ui/internals/select/SelectMelt.svelte.d.ts +0 -40
  158. package/esm/ui/internals/select/SelectRadio.svelte +0 -43
  159. package/esm/ui/internals/select/SelectRadio.svelte.d.ts +0 -27
  160. package/esm/ui/link/Link.svelte +0 -33
  161. package/esm/ui/link/Link.svelte.d.ts +0 -33
  162. package/esm/ui/link/LinkPlus.svelte +0 -63
  163. package/esm/ui/link/LinkPlus.svelte.d.ts +0 -9
  164. package/esm/utils/tailwind.d.ts +0 -2
  165. package/esm/utils/tailwind.js +0 -3
  166. package/esm/utils/transition.d.ts +0 -9
  167. package/esm/utils/transition.js +0 -33
  168. /package/esm/{internals → core}/BaseEnum.d.ts +0 -0
  169. /package/esm/{internals → core}/BaseEnum.js +0 -0
  170. /package/esm/{internals → core}/FF_Entity.js +0 -0
  171. /package/esm/{internals → core}/common.d.ts +0 -0
  172. /package/esm/{internals → core}/common.js +0 -0
  173. /package/esm/{utils → core}/types.d.ts +0 -0
  174. /package/esm/{utils → core}/types.js +0 -0
  175. /package/esm/{ui → svelte/ui}/Icon.svelte.d.ts +0 -0
  176. /package/esm/{ui → svelte/ui}/LibIcon.d.ts +0 -0
  177. /package/esm/{ui → svelte/ui}/LibIcon.js +0 -0
@@ -1,130 +0,0 @@
1
- import { writable } from 'svelte/store';
2
- import {} from 'remult';
3
- import { LibIcon_Add, LibIcon_Delete, LibIcon_Edit, LibIcon_Search, } from '../../internals';
4
- const createDialogManagement = () => {
5
- const { subscribe, update } = writable([]);
6
- // internal...
7
- const show = (dialog, type) => {
8
- let resolve;
9
- const promise = new Promise((res) => {
10
- resolve = res;
11
- });
12
- update((dialogs) => {
13
- return [...dialogs, { ...dialog, id: dialogs.length + 1, resolve, type }];
14
- });
15
- return promise;
16
- };
17
- return {
18
- confirm: (topic, text, icon) => {
19
- const detail = {
20
- detail: {
21
- caption: 'A Confirmer',
22
- icon: { data: icon },
23
- },
24
- children: `
25
- <p>
26
- ${topic}
27
- <br />
28
- ${text}
29
- </p>
30
- `,
31
- };
32
- return show(detail, 'confirm');
33
- },
34
- confirmDelete: (topic) => {
35
- const detail = {
36
- detail: {
37
- caption: 'A Supprimer',
38
- icon: { data: LibIcon_Delete },
39
- },
40
- children: topic
41
- ? `<p>Confirmez vous la suppression de: <br />- <b>${topic}</b> ?</p>`
42
- : 'Confirmer la suppression ?',
43
- };
44
- return show(detail, 'confirmDelete');
45
- },
46
- form: (type, topic, repo, settings) => {
47
- const topicPrefixText = settings?.topicPrefixText
48
- ? settings?.topicPrefixText + ' '
49
- : type === 'insert'
50
- ? `Créer `
51
- : type === 'update'
52
- ? 'Modifier '
53
- : 'Détail ';
54
- const detail = {
55
- detail: {
56
- caption: (topicPrefixText + topic).trim(),
57
- icon: {
58
- data: type === 'insert' ? LibIcon_Add : type === 'update' ? LibIcon_Edit : LibIcon_Search,
59
- },
60
- },
61
- repo,
62
- // store,
63
- cells: settings.cells ?? [],
64
- defaults: settings?.defaults,
65
- classes: settings?.classes,
66
- reThrow: settings?.reThrow,
67
- wDelete: settings?.wDelete,
68
- focusKey: settings?.focusKey,
69
- topicPrefixText,
70
- };
71
- // @ts-ignore
72
- return show(detail, type);
73
- },
74
- fform: (r, settings) => {
75
- // const topicPrefixText = settings?.topicPrefixText
76
- // ? settings?.topicPrefixText + ' '
77
- // : type === 'insert'
78
- // ? `Créer `
79
- // : type === 'update'
80
- // ? 'Modifier '
81
- // : 'Détail '
82
- const detail = {
83
- detail: {
84
- caption: r.metadata.caption,
85
- icon: {
86
- data: LibIcon_Edit,
87
- // data: type === 'insert' ? LibIcon_Add : type === 'update' ? LibIcon_Edit : LibIcon_Search,
88
- },
89
- },
90
- // repo,
91
- // store,
92
- cells: settings.cells ?? [],
93
- defaults: settings?.defaults,
94
- classes: settings?.classes,
95
- reThrow: settings?.reThrow,
96
- wDelete: settings?.wDelete,
97
- focusKey: settings?.focusKey,
98
- r,
99
- // topicPrefixText,
100
- };
101
- // @ts-ignore
102
- return show(detail, 'fform');
103
- },
104
- show: (dialog) => {
105
- return show(dialog, 'custom');
106
- },
107
- // next step, give a result typed!
108
- close: (id, result) => {
109
- update((dialogs) => {
110
- dialogs.forEach((dialog) => {
111
- if (dialog.id === id) {
112
- dialog.resolve(result);
113
- }
114
- });
115
- return dialogs.filter((dialog) => dialog.id !== id);
116
- });
117
- },
118
- // usefull on navigation you want to close all popups
119
- closeAll: () => {
120
- update((dialogs) => {
121
- dialogs.forEach((dialog) => {
122
- dialog.resolve({ success: false });
123
- });
124
- return [];
125
- });
126
- },
127
- subscribe,
128
- };
129
- };
130
- export const dialog = createDialogManagement();
@@ -1,91 +0,0 @@
1
- import type { DynamicCustomField } from '.';
2
- export interface Config {
3
- theme: Theme;
4
- dynamicCustomField?: DynamicCustomField;
5
- }
6
- /**
7
- * Theme
8
- */
9
- export interface FieldTheme {
10
- root?: string;
11
- error?: string;
12
- container?: string;
13
- }
14
- export interface LabelTheme {
15
- root?: string;
16
- }
17
- export interface ErrorTheme {
18
- root?: string;
19
- }
20
- export interface EditTheme {
21
- select?: string;
22
- checkbox?: string;
23
- input?: string;
24
- }
25
- export interface HintTheme {
26
- root?: string;
27
- }
28
- export interface GridTheme {
29
- root?: string;
30
- header?: string;
31
- headerCell?: string;
32
- row?: string;
33
- rowCell?: string;
34
- actions?: string;
35
- actionButton?: string;
36
- actionsColumn?: string;
37
- actionsHeader?: string;
38
- loadMoreButton?: string;
39
- }
40
- export interface FormTheme {
41
- root?: string;
42
- groups?: string;
43
- fields?: string;
44
- actions?: string;
45
- submitButton?: string;
46
- cancelButton?: string;
47
- }
48
- export interface DisplayTheme {
49
- checkbox?: string;
50
- }
51
- export interface Theme {
52
- root?: string;
53
- field?: FieldTheme;
54
- label?: LabelTheme;
55
- error?: ErrorTheme;
56
- hint?: HintTheme;
57
- edit?: EditTheme;
58
- grid?: GridTheme;
59
- form?: FormTheme;
60
- display?: DisplayTheme;
61
- }
62
- export declare const defaultTheme: Theme;
63
- export declare const emptyTheme: Theme;
64
- export declare const daisyTheme: Theme;
65
- export type FullyDefinedTheme = {
66
- root: string;
67
- field: FieldTheme;
68
- label: LabelTheme;
69
- error: ErrorTheme;
70
- hint: HintTheme;
71
- edit: EditTheme;
72
- grid: GridTheme;
73
- form: FormTheme;
74
- display: DisplayTheme;
75
- };
76
- export declare class FF_Theme {
77
- #private;
78
- constructor(initialTheme?: Theme);
79
- setTheme(theme: Theme): void;
80
- getTheme(): FullyDefinedTheme;
81
- getClasses<K extends keyof FullyDefinedTheme>(key: K, classes: Partial<FullyDefinedTheme[K]>): FullyDefinedTheme[K];
82
- }
83
- export declare function getThemeContext(): FF_Theme;
84
- export declare function setTheme(theme: Theme): void;
85
- export declare function getTheme(): FullyDefinedTheme;
86
- export declare function getClasses<K extends keyof FullyDefinedTheme>(key: K, classes: Partial<FullyDefinedTheme[K]>): FullyDefinedTheme[K];
87
- /**
88
- * Dynamic Custom Field
89
- */
90
- export declare function setDynamicCustomField(fn?: DynamicCustomField): void;
91
- export declare function getDynamicCustomField(): DynamicCustomField | undefined;
@@ -1,111 +0,0 @@
1
- import { getContext, setContext } from 'svelte';
2
- import { deepMerge } from '.';
3
- const THEME_KEY = 'firstly:theme';
4
- const DYNAMIC_CUSTOM_FIELD_KEY = 'firstly:dynamicCustomField';
5
- export const defaultTheme = {
6
- field: {},
7
- label: {},
8
- error: {},
9
- hint: {},
10
- edit: {},
11
- grid: {},
12
- form: {
13
- actions: 'ff-form-actions',
14
- },
15
- display: {},
16
- };
17
- export const emptyTheme = {
18
- field: {},
19
- label: {},
20
- error: {},
21
- hint: {},
22
- edit: {},
23
- grid: {},
24
- form: {},
25
- display: {},
26
- };
27
- export const daisyTheme = {
28
- field: {
29
- root: '',
30
- error: '',
31
- },
32
- label: {
33
- root: '',
34
- },
35
- error: {
36
- root: 'text-error',
37
- },
38
- hint: {
39
- root: 'italic text-sm',
40
- },
41
- edit: {
42
- checkbox: 'checkbox',
43
- input: 'input',
44
- select: 'select',
45
- },
46
- grid: {
47
- root: 'table',
48
- actions: 'flex gap-2 justify-end',
49
- actionButton: 'text-xs',
50
- actionsColumn: 'text-right',
51
- actionsHeader: 'text-right',
52
- },
53
- form: {
54
- root: '',
55
- fields: '',
56
- groups: '', // grid grid-cols-1
57
- actions: 'flex justify-end gap-2 mt-4',
58
- submitButton: 'btn btn-primary',
59
- cancelButton: 'btn',
60
- },
61
- display: {
62
- checkbox: 'checkbox',
63
- },
64
- };
65
- export class FF_Theme {
66
- #theme = $state(emptyTheme);
67
- constructor(initialTheme = emptyTheme) {
68
- this.setTheme(initialTheme);
69
- }
70
- setTheme(theme) {
71
- this.#theme = deepMerge(emptyTheme, theme);
72
- setContext(THEME_KEY, this);
73
- }
74
- getTheme() {
75
- return deepMerge(emptyTheme, this.#theme);
76
- }
77
- getClasses(key, classes) {
78
- const lvl = this.getTheme()[key];
79
- return deepMerge(lvl, classes);
80
- }
81
- }
82
- export function getThemeContext() {
83
- return getContext(THEME_KEY) || new FF_Theme();
84
- }
85
- export function setTheme(theme) {
86
- const themeContext = getContext(THEME_KEY);
87
- if (themeContext) {
88
- themeContext.setTheme(theme);
89
- }
90
- else {
91
- const newTheme = new FF_Theme(theme);
92
- setContext(THEME_KEY, newTheme);
93
- }
94
- }
95
- export function getTheme() {
96
- const themeContext = getThemeContext();
97
- return themeContext.getTheme();
98
- }
99
- export function getClasses(key, classes) {
100
- const themeContext = getThemeContext();
101
- return themeContext.getClasses(key, classes);
102
- }
103
- /**
104
- * Dynamic Custom Field
105
- */
106
- export function setDynamicCustomField(fn) {
107
- setContext(DYNAMIC_CUSTOM_FIELD_KEY, fn);
108
- }
109
- export function getDynamicCustomField() {
110
- return getContext(DYNAMIC_CUSTOM_FIELD_KEY);
111
- }
@@ -1,14 +0,0 @@
1
- * {
2
- --ff-spacing: 0.5rem;
3
-
4
- --ff-dialog-overlay: red;
5
- --ff-dialog-content: blue;
6
-
7
- @media screen and (max-width: 40rem) {
8
- --ff-spacing: 0.15rem;
9
- }
10
- }
11
-
12
- /* [data-ff-cells] > [data-ff-cell][data-ff-cells] {
13
- padding: var(--ff-spacing) 0;
14
- } */
@@ -1,30 +0,0 @@
1
- import type { FieldMetadata, FieldOptions } from 'remult';
2
- export declare function deepMerge<T>(target: T, source: Partial<T>): T;
3
- export declare function overwriteOptions<valueType = unknown, entityType = unknown>(field: FieldMetadata<valueType, entityType>, options: FieldOptions<entityType, valueType>): {
4
- options: FieldOptions<unknown, unknown>;
5
- valueType: any;
6
- key: entityType extends object ? keyof entityType & string : string;
7
- caption: string;
8
- label: string;
9
- dbName: string;
10
- inputType: string;
11
- allowNull: boolean;
12
- target: import("remult").ClassType<valueType>;
13
- getDbName(): Promise<string>;
14
- isServerExpression: boolean;
15
- dbReadOnly: boolean;
16
- valueConverter: Required<import("remult").ValueConverter<valueType>>;
17
- displayValue(item: Partial<entityType>): string;
18
- apiUpdateAllowed(item?: Partial<entityType> | undefined): boolean;
19
- includedInApi(item?: Partial<entityType> | undefined): boolean;
20
- toInput(value: valueType, inputType?: string): string;
21
- fromInput(inputValue: string, inputType?: string): valueType;
22
- };
23
- type NoInfer<T> = [T][T extends any ? 0 : never];
24
- /** You MUST add the T type to the function call
25
- *
26
- * @example
27
- * isOfType<ComponentObject>(obj, 'component')
28
- */
29
- export declare function isOfType<T, U = unknown>(value: T | U, property: keyof NoInfer<T> & string): value is T;
30
- export {};
@@ -1,38 +0,0 @@
1
- export function deepMerge(target, source) {
2
- const result = { ...target };
3
- if (source && typeof source === 'object' && !Array.isArray(source)) {
4
- Object.keys(source).forEach((key) => {
5
- const sourceValue = source[key];
6
- const targetValue = target[key];
7
- if (sourceValue &&
8
- typeof sourceValue === 'object' &&
9
- !Array.isArray(sourceValue) &&
10
- targetValue &&
11
- typeof targetValue === 'object' &&
12
- !Array.isArray(targetValue)) {
13
- // If both values are objects, recursively merge them
14
- result[key] = deepMerge(targetValue, sourceValue);
15
- }
16
- else if (sourceValue !== undefined) {
17
- // Otherwise, just assign the source value
18
- result[key] = sourceValue;
19
- }
20
- });
21
- }
22
- return result;
23
- }
24
- export function overwriteOptions(field, options) {
25
- return {
26
- ...field,
27
- // @ts-expect-error
28
- options: deepMerge(field.options, options),
29
- };
30
- }
31
- /** You MUST add the T type to the function call
32
- *
33
- * @example
34
- * isOfType<ComponentObject>(obj, 'component')
35
- */
36
- export function isOfType(value, property) {
37
- return typeof value === 'object' && value !== null && property in value;
38
- }
@@ -1,12 +0,0 @@
1
- type Success<T> = {
2
- data: T;
3
- error: null;
4
- };
5
- type Failure<E> = {
6
- data: null;
7
- error: E;
8
- };
9
- type Result<T, E = Error> = Success<T> | Failure<E>;
10
- export declare function tryCatch<T, E = Error>(promise: Promise<T>): Promise<Result<T, E>>;
11
- export declare function tryCatchSync<T, E = Error>(func: () => T): Result<T, E>;
12
- export {};
@@ -1,18 +0,0 @@
1
- export async function tryCatch(promise) {
2
- try {
3
- const data = await promise;
4
- return { data, error: null };
5
- }
6
- catch (error) {
7
- return { data: null, error: error };
8
- }
9
- }
10
- export function tryCatchSync(func) {
11
- try {
12
- const data = func();
13
- return { data, error: null };
14
- }
15
- catch (error) {
16
- return { data: null, error: error };
17
- }
18
- }
@@ -1,5 +0,0 @@
1
- import { ModuleFF } from '../../server';
2
- /**
3
- * @deprecated will be done directly in remult when modules will be in 😉
4
- */
5
- export declare const sveltekit: () => ModuleFF;
@@ -1,24 +0,0 @@
1
- import { remult } from 'remult';
2
- import { ModuleFF } from '../../server';
3
- /**
4
- * @deprecated will be done directly in remult when modules will be in 😉
5
- */
6
- export const sveltekit = () => {
7
- return new ModuleFF({
8
- name: 'sveltekit',
9
- priority: -779,
10
- entities: [],
11
- controllers: [],
12
- initRequest: async (kitEvent, op) => {
13
- remult.context.setHeaders = (headers) => {
14
- kitEvent.setHeaders(headers);
15
- };
16
- remult.context.setCookie = (name, value, opts) => {
17
- kitEvent.cookies.set(name, value, opts);
18
- };
19
- remult.context.deleteCookie = (name, opts) => {
20
- kitEvent.cookies.delete(name, opts);
21
- };
22
- },
23
- });
24
- };
@@ -1,90 +0,0 @@
1
- <script lang="ts">
2
- import { createTooltip } from '@melt-ui/svelte'
3
- import { fade, fly } from 'svelte/transition'
4
-
5
- import { tw } from '../internals'
6
-
7
- // TODO: extend HTMLButtonAttributes ?
8
- interface Props {
9
- isLoading?: boolean
10
- tooltip?: import('svelte').Snippet
11
- class?: string
12
- children?: import('svelte').Snippet
13
- disabled?: boolean | null
14
- [key: string]: any
15
- }
16
-
17
- let {
18
- isLoading = false,
19
- class: className = '',
20
- children,
21
- tooltip,
22
- disabled: disabledProp,
23
- ...rest
24
- }: Props = $props()
25
-
26
- let disabled = $derived(disabledProp || isLoading)
27
-
28
- // let's trigger the annimation if it's more than 200ms
29
- let triggerAnnimation = $state(false)
30
- $effect(() => {
31
- isLoading &&
32
- setTimeout(() => {
33
- if (isLoading) {
34
- triggerAnnimation = true
35
- }
36
- }, 200)
37
- })
38
-
39
- const {
40
- elements: { trigger, content, arrow },
41
- states: { open },
42
- } = createTooltip({
43
- positioning: {
44
- placement: 'top',
45
- },
46
- openDelay: 0,
47
- closeDelay: 0,
48
- closeOnPointerDown: false,
49
- forceVisible: true,
50
- escapeBehavior: 'close',
51
- group: true,
52
- })
53
- </script>
54
-
55
- <button
56
- {...$trigger}
57
- use:trigger
58
- {...rest}
59
- class={tw(['btn', className])}
60
- {disabled}
61
- >
62
- <!-- btn-outline -->
63
- {@render children?.()}
64
- {#if triggerAnnimation && isLoading}
65
- <div in:fly={{ x: -20 }}>
66
- <span class="loading loading-spinner"></span>
67
- </div>
68
- {/if}
69
- </button>
70
-
71
- {#if $open && tooltip}
72
- <div
73
- {...$content}
74
- use:content
75
- transition:fade={{ duration: 100 }}
76
- class="z-30 rounded-lg bg-base-300 ring-1 ring-black"
77
- >
78
- <div {...$arrow} use:arrow></div>
79
- <div class="px-4 py-1">
80
- {@render tooltip?.()}
81
- </div>
82
- </div>
83
- {/if}
84
-
85
- <style>
86
- .btn[disabled] {
87
- pointer-events: all;
88
- cursor: not-allowed;
89
- }
90
- </style>
@@ -1,11 +0,0 @@
1
- interface Props {
2
- isLoading?: boolean;
3
- tooltip?: import('svelte').Snippet;
4
- class?: string;
5
- children?: import('svelte').Snippet;
6
- disabled?: boolean | null;
7
- [key: string]: any;
8
- }
9
- declare const Button: import("svelte").Component<Props, {}, "">;
10
- type Button = ReturnType<typeof Button>;
11
- export default Button;
@@ -1,25 +0,0 @@
1
- <script lang="ts">
2
- interface Props {
3
- /**
4
- * @param value to set in the clipboard if not null. *
5
- * Don't put this on an input, if not, when a user will select the input via the mouse, this clipboard will be copied (usually you wanted to paste)!
6
- */
7
- value: string | null
8
- class?: string
9
- children?: import('svelte').Snippet
10
- }
11
-
12
- let { value, class: extraClass = '', children }: Props = $props()
13
-
14
- async function clip(_value: string | null) {
15
- if (_value) {
16
- try {
17
- await navigator.clipboard.writeText(_value)
18
- } catch (error) {}
19
- }
20
- }
21
- </script>
22
-
23
- <button onclick={() => clip(value)} class={`text-left ${value ? 'cursor-copy' : ''} ${extraClass}`}>
24
- {@render children?.()}
25
- </button>
@@ -1,12 +0,0 @@
1
- interface Props {
2
- /**
3
- * @param value to set in the clipboard if not null. *
4
- * Don't put this on an input, if not, when a user will select the input via the mouse, this clipboard will be copied (usually you wanted to paste)!
5
- */
6
- value: string | null;
7
- class?: string;
8
- children?: import('svelte').Snippet;
9
- }
10
- declare const Clipboardable: import("svelte").Component<Props, {}, "">;
11
- type Clipboardable = ReturnType<typeof Clipboardable>;
12
- export default Clipboardable;