@likable-hair/svelte 4.2.5 → 4.3.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 (117) hide show
  1. package/dist/components/composed/buttons/ActivableButton.svelte +25 -7
  2. package/dist/components/composed/common/HeadersDrawer.svelte +66 -28
  3. package/dist/components/composed/common/HeadersDrawer.svelte.d.ts +22 -12
  4. package/dist/components/composed/common/MenuOrDrawer.svelte +40 -12
  5. package/dist/components/composed/common/MenuOrDrawerOptions.svelte +51 -27
  6. package/dist/components/composed/common/MenuOrDrawerOptions.svelte.d.ts +15 -10
  7. package/dist/components/composed/common/QuickActions.svelte +59 -23
  8. package/dist/components/composed/common/ToolTip.svelte +51 -32
  9. package/dist/components/composed/dashboard/DashboardShaper.svelte +280 -147
  10. package/dist/components/composed/dashboard/DashboardShaper.svelte.d.ts +54 -45
  11. package/dist/components/composed/forms/AsyncAutocomplete.svelte +81 -30
  12. package/dist/components/composed/forms/AsyncAutocomplete.svelte.d.ts +12 -5
  13. package/dist/components/composed/forms/AvatarDropdown.svelte +146 -70
  14. package/dist/components/composed/forms/AvatarDropdown.svelte.d.ts +27 -22
  15. package/dist/components/composed/forms/ConfirmOrCancelButtons.svelte +65 -19
  16. package/dist/components/composed/forms/CountriesAutocomplete.svelte +33 -4
  17. package/dist/components/composed/forms/DatePickerTextField.svelte +266 -161
  18. package/dist/components/composed/forms/Dropdown.svelte +88 -21
  19. package/dist/components/composed/forms/Dropdown.svelte.d.ts +18 -13
  20. package/dist/components/composed/forms/IconsDropdown.svelte +85 -40
  21. package/dist/components/composed/forms/IconsDropdown.svelte.d.ts +15 -8
  22. package/dist/components/composed/forms/LabelAndSelect.svelte +46 -5
  23. package/dist/components/composed/forms/LabelAndTextField.svelte +56 -3
  24. package/dist/components/composed/forms/PeriodPicker.svelte +38 -18
  25. package/dist/components/composed/forms/PeriodPicker.svelte.d.ts +32 -7
  26. package/dist/components/composed/forms/PeriodSelector.svelte +427 -312
  27. package/dist/components/composed/forms/PeriodSelector.svelte.d.ts +20 -13
  28. package/dist/components/composed/forms/ToggleList.svelte +71 -37
  29. package/dist/components/composed/forms/ToggleList.svelte.d.ts +14 -7
  30. package/dist/components/composed/forms/YearPickerTextField.svelte +154 -82
  31. package/dist/components/composed/list/DynamicTable.svelte +1372 -809
  32. package/dist/components/composed/list/DynamicTable.svelte.d.ts +85 -70
  33. package/dist/components/composed/list/EnhancedPaginatedTable.svelte +75 -32
  34. package/dist/components/composed/list/EnhancedPaginatedTable.svelte.d.ts +16 -6
  35. package/dist/components/composed/list/PaginatedTable.svelte +324 -116
  36. package/dist/components/composed/list/PaginatedTable.svelte.d.ts +26 -22
  37. package/dist/components/composed/progress/HorizontalStackedProgress.svelte +67 -29
  38. package/dist/components/composed/search/DynamicFilters.svelte +126 -91
  39. package/dist/components/composed/search/FilterEditor.svelte +169 -109
  40. package/dist/components/composed/search/Filters.svelte +385 -275
  41. package/dist/components/composed/search/GlobalSearchTextField.svelte +102 -42
  42. package/dist/components/composed/search/GlobalSearchTextField.svelte.d.ts +23 -20
  43. package/dist/components/composed/search/MobileFilterEditor.svelte +174 -120
  44. package/dist/components/composed/search/QuickFilters.svelte +124 -75
  45. package/dist/components/composed/search/SearchBar.svelte +42 -3
  46. package/dist/components/composed/search/SearchResults.svelte +48 -5
  47. package/dist/components/composed/search/SearchResults.svelte.d.ts +17 -17
  48. package/dist/components/layouts/CollapsibleSideBarLayout.svelte +100 -24
  49. package/dist/components/layouts/StableDividedSideBarLayout.svelte +74 -24
  50. package/dist/components/layouts/UnstableDividedSideBarLayout.svelte +140 -57
  51. package/dist/components/simple/buttons/Button.svelte +86 -36
  52. package/dist/components/simple/buttons/LinkButton.svelte +81 -25
  53. package/dist/components/simple/charts/BarChart.svelte +137 -105
  54. package/dist/components/simple/charts/LineChart.svelte +124 -92
  55. package/dist/components/simple/charts/PieChart.svelte +51 -23
  56. package/dist/components/simple/common/CollapsibleDivider.svelte +58 -26
  57. package/dist/components/simple/common/Divider.svelte +2 -1
  58. package/dist/components/simple/common/InfiniteScroll.svelte +60 -34
  59. package/dist/components/simple/common/MediaQuery.svelte +28 -3
  60. package/dist/components/simple/common/Menu.svelte +516 -371
  61. package/dist/components/simple/common/NoData.svelte +18 -4
  62. package/dist/components/simple/common/VerticalDraggableList.svelte +52 -26
  63. package/dist/components/simple/common/VerticalDraggableList.svelte.d.ts +20 -9
  64. package/dist/components/simple/dashboards/DashboardGridShaper.svelte +28 -22
  65. package/dist/components/simple/dates/Calendar.svelte +142 -72
  66. package/dist/components/simple/dates/DatePicker.svelte +138 -71
  67. package/dist/components/simple/dates/MonthSelector.svelte +49 -13
  68. package/dist/components/simple/dates/YearSelector.svelte +73 -30
  69. package/dist/components/simple/dialogs/Dialog.svelte +109 -59
  70. package/dist/components/simple/forms/Autocomplete.svelte +341 -164
  71. package/dist/components/simple/forms/Autocomplete.svelte.d.ts +27 -20
  72. package/dist/components/simple/forms/Checkbox.svelte +57 -29
  73. package/dist/components/simple/forms/FileInput.svelte +103 -58
  74. package/dist/components/simple/forms/FileInputList.svelte +115 -51
  75. package/dist/components/simple/forms/RadioButton.svelte +36 -3
  76. package/dist/components/simple/forms/Select.svelte +30 -3
  77. package/dist/components/simple/forms/SimpleTextField.svelte +94 -4
  78. package/dist/components/simple/forms/Switch.svelte +33 -11
  79. package/dist/components/simple/forms/Textarea.svelte +22 -5
  80. package/dist/components/simple/forms/VerticalSwitch.svelte +19 -2
  81. package/dist/components/simple/forms/VerticalTextSwitch.svelte +35 -3
  82. package/dist/components/simple/lists/BoxList.svelte +42 -11
  83. package/dist/components/simple/lists/ColorInvertedSelector.svelte +83 -25
  84. package/dist/components/simple/lists/HierarchyMenu.svelte +55 -20
  85. package/dist/components/simple/lists/Paginator.svelte +53 -34
  86. package/dist/components/simple/lists/SelectableMenuList.svelte +52 -16
  87. package/dist/components/simple/lists/SelectableVerticalList.svelte +169 -85
  88. package/dist/components/simple/lists/SelectableVerticalList.svelte.d.ts +21 -14
  89. package/dist/components/simple/lists/SidebarMenuList.svelte +127 -79
  90. package/dist/components/simple/lists/SimpleTable.svelte +442 -245
  91. package/dist/components/simple/lists/SimpleTable.svelte.d.ts +31 -22
  92. package/dist/components/simple/loaders/CircularLoader.css +1 -1
  93. package/dist/components/simple/loaders/CircularLoader.svelte +11 -3
  94. package/dist/components/simple/loaders/Skeleton.svelte +3 -2
  95. package/dist/components/simple/media/Avatar.svelte +35 -15
  96. package/dist/components/simple/media/DescriptiveAvatar.svelte +30 -4
  97. package/dist/components/simple/media/FlagIcon.svelte +13 -3
  98. package/dist/components/simple/media/Icon.svelte +21 -6
  99. package/dist/components/simple/navigation/Breadcrumb.svelte +41 -9
  100. package/dist/components/simple/navigation/Chip.svelte +65 -29
  101. package/dist/components/simple/navigation/Drawer.svelte +132 -71
  102. package/dist/components/simple/navigation/HeaderMenu.svelte +69 -25
  103. package/dist/components/simple/navigation/Navigator.svelte +45 -11
  104. package/dist/components/simple/navigation/TabSwitcher.svelte +60 -19
  105. package/dist/components/simple/notifiers/AlertBanner.svelte +59 -11
  106. package/dist/components/simple/progress/ProgressBar.svelte +26 -10
  107. package/dist/components/simple/timeline/SimpleTimeLine.svelte +52 -5
  108. package/dist/components/simple/timeline/SimpleTimeLine.svelte.d.ts +16 -9
  109. package/dist/components/simple/typography/Code.svelte +41 -12
  110. package/dist/stores/layouts/unstableSidebarOpened.d.ts +1 -1
  111. package/dist/stores/layouts/unstableSidebarOpened.js +1 -1
  112. package/dist/stores/theme.js +2 -2
  113. package/dist/utils/filters/builder.d.ts +2 -2
  114. package/dist/utils/filters/builder.js +7 -7
  115. package/dist/utils/filters/modifiers/where.d.ts +1 -1
  116. package/dist/utils/teleporter.js +4 -4
  117. package/package.json +39 -33
@@ -1,101 +1,185 @@
1
- <script lang="ts" module>export {};
1
+ <script lang="ts" module>
2
+ export type Element<Data = any> = {
3
+ title: string | number,
4
+ name: string | number,
5
+ description?: string,
6
+ icon?: string,
7
+ data?: Data;
8
+ style?: {
9
+ color?: string,
10
+ backgroundColor?: string
11
+ },
12
+ appendIcon?: string
13
+ disabled?: boolean
14
+ };
2
15
  </script>
3
16
 
4
- <script lang="ts" generics="Data">import '../../../css/main.css';
5
- import './SelectableVerticalList.css';
6
- import keyboarder from "../../../utils/keyboarder";
7
- import { onMount } from "svelte";
8
- import Icon from '../media/Icon.svelte';
9
- let { activeKeyboard = false, loopSelection = true, focused = $bindable(), selected = $bindable(), elements = $bindable(), centered = false, bicolor = false, appendIconSize = "20pt", onfocus, oniconClick, onselect, onkeypress, elementSnippet, descriptionSnippet, titleSnippet, } = $props();
10
- let focusedIndex = $derived(elements?.findIndex((el) => el.name == focused));
11
- function handleKeypress(params) {
12
- if (activeKeyboard && elements && elements.length > 0) {
13
- if (params.key == 'ArrowDown') {
14
- let newIndex;
15
- if ((focusedIndex === undefined || focusedIndex === -1) || (loopSelection && focusedIndex >= (elements.length - 1))) {
16
- focused = elements[0].name;
17
- newIndex = 0;
18
- }
19
- else if (focusedIndex < (elements.length - 1)) {
20
- focused = elements[focusedIndex + 1].name;
21
- newIndex = focusedIndex + 1;
22
- }
23
- if (newIndex !== undefined && onfocus) {
24
- onfocus({
25
- detail: {
26
- element: elements[newIndex]
27
- }
28
- });
29
- }
17
+ <script lang="ts" generics="Data">
18
+ import '../../../css/main.css'
19
+ import './SelectableVerticalList.css'
20
+ import keyboarder from "../../../utils/keyboarder";
21
+ import { onMount, type Snippet } from "svelte";
22
+ import Icon from '../media/Icon.svelte';
23
+ import type { KeyboardEventHandler } from 'svelte/elements';
24
+
25
+ type ElementData = Element<Data>
26
+
27
+ interface Props {
28
+ activeKeyboard?: boolean;
29
+ loopSelection?: boolean;
30
+ focused?: string | number;
31
+ selected?: string | number;
32
+ elements?: ElementData[];
33
+ centered?: boolean;
34
+ bicolor?: boolean
35
+ appendIconSize?: string;
36
+ onselect?: (event: {
37
+ detail: {
38
+ element: ElementData
39
+ }
40
+ }) => void
41
+ onfocus?: (event: {
42
+ detail: {
43
+ element: ElementData
44
+ }
45
+ }) => void
46
+ oniconClick?: (event: {
47
+ detail: {
48
+ index: number,
49
+ element: ElementData
50
+ }
51
+ }) => void
52
+ onkeypress?: KeyboardEventHandler<HTMLDivElement>
53
+ elementSnippet?: Snippet<[{
54
+ selected: boolean
55
+ focused: boolean
56
+ element: ElementData
57
+ }]>
58
+ titleSnippet?: Snippet<[{
59
+ selected: boolean
60
+ focused: boolean
61
+ element: ElementData
62
+ }]>
63
+ descriptionSnippet?: Snippet<[{
64
+ selected: boolean
65
+ focused: boolean
66
+ element: ElementData
67
+ }]>
68
+ }
69
+
70
+ let {
71
+ activeKeyboard = false,
72
+ loopSelection = true,
73
+ focused = $bindable(),
74
+ selected = $bindable(),
75
+ elements = $bindable(),
76
+ centered = false,
77
+ bicolor = false,
78
+ appendIconSize = "20pt",
79
+ onfocus,
80
+ oniconClick,
81
+ onselect,
82
+ onkeypress,
83
+ elementSnippet,
84
+ descriptionSnippet,
85
+ titleSnippet,
86
+ }: Props = $props();
87
+
88
+ let focusedIndex = $derived(elements?.findIndex((el) => el.name == focused))
89
+
90
+ function handleKeypress(params: {key: string}) {
91
+ if(activeKeyboard && elements && elements.length > 0) {
92
+ if(params.key == 'ArrowDown') {
93
+ let newIndex
94
+ if((focusedIndex === undefined || focusedIndex === -1) || (loopSelection && focusedIndex >= (elements.length - 1))) {
95
+ focused = elements[0].name
96
+ newIndex = 0
97
+ } else if(focusedIndex < (elements.length - 1)) {
98
+ focused = elements[focusedIndex + 1].name
99
+ newIndex = focusedIndex + 1
30
100
  }
31
- else if (params.key == 'ArrowUp') {
32
- let newIndex;
33
- if ((focusedIndex === undefined || focusedIndex === -1) || (loopSelection && focusedIndex <= 0)) {
34
- focused = elements[elements.length - 1].name;
35
- newIndex = elements.length - 1;
36
- }
37
- else if (focusedIndex > 0) {
38
- focused = elements[focusedIndex - 1].name;
39
- newIndex = focusedIndex - 1;
40
- }
41
- if (newIndex !== undefined && onfocus) {
42
- onfocus({
43
- detail: {
44
- element: elements[newIndex]
45
- }
46
- });
101
+
102
+ if(newIndex !== undefined && onfocus) {
103
+ onfocus({
104
+ detail: {
105
+ element: elements[newIndex]
47
106
  }
107
+ })
48
108
  }
49
- else if (params.key == 'Enter' && focusedIndex !== -1 && focusedIndex != undefined) {
50
- selected = elements[focusedIndex].name;
51
- if (onselect) {
52
- onselect({
53
- detail: {
54
- element: elements[focusedIndex]
55
- }
56
- });
57
- }
109
+ } else if(params.key == 'ArrowUp') {
110
+ let newIndex
111
+ if((focusedIndex === undefined || focusedIndex === -1) || (loopSelection && focusedIndex <= 0)) {
112
+ focused = elements[elements.length - 1].name
113
+ newIndex = elements.length - 1
114
+ } else if(focusedIndex > 0) {
115
+ focused = elements[focusedIndex - 1].name
116
+ newIndex = focusedIndex - 1
58
117
  }
59
- }
60
- }
61
- function handleElementClick(element) {
62
- selected = element.name;
63
- if (element.disabled)
64
- return;
65
- if (onselect) {
66
- onselect({
118
+
119
+ if(newIndex !== undefined && onfocus) {
120
+ onfocus({
67
121
  detail: {
68
- element
122
+ element: elements[newIndex]
69
123
  }
70
- });
71
- }
72
- }
73
- function handleElementMouseover(element) {
74
- focused = element.name;
75
- if (onfocus) {
76
- onfocus({
124
+ })
125
+ }
126
+ } else if(params.key == 'Enter' && focusedIndex !== -1 && focusedIndex != undefined) {
127
+ selected = elements[focusedIndex].name
128
+ if(onselect) {
129
+ onselect({
77
130
  detail: {
78
- element
131
+ element: elements[focusedIndex]
79
132
  }
80
- });
133
+ })
134
+ }
135
+ }
81
136
  }
82
- }
83
- onMount(() => {
84
- keyboarder.on(handleKeypress);
137
+ }
138
+
139
+ function handleElementClick(element: Element) {
140
+ selected = element.name
141
+
142
+ if(element.disabled) return
143
+
144
+ if(onselect) {
145
+ onselect({
146
+ detail: {
147
+ element
148
+ }
149
+ })
150
+ }
151
+ }
152
+
153
+ function handleElementMouseover(element: Element) {
154
+ focused = element.name
155
+ if(onfocus) {
156
+ onfocus({
157
+ detail: {
158
+ element
159
+ }
160
+ })
161
+ }
162
+ }
163
+
164
+ onMount(() => {
165
+ keyboarder.on(handleKeypress)
166
+
85
167
  return () => {
86
- keyboarder.off(handleKeypress);
87
- };
88
- });
89
- function handleIconClick(index, element) {
90
- if (oniconClick) {
91
- oniconClick({
92
- detail: {
93
- element,
94
- index
95
- }
96
- });
168
+ keyboarder.off(handleKeypress)
97
169
  }
98
- }
170
+ })
171
+
172
+ function handleIconClick(index: number, element: Element) {
173
+ if(oniconClick) {
174
+ oniconClick({
175
+ detail: {
176
+ element,
177
+ index
178
+ }
179
+ })
180
+ }
181
+ }
182
+
99
183
  </script>
100
184
 
101
185
  <ul
@@ -15,51 +15,58 @@ import '../../../css/main.css';
15
15
  import './SelectableVerticalList.css';
16
16
  import { type Snippet } from "svelte";
17
17
  import type { KeyboardEventHandler } from 'svelte/elements';
18
- declare class __sveltets_Render<Data> {
19
- props(): {
18
+ declare function $$render<Data>(): {
19
+ props: {
20
20
  activeKeyboard?: boolean;
21
21
  loopSelection?: boolean;
22
22
  focused?: string | number;
23
23
  selected?: string | number;
24
- elements?: Element<Data>[] | undefined;
24
+ elements?: Element<Data>[];
25
25
  centered?: boolean;
26
26
  bicolor?: boolean;
27
27
  appendIconSize?: string;
28
- onselect?: ((event: {
28
+ onselect?: (event: {
29
29
  detail: {
30
30
  element: Element<Data>;
31
31
  };
32
- }) => void) | undefined;
33
- onfocus?: ((event: {
32
+ }) => void;
33
+ onfocus?: (event: {
34
34
  detail: {
35
35
  element: Element<Data>;
36
36
  };
37
- }) => void) | undefined;
38
- oniconClick?: ((event: {
37
+ }) => void;
38
+ oniconClick?: (event: {
39
39
  detail: {
40
40
  index: number;
41
41
  element: Element<Data>;
42
42
  };
43
- }) => void) | undefined;
43
+ }) => void;
44
44
  onkeypress?: KeyboardEventHandler<HTMLDivElement>;
45
45
  elementSnippet?: Snippet<[{
46
46
  selected: boolean;
47
47
  focused: boolean;
48
48
  element: Element<Data>;
49
- }]> | undefined;
49
+ }]>;
50
50
  titleSnippet?: Snippet<[{
51
51
  selected: boolean;
52
52
  focused: boolean;
53
53
  element: Element<Data>;
54
- }]> | undefined;
54
+ }]>;
55
55
  descriptionSnippet?: Snippet<[{
56
56
  selected: boolean;
57
57
  focused: boolean;
58
58
  element: Element<Data>;
59
- }]> | undefined;
59
+ }]>;
60
60
  };
61
- events(): {};
62
- slots(): {};
61
+ exports: {};
62
+ bindings: "selected" | "focused" | "elements";
63
+ slots: {};
64
+ events: {};
65
+ };
66
+ declare class __sveltets_Render<Data> {
67
+ props(): ReturnType<typeof $$render<Data>>['props'];
68
+ events(): ReturnType<typeof $$render<Data>>['events'];
69
+ slots(): ReturnType<typeof $$render<Data>>['slots'];
63
70
  bindings(): "selected" | "focused" | "elements";
64
71
  exports(): {};
65
72
  }
@@ -1,91 +1,139 @@
1
- <script lang="ts" module>export {};
1
+ <script lang="ts" module>
2
+ export type Menu = {
3
+ title: string,
4
+ name: string | number,
5
+ url?: string,
6
+ disabled?: boolean,
7
+ children?: Menu[]
8
+ };
2
9
  </script>
3
10
 
4
- <script lang="ts">import '../../../css/main.css';
5
- import './SidebarMenuList.css';
6
- import Self from './SidebarMenuList.svelte';
7
- import { page } from "$app/state";
8
- let { menus, level = 0, selected = $bindable(undefined), bookmarkColor = "rgb(var(--global-color-primary-500))", color = "inherit", hoverColor = 'inherit', selectedTextColor = "inherit", selectedFontWeight = "600", autoDetectUrl = false, } = $props();
9
- let selectedIndex = $state(undefined);
10
- $effect(() => {
11
- if (autoDetectUrl && !!page) {
12
- const results = getMenuNameMatchingUrl({ menus: menus });
13
- selected = results.name;
11
+ <script lang="ts">
12
+ import '../../../css/main.css'
13
+ import './SidebarMenuList.css'
14
+ import Self from './SidebarMenuList.svelte'
15
+ import { page } from "$app/state";
16
+
17
+ interface Props {
18
+ menus: Menu[];
19
+ level?: number;
20
+ selected?: string | number;
21
+ bookmarkColor?: string;
22
+ color?: string;
23
+ hoverColor?: string;
24
+ selectedTextColor?: string;
25
+ selectedFontWeight?: string;
26
+ autoDetectUrl?: boolean;
27
+ }
28
+
29
+ let {
30
+ menus,
31
+ level = 0,
32
+ selected = $bindable(undefined),
33
+ bookmarkColor = "rgb(var(--global-color-primary-500))",
34
+ color = "inherit",
35
+ hoverColor = 'inherit',
36
+ selectedTextColor = "inherit",
37
+ selectedFontWeight = "600",
38
+ autoDetectUrl = false,
39
+ }: Props = $props();
40
+
41
+ let selectedIndex: number | undefined = $state(undefined)
42
+
43
+ $effect(() => {
44
+ if(autoDetectUrl && !!page) {
45
+ const results = getMenuNameMatchingUrl({ menus: menus })
46
+ selected = results.name
14
47
  }
15
- });
16
- $effect(() => {
17
- if (level == 0) {
18
- if (selected !== undefined && selected !== null) {
19
- let results = getSelectionIndex({
20
- menus: menus,
21
- offset: 0,
22
- search: selected
23
- });
24
- if (results.found)
25
- selectedIndex = results.offset;
26
- else
27
- selectedIndex = undefined;
28
- }
29
- else {
30
- selectedIndex = undefined;
31
- }
48
+ })
49
+
50
+ $effect(() => {
51
+ if(level == 0) {
52
+ if(selected !== undefined && selected !== null) {
53
+ let results = getSelectionIndex({
54
+ menus: menus,
55
+ offset: 0,
56
+ search: selected
57
+ })
58
+
59
+ if(results.found) selectedIndex = results.offset
60
+ else selectedIndex = undefined
61
+ } else {
62
+ selectedIndex = undefined
63
+ }
32
64
  }
33
- });
34
- let isSelected = $derived(selectedIndex !== undefined);
35
- function getSelectionIndex(params) {
36
- let initialOffset = params.offset;
37
- for (let i = 0; i < params.menus.length; i += 1) {
38
- initialOffset += 1;
39
- let currentMenu = params.menus[i];
40
- if (currentMenu.name == params.search) {
41
- return { found: true, offset: initialOffset };
42
- }
43
- else if (!!currentMenu.children) {
44
- let results = getSelectionIndex({
45
- menus: currentMenu.children,
46
- offset: initialOffset,
47
- search: params.search
48
- });
49
- initialOffset = results.offset;
50
- if (results.found) {
51
- return { found: true, offset: initialOffset };
52
- }
65
+ })
66
+
67
+ let isSelected = $derived(selectedIndex !== undefined)
68
+
69
+ function getSelectionIndex(params: {
70
+ menus: Menu[],
71
+ offset: number,
72
+ search: string | number
73
+ }): { found: boolean, offset: number } {
74
+ let initialOffset = params.offset
75
+
76
+ for(let i = 0; i < params.menus.length; i += 1) {
77
+ initialOffset += 1
78
+ let currentMenu = params.menus[i]
79
+ if(currentMenu.name == params.search) {
80
+ return { found: true, offset: initialOffset }
81
+ } else if(!!currentMenu.children) {
82
+ let results = getSelectionIndex({
83
+ menus: currentMenu.children,
84
+ offset: initialOffset,
85
+ search: params.search
86
+ })
87
+
88
+ initialOffset = results.offset
89
+ if(results.found) {
90
+ return { found: true, offset: initialOffset }
53
91
  }
92
+ }
54
93
  }
55
- return { found: false, offset: initialOffset };
56
- }
57
- function getMenuNameMatchingUrl(params) {
58
- let foundName = undefined;
59
- let foundMatchType = undefined;
60
- for (let i = 0; i < params.menus.length; i += 1) {
61
- let currentMenu = params.menus[i];
62
- if (!!currentMenu.url && page.url.pathname === currentMenu.url) {
63
- foundName = currentMenu.name;
64
- foundMatchType = 'equal';
65
- }
66
- else if (foundMatchType !== 'equal' && !!currentMenu.url && page.url.pathname.startsWith(currentMenu.url)) {
67
- foundName = currentMenu.name;
68
- foundMatchType = 'startsWith';
69
- }
70
- if (!!currentMenu.children) {
71
- let found = getMenuNameMatchingUrl({ menus: currentMenu.children });
72
- if (found.name !== undefined) {
73
- foundName = found.name;
74
- foundMatchType = found.matchType;
75
- }
94
+
95
+ return { found: false, offset: initialOffset }
96
+ }
97
+
98
+ function getMenuNameMatchingUrl(params: {
99
+ menus: Menu[]
100
+ }): {
101
+ name: string | number | undefined,
102
+ matchType: 'startsWith' | 'equal' | undefined
103
+ } {
104
+ let foundName: string | number | undefined = undefined
105
+ let foundMatchType: 'startsWith' | 'equal' | undefined = undefined
106
+
107
+ for(let i = 0; i < params.menus.length; i += 1) {
108
+ let currentMenu = params.menus[i]
109
+
110
+ if(!!currentMenu.url && page.url.pathname === currentMenu.url) {
111
+ foundName = currentMenu.name
112
+ foundMatchType = 'equal'
113
+ } else if(foundMatchType !== 'equal' && !!currentMenu.url && page.url.pathname.startsWith(currentMenu.url)) {
114
+ foundName = currentMenu.name
115
+ foundMatchType = 'startsWith'
116
+ }
117
+
118
+ if(!!currentMenu.children) {
119
+ let found = getMenuNameMatchingUrl({ menus: currentMenu.children })
120
+ if(found.name !== undefined) {
121
+ foundName = found.name
122
+ foundMatchType = found.matchType
76
123
  }
124
+ }
77
125
  }
126
+
78
127
  return {
79
- name: foundName,
80
- matchType: foundMatchType
81
- };
82
- }
83
- function handleUrlClick(e, menu) {
84
- if (menu.disabled)
85
- e.preventDefault();
86
- else
87
- selected = menu.name;
88
- }
128
+ name: foundName,
129
+ matchType: foundMatchType
130
+ }
131
+ }
132
+
133
+ function handleUrlClick(e: Event, menu: Menu) {
134
+ if(menu.disabled) e.preventDefault()
135
+ else selected = menu.name
136
+ }
89
137
  </script>
90
138
 
91
139
  <ul