fuma 1.0.15 → 1.0.17

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 (118) hide show
  1. package/dist/private/Meta.svelte +27 -32
  2. package/dist/private/Meta.svelte.d.ts +0 -1
  3. package/dist/private/api.d.ts +1 -1
  4. package/dist/ui/badge/Badge.svelte +3 -4
  5. package/dist/ui/button/ButtonCopy.svelte +31 -37
  6. package/dist/ui/button/ButtonDelete.svelte +21 -23
  7. package/dist/ui/button/ButtonDelete.svelte.d.ts +0 -1
  8. package/dist/ui/card/Card.svelte +10 -13
  9. package/dist/ui/card/Card.svelte.d.ts +0 -1
  10. package/dist/ui/card/CardBasic.svelte +4 -5
  11. package/dist/ui/card/CardBasic.svelte.d.ts +0 -1
  12. package/dist/ui/card/CardCollapse.svelte +31 -35
  13. package/dist/ui/card/CardCollapse.svelte.d.ts +0 -1
  14. package/dist/ui/card/CardFullScreen.svelte +6 -8
  15. package/dist/ui/card/CardFullScreen.svelte.d.ts +0 -3
  16. package/dist/ui/card/CardLink.svelte +4 -5
  17. package/dist/ui/card/CardLink.svelte.d.ts +0 -1
  18. package/dist/ui/dialog/Dialog.svelte +34 -41
  19. package/dist/ui/dialog/Dialog.svelte.d.ts +0 -1
  20. package/dist/ui/dialog/DialogConfirm.svelte +4 -6
  21. package/dist/ui/dialog/DialogConfirm.svelte.d.ts +0 -1
  22. package/dist/ui/drawer/Drawer.svelte +37 -46
  23. package/dist/ui/drawer/Drawer.svelte.d.ts +0 -16
  24. package/dist/ui/form/Form.svelte +82 -100
  25. package/dist/ui/form/Form.svelte.d.ts +0 -1
  26. package/dist/ui/form/FormInput.svelte +6 -12
  27. package/dist/ui/form/FormInput.svelte.d.ts +0 -18
  28. package/dist/ui/form/FormSection.svelte +16 -23
  29. package/dist/ui/form/formInput.d.ts +0 -1
  30. package/dist/ui/icon/Icon.svelte +32 -35
  31. package/dist/ui/input/FormControl.svelte +32 -38
  32. package/dist/ui/input/FormControl.svelte.d.ts +0 -3
  33. package/dist/ui/input/InputBoolean.svelte +8 -13
  34. package/dist/ui/input/InputBoolean.svelte.d.ts +0 -3
  35. package/dist/ui/input/InputCheckboxs.svelte +20 -22
  36. package/dist/ui/input/InputCheckboxs.svelte.d.ts +0 -3
  37. package/dist/ui/input/InputCheckboxsMenu.svelte +35 -51
  38. package/dist/ui/input/InputCheckboxsMenu.svelte.d.ts +0 -3
  39. package/dist/ui/input/InputCheckboxsTree.svelte +6 -9
  40. package/dist/ui/input/InputCheckboxsTreeNodes.svelte +27 -35
  41. package/dist/ui/input/InputCombo.svelte +34 -43
  42. package/dist/ui/input/InputCombo.svelte.d.ts +0 -3
  43. package/dist/ui/input/InputDate.svelte +17 -22
  44. package/dist/ui/input/InputDateTime.svelte +18 -23
  45. package/dist/ui/input/InputImage.svelte +45 -52
  46. package/dist/ui/input/InputImage.svelte.d.ts +0 -1
  47. package/dist/ui/input/InputImagePreview.svelte +20 -24
  48. package/dist/ui/input/InputNumber.svelte +5 -10
  49. package/dist/ui/input/InputOptionInParam.svelte +10 -12
  50. package/dist/ui/input/InputOptions.svelte +34 -40
  51. package/dist/ui/input/InputPassword.svelte +5 -7
  52. package/dist/ui/input/InputPassword.svelte.d.ts +0 -3
  53. package/dist/ui/input/InputRadio.svelte +32 -36
  54. package/dist/ui/input/InputRadio.svelte.d.ts +0 -3
  55. package/dist/ui/input/InputRelation.svelte +67 -83
  56. package/dist/ui/input/InputRelation.svelte.d.ts +0 -1
  57. package/dist/ui/input/InputRelations.svelte +79 -92
  58. package/dist/ui/input/InputSearch.svelte +10 -13
  59. package/dist/ui/input/InputSelect.svelte +28 -39
  60. package/dist/ui/input/InputText.svelte +7 -8
  61. package/dist/ui/input/InputTextarea.svelte +6 -6
  62. package/dist/ui/input/InputTime.svelte +23 -29
  63. package/dist/ui/input/RelationAfter.svelte +9 -13
  64. package/dist/ui/input/SelectorList.svelte +12 -16
  65. package/dist/ui/input/SelectorList.svelte.d.ts +0 -4
  66. package/dist/ui/input/textRich/InputTextRich.svelte +50 -52
  67. package/dist/ui/input/textRich/InputTextRich.svelte.d.ts +9 -3
  68. package/dist/ui/input/textRich/SuggesionList.svelte +9 -13
  69. package/dist/ui/input/textRich/ToolMark.svelte +9 -12
  70. package/dist/ui/input/textRich/ToolMarkColor.svelte +11 -15
  71. package/dist/ui/input/textRich/ToolMarkLink.svelte +38 -46
  72. package/dist/ui/input/textRich/ToolMenu.svelte +19 -34
  73. package/dist/ui/input/textRich/ToolMenuAlign.svelte +9 -13
  74. package/dist/ui/input/textRich/ToolMenuInsert.svelte +7 -12
  75. package/dist/ui/input/textRich/ToolMenuNode.svelte +10 -14
  76. package/dist/ui/input/textRich/ToolsBar.svelte +11 -15
  77. package/dist/ui/login/Login.svelte +30 -36
  78. package/dist/ui/menu/ContextMenu.svelte +31 -37
  79. package/dist/ui/menu/ContextMenu.svelte.d.ts +0 -1
  80. package/dist/ui/menu/DropDown.svelte +83 -92
  81. package/dist/ui/menu/DropDown.svelte.d.ts +0 -1
  82. package/dist/ui/menu/DropDownMenu.svelte +18 -25
  83. package/dist/ui/menu/DropDownMenu.svelte.d.ts +0 -1
  84. package/dist/ui/mode/ToggleMode.svelte +14 -15
  85. package/dist/ui/mode/ToggleMode.svelte.d.ts +1 -6
  86. package/dist/ui/pagination/Pagination.svelte +8 -9
  87. package/dist/ui/placeholder/Placeholder.svelte +3 -4
  88. package/dist/ui/placeholder/Placeholder.svelte.d.ts +0 -1
  89. package/dist/ui/placeholder/PlaceholderImage.svelte +4 -6
  90. package/dist/ui/placeholder/PlaceholderImage.svelte.d.ts +0 -1
  91. package/dist/ui/range/RangePicker.svelte +62 -75
  92. package/dist/ui/range/RangePicker.svelte.d.ts +2 -2
  93. package/dist/ui/range/RangePickerButton.svelte +35 -43
  94. package/dist/ui/slot/Slot.svelte +25 -42
  95. package/dist/ui/slot/Span.svelte +1 -2
  96. package/dist/ui/table/Table.svelte +28 -35
  97. package/dist/ui/table/TableBody.svelte +12 -18
  98. package/dist/ui/table/TableCell.svelte +10 -13
  99. package/dist/ui/table/TableFieldsEdition.svelte +51 -57
  100. package/dist/ui/table/TableHead.svelte +20 -19
  101. package/dist/ui/table/TableViewSelect.svelte +37 -50
  102. package/dist/ui/table/cell/TableCellArray.svelte +3 -5
  103. package/dist/ui/table/cell/TableCellBoolean.svelte +3 -4
  104. package/dist/ui/table/cell/TableCellNumber.svelte +1 -2
  105. package/dist/ui/table/cell/TableCellString.svelte +2 -5
  106. package/dist/ui/table/head/OrderButtons.svelte +37 -0
  107. package/dist/ui/table/head/OrderButtons.svelte.d.ts +20 -0
  108. package/dist/ui/table/head/TableHeadBoolean.svelte +3 -6
  109. package/dist/ui/table/head/TableHeadDate.svelte +110 -61
  110. package/dist/ui/table/head/TableHeadDefault.svelte +2 -5
  111. package/dist/ui/table/head/TableHeadNumber.svelte +76 -67
  112. package/dist/ui/table/head/TableHeadSelect.svelte +41 -47
  113. package/dist/ui/table/head/TableHeadString.svelte +8 -14
  114. package/dist/ui/tabs/Tabs.svelte +5 -8
  115. package/dist/ui/tabs/TabsIcon.svelte +28 -31
  116. package/dist/validation/zod.d.ts +12 -0
  117. package/dist/validation/zod.js +4 -2
  118. package/package.json +1 -1
@@ -1,78 +1,65 @@
1
- <script lang="ts">
2
- import { onMount, onDestroy, createEventDispatcher } from 'svelte'
3
- import type { Litepicker } from 'litepicker'
4
- import type { Range, RangeAsDate, RangeDate } from './types.js'
5
- import dayjs from 'dayjs'
6
-
7
- export let numberOfMonths = 3
8
- export let numberOfColumns = numberOfMonths
9
- export let showWeekNumbers = true
10
- export let range: RangeAsDate | undefined = undefined
11
- export let minDate: Date | number | string | undefined = undefined
12
- export let maxDate: Date | number | string | undefined = undefined
13
-
14
- let startElement: HTMLInputElement
15
- let endElement: HTMLInputElement
16
- let picker: Litepicker
17
- let parentEl: HTMLDivElement
18
- const dispatch = createEventDispatcher<{ change: Range }>()
19
-
20
- onMount(() => {
21
- initTimePicker()
22
- })
23
-
24
- onDestroy(() => {
25
- picker?.destroy()
26
- })
27
-
28
- export function clear() {
29
- picker?.clearSelection()
30
- }
31
-
32
- async function initTimePicker() {
33
- const _Litepicker = (await import('litepicker')).Litepicker
34
- picker?.destroy()
35
- picker = new _Litepicker({
36
- element: startElement,
37
- elementEnd: endElement,
38
- // Nécéssaire pour traquer le theme
39
- parentEl: parentEl,
40
- inlineMode: true,
41
- singleMode: false,
42
- allowRepick: false,
43
- lang: navigator.language,
44
- numberOfMonths,
45
- numberOfColumns,
46
- showWeekNumbers,
47
- minDate,
48
- maxDate,
49
- startDate: range?.start ? dayjs(range.start).toDate() : undefined,
50
- endDate: range?.end ? dayjs(range.end).toDate() : undefined,
51
- setup: (picker: Litepicker) => {
52
- picker.on('selected', (date1: any, date2: any) => {
53
- range = {
54
- start: new Date(
55
- `${getAbsoluteDate(date1.dateInstance)}T${getAbsoluteTime(range?.start)}`
56
- ),
57
- end: new Date(
58
- `${getAbsoluteDate(date2.dateInstance)}T${getAbsoluteTime(range?.end, '23:59:00')}`
59
- )
60
- }
61
- dispatch('change', range)
62
- })
63
- }
64
- })
65
- }
66
-
67
- const getAbsoluteDate = (date: Date) =>
68
- [date.getFullYear(), date.getMonth() + 1, date.getDate()]
69
- .map((n) => n.toString().padStart(2, '0'))
70
- .join('-')
71
-
72
- const getAbsoluteTime = (date?: RangeDate, defaultTime = '00:00:00') => {
73
- if (!date) return defaultTime
74
- return dayjs(date).format('HH:mm:ss')
75
- }
1
+ <script>import { onMount, onDestroy, createEventDispatcher } from "svelte";
2
+ import dayjs from "dayjs";
3
+ export let numberOfMonths = 3;
4
+ export let numberOfColumns = numberOfMonths;
5
+ export let showWeekNumbers = true;
6
+ export let range = void 0;
7
+ export let minDate = void 0;
8
+ export let maxDate = void 0;
9
+ let startElement;
10
+ let endElement;
11
+ let picker;
12
+ let parentEl;
13
+ const dispatch = createEventDispatcher();
14
+ onMount(() => {
15
+ initTimePicker();
16
+ });
17
+ onDestroy(() => {
18
+ picker?.destroy();
19
+ });
20
+ export function clear() {
21
+ picker?.clearSelection();
22
+ }
23
+ async function initTimePicker() {
24
+ const _Litepicker = (await import("litepicker")).Litepicker;
25
+ picker?.destroy();
26
+ picker = new _Litepicker({
27
+ element: startElement,
28
+ elementEnd: endElement,
29
+ // Nécéssaire pour traquer le theme
30
+ parentEl,
31
+ inlineMode: true,
32
+ singleMode: false,
33
+ allowRepick: false,
34
+ lang: navigator.language,
35
+ numberOfMonths,
36
+ numberOfColumns,
37
+ showWeekNumbers,
38
+ minDate,
39
+ maxDate,
40
+ startDate: range?.start ? dayjs(range.start).toDate() : void 0,
41
+ endDate: range?.end ? dayjs(range.end).toDate() : void 0,
42
+ setup: (picker2) => {
43
+ picker2.on("selected", (date1, date2) => {
44
+ range = {
45
+ start: /* @__PURE__ */ new Date(
46
+ `${getAbsoluteDate(date1.dateInstance)}T${getAbsoluteTime(range?.start)}`
47
+ ),
48
+ end: /* @__PURE__ */ new Date(
49
+ `${getAbsoluteDate(date2.dateInstance)}T${getAbsoluteTime(range?.end, "23:59:00")}`
50
+ )
51
+ };
52
+ dispatch("change", range);
53
+ });
54
+ }
55
+ });
56
+ }
57
+ const getAbsoluteDate = (date) => [date.getFullYear(), date.getMonth() + 1, date.getDate()].map((n) => n.toString().padStart(2, "0")).join("-");
58
+ const getAbsoluteTime = (date, defaultTime = "00:00:00") => {
59
+ if (!date)
60
+ return defaultTime;
61
+ return dayjs(date).format("HH:mm:ss");
62
+ };
76
63
  </script>
77
64
 
78
65
  <input type="hidden" bind:this={startElement} />
@@ -1,5 +1,5 @@
1
1
  import { SvelteComponent } from "svelte";
2
- import type { Range, RangeAsDate } from './types.js';
2
+ import type { RangeAsDate } from './types.js';
3
3
  declare const __propDef: {
4
4
  props: {
5
5
  numberOfMonths?: number | undefined;
@@ -11,7 +11,7 @@ declare const __propDef: {
11
11
  clear?: (() => void) | undefined;
12
12
  };
13
13
  events: {
14
- change: CustomEvent<Range>;
14
+ change: CustomEvent<RangeAsDate>;
15
15
  } & {
16
16
  [evt: string]: CustomEvent<any>;
17
17
  };
@@ -1,46 +1,38 @@
1
- <script lang="ts">
2
- import { mdiCalendarMonthOutline } from '@mdi/js'
3
- import { goto } from '$app/navigation'
4
- import { slide } from 'svelte/transition'
5
-
6
- import { urlParam } from '../../store/param.js'
7
- import { formatRangeShort } from './format.js'
8
- import { Icon } from '../icon/index.js'
9
- import { DropDown } from '../menu/index.js'
10
- import { InputTime } from '../input/index.js'
11
- import { type RangeAsDate, RangePicker } from './index.js'
12
- import { jsonParse } from '../../utils/jsonParse.js'
13
- export let minDate: Date | number | string | undefined = undefined
14
- export let maxDate: Date | number | string | undefined = undefined
15
-
16
- let dropDown: DropDown
17
- let rangePicker: RangePicker
18
-
19
- export let key = 'range'
20
- export let range: RangeAsDate = jsonParse<RangeAsDate>($urlParam.get(key), {
21
- start: null,
22
- end: null
23
- })
24
-
25
- $: isValidPeriod = !!range.start && !!range.end
26
-
27
- function getLabel(_range?: Partial<RangeAsDate>) {
28
- if (!_range || !_range.start || !_range.end) return ''
29
- return formatRangeShort(_range as RangeAsDate)
30
- }
31
-
32
- async function writeURL() {
33
- const url =
34
- !range.start && !range.end
35
- ? $urlParam.without(key)
36
- : $urlParam.with({
37
- [key]: JSON.stringify({
38
- start: range.start?.toJSON(),
39
- end: range.end?.toJSON()
40
- })
41
- })
42
- return goto(url, { replaceState: true, noScroll: true })
43
- }
1
+ <script>import { mdiCalendarMonthOutline } from "@mdi/js";
2
+ import { goto } from "$app/navigation";
3
+ import { slide } from "svelte/transition";
4
+ import { urlParam } from "../../store/param.js";
5
+ import { formatRangeShort } from "./format.js";
6
+ import { Icon } from "../icon/index.js";
7
+ import { DropDown } from "../menu/index.js";
8
+ import { InputTime } from "../input/index.js";
9
+ import { RangePicker } from "./index.js";
10
+ import { jsonParse } from "../../utils/jsonParse.js";
11
+ export let minDate = void 0;
12
+ export let maxDate = void 0;
13
+ let dropDown;
14
+ let rangePicker;
15
+ export let key = "range";
16
+ export let range = jsonParse($urlParam.get(key), {
17
+ start: null,
18
+ end: null
19
+ });
20
+ $:
21
+ isValidPeriod = !!range.start && !!range.end;
22
+ function getLabel(_range) {
23
+ if (!_range || !_range.start || !_range.end)
24
+ return "";
25
+ return formatRangeShort(_range);
26
+ }
27
+ async function writeURL() {
28
+ const url = !range.start && !range.end ? $urlParam.without(key) : $urlParam.with({
29
+ [key]: JSON.stringify({
30
+ start: range.start?.toJSON(),
31
+ end: range.end?.toJSON()
32
+ })
33
+ });
34
+ return goto(url, { replaceState: true, noScroll: true });
35
+ }
44
36
  </script>
45
37
 
46
38
  <DropDown bind:this={dropDown} tippyProps={{ onHidden: writeURL }} class="max-h-full">
@@ -1,45 +1,28 @@
1
- <script lang="ts" context="module">
2
- type _Slot =
3
- | ((...args: any) => ComponentAndProps | ComponentType | string)
4
- | ComponentAndProps
5
- | ComponentType
6
- | string
7
- //
8
- </script>
9
-
10
- <script lang="ts" generics="Slot extends _Slot">
11
- import { type ComponentType } from 'svelte'
12
-
13
- import { component, type ComponentAndProps } from '../../utils/component.js'
14
- import Span from './Span.svelte'
15
-
16
- type Args = Slot extends (...args: any) => any ? Parameters<Slot>[0] : undefined
17
-
18
- type $$Props = {
19
- slot?: Slot | null
20
- args?: Args | null
21
- }
22
-
23
- export let slot: Slot | undefined | null = undefined
24
- export let args: Args | undefined | null = undefined
25
-
26
- function getComponentAndProps(_slot: Slot): ComponentAndProps | null {
27
- if (typeof _slot === 'function') {
28
- if (isComponentType(_slot)) return { component: _slot, props: {} }
29
- if (!args) {
30
- console.error('args prop is required with slot as function')
31
- return null
32
- }
33
- const result = _slot(args) as Slot
34
- return getComponentAndProps(result)
35
- }
36
- if (typeof _slot === 'object') return _slot
37
- return component(Span, { content: _slot })
38
- }
39
-
40
- function isComponentType(fun: Function): fun is ComponentType {
41
- return !!fun.prototype?.constructor?.name
42
- }
1
+ <script context="module"></script>
2
+
3
+ <script generics="Slot extends _Slot">import {} from "svelte";
4
+ import { component } from "../../utils/component.js";
5
+ import Span from "./Span.svelte";
6
+ export let slot = void 0;
7
+ export let args = void 0;
8
+ function getComponentAndProps(_slot) {
9
+ if (typeof _slot === "function") {
10
+ if (isComponentType(_slot))
11
+ return { component: _slot, props: {} };
12
+ if (!args) {
13
+ console.error("args prop is required with slot as function");
14
+ return null;
15
+ }
16
+ const result = _slot(args);
17
+ return getComponentAndProps(result);
18
+ }
19
+ if (typeof _slot === "object")
20
+ return _slot;
21
+ return component(Span, { content: _slot });
22
+ }
23
+ function isComponentType(fun) {
24
+ return !!fun.prototype?.constructor?.name;
25
+ }
43
26
  </script>
44
27
 
45
28
  {#if slot}
@@ -1,5 +1,4 @@
1
- <script lang="ts">
2
- export let content: string
1
+ <script>export let content;
3
2
  </script>
4
3
 
5
4
  <span>{content}</span>
@@ -1,38 +1,31 @@
1
- <script lang="ts" generics="Item extends {id: string}">
2
- import { afterNavigate } from '$app/navigation'
3
- import { Placeholder } from '../placeholder/index.js'
4
- import type { ComponentAndProps } from '../../utils/component.js'
5
-
6
- import {
7
- type TableField,
8
- TableHead,
9
- TableBody,
10
- context,
11
- createKeys,
12
- syncFieldsWithParams
13
- } from './index.js'
14
-
15
- export let key = 'table'
16
- export let fields: TableField<Item>[]
17
- export let items: Item[]
18
- export let slotAction: ((item: Item) => ComponentAndProps) | undefined = undefined
19
- export let placholder = 'Aucun élément trouvé'
20
- let klass = ''
21
- export {klass as class}
22
- export let classRow = ''
23
- export let hideBody = false
24
- export let onCreateField: (() => void) | undefined = undefined
25
-
26
- const { KEY_FIELDS_VISIBLE, KEY_FIELDS_HIDDEN, KEY_FIELDS_ORDER } = createKeys(key)
27
- context.set(key, {
28
- KEY_FIELDS_VISIBLE,
29
- KEY_FIELDS_HIDDEN,
30
- KEY_FIELDS_ORDER
31
- })
32
-
33
- const initFields = () => (fields = syncFieldsWithParams(key, fields))
34
- initFields()
35
- afterNavigate(initFields)
1
+ <script generics="Item extends {id: string}">import { afterNavigate } from "$app/navigation";
2
+ import { Placeholder } from "../placeholder/index.js";
3
+ import {
4
+ TableHead,
5
+ TableBody,
6
+ context,
7
+ createKeys,
8
+ syncFieldsWithParams
9
+ } from "./index.js";
10
+ export let key = "table";
11
+ export let fields;
12
+ export let items;
13
+ export let slotAction = void 0;
14
+ export let placholder = "Aucun \xE9l\xE9ment trouv\xE9";
15
+ let klass = "";
16
+ export { klass as class };
17
+ export let classRow = "";
18
+ export let hideBody = false;
19
+ export let onCreateField = void 0;
20
+ const { KEY_FIELDS_VISIBLE, KEY_FIELDS_HIDDEN, KEY_FIELDS_ORDER } = createKeys(key);
21
+ context.set(key, {
22
+ KEY_FIELDS_VISIBLE,
23
+ KEY_FIELDS_HIDDEN,
24
+ KEY_FIELDS_ORDER
25
+ });
26
+ const initFields = () => fields = syncFieldsWithParams(key, fields);
27
+ initFields();
28
+ afterNavigate(initFields);
36
29
  </script>
37
30
 
38
31
  <div class="{klass} overflow-x-auto rounded-lg border bg-base-100" class:min-h-[320px]={!hideBody}>
@@ -1,21 +1,15 @@
1
- <script lang="ts" generics="Item extends {id: string}">
2
- import { createEventDispatcher } from 'svelte'
3
-
4
- import { TableCell, type TableField } from './index.js'
5
- import type { ComponentAndProps } from '../../utils/component.js'
6
-
7
- export let items: Item[]
8
- export let fields: TableField<Item>[]
9
- export let action: ((item: Item) => ComponentAndProps) | undefined = undefined
10
- export let classRow = ''
11
-
12
- const dispatch = createEventDispatcher<{ click: Item }>()
13
-
14
- $: _fields = fields.filter((f) => f.$visible)
15
-
16
- function handleClickRow(event: MouseEvent, item: Item) {
17
- dispatch('click', item)
18
- }
1
+ <script generics="Item extends {id: string}">import { createEventDispatcher } from "svelte";
2
+ import { TableCell } from "./index.js";
3
+ export let items;
4
+ export let fields;
5
+ export let action = void 0;
6
+ export let classRow = "";
7
+ const dispatch = createEventDispatcher();
8
+ $:
9
+ _fields = fields.filter((f) => f.$visible);
10
+ function handleClickRow(event, item) {
11
+ dispatch("click", item);
12
+ }
19
13
  </script>
20
14
 
21
15
  <tbody>
@@ -1,16 +1,13 @@
1
- <script lang="ts" generics="Item extends {id: string}">
2
- import {
3
- TableCellArray,
4
- TableCellBoolean,
5
- TableCellNumber,
6
- TableCellString
7
- } from './cell/index.js'
8
- import type { TableField } from './index.js'
9
-
10
- export let item: Item
11
- export let field: TableField<Item>
12
-
13
- $: value = field.getCell(item)
1
+ <script generics="Item extends {id: string}">import {
2
+ TableCellArray,
3
+ TableCellBoolean,
4
+ TableCellNumber,
5
+ TableCellString
6
+ } from "./cell/index.js";
7
+ export let item;
8
+ export let field;
9
+ $:
10
+ value = field.getCell(item);
14
11
  </script>
15
12
 
16
13
  {#if Array.isArray(value)}
@@ -1,60 +1,54 @@
1
- <script lang="ts" generics="Item extends {id: string}">
2
- import {
3
- mdiCheck,
4
- mdiCheckCircleOutline,
5
- mdiCircleSmall,
6
- mdiDotsHorizontal,
7
- mdiDrag,
8
- mdiPlus
9
- } from '@mdi/js'
10
- import type { TippyInstance } from '../../utils/tippy.js'
11
- import { goto } from '$app/navigation'
12
- import { page } from '$app/stores'
13
- import { urlParam } from '../../store/param.js'
14
- import { listEditable } from '../../action/list/index.js'
15
- import { jsonParse } from '../../utils/jsonParse.js'
16
- import { context } from './context.js'
17
- import { Icon } from '../icon/index.js'
18
- import { DropDown } from '../menu/index.js'
19
- import type { TableField } from './index.js'
20
-
21
- export let fields: TableField<Item>[]
22
- export let key: string
23
- export let onCreateField: (() => void) | undefined = undefined
24
-
25
- let tip: TippyInstance
26
-
27
- const { KEY_FIELDS_VISIBLE, KEY_FIELDS_HIDDEN, KEY_FIELDS_ORDER } = context.get(key)
28
-
29
- function getFieldHref(field: TableField) {
30
- if (field.locked) return
31
- const url = toggleParam(field.visible ? KEY_FIELDS_HIDDEN : KEY_FIELDS_VISIBLE, field.key)
32
- if (url.searchParams.has(field.key)) {
33
- url.searchParams.delete(field.key)
34
- url.searchParams.delete('skip')
35
- url.searchParams.delete('take')
36
- }
37
- return url.pathname + url.search
38
- }
39
-
40
- function toggleParam(paramKey: string, fieldKey: string): URL {
41
- const url = new URL($page.url)
42
- const fieldsKeys = jsonParse<string[]>($page.url.searchParams.get(paramKey), [])
43
- if (!fieldsKeys.includes(fieldKey)) fieldsKeys.push(fieldKey)
44
- else fieldsKeys.splice(fieldsKeys.indexOf(fieldKey), 1)
45
-
46
- if (fieldsKeys.length) url.searchParams.set(paramKey, JSON.stringify(fieldsKeys))
47
- else url.searchParams.delete(paramKey)
48
-
49
- return url
50
- }
51
-
52
- function handleReorder(newFieldsOrder: TableField<Item>[]) {
53
- fields = newFieldsOrder
54
- const fieldsOrder = fields.map((f) => f.key)
55
- const newUrl = $urlParam.with({ [KEY_FIELDS_ORDER]: JSON.stringify(fieldsOrder) })
56
- goto(newUrl, { replaceState: true, noScroll: true, keepFocus: true })
57
- }
1
+ <script generics="Item extends {id: string}">import {
2
+ mdiCheck,
3
+ mdiCheckCircleOutline,
4
+ mdiCircleSmall,
5
+ mdiDotsHorizontal,
6
+ mdiDrag,
7
+ mdiPlus
8
+ } from "@mdi/js";
9
+ import { goto } from "$app/navigation";
10
+ import { page } from "$app/stores";
11
+ import { urlParam } from "../../store/param.js";
12
+ import { listEditable } from "../../action/list/index.js";
13
+ import { jsonParse } from "../../utils/jsonParse.js";
14
+ import { context } from "./context.js";
15
+ import { Icon } from "../icon/index.js";
16
+ import { DropDown } from "../menu/index.js";
17
+ export let fields;
18
+ export let key;
19
+ export let onCreateField = void 0;
20
+ let tip;
21
+ const { KEY_FIELDS_VISIBLE, KEY_FIELDS_HIDDEN, KEY_FIELDS_ORDER } = context.get(key);
22
+ function getFieldHref(field) {
23
+ if (field.locked)
24
+ return;
25
+ const url = toggleParam(field.visible ? KEY_FIELDS_HIDDEN : KEY_FIELDS_VISIBLE, field.key);
26
+ if (url.searchParams.has(field.key)) {
27
+ url.searchParams.delete(field.key);
28
+ url.searchParams.delete("skip");
29
+ url.searchParams.delete("take");
30
+ }
31
+ return url.pathname + url.search;
32
+ }
33
+ function toggleParam(paramKey, fieldKey) {
34
+ const url = new URL($page.url);
35
+ const fieldsKeys = jsonParse($page.url.searchParams.get(paramKey), []);
36
+ if (!fieldsKeys.includes(fieldKey))
37
+ fieldsKeys.push(fieldKey);
38
+ else
39
+ fieldsKeys.splice(fieldsKeys.indexOf(fieldKey), 1);
40
+ if (fieldsKeys.length)
41
+ url.searchParams.set(paramKey, JSON.stringify(fieldsKeys));
42
+ else
43
+ url.searchParams.delete(paramKey);
44
+ return url;
45
+ }
46
+ function handleReorder(newFieldsOrder) {
47
+ fields = newFieldsOrder;
48
+ const fieldsOrder = fields.map((f) => f.key);
49
+ const newUrl = $urlParam.with({ [KEY_FIELDS_ORDER]: JSON.stringify(fieldsOrder) });
50
+ goto(newUrl, { replaceState: true, noScroll: true, keepFocus: true });
51
+ }
58
52
  </script>
59
53
 
60
54
  <th class="sticky right-0 z-10 p-0 px-1" align="right">
@@ -1,22 +1,23 @@
1
- <script lang="ts" generics="Item extends {id: string}">
2
- import { component, type ComponentAndProps } from '../../utils/component.js'
3
- import { type TableField, TableFieldsEdition } from './index.js'
4
- import { tableHeadComponent } from './head/index.js'
5
- import TableHeadDefault from './head/TableHeadDefault.svelte'
6
-
7
- export let fields: TableField<Item>[]
8
- export let key: string
9
- export let onCreateField: (() => void) | undefined = undefined
10
-
11
- function getComponent(field: TableField): ComponentAndProps {
12
- if (field.type === 'select' || field.type === 'multiselect')
13
- return tableHeadComponent(field.type, { options: field.options || [] })(field)
14
- if (field.type) return tableHeadComponent(field.type, {})(field)
15
- if (!field.head) return component(TableHeadDefault, { field })
16
- if (typeof field.head === 'function') return field.head(field)
17
- if (typeof field.head === 'string') return tableHeadComponent(field.head, {})(field)
18
- return field.head
19
- }
1
+ <script generics="Item extends {id: string}">import { component } from "../../utils/component.js";
2
+ import { TableFieldsEdition } from "./index.js";
3
+ import { tableHeadComponent } from "./head/index.js";
4
+ import TableHeadDefault from "./head/TableHeadDefault.svelte";
5
+ export let fields;
6
+ export let key;
7
+ export let onCreateField = void 0;
8
+ function getComponent(field) {
9
+ if (field.type === "select" || field.type === "multiselect")
10
+ return tableHeadComponent(field.type, { options: field.options || [] })(field);
11
+ if (field.type)
12
+ return tableHeadComponent(field.type, {})(field);
13
+ if (!field.head)
14
+ return component(TableHeadDefault, { field });
15
+ if (typeof field.head === "function")
16
+ return field.head(field);
17
+ if (typeof field.head === "string")
18
+ return tableHeadComponent(field.head, {})(field);
19
+ return field.head;
20
+ }
20
21
  </script>
21
22
 
22
23
  <thead>