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,149 +0,0 @@
1
- <script lang="ts">
2
- import { onMount } from 'svelte'
3
-
4
- import { repo } from 'remult'
5
-
6
- import { page } from '$app/stores'
7
-
8
- import { FeedbackController } from '..'
9
- import {
10
- Button,
11
- cellBuildor,
12
- Field,
13
- FilterEntity,
14
- Loading,
15
- type ResolvedType,
16
- } from '../../internals'
17
- import Textarea from '../../ui/internals/Textarea.svelte'
18
-
19
- export let dialogId: number
20
- const rmvWarning = dialogId
21
-
22
- export let milestoneId: string
23
- export let issueNumber: number | null
24
-
25
- let state: 'loading' | 'done' = 'loading'
26
-
27
- let issue: ResolvedType<ReturnType<typeof FeedbackController.getIssue>> | undefined
28
-
29
- const update = async () => {
30
- state = 'loading'
31
- if (issueNumber) {
32
- issue = await FeedbackController.getIssue(issueNumber)
33
- }
34
- state = 'done'
35
- }
36
-
37
- onMount(async () => {
38
- await update()
39
- })
40
-
41
- let title: ''
42
- let content: ''
43
- const send = async () => {
44
- state = 'loading'
45
-
46
- const p = $page.url.pathname + $page.url.search
47
- if (!issue?.id) {
48
- const result = await FeedbackController.createIssue(milestoneId, title, content, { page: p })
49
- issueNumber = result.number
50
- } else {
51
- await FeedbackController.addCommentOnIssue(
52
- issue.id,
53
- issueNumber!,
54
- issue.title,
55
- content,
56
- { page: p },
57
- issue.labels,
58
- )
59
- }
60
-
61
- content = ''
62
- await update()
63
- state = 'done'
64
- }
65
-
66
- const close = async () => {
67
- state = 'loading'
68
- await FeedbackController.close(issue!.id, issue!.labels)
69
- content = ''
70
- await update()
71
- state = 'done'
72
- }
73
-
74
- const reOpen = async () => {
75
- state = 'loading'
76
- await FeedbackController.reOpen(issue!.id)
77
- content = ''
78
- await update()
79
- state = 'done'
80
- }
81
-
82
- const disableButton = (issueNumber: number | null, title: string, content: string) => {
83
- if (issueNumber) {
84
- if (content?.length > 2) {
85
- return false
86
- }
87
- }
88
- if (title?.length > 2 && content?.length > 2) {
89
- return false
90
- }
91
- return true
92
- }
93
- </script>
94
-
95
- <div class="mb-4 grid gap-4">
96
- {#if state === 'loading'}
97
- <Loading class="h-12"></Loading>
98
- <Loading class="h-12"></Loading>
99
- <Loading class="h-12"></Loading>
100
- {:else}
101
- {#each issue?.items ?? [] as item}
102
- <div class="chat {item.who ? 'chat-start' : 'chat-end'}">
103
- <div class="avatar chat-image">
104
- <div class="w-10 rounded-full">
105
- <div class="h-10 w-10 {item.who ? 'bg-primary' : 'bg-secondary'}"></div>
106
- </div>
107
- </div>
108
- <div class="chat-header">
109
- {item.who ?? 'Support'}
110
- <time class="text-xs opacity-50"
111
- >{new Date(item.createdAt).toLocaleDateString()} - {new Date(
112
- item.createdAt,
113
- ).toLocaleTimeString()}</time
114
- >
115
- </div>
116
- <div class="chat-bubble prose">{@html item.bodyHTML}</div>
117
- <!-- <div class="chat-footer opacity-50">Delivered</div> -->
118
- </div>
119
- {/each}
120
- {#if issue?.highlight && issue.state === 'OPEN'}
121
- <span class="badge badge-warning">En attente de réponse de TA part 😉, oui 🫵!</span>
122
- {/if}
123
- {#if issueNumber}
124
- <button on:click={update} aria-label="Actualiser" class="divider"></button>
125
- {/if}
126
-
127
- {#if issue?.state === 'CLOSED'}
128
- <div class="flex justify-end">
129
- <Button onclick={reOpen} class="btn-neutral">Re Ouvrir</Button>
130
- </div>
131
- {:else}
132
- {#if issueNumber === null}
133
- <Field cell={cellBuildor(repo(FilterEntity), 'title')} bind:value={title} />
134
- {/if}
135
- <Textarea
136
- bind:value={content}
137
- placeholder="Un peu de détail c'est pas mal... Fais toi Plaiz' (Tu as même le droit d'utiliser le format markdown!)"
138
- ></Textarea>
139
- <div class="flex justify-between">
140
- {#if issueNumber}
141
- <Button onclick={close} tabindex={-1} class="btn-error">Clore le feedback</Button>
142
- {:else}
143
- <div></div>
144
- {/if}
145
- <Button onclick={send} disabled={disableButton(issueNumber, title, content)}>Envoyer</Button>
146
- </div>
147
- {/if}
148
- {/if}
149
- </div>
@@ -1,22 +0,0 @@
1
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
- $$bindings?: Bindings;
4
- } & Exports;
5
- (internal: unknown, props: Props & {
6
- $$events?: Events;
7
- $$slots?: Slots;
8
- }): Exports & {
9
- $set?: any;
10
- $on?: any;
11
- };
12
- z_$$bindings?: Bindings;
13
- }
14
- declare const DialogIssue: $$__sveltets_2_IsomorphicComponent<{
15
- dialogId: number;
16
- milestoneId: string;
17
- issueNumber: number | null;
18
- }, {
19
- [evt: string]: CustomEvent<any>;
20
- }, {}, {}, string>;
21
- type DialogIssue = InstanceType<typeof DialogIssue>;
22
- export default DialogIssue;
@@ -1,114 +0,0 @@
1
- <script lang="ts">
2
- import { onMount } from 'svelte'
3
-
4
- import { FeedbackController } from '..'
5
- import {
6
- Button,
7
- dialog,
8
- Icon,
9
- LibIcon_Add,
10
- LibIcon_Check,
11
- LibIcon_Search,
12
- Loading,
13
- type ResolvedType,
14
- } from '../../internals'
15
- import DialogIssue from './DialogIssue.svelte'
16
-
17
- export let dialogId: number
18
- const rmvWarning = dialogId
19
-
20
- export let milestoneNumber: number
21
- export let milestoneId: string
22
-
23
- let state: 'loading' | 'done' = 'loading'
24
- let issueState: 'OPEN' | 'CLOSED' = 'OPEN'
25
-
26
- let issues: ResolvedType<ReturnType<typeof FeedbackController.getIssues>> = []
27
-
28
- const update = async (_issueState: 'OPEN' | 'CLOSED') => {
29
- issueState = _issueState
30
- state = 'loading'
31
- issues = await FeedbackController.getIssues(milestoneNumber, issueState)
32
- state = 'done'
33
- }
34
-
35
- onMount(async () => {
36
- await update(issueState)
37
- })
38
- </script>
39
-
40
- <div class="mb-4 grid gap-4">
41
- <div class="flex justify-between">
42
- <div>
43
- <Button
44
- class={issueState === 'OPEN' ? 'btn-primary' : 'btn-ghost'}
45
- onclick={() => update('OPEN')}>En cours</Button
46
- >
47
- <Button
48
- class={issueState === 'CLOSED' ? 'btn-primary' : 'btn-ghost'}
49
- onclick={() => update('CLOSED')}>Clos</Button
50
- >
51
- </div>
52
-
53
- <Button
54
- onclick={async () => {
55
- await dialog.show({
56
- component: DialogIssue,
57
- classes: { root: 'overflow-auto w-[80vh] h-[80vh]' },
58
- props: { issueNumber: null, milestoneId },
59
- detail: {
60
- caption: 'Nouveau Feedback',
61
- icon: { data: LibIcon_Search },
62
- },
63
- })
64
- await update(issueState)
65
- }}
66
- >
67
- <Icon data={LibIcon_Add}></Icon>
68
- </Button>
69
- </div>
70
-
71
- {#each issues as issue}
72
- <Button
73
- onclick={async () => {
74
- await dialog.show({
75
- component: DialogIssue,
76
- classes: { root: 'overflow-auto w-[80vh] h-[80vh]' },
77
- props: { issueNumber: issue.number, milestoneId },
78
- detail: {
79
- caption: '#' + issue.number + ' - ' + issue.titleHTML,
80
- icon: { data: issue.state === 'OPEN' ? LibIcon_Search : LibIcon_Check },
81
- },
82
- })
83
- await update(issueState)
84
- }}
85
- class="btn-neutral"
86
- >
87
- <div class="flex w-full justify-center justify-items-center text-left">
88
- <div class="flex-grow">
89
- <span class="mr-2 inline-block w-8 text-right text-xs text-base-content/60 italic"
90
- >#{issue.number}</span
91
- >
92
- {@html issue.titleHTML}
93
- </div>
94
- {#if issue.highlight}
95
- <span class="badge badge-warning">En attente de réponse</span>
96
- {/if}
97
- </div>
98
- </Button>
99
- {:else}
100
- {#if state === 'loading'}
101
- <Loading class="h-12"></Loading>
102
- <Loading class="h-12"></Loading>
103
- <Loading class="h-12"></Loading>
104
- {:else}
105
- <div class="flex flex-col items-center justify-center p-8 text-center text-gray-500">
106
- <div class="mb-4">
107
- <Icon data={LibIcon_Search} size="4rem"></Icon>
108
- </div>
109
- <p class="text-lg font-medium">Aucun feedback <b>{issueState}</b> pour le moment</p>
110
- <p class="mt-2 text-sm">Soyez le premier à donner votre avis sur cette version !</p>
111
- </div>
112
- {/if}
113
- {/each}
114
- </div>
@@ -1,22 +0,0 @@
1
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
- $$bindings?: Bindings;
4
- } & Exports;
5
- (internal: unknown, props: Props & {
6
- $$events?: Events;
7
- $$slots?: Slots;
8
- }): Exports & {
9
- $set?: any;
10
- $on?: any;
11
- };
12
- z_$$bindings?: Bindings;
13
- }
14
- declare const DialogIssues: $$__sveltets_2_IsomorphicComponent<{
15
- dialogId: number;
16
- milestoneNumber: number;
17
- milestoneId: string;
18
- }, {
19
- [evt: string]: CustomEvent<any>;
20
- }, {}, {}, string>;
21
- type DialogIssues = InstanceType<typeof DialogIssues>;
22
- export default DialogIssues;
@@ -1,43 +0,0 @@
1
- <script lang="ts">
2
- import { onMount } from 'svelte'
3
-
4
- import { FeedbackController } from '../../feedback/FeedbackController'
5
- import { Button, dialog, Loading, type ResolvedType } from '../../internals'
6
- import DialogIssues from './DialogIssues.svelte'
7
-
8
- export let dialogId: number
9
- const rmvWarning = dialogId
10
-
11
- let state: 'loading' | 'done' = 'loading'
12
-
13
- let milestones: ResolvedType<ReturnType<typeof FeedbackController.getMilestones>> = []
14
- onMount(async () => {
15
- milestones = await FeedbackController.getMilestones()
16
- state = 'done'
17
- })
18
- </script>
19
-
20
- <div class="mb-4 grid gap-4">
21
- {#each milestones as milestone}
22
- <Button
23
- onclick={() =>
24
- dialog.show({
25
- component: DialogIssues,
26
- classes: { root: 'overflow-auto w-[85vh] h-[85vh]' },
27
- props: { milestoneNumber: milestone.number, milestoneId: milestone.id },
28
- detail: { caption: milestone.title },
29
- })}
30
- class="btn-neutral"
31
- >
32
- {milestone.title}
33
- </Button>
34
- {:else}
35
- {#if state === 'loading'}
36
- <Loading class="h-12"></Loading>
37
- <Loading class="h-12"></Loading>
38
- <Loading class="h-12"></Loading>
39
- {:else}
40
- <p>No milestones found / Filter too strict!</p>
41
- {/if}
42
- {/each}
43
- </div>
@@ -1,20 +0,0 @@
1
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
- $$bindings?: Bindings;
4
- } & Exports;
5
- (internal: unknown, props: Props & {
6
- $$events?: Events;
7
- $$slots?: Slots;
8
- }): Exports & {
9
- $set?: any;
10
- $on?: any;
11
- };
12
- z_$$bindings?: Bindings;
13
- }
14
- declare const DialogMilestones: $$__sveltets_2_IsomorphicComponent<{
15
- dialogId: number;
16
- }, {
17
- [evt: string]: CustomEvent<any>;
18
- }, {}, {}, string>;
19
- type DialogMilestones = InstanceType<typeof DialogMilestones>;
20
- export default DialogMilestones;
@@ -1,16 +0,0 @@
1
- <script lang="ts">
2
- import { dialog } from '../../internals'
3
- import DialogMilestones from './DialogMilestones.svelte'
4
-
5
- const list = async () => {
6
- await dialog.show({
7
- component: DialogMilestones,
8
- classes: { root: 'overflow-auto w-[90vh] h-[90vh]' },
9
- detail: { caption: 'Feedback' },
10
- })
11
- }
12
- </script>
13
-
14
- <button class="text-secondary" on:click={list}>Feedback</button>
15
-
16
- <!-- <span class="h-9/12 hidden w-9/12"></span> -->
@@ -1,18 +0,0 @@
1
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
- $$bindings?: Bindings;
4
- } & Exports;
5
- (internal: unknown, props: {
6
- $$events?: Events;
7
- $$slots?: Slots;
8
- }): Exports & {
9
- $set?: any;
10
- $on?: any;
11
- };
12
- z_$$bindings?: Bindings;
13
- }
14
- declare const Feedback: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
15
- [evt: string]: CustomEvent<any>;
16
- }, {}, {}, string>;
17
- type Feedback = InstanceType<typeof Feedback>;
18
- export default Feedback;
@@ -1,2 +0,0 @@
1
- import { type EntityOptions } from 'remult';
2
- export declare function FF_Entity<entityType>(key: string, options?: EntityOptions<entityType extends new (...args: any) => any ? InstanceType<entityType> : entityType>): (target: any, info?: import("remult/src/remult3/remult3").ClassDecoratorContextStub<entityType extends infer T ? T extends entityType ? T extends new (...args: any) => any ? entityType : never : never : never> | undefined) => any;
@@ -1,11 +0,0 @@
1
- import { type ClassType, type FieldOptions } from 'remult';
2
- import type { BaseEnum } from './BaseEnum';
3
- export declare class FF_Fields {
4
- static currency<entityType = unknown>(o?: FieldOptions<entityType, number>): import("remult").ClassFieldDecorator<entityType, number | undefined>;
5
- static arrayEnum<enumType = any, entityType = any>(enumClass: enumType, o?: FieldOptions<entityType, any[]>): import("remult").ClassFieldDecorator<entityType, any[] | undefined>;
6
- static arrayEnumToGql<enumType = any, entityType = any>(enumClass: enumType, o?: FieldOptions<entityType, any[]>): import("remult").ClassFieldDecorator<entityType, any[] | undefined>;
7
- static arrayValueList<enumType = any, entityType = any>(enumClass: ClassType<BaseEnum<any>>, o?: FieldOptions<entityType, any[]>): import("remult").ClassFieldDecorator<entityType, any[] | undefined>;
8
- static vector32<entityType = unknown>(...options: (FieldOptions<entityType, number[]> & {
9
- dimensions?: number;
10
- })[]): import("remult").ClassFieldDecorator<entityType, number[] | undefined>;
11
- }
@@ -1,144 +0,0 @@
1
- import { Fields, Validators } from 'remult';
2
- import { displayCurrency } from '../formats';
3
- import { getEnums } from './helper';
4
- // Translate default messages
5
- // REMULT P3 JYC: I need to set this here the one of my app are not overwriting these...
6
- // It look like I have 2 remult loaded... But even trying to remove one, I still have the issue
7
- Validators.unique.defaultMessage = 'Existe déjà!';
8
- Validators.required.defaultMessage = 'Obligatoire!';
9
- export class FF_Fields {
10
- static currency(o) {
11
- // let's return the field
12
- return Fields.number({
13
- ...o,
14
- step: '0.01',
15
- suffix: undefined,
16
- suffixEdit: '€',
17
- inputType: 'number',
18
- displayValue: displayCurrency,
19
- valueConverter: {
20
- toInput(val, inputType) {
21
- const valStr = String(val);
22
- if (valStr.includes('.')) {
23
- const [left, right] = valStr.split('.');
24
- // Take only the 2 first digits after the dot
25
- return `${left}.${right.slice(0, 2)}`;
26
- }
27
- return valStr;
28
- },
29
- fromDb(val) {
30
- if (val) {
31
- return parseFloat(val.toString());
32
- }
33
- return val;
34
- },
35
- },
36
- });
37
- }
38
- static arrayEnum(enumClass, o) {
39
- return Fields.json(() => Array, {
40
- ...o,
41
- inputType: 'selectArrayEnum',
42
- allowNull: false,
43
- valueConverter: {
44
- fromDb: (v) => {
45
- if (!v)
46
- return [];
47
- const keys = v
48
- .slice(1, -1)
49
- .split(',')
50
- .map((s) => {
51
- // @ts-ignore
52
- return enumClass[s];
53
- })
54
- .filter((p) => p !== undefined);
55
- return keys;
56
- },
57
- toDb: (v) => {
58
- const arr = Array.isArray(v) ? v : [v];
59
- return `{${[...new Set((arr ?? []).map((c) => c.id))].join(',')}}`;
60
- },
61
- displayValue: (v) => {
62
- return v.map((c) => c.caption).join(', ');
63
- },
64
- // REMULT P2 Noam: how to do this in an official way?
65
- // @ts-ignore
66
- values: getEnums(enumClass),
67
- },
68
- });
69
- }
70
- static arrayEnumToGql(enumClass, o) {
71
- return Fields.json(() => Array, {
72
- ...o,
73
- inputType: 'selectArrayEnum',
74
- allowNull: false,
75
- valueConverter: {
76
- fromDb: (v) => {
77
- if (!v)
78
- return [];
79
- const keys = v.slice(1, -1).split(',');
80
- return keys;
81
- },
82
- toDb: (v) => {
83
- const arr = Array.isArray(v) ? v : [v];
84
- return `{${[...new Set((arr ?? []).map((c) => c.id))].join(',')}}`;
85
- },
86
- displayValue: (v) => {
87
- return v.map((c) => c.caption).join(', ');
88
- },
89
- // REMULT P2 Noam: how to do this in an official way?
90
- // @ts-ignore
91
- values: getEnums(enumClass),
92
- },
93
- });
94
- }
95
- static arrayValueList(enumClass, o) {
96
- return Fields.json(() => Array, {
97
- ...o,
98
- inputType: 'selectArrayEnum',
99
- allowNull: false,
100
- valueConverter: {
101
- fromDb: (v) => {
102
- if (!v)
103
- return [];
104
- const arr = Array.isArray(v)
105
- ? v
106
- : v?.split(',').flatMap((c) => c.replaceAll('{', '').replaceAll('}', ''));
107
- const list = getEnums(enumClass);
108
- const toRet = [];
109
- for (const s of arr) {
110
- const found = list.find((c) => c.id === s);
111
- if (found) {
112
- toRet.push(found);
113
- }
114
- }
115
- return toRet;
116
- },
117
- toDb: (v) => {
118
- const arr = Array.isArray(v) ? v : [v];
119
- return `{${[...new Set((arr.filter((c) => c !== undefined) ?? []).map((c) => c.id))].join(',')}}`;
120
- },
121
- displayValue: (v) => {
122
- // Nice to have a oneLiner, but if you want custom style, just take the array and do what you want
123
- return v.map((c) => c.caption).join(', ');
124
- },
125
- // REMULT P2 Noam: how to do this in an official way?
126
- // @ts-ignore
127
- values: getEnums(enumClass),
128
- },
129
- });
130
- }
131
- static vector32(...options) {
132
- const dimensions = options[0].dimensions ?? 1024;
133
- return Fields.object({
134
- valueConverter: {
135
- fieldTypeInDb: `F32_BLOB(${dimensions})`,
136
- toDb: (val) => JSON.stringify(val),
137
- // TODO: remove ts-ignore when remult@3.3.0-next.1 is released (that has toDbSql)
138
- // @ts-ignore
139
- toDbSql: (val) => `vector32(${val})`,
140
- fromDb: (val) => Array.from(new Float32Array(val)),
141
- },
142
- }, ...options);
143
- }
144
- }
@@ -1,47 +0,0 @@
1
- import type { Component, SvelteComponent } from 'svelte';
2
- import { type ClassType, type EntityFilter, type FieldMetadata, type Repository } from 'remult';
3
- import type { UnArray } from '../utils/types.js';
4
- export type VisibilityMode = 'view' | 'edit' | 'hide';
5
- type CellInternal<Entity> = {
6
- col?: keyof Entity;
7
- kind?: 'field' | 'field_link' | 'entity_link' | 'slot' | 'header' | 'component' | 'baseItem';
8
- class?: string;
9
- header?: string;
10
- headerSlot?: boolean;
11
- modeEdit?: VisibilityMode;
12
- modeView?: VisibilityMode;
13
- clipboardable?: boolean;
14
- clearable?: boolean;
15
- component?: new (...args: any[]) => SvelteComponent;
16
- componentS5?: Component;
17
- props?: any;
18
- rowToProps?: (row: any) => any;
19
- };
20
- export type Cell<Entity> = CellInternal<Entity> & {
21
- field?: FieldMetadata<any, Entity>;
22
- };
23
- export type CellsInput<Entity> = (keyof Entity | CellInternal<Entity>)[];
24
- /**
25
- * cellsBuildor is a function to build cells for a <Grid /> or <FieldGroup /> component.
26
- *
27
- * ```html
28
- * <script lang="ts">
29
- * import { repo } from 'remult'
30
- *
31
- * const cells = cellsBuildor(repo(Site), ['name', 'description'])
32
- * const store = storeList( repo(Site) )
33
- * $: store.fetch()
34
- * </script>
35
- *
36
- * <Grid {cells} {store} />
37
- * ```
38
- *
39
- */
40
- export declare function cellsBuildor<Entity>(repo: Repository<Entity>, inputBuildor: CellsInput<Entity>): Cell<Entity>[];
41
- export declare function cellBuildor<Entity>(repo: Repository<Entity>, inputBuildor: UnArray<CellsInput<Entity>>): Cell<Entity>;
42
- export declare const fieldsOf: <Entity>(b: Cell<Entity>[]) => FieldMetadata<any, Entity>[];
43
- export declare const getPlaceholder: <Entity>(fields: FieldMetadata<any, Entity>[]) => string;
44
- export declare const buildSearchWhere: <Entity>(entity: ClassType<Entity> | undefined, fields: FieldMetadata<any, Entity>[], search?: string | null) => EntityFilter<Entity>[];
45
- export declare const containsWords: <Entity>(fields: FieldMetadata<any, Entity>[], search: string) => EntityFilter<Entity>;
46
- export declare const buildWhere: <Entity>(entity: ClassType<Entity> | undefined, defaultWhere: EntityFilter<Entity> | undefined, fields_filter: FieldMetadata<any, Entity>[], fields_search: FieldMetadata<any, Entity>[], obj: Record<string, string>) => EntityFilter<Entity>;
47
- export {};