firstly 0.2.1 → 0.4.0

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 (210) hide show
  1. package/CHANGELOG.md +65 -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 -10
  5. package/esm/{internals → core}/BaseEnum.d.ts +1 -1
  6. package/esm/core/FF_Entity.js +5 -0
  7. package/esm/core/helper.d.ts +2 -0
  8. package/esm/core/helper.js +3 -0
  9. package/esm/core/index.d.ts +0 -0
  10. package/esm/core/index.js +5 -0
  11. package/esm/core/tailwind.d.ts +21 -0
  12. package/esm/core/tailwind.js +22 -0
  13. package/esm/core/tryCatch.d.ts +44 -0
  14. package/esm/core/tryCatch.js +34 -0
  15. package/esm/cron/server/index.js +1 -1
  16. package/esm/feedback/FeedbackController.js +3 -2
  17. package/esm/feedback/index.d.ts +7 -2
  18. package/esm/feedback/index.js +1 -2
  19. package/esm/feedback/server/index.d.ts +0 -5
  20. package/esm/feedback/server/index.js +1 -1
  21. package/esm/formats/strings.js +2 -2
  22. package/esm/index.d.ts +16 -0
  23. package/esm/index.js +13 -0
  24. package/esm/svelte/FF_Repo.svelte.d.ts +9 -2
  25. package/esm/svelte/FF_Repo.svelte.js +40 -17
  26. package/esm/svelte/class/SP.svelte.js +14 -2
  27. package/esm/svelte/helpers/debounce.js +1 -1
  28. package/esm/svelte/index.d.ts +2 -24
  29. package/esm/svelte/index.js +2 -22
  30. package/esm/{ui → svelte/ui}/Icon.svelte +1 -1
  31. package/esm/virtual/StateDemoEnum.d.ts +3 -3
  32. package/esm/virtual/StateDemoEnum.js +3 -3
  33. package/esm/virtual/UIEntity.js +1 -2
  34. package/package.json +8 -39
  35. package/esm/auth/AuthController.d.ts +0 -58
  36. package/esm/auth/AuthController.js +0 -114
  37. package/esm/auth/Entities.d.ts +0 -47
  38. package/esm/auth/Entities.js +0 -182
  39. package/esm/auth/README.md +0 -3
  40. package/esm/auth/index.d.ts +0 -5
  41. package/esm/auth/index.js +0 -5
  42. package/esm/auth/server/AuthController.server.d.ts +0 -58
  43. package/esm/auth/server/AuthController.server.js +0 -518
  44. package/esm/auth/server/handleAuth.d.ts +0 -4
  45. package/esm/auth/server/handleAuth.js +0 -142
  46. package/esm/auth/server/handleGuard.d.ts +0 -22
  47. package/esm/auth/server/handleGuard.js +0 -34
  48. package/esm/auth/server/helperDb.d.ts +0 -10
  49. package/esm/auth/server/helperDb.js +0 -56
  50. package/esm/auth/server/helperFirstly.d.ts +0 -1
  51. package/esm/auth/server/helperFirstly.js +0 -9
  52. package/esm/auth/server/helperOslo.d.ts +0 -7
  53. package/esm/auth/server/helperOslo.js +0 -24
  54. package/esm/auth/server/helperRemultServer.d.ts +0 -5
  55. package/esm/auth/server/helperRemultServer.js +0 -44
  56. package/esm/auth/server/helperRole.d.ts +0 -19
  57. package/esm/auth/server/helperRole.js +0 -57
  58. package/esm/auth/server/index.d.ts +0 -8
  59. package/esm/auth/server/index.js +0 -8
  60. package/esm/auth/server/module.d.ts +0 -300
  61. package/esm/auth/server/module.js +0 -230
  62. package/esm/auth/server/providers/github.d.ts +0 -33
  63. package/esm/auth/server/providers/github.js +0 -87
  64. package/esm/auth/server/providers/helperProvider.d.ts +0 -1
  65. package/esm/auth/server/providers/helperProvider.js +0 -25
  66. package/esm/auth/static/assets/Page-BHW08QWz.css +0 -1
  67. package/esm/auth/static/assets/Page-BRNWcY5Z.d.ts +0 -2
  68. package/esm/auth/static/assets/Page-BRNWcY5Z.js +0 -1
  69. package/esm/auth/static/assets/Page-CFcEsGK8.d.ts +0 -2
  70. package/esm/auth/static/assets/Page-CFcEsGK8.js +0 -7
  71. package/esm/auth/static/assets/Page-tLVs5slF.d.ts +0 -2
  72. package/esm/auth/static/assets/Page-tLVs5slF.js +0 -1
  73. package/esm/auth/static/assets/index-D38rqu4x.d.ts +0 -201
  74. package/esm/auth/static/assets/index-D38rqu4x.js +0 -2
  75. package/esm/auth/static/assets/index-DKWpA6v7.css +0 -4
  76. package/esm/auth/static/favicon.svg +0 -79
  77. package/esm/auth/static/index.html +0 -13
  78. package/esm/auth/types.d.ts +0 -73
  79. package/esm/bin/cmd.d.ts +0 -1
  80. package/esm/bin/cmd.js +0 -793
  81. package/esm/feedback/ui/DialogIssue.svelte +0 -149
  82. package/esm/feedback/ui/DialogIssue.svelte.d.ts +0 -22
  83. package/esm/feedback/ui/DialogIssues.svelte +0 -114
  84. package/esm/feedback/ui/DialogIssues.svelte.d.ts +0 -22
  85. package/esm/feedback/ui/DialogMilestones.svelte +0 -43
  86. package/esm/feedback/ui/DialogMilestones.svelte.d.ts +0 -20
  87. package/esm/feedback/ui/Feedback.svelte +0 -16
  88. package/esm/feedback/ui/Feedback.svelte.d.ts +0 -18
  89. package/esm/internals/FF_Entity.d.ts +0 -2
  90. package/esm/internals/FF_Entity.js +0 -21
  91. package/esm/internals/FF_Fields.d.ts +0 -11
  92. package/esm/internals/FF_Fields.js +0 -144
  93. package/esm/internals/cellsBuildor.d.ts +0 -47
  94. package/esm/internals/cellsBuildor.js +0 -140
  95. package/esm/internals/helper.d.ts +0 -49
  96. package/esm/internals/helper.js +0 -162
  97. package/esm/internals/index.d.ts +0 -82
  98. package/esm/internals/index.js +0 -45
  99. package/esm/internals/storeItem.d.ts +0 -28
  100. package/esm/internals/storeItem.js +0 -176
  101. package/esm/internals/storeList.d.ts +0 -34
  102. package/esm/internals/storeList.js +0 -108
  103. package/esm/internals/theme.d.ts +0 -4
  104. package/esm/internals/theme.js +0 -4
  105. package/esm/server/index.d.ts +0 -52
  106. package/esm/server/index.js +0 -87
  107. package/esm/svelte/FF_Cell.svelte +0 -103
  108. package/esm/svelte/FF_Cell.svelte.d.ts +0 -33
  109. package/esm/svelte/FF_Cell_Caption.svelte +0 -20
  110. package/esm/svelte/FF_Cell_Caption.svelte.d.ts +0 -31
  111. package/esm/svelte/FF_Cell_Display.svelte +0 -61
  112. package/esm/svelte/FF_Cell_Display.svelte.d.ts +0 -29
  113. package/esm/svelte/FF_Cell_Edit.svelte +0 -104
  114. package/esm/svelte/FF_Cell_Edit.svelte.d.ts +0 -32
  115. package/esm/svelte/FF_Cell_Error.svelte +0 -20
  116. package/esm/svelte/FF_Cell_Error.svelte.d.ts +0 -31
  117. package/esm/svelte/FF_Cell_Hint.svelte +0 -20
  118. package/esm/svelte/FF_Cell_Hint.svelte.d.ts +0 -31
  119. package/esm/svelte/FF_Config.svelte +0 -29
  120. package/esm/svelte/FF_Config.svelte.d.ts +0 -9
  121. package/esm/svelte/FF_Form.svelte +0 -155
  122. package/esm/svelte/FF_Form.svelte.d.ts +0 -37
  123. package/esm/svelte/FF_Grid.svelte +0 -257
  124. package/esm/svelte/FF_Grid.svelte.d.ts +0 -37
  125. package/esm/svelte/FF_Layout.svelte +0 -62
  126. package/esm/svelte/FF_Layout.svelte.d.ts +0 -31
  127. package/esm/svelte/actions/intersection.d.ts +0 -6
  128. package/esm/svelte/actions/intersection.js +0 -17
  129. package/esm/svelte/customField.d.ts +0 -69
  130. package/esm/svelte/customField.js +0 -4
  131. package/esm/svelte/dialog/DialogManagement.svelte +0 -98
  132. package/esm/svelte/dialog/DialogManagement.svelte.d.ts +0 -18
  133. package/esm/svelte/dialog/DialogPrimitive.svelte +0 -156
  134. package/esm/svelte/dialog/DialogPrimitive.svelte.d.ts +0 -38
  135. package/esm/svelte/dialog/dialog.d.ts +0 -58
  136. package/esm/svelte/dialog/dialog.js +0 -130
  137. package/esm/svelte/ff_Config.svelte.d.ts +0 -91
  138. package/esm/svelte/ff_Config.svelte.js +0 -111
  139. package/esm/svelte/firstly.css +0 -14
  140. package/esm/svelte/helpers.d.ts +0 -30
  141. package/esm/svelte/helpers.js +0 -38
  142. package/esm/svelte/tryCatch.d.ts +0 -12
  143. package/esm/svelte/tryCatch.js +0 -18
  144. package/esm/sveltekit/server/index.d.ts +0 -5
  145. package/esm/sveltekit/server/index.js +0 -24
  146. package/esm/ui/Button.svelte +0 -138
  147. package/esm/ui/Button.svelte.d.ts +0 -13
  148. package/esm/ui/Clipboardable.svelte +0 -25
  149. package/esm/ui/Clipboardable.svelte.d.ts +0 -12
  150. package/esm/ui/Field.svelte +0 -382
  151. package/esm/ui/Field.svelte.d.ts +0 -40
  152. package/esm/ui/FieldGroup.svelte +0 -117
  153. package/esm/ui/FieldGroup.svelte.d.ts +0 -44
  154. package/esm/ui/Grid.svelte +0 -265
  155. package/esm/ui/Grid.svelte.d.ts +0 -57
  156. package/esm/ui/Grid2.svelte +0 -293
  157. package/esm/ui/Grid2.svelte.d.ts +0 -57
  158. package/esm/ui/GridLoading.svelte +0 -58
  159. package/esm/ui/GridLoading.svelte.d.ts +0 -23
  160. package/esm/ui/GridPaginate.svelte +0 -69
  161. package/esm/ui/GridPaginate.svelte.d.ts +0 -23
  162. package/esm/ui/GridPaginate2.svelte +0 -25
  163. package/esm/ui/GridPaginate2.svelte.d.ts +0 -7
  164. package/esm/ui/Loading.svelte +0 -16
  165. package/esm/ui/Loading.svelte.d.ts +0 -31
  166. package/esm/ui/Tooltip.svelte +0 -45
  167. package/esm/ui/Tooltip.svelte.d.ts +0 -32
  168. package/esm/ui/dialog/DialogForm.svelte +0 -76
  169. package/esm/ui/dialog/DialogForm.svelte.d.ts +0 -21
  170. package/esm/ui/dialog/DialogManagement.svelte +0 -96
  171. package/esm/ui/dialog/DialogManagement.svelte.d.ts +0 -26
  172. package/esm/ui/dialog/DialogPrimitive.svelte +0 -90
  173. package/esm/ui/dialog/DialogPrimitive.svelte.d.ts +0 -38
  174. package/esm/ui/dialog/FormEditAction.svelte +0 -62
  175. package/esm/ui/dialog/FormEditAction.svelte.d.ts +0 -31
  176. package/esm/ui/dialog/dialog.d.ts +0 -60
  177. package/esm/ui/dialog/dialog.js +0 -100
  178. package/esm/ui/index.d.ts +0 -6
  179. package/esm/ui/index.js +0 -20
  180. package/esm/ui/internals/FieldContainer.svelte +0 -39
  181. package/esm/ui/internals/FieldContainer.svelte.d.ts +0 -18
  182. package/esm/ui/internals/Input.svelte +0 -143
  183. package/esm/ui/internals/Input.svelte.d.ts +0 -37
  184. package/esm/ui/internals/Textarea.svelte +0 -66
  185. package/esm/ui/internals/Textarea.svelte.d.ts +0 -33
  186. package/esm/ui/internals/select/MultiSelectMelt.svelte +0 -260
  187. package/esm/ui/internals/select/MultiSelectMelt.svelte.d.ts +0 -32
  188. package/esm/ui/internals/select/Select2.svelte +0 -88
  189. package/esm/ui/internals/select/Select2.svelte.d.ts +0 -12
  190. package/esm/ui/internals/select/SelectMelt.svelte +0 -280
  191. package/esm/ui/internals/select/SelectMelt.svelte.d.ts +0 -40
  192. package/esm/ui/internals/select/SelectRadio.svelte +0 -43
  193. package/esm/ui/internals/select/SelectRadio.svelte.d.ts +0 -27
  194. package/esm/ui/link/Link.svelte +0 -33
  195. package/esm/ui/link/Link.svelte.d.ts +0 -33
  196. package/esm/ui/link/LinkPlus.svelte +0 -63
  197. package/esm/ui/link/LinkPlus.svelte.d.ts +0 -9
  198. package/esm/utils/tailwind.d.ts +0 -2
  199. package/esm/utils/tailwind.js +0 -3
  200. package/esm/utils/transition.d.ts +0 -9
  201. package/esm/utils/transition.js +0 -33
  202. package/esm/utils/types.js +0 -1
  203. /package/esm/{internals → core}/BaseEnum.js +0 -0
  204. /package/esm/{internals → core}/common.d.ts +0 -0
  205. /package/esm/{internals → core}/common.js +0 -0
  206. /package/esm/{utils → core}/types.d.ts +0 -0
  207. /package/esm/{auth → core}/types.js +0 -0
  208. /package/esm/{ui → svelte/ui}/Icon.svelte.d.ts +0 -0
  209. /package/esm/{ui → svelte/ui}/LibIcon.d.ts +0 -0
  210. /package/esm/{ui → svelte/ui}/LibIcon.js +0 -0
@@ -1,382 +0,0 @@
1
- <script lang="ts" generics="T extends Record<any, any>">
2
- import { createEventDispatcher } from 'svelte'
3
- import type { HTMLInputAttributes } from 'svelte/elements'
4
-
5
- import { type FieldMetadata, type FindOptions } from 'remult'
6
- import { midTrim } from '@kitql/helpers'
7
-
8
- import { suffixWithS } from '../formats/strings'
9
- import { type BaseItem, type Cell } from '../internals'
10
- import {
11
- displayWithDefaultAndSuffix,
12
- getEntityDisplayValue,
13
- getFieldMetaType,
14
- getFirstInterestingField,
15
- type MetaTypeRelation,
16
- } from '../internals/helper.js'
17
- import { tw } from '../utils/tailwind'
18
- import Clipboardable from './Clipboardable.svelte'
19
- import Icon from './Icon.svelte'
20
- import FieldContainer from './internals/FieldContainer.svelte'
21
- import Input from './internals/Input.svelte'
22
- import MultiSelectMelt from './internals/select/MultiSelectMelt.svelte'
23
- import SelectMelt from './internals/select/SelectMelt.svelte'
24
- import SelectRadio from './internals/select/SelectRadio.svelte'
25
- import Textarea from './internals/Textarea.svelte'
26
- import { LibIcon_Eye, LibIcon_EyeOff } from './LibIcon'
27
- import Link from './link/Link.svelte'
28
- import LinkPlus from './link/LinkPlus.svelte'
29
-
30
- // import Select2 from './internals/select/Select2.svelte'
31
-
32
- export let cell: Cell<T>
33
- export let value: HTMLInputAttributes['value'] = undefined
34
-
35
- // values of other fields in same context e.g. in form
36
- export let cellsValues: any = {}
37
-
38
- export let withDedounce: boolean = false
39
-
40
- export let error = ''
41
-
42
- export let mode: 'edit' | 'view' | 'filtre' = 'edit'
43
-
44
- export let focus: boolean = false
45
-
46
- export let clearable: boolean | undefined = undefined
47
- export let disabled = false
48
- export let createRequest: ((args: { input: string; id: string }) => void) | undefined = undefined
49
-
50
- const dispatch = createEventDispatcher()
51
-
52
- function dispatchSelected(_data: BaseItem | BaseItem[] | undefined) {
53
- value = _data
54
- dispatch('selected', _data)
55
- }
56
- $: metaType = getFieldMetaType(cell.field!, mode === 'filtre')
57
-
58
- const isViewMode = (_mode: 'edit' | 'view' | 'filtre', _field?: FieldMetadata<any, any>) => {
59
- return _mode === 'view' || _field?.dbReadOnly || _field?.options.allowApiUpdate === false
60
- }
61
-
62
- const common = (_field?: FieldMetadata<any, any>, isLight = false) => {
63
- let toRet = {
64
- id: _field?.key ?? 'SOMETHING_AT_LEAST',
65
- disabled: _field?.dbReadOnly || _field?.options.allowApiUpdate === false || disabled,
66
- placeholder: _field?.options?.placeholder ?? undefined,
67
- }
68
- if (isLight) {
69
- return toRet
70
- }
71
- return {
72
- ...toRet,
73
- step: _field?.options?.step ?? undefined,
74
- name: _field?.key,
75
- // required: _field?.allowNull === false,
76
- }
77
- }
78
-
79
- const toInput = (_metadata?: FieldMetadata<any, any>, _value?: HTMLInputAttributes['value']) => {
80
- try {
81
- return _metadata?.valueConverter.toInput(_value, metaType.subKind)
82
- } catch (error) {
83
- console.error(`error toInput w field '${_metadata?.key}'`, error)
84
- }
85
- }
86
-
87
- const fromInput = (_metadata: FieldMetadata<any, any>, _value: HTMLInputAttributes['value']) => {
88
- try {
89
- // REMULT default for numbers ?
90
- if (_metadata.allowNull && _value === null) {
91
- return null
92
- }
93
- return _metadata?.valueConverter.fromInput(_value, metaType.subKind)
94
- } catch (error) {
95
- console.error(`error fromInput w field '${_metadata.key}'`, error)
96
- }
97
- }
98
-
99
- // let items: any[] = []
100
-
101
- const getId = () => {
102
- return value?.id || value
103
- }
104
-
105
- const getLoadOptions = async (cellsValues: any, str: string) => {
106
- if (metaType.kind !== 'relation') {
107
- return { items: [], totalCount: 0 }
108
- }
109
- // To make TS happy
110
- const metaTypeObj = { ...metaType } as MetaTypeRelation
111
-
112
- let findToUse: FindOptions<any> = {}
113
- if (metaTypeObj.repoTarget.metadata.options.searchableFind) {
114
- // narrowFind at the end because searchableFind should not change the narrowed part!
115
- findToUse = metaTypeObj.repoTarget.metadata.options.searchableFind(str)
116
- } else {
117
- if (str) {
118
- const field = getFirstInterestingField(metaTypeObj.repoTarget)
119
- findToUse = { where: { [field.key]: { $contains: str } } }
120
- }
121
- }
122
-
123
- const foEdit = cell.field?.options.findOptionsForEdit
124
- const narrowFindEditWhere =
125
- typeof foEdit === 'function'
126
- ? (foEdit(cellsValues).where ?? {})
127
- : typeof foEdit === 'object'
128
- ? (foEdit.where ?? {})
129
- : {}
130
-
131
- // @ts-ignore
132
- const foCrud = cell.field?.options.findOptions
133
- const narrowFindCrudWhere =
134
- typeof foCrud === 'function'
135
- ? (foCrud().where ?? {})
136
- : typeof foCrud === 'object'
137
- ? (foCrud.where ?? {})
138
- : {}
139
-
140
- findToUse = {
141
- include: { ...(findToUse.include ?? {}) },
142
- where: { $and: [findToUse.where, narrowFindEditWhere, narrowFindCrudWhere] },
143
- }
144
-
145
- // 24 here is a "magic number"!
146
- let limit = cell.field?.options.findOptionsLimit ?? 24
147
-
148
- const arr = []
149
- arr.push(
150
- ...(await metaTypeObj.repoTarget.find({
151
- ...findToUse,
152
- limit,
153
- })),
154
- )
155
-
156
- let totalCount = arr.length
157
- // If we are at the limit... there is probably more! How many?
158
- if (totalCount === limit) {
159
- const agg = await metaTypeObj.repoTarget.aggregate({ where: findToUse.where })
160
- totalCount = agg.$count
161
- }
162
-
163
- if (!cell.field?.options.multiSelect) {
164
- // let's get the current item if it's not in the default list (only when there is no searchFilter going on)
165
- if (str === '' && getId() && !arr.find((r) => String(r.id) === String(getId()))) {
166
- arr.unshift(await metaTypeObj.repoTarget.findId(getId()))
167
- }
168
- }
169
-
170
- return { items: arr.map((r) => getEntityDisplayValue(metaTypeObj.repoTarget, r)), totalCount }
171
- }
172
-
173
- const getMultiValues = (value: any) => {
174
- return (value ?? []).map((c: any) => c.id) || value
175
- }
176
-
177
- const calcSuffix = (value: any) => {
178
- if (cell.field?.options.suffixEdit) {
179
- if (cell.field?.options.suffixEditWithS) {
180
- return suffixWithS(value, cell.field?.options.suffixEdit)
181
- } else {
182
- return cell.field?.options.suffixEdit
183
- }
184
- }
185
-
186
- if (cell.field?.options.suffix) {
187
- if (cell.field?.options.suffixWithS) {
188
- return suffixWithS(value, cell.field?.options.suffix)
189
- } else {
190
- return cell.field?.options.suffix
191
- }
192
- }
193
-
194
- return ''
195
- }
196
-
197
- let textpsdVisible = false
198
- </script>
199
-
200
- <FieldContainer
201
- forId={cell.field?.key ?? ''}
202
- label={cell?.header ?? cell.field?.caption ?? cell.field?.key}
203
- required={!cell.field?.allowNull && mode === 'edit' && metaType.subKind !== 'checkbox'}
204
- {error}
205
- classes={{ slot: metaType.subKind === 'textarea' ? 'h-24 items-start' : '' }}
206
- >
207
- {@const clearableComputed =
208
- cell.clearable || clearable || (mode === 'filtre' && clearable === undefined)}
209
- {#if isViewMode(mode, cell.field)}
210
- <span class="flex items-center pr-4 pl-2">
211
- {#if cell.field?.inputType === 'checkbox'}
212
- <input
213
- type="checkbox"
214
- {...common(cell.field)}
215
- class="checkbox ml-2 border-base-content/60"
216
- disabled
217
- checked={value}
218
- />
219
- {:else if metaType.kind === 'relation'}
220
- {@const item = getEntityDisplayValue(metaType.repoTarget, value)}
221
- <div class={tw('flex items-center gap-4', 'h-12', 'pl-2')}>
222
- <LinkPlus {item}></LinkPlus>
223
- </div>
224
- {:else if metaType.kind === 'enum'}
225
- {@const v = displayWithDefaultAndSuffix(cell.field, value)}
226
- <div class="ml-2 flex h-12 items-center gap-4">
227
- {#if value?.icon}
228
- <Icon {...value.icon} />
229
- {/if}
230
- <Clipboardable value={v}>{v}</Clipboardable>
231
- </div>
232
- {:else if metaType.subKind === 'link'}
233
- <div class="ml-2 flex h-12 max-w-sm items-center gap-4 truncate">
234
- {#if value}
235
- <Link href={value} target="_blank" isExternal
236
- >{midTrim(value.replaceAll('https://', '').replaceAll('www.', ''), {
237
- len: 38,
238
- midStr: ' ... ',
239
- })}</Link
240
- >
241
- {:else}
242
- <span class="text-base-content/30">-</span>
243
- {/if}
244
- </div>
245
- {:else}
246
- {@const v = displayWithDefaultAndSuffix(cell.field, value)}
247
- <div
248
- class="ml-2 pb-2 flex h-12 w-full items-center {metaType.subKind === 'number' ? 'justify-end' : ''}"
249
- >
250
- <Clipboardable value={v}>{v}</Clipboardable>
251
- </div>
252
- {/if}
253
- </span>
254
- {:else if metaType.kind === 'relation'}
255
- {#if metaType.field.options.multiSelect}
256
- <MultiSelectMelt
257
- {...common(cell.field, true)}
258
- clearable={clearableComputed}
259
- loadOptions={async (str) => await getLoadOptions(cellsValues, str)}
260
- values={value}
261
- on:selected={(e) => dispatchSelected(e.detail)}
262
- />
263
- {:else}
264
- <!-- {items} -->
265
- <SelectMelt
266
- {focus}
267
- {...common(cell.field, true)}
268
- clearable={clearableComputed}
269
- loadOptions={async (str) => await getLoadOptions(cellsValues, str)}
270
- value={value?.id || value}
271
- on:selected={(e) => dispatchSelected(e.detail)}
272
- on:issue={(e) => {
273
- error = e.detail
274
- }}
275
- createOptionWhenNoResult={!!cell.field?.options.createOptionWhenNoResult}
276
- {createRequest}
277
- default_select_if_one_item={!!cell.field?.options.default_select_if_one_item}
278
- />
279
- {/if}
280
- {:else if metaType.kind === 'enum'}
281
- {#if metaType.field.options.multiSelect || metaType.subKind === 'multi'}
282
- <MultiSelectMelt
283
- {...common(cell.field, true)}
284
- clearable={clearableComputed}
285
- items={metaType.values}
286
- values={getMultiValues(value)}
287
- on:selected={(e) => {
288
- dispatchSelected(e.detail)
289
- }}
290
- />
291
- {:else if metaType.values.length <= (cell.field?.options.styleRadioUntil ?? 3) && !clearableComputed}
292
- <SelectRadio
293
- {...common(cell.field, true)}
294
- items={metaType.values}
295
- value={value?.id || value}
296
- on:selected={(e) => dispatchSelected(e.detail)}
297
- />
298
- {:else}
299
- <!-- <Select2
300
- {...common(cell.field, true)}
301
- clearable={clearableComputed}
302
- items={metaType.values}
303
- value={value?.id || value}
304
- onChange={(e) => dispatchSelected(metaType.values.find((v) => v.id === e))}
305
- /> -->
306
- <SelectMelt
307
- {focus}
308
- {...common(cell.field, true)}
309
- clearable={clearableComputed}
310
- items={metaType.values}
311
- value={value?.id || value}
312
- on:selected={(e) => dispatchSelected(e.detail)}
313
- on:issue={(e) => {
314
- error = e.detail
315
- }}
316
- />
317
- {/if}
318
- {:else if metaType.subKind === 'checkbox'}
319
- <div class="grid content-center items-center pl-4 pb-2">
320
- <input
321
- type="checkbox"
322
- {...{ ...common(cell.field), required: undefined }}
323
- class="checkbox"
324
- checked={value}
325
- on:input={(e) => {
326
- // @ts-ignore
327
- value = e.target.checked
328
- dispatchSelected(value)
329
- }}
330
- />
331
- </div>
332
- {:else if metaType.subKind === 'text' || metaType.subKind === 'email' || metaType.subKind === 'password' || metaType.subKind === 'date' || metaType.subKind === 'number' || metaType.subKind === 'textpsd' || metaType.subKind === 'link'}
333
- <div class="input inline-flex w-full items-center pl-2">
334
- <Input
335
- {focus}
336
- {...common(cell.field)}
337
- autocomplete="off"
338
- class={tw(
339
- `join-item w-full placeholder:text-base-content/30`,
340
- metaType.subKind === 'number' && 'text-end',
341
- )}
342
- style={cell.field?.inputType === 'textpsd' && textpsdVisible === false
343
- ? 'filter: blur(0.2rem)'
344
- : ''}
345
- type={metaType.subKind.replaceAll('textpsd', 'text').replaceAll('link', 'text')}
346
- value={toInput(cell.field, value)}
347
- {withDedounce}
348
- on:input={(e) => {
349
- // @ts-ignore
350
- value = fromInput(cell.field, e.detail.value)
351
- dispatchSelected(value)
352
- }}
353
- {...$$restProps}
354
- />
355
- {calcSuffix(value)}
356
- {#if cell.field?.inputType === 'textpsd'}
357
- <button
358
- on:click={(e) => {
359
- e.preventDefault()
360
- textpsdVisible = !textpsdVisible
361
- }}
362
- class="btn-ghost btn-sm"
363
- >
364
- <Icon data={textpsdVisible ? LibIcon_Eye : LibIcon_EyeOff} />
365
- </button>
366
- {/if}
367
- </div>
368
- {:else if metaType.subKind === 'textarea'}
369
- <Textarea
370
- {focus}
371
- {...common(cell.field)}
372
- value={toInput(cell.field, value)}
373
- on:input={(e) => {
374
- // @ts-ignore
375
- value = fromInput(cell.field, e.detail.value)
376
- }}
377
- />
378
- {:else}
379
- <!-- This shoud NEVER be displayed -->
380
- <span class="flex items-center pl-2 text-error">Type "{cell.field?.inputType}" not managed!</span>
381
- {/if}
382
- </FieldContainer>
@@ -1,40 +0,0 @@
1
- import type { HTMLInputAttributes } from 'svelte/elements';
2
- import { type Cell } from '../internals';
3
- declare class __sveltets_Render<T extends Record<any, any>> {
4
- props(): {
5
- [x: string]: any;
6
- cell: Cell<T>;
7
- value?: HTMLInputAttributes["value"];
8
- cellsValues?: any;
9
- withDedounce?: boolean | undefined;
10
- error?: string | undefined;
11
- mode?: "edit" | "view" | "filtre" | undefined;
12
- focus?: boolean | undefined;
13
- clearable?: boolean | undefined | undefined;
14
- disabled?: boolean | undefined;
15
- createRequest?: ((args: {
16
- input: string;
17
- id: string;
18
- }) => void) | undefined;
19
- };
20
- events(): {
21
- selected: CustomEvent<any>;
22
- } & {
23
- [evt: string]: CustomEvent<any>;
24
- };
25
- slots(): {};
26
- bindings(): string;
27
- exports(): {};
28
- }
29
- interface $$IsomorphicComponent {
30
- new <T extends Record<any, any>>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
31
- $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
32
- } & ReturnType<__sveltets_Render<T>['exports']>;
33
- <T extends Record<any, any>>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {
34
- $$events?: ReturnType<__sveltets_Render<T>['events']>;
35
- }): ReturnType<__sveltets_Render<T>['exports']>;
36
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
37
- }
38
- declare const Field: $$IsomorphicComponent;
39
- type Field<T extends Record<any, any>> = InstanceType<typeof Field<T>>;
40
- export default Field;
@@ -1,117 +0,0 @@
1
- <script lang="ts" generics="T extends Record<any, any>">
2
- import { createEventDispatcher } from 'svelte'
3
-
4
- import type { FieldMetadata } from 'remult'
5
- import { getRelationFieldInfo } from 'remult/internals'
6
-
7
- import { tw, type StoreItem } from '../internals'
8
- import type { Cell } from '../internals/cellsBuildor'
9
- import Field from './Field.svelte'
10
- import FieldContainer from './internals/FieldContainer.svelte'
11
- import Loading from './Loading.svelte'
12
-
13
- type Mode = 'edit' | 'view' | 'filtre'
14
- export let mode: Mode = 'edit'
15
-
16
- export let cells: Cell<T>[]
17
- export let store: StoreItem<T>
18
-
19
- export let focusKey: string | null | undefined = null
20
- export let createRequest: ((args: { input: string; id: string }) => void) | undefined = undefined
21
-
22
- const getError = (errors: any, field: FieldMetadata<any, any>) => {
23
- const fo = getRelationFieldInfo(field)
24
- const keyToUse = fo?.options?.field
25
- if (errors && keyToUse && errors[keyToUse]) {
26
- return errors[keyToUse]
27
- } else if (errors && errors[field.key]) {
28
- return errors[field.key]
29
- }
30
- return undefined
31
- }
32
-
33
- const shouldHide = (c: Cell<T>, mode: Mode) => {
34
- if (mode === 'edit' && c.modeEdit === 'hide') {
35
- return true
36
- }
37
- if (mode === 'view' && c.modeView === 'hide') {
38
- return true
39
- }
40
- return false
41
- }
42
-
43
- const modeToUse = (c: Cell<T>, mode: Mode) => {
44
- if (mode === 'edit' && c.modeEdit === 'view') {
45
- return 'view'
46
- }
47
- if (mode === 'view' && c.modeView === 'edit') {
48
- return 'edit'
49
- }
50
- return mode
51
- }
52
-
53
- const dispatch = createEventDispatcher()
54
-
55
- function dispatchChanged(_data: T | undefined) {
56
- dispatch('changed', _data)
57
- }
58
-
59
- $: dispatchChanged($store.item)
60
-
61
- let size = ['', 'w-1/2', 'w-1/3', 'w-1/4', 'w-1/5', 'w-1/6']
62
-
63
- function isToFocus(
64
- currentKey: string | undefined,
65
- focusKey: string | null | undefined,
66
- i: number,
67
- ): boolean {
68
- if (focusKey === null || focusKey === undefined) {
69
- if (i === 0) {
70
- return true
71
- }
72
- return false
73
- }
74
- return focusKey === currentKey
75
- }
76
- </script>
77
-
78
- {#each cells as cell, i}
79
- {@const focus = isToFocus(cell.field?.key, focusKey, i)}
80
- {#if shouldHide(cell, mode)}
81
- <!-- Do nothing -->
82
- {:else if cell.field && !cell.field.includedInApi($store.item)}
83
- <!-- Do nothing, but keep the class... -->
84
- <div class={cell.class}></div>
85
- {:else}
86
- <div class={cell.class}>
87
- {#if cell.kind === 'header'}
88
- <span>{cell.header}</span>
89
- {:else if cell.field && (!$store || $store.loading)}
90
- <!-- If the store is not ready mdiYeast, or in loading... -->
91
- <FieldContainer label={cell.field.caption} forId={cell.field.key}>
92
- <Loading
93
- class={tw(
94
- `mx-4 my-3 h-6`,
95
- size[parseInt((((i + 1) * Math.random() * size.length) % size.length).toString())],
96
- )}
97
- />
98
- </FieldContainer>
99
- {:else if cell.kind === 'slot'}
100
- <slot name="field" field={cell.field} {focus} />
101
- {:else if cell.field && $store.item}
102
- <Field
103
- mode={modeToUse(cell, mode)}
104
- {cell}
105
- cellsValues={$store.item}
106
- bind:value={$store.item[cell.field.key]}
107
- error={getError($store.errors, cell.field)}
108
- {focus}
109
- {createRequest}
110
- />
111
- <!-- disabled={isDisableFieldDynamic(cell)} -->
112
- {:else}
113
- FieldGroup : Case not handled
114
- {/if}
115
- </div>
116
- {/if}
117
- {/each}
@@ -1,44 +0,0 @@
1
- import type { FieldMetadata } from 'remult';
2
- import { type StoreItem } from '../internals';
3
- import type { Cell } from '../internals/cellsBuildor';
4
- declare class __sveltets_Render<T extends Record<any, any>> {
5
- props(): {
6
- mode?: "view" | "edit" | "filtre";
7
- cells: Cell<T>[];
8
- store: StoreItem<T>;
9
- focusKey?: string | null | undefined;
10
- createRequest?: ((args: {
11
- input: string;
12
- id: string;
13
- }) => void) | undefined;
14
- };
15
- events(): {
16
- changed: CustomEvent<any>;
17
- } & {
18
- [evt: string]: CustomEvent<any>;
19
- };
20
- slots(): {
21
- field: {
22
- field: FieldMetadata<any, T> | undefined;
23
- focus: typeof focus;
24
- };
25
- };
26
- bindings(): string;
27
- exports(): {};
28
- }
29
- interface $$IsomorphicComponent {
30
- new <T extends Record<any, any>>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']> & {
31
- children?: any;
32
- }>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
33
- $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
34
- } & ReturnType<__sveltets_Render<T>['exports']>;
35
- <T extends Record<any, any>>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {
36
- $$events?: ReturnType<__sveltets_Render<T>['events']>;
37
- $$slots?: ReturnType<__sveltets_Render<T>['slots']>;
38
- children?: any;
39
- }): ReturnType<__sveltets_Render<T>['exports']>;
40
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
41
- }
42
- declare const FieldGroup: $$IsomorphicComponent;
43
- type FieldGroup<T extends Record<any, any>> = InstanceType<typeof FieldGroup<T>>;
44
- export default FieldGroup;