@likable-hair/svelte 3.3.19 → 3.3.21

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.
@@ -3,7 +3,7 @@
3
3
  <script>import "../../../css/main.css";
4
4
  import MenuOrDrawer from "./MenuOrDrawer.svelte";
5
5
  import SelectableVerticalList from "../../simple/lists/SelectableVerticalList.svelte";
6
- export let open = false, activator, drawerPosition = "bottom", menuAnchor = "bottom-center", elements = [], stayInViewport = true, flipOnOverflow = false, _boxShadow = "rgb(var(--global-color-grey-900), .5) 0px 2px 4px", _height = "fit-content", _maxHeight = void 0, _minWidth = "100px", _borderRadius = "5px", openingId = void 0;
6
+ export let open = false, activator, drawerPosition = "bottom", menuAnchor = "bottom-center", elements = [], stayInViewport = true, flipOnOverflow = false, _boxShadow = "rgb(var(--global-color-grey-900), .5) 0px 2px 4px", _height = "300px", _maxHeight = void 0, _minWidth = "100px", _borderRadius = "5px", openingId = void 0;
7
7
  let selected;
8
8
  let focused;
9
9
  $:
@@ -3,7 +3,7 @@
3
3
  <script>import Autocomplete from "../../../components/simple/forms/Autocomplete.svelte";
4
4
  import debounceStore from "../../../stores/debounce";
5
5
  import { writable } from "svelte/store";
6
- export let items = [], values = [], multiple = false, searcher, placeholder = void 0, searchThreshold = 2, debounceTimeout = 500, searching = false, search = false, searchText = void 0, maxVisibleChips = void 0, menuOpened = false, mobileDrawer = false, closeOnSelect = false, disabled = false;
6
+ export let items = [], values = [], multiple = false, searcher, placeholder = void 0, searchThreshold = 2, debounceTimeout = 500, searching = false, search = false, searchText = void 0, maxVisibleChips = void 0, menuOpened = false, mobileDrawer = false, closeOnSelect = false, disabled = false, menuWidth = void 0, menuAnchor = "bottom-center";
7
7
  const searchTextValue = writable(searchText);
8
8
  $:
9
9
  searchTextDebounce = debounceStore(searchTextValue, debounceTimeout);
@@ -41,6 +41,8 @@ $:
41
41
  bind:placeholder
42
42
  bind:closeOnSelect
43
43
  bind:disabled
44
+ {menuWidth}
45
+ {menuAnchor}
44
46
  searchFunction={() => true}
45
47
  on:change
46
48
  >
@@ -20,6 +20,8 @@ declare const __propDef: {
20
20
  mobileDrawer?: boolean | undefined;
21
21
  closeOnSelect?: boolean | undefined;
22
22
  disabled?: boolean | undefined;
23
+ menuWidth?: string | undefined | null;
24
+ menuAnchor?: "bottom" | "bottom-center" | "right-center" | undefined;
23
25
  };
24
26
  events: {
25
27
  change: CustomEvent<any>;
@@ -38,6 +38,7 @@ declare const __propDef: {
38
38
  menuBorderRadius?: string | undefined;
39
39
  mobileDrawer?: boolean | undefined;
40
40
  menuWidth?: string | null | undefined;
41
+ menuAnchor?: "bottom" | "bottom-center" | "right-center" | undefined;
41
42
  }, "items"> | undefined;
42
43
  selected?: Item[] | undefined;
43
44
  items?: Item[] | undefined;
@@ -38,18 +38,12 @@ onMount(() => {
38
38
  tableContainer.addEventListener("scroll", setReachedBottomOrTop);
39
39
  hideScrollbar = tableContainer.scrollHeight > tableContainer.clientHeight;
40
40
  for (const head of [...headers, { value: "non-resizable", minWidth: DEFAULT_MIN_WIDTH_PX + "px", maxWidth: DEFAULT_MAX_WIDTH_PX + "px" }, { value: "customize-headers", minWidth: DEFAULT_MIN_WIDTH_PX + "px", maxWidth: DEFAULT_MAX_WIDTH_PX + "px" }]) {
41
- let th;
42
- if (head.value == "non-resizable" || head.value == "customize-headers") {
43
- th = document.getElementsByClassName(head.value).item(0);
44
- } else {
45
- th = document.getElementById(head.value);
46
- }
41
+ let th = headersHTML[head.value];
47
42
  if (!!th) {
48
43
  resizeHeader(th, head);
49
44
  }
50
45
  }
51
- let table = document.getElementsByClassName("dynamic-table")[0];
52
- table.classList.add("dynamic-resizable");
46
+ tableHTML.classList.add("dynamic-resizable");
53
47
  resizeObserver = new ResizeObserver(() => {
54
48
  updateRemainingWidth();
55
49
  updateHeaderHeight();
@@ -106,8 +100,8 @@ const [send, receive] = crossfade({
106
100
  let clazz = {};
107
101
  export { clazz as class };
108
102
  const dispatch = createEventDispatcher();
109
- export let headers = [], headersToShowInTable = headers, subHeaders = [], customizeHeaders = false, rows = [], sortedBy = void 0, sortDirection = "asc", cellEdit = false, lang = "en", dateLocale = void 0, noItemsText = lang == "en" ? "No items to show" : "Nessun elemento da visualizzare", showSelect = false, showActions = true, selectMode = "single", selectedItems = [], unselectedItems = [], selectedAll = false, showExpand = false, loading = false, disabled = false, filters = [], searchBarColumns = void 0, searchBarVisible = false, searchBarPlaceholder = lang == "en" ? "Type to search..." : "Scrivi per cercare...", filtersVisible = false, quickFiltersVisible = false, editFilterMode = "one-edit", showActiveFilters = true, quickFilters = [], actionsForSelectedItems = [], quickActionsDisabled = false, totalRows = rows.length, searchText = void 0, renderedRowsNumber = 100, sectionRowsNumber = 20, sectionThreshold = 2, backwardThresholdPixel = 100, forwardThresholdPixel = 100, uniqueKey = "id", numberOfResultsVisible = false, endLineVisible = false, resizableColumns = false, resizedColumnSizeWithPadding = {}, dynamicFilters = true;
110
- let openCellEditor = false, cellEditorActivator, cellEditorContainer, menuElementCellEditor, menuElementQuickFilters, cellEditorInfoActive, saveEditDisabled = false, searchBarInput = void 0, openQuickFilter = false, quickFilterActivator, quickFilterActive, globalBuilder = new FilterBuilder(), calendarOpened = false, calendarOpened2 = false, selectedIndexes = [], cellEditorIndexRow, cellEditorIndexHeader, cellEditorSubItem, currentSectionNumber = 0, tableBody, tableContainer, userScrolling = true, reachedBottom = false, reachedTop = false, resizing = false, remainingWidth = 0, hideScrollbar = false, sortModify, mainHeader, resizeObserver;
103
+ export let headers = [], headersToShowInTable = headers, subHeaders = [], customizeHeaders = false, rows = [], sortedBy = void 0, sortDirection = "asc", cellEdit = false, lang = "en", dateLocale = void 0, noItemsText = lang == "en" ? "No items to show" : "Nessun elemento da visualizzare", showSelect = false, showActions = true, selectMode = "single", selectedItems = [], unselectedItems = [], selectedAll = false, showExpand = false, loading = false, disabled = false, filters = [], searchBarColumns = void 0, searchBarVisible = false, searchBarPlaceholder = lang == "en" ? "Type to search..." : "Scrivi per cercare...", filtersVisible = false, quickFiltersVisible = false, editFilterMode = "one-edit", showActiveFilters = true, quickFilters = [], actionsForSelectedItems = [], quickActionsDisabled = false, totalRows = rows.length, searchText = void 0, renderedRowsNumber = 100, sectionRowsNumber = 20, sectionThreshold = 2, backwardThresholdPixel = 100, forwardThresholdPixel = 100, uniqueKey = "id", numberOfResultsVisible = false, endLineVisible = false, resizableColumns = false, resizedColumnSizeWithPadding = {}, dynamicFilters = true, useSelectedItemsOnly = false;
104
+ let openCellEditor = false, cellEditorActivator, cellEditorContainer, menuElementCellEditor, menuElementQuickFilters, cellEditorInfoActive, saveEditDisabled = false, searchBarInput = void 0, openQuickFilter = false, quickFilterActivator, quickFilterActive, globalBuilder = new FilterBuilder(), calendarOpened = false, calendarOpened2 = false, selectedIndexes = [], cellEditorIndexRow, cellEditorIndexHeader, cellEditorSubItem, currentSectionNumber = 0, tableBody, tableContainer, tableHTML, headersHTML = {}, userScrolling = true, reachedBottom = false, reachedTop = false, resizing = false, remainingWidth = 0, hideScrollbar = false, sortModify, mainHeader, resizeObserver, ignoreSelectAll = rows.length == totalRows && useSelectedItemsOnly;
111
105
  const DEFAULT_MIN_WIDTH_PX = 100, DEFAULT_MAX_WIDTH_PX = 400;
112
106
  $:
113
107
  totalSections = (totalRows - renderedRowsNumber) / sectionRowsNumber;
@@ -223,7 +217,7 @@ function handleCancelClick() {
223
217
  }
224
218
  function handleSelect(item, shiftKeyPressed) {
225
219
  let index = -1;
226
- if (selectedAll) {
220
+ if (selectedAll && !ignoreSelectAll) {
227
221
  index = unselectedItems.findIndex((i) => i[uniqueKey] == item[uniqueKey]);
228
222
  } else {
229
223
  index = selectedItems.findIndex((i) => i[uniqueKey] == item[uniqueKey]);
@@ -242,7 +236,7 @@ function handleSelect(item, shiftKeyPressed) {
242
236
  selectedIndex = x;
243
237
  }
244
238
  for (let i = lastSelectedIndex + 1; i <= selectedIndex; i++) {
245
- if (selectedAll) {
239
+ if (selectedAll && !ignoreSelectAll) {
246
240
  if (!unselectedItems.find((unselectedItem) => unselectedItem[uniqueKey] == rows[i].item[uniqueKey])) {
247
241
  unselectedItems = [...unselectedItems, rows[i].item];
248
242
  }
@@ -254,7 +248,7 @@ function handleSelect(item, shiftKeyPressed) {
254
248
  }
255
249
  }
256
250
  } else {
257
- if (selectedAll) {
251
+ if (selectedAll && !ignoreSelectAll) {
258
252
  unselectedItems = [...unselectedItems, item];
259
253
  } else {
260
254
  selectedItems = [...selectedItems, item];
@@ -263,7 +257,7 @@ function handleSelect(item, shiftKeyPressed) {
263
257
  }
264
258
  }
265
259
  } else {
266
- if (selectedAll) {
260
+ if (selectedAll && !ignoreSelectAll) {
267
261
  unselectedItems = unselectedItems.filter((i) => i[uniqueKey] != item[uniqueKey]);
268
262
  } else {
269
263
  selectedItems = selectedItems.filter((i) => i[uniqueKey] != item[uniqueKey]);
@@ -273,7 +267,11 @@ function handleSelect(item, shiftKeyPressed) {
273
267
  }
274
268
  function handleSelectAll() {
275
269
  if (selectMode == "multiple") {
276
- selectedItems = [];
270
+ if (!selectedAll && ignoreSelectAll) {
271
+ selectedItems = rows.map((r) => r.item);
272
+ } else {
273
+ selectedItems = [];
274
+ }
277
275
  selectedIndexes = [];
278
276
  unselectedItems = [];
279
277
  selectedAll = !selectedAll;
@@ -760,14 +758,14 @@ async function updateRemainingWidth() {
760
758
  const containerWidth = tableContainer?.getBoundingClientRect().width - 30;
761
759
  if (containerWidth) {
762
760
  const totalResizableWidth = headersToShowInTable.reduce((sum, head) => {
763
- let th = document.getElementById(head.value);
761
+ let th = headersHTML[head.value];
764
762
  if (!!th) {
765
763
  resizeHeader(th, head);
766
764
  }
767
765
  const width = th?.getBoundingClientRect().width || 0;
768
766
  return sum + width + 1;
769
767
  }, 0);
770
- const extraStaticWidth = Array.from(mainHeader.querySelectorAll("th.non-resizable, th.slot-append, th.customize-headers")).reduce((sum, th) => sum + th.getBoundingClientRect().width + 1, 0);
768
+ const extraStaticWidth = Array.from(mainHeader.querySelectorAll("th.non-resizable, th.customize-headers")).reduce((sum, th) => sum + th.getBoundingClientRect().width + 1, 0);
771
769
  remainingWidth = Math.max(0, containerWidth - totalResizableWidth - extraStaticWidth);
772
770
  }
773
771
  }
@@ -979,7 +977,7 @@ function resizeHeader(th, header) {
979
977
  hasMore={currentSectionNumber > 0 && userScrolling}
980
978
  direction='backward'
981
979
  />
982
- <table style="display: table;" class="dynamic-table">
980
+ <table style="display: table;" class="dynamic-table" bind:this={tableHTML}>
983
981
  <thead class="table-header" bind:this={mainHeader}>
984
982
  <tr>
985
983
  {#if !!showSelect && !showExpand && rows.length > 0}
@@ -988,6 +986,7 @@ function resizeHeader(th, header) {
988
986
  style:min-width="30px"
989
987
  style:text-align="center"
990
988
  class="non-resizable"
989
+ bind:this={headersHTML['non-resizable']}
991
990
  >
992
991
  {#if selectMode === "multiple"}
993
992
  <Checkbox
@@ -1005,6 +1004,7 @@ function resizeHeader(th, header) {
1005
1004
  style:max-width="60px"
1006
1005
  style:text-align="center"
1007
1006
  class="non-resizable"
1007
+ bind:this={headersHTML['non-resizable']}
1008
1008
  />
1009
1009
  {/if}
1010
1010
  {#each headersToShowInTable as head, index}
@@ -1014,7 +1014,7 @@ function resizeHeader(th, header) {
1014
1014
  style:max-width={head.maxWidth}
1015
1015
  class:sortable={head.sortable}
1016
1016
  on:click={() => handleHeaderClick(head)}
1017
- id={head.value}
1017
+ bind:this={headersHTML[head.value]}
1018
1018
  >
1019
1019
  {#if resizableColumns}
1020
1020
  <div class="resizer" use:resize></div>
@@ -1060,7 +1060,7 @@ function resizeHeader(th, header) {
1060
1060
  </slot>
1061
1061
  </th>
1062
1062
  {/each}
1063
- {#if remainingWidth && (customizeHeaders || $$slots.rowActions || $$slots.append || resizableColumns)}
1063
+ {#if remainingWidth}
1064
1064
  <th
1065
1065
  style:width={remainingWidth + 'px'}
1066
1066
  class="filler"
@@ -1071,6 +1071,7 @@ function resizeHeader(th, header) {
1071
1071
  <th
1072
1072
  style:text-align="center"
1073
1073
  class="customize-headers"
1074
+ bind:this={headersHTML['customize-headers']}
1074
1075
  >
1075
1076
  {#if customizeHeaders}
1076
1077
  <div style="display: flex; justify-content: start;">
@@ -1129,7 +1130,7 @@ function resizeHeader(th, header) {
1129
1130
  : 'var(--dynamic-table-row-disabled-background-color, var(--dynamic-table-default-row-disabled-background-color))'
1130
1131
  : expandedRows.findIndex(r => r.item[uniqueKey] == row.item[uniqueKey]) != -1
1131
1132
  ? 'var(--dynamic-table-expanded-row-background-color, var(--dynamic-table-default-expanded-row-background-color))'
1132
- : selectedAll
1133
+ : selectedAll && !ignoreSelectAll
1133
1134
  ? !unselectedItems.find(i => i[uniqueKey] == row.item[uniqueKey])
1134
1135
  ? 'var(--dynamic-table-selected-row-background-color, var(--dynamic-table-default-selected-row-background-color))'
1135
1136
  : ''
@@ -1145,7 +1146,7 @@ function resizeHeader(th, header) {
1145
1146
  <Checkbox
1146
1147
  id={row.item[uniqueKey]}
1147
1148
  value={
1148
- selectedAll ?
1149
+ selectedAll && !ignoreSelectAll ?
1149
1150
  unselectedItems.findIndex(
1150
1151
  (i) => i[uniqueKey] == row.item[uniqueKey]
1151
1152
  ) == -1 :
@@ -1221,7 +1222,7 @@ function resizeHeader(th, header) {
1221
1222
  {/if}
1222
1223
  </td>
1223
1224
  {/each}
1224
- {#if remainingWidth && (customizeHeaders || $$slots.rowActions || $$slots.append || resizableColumns)}
1225
+ {#if remainingWidth}
1225
1226
  <td/>
1226
1227
  {/if}
1227
1228
  {#if $$slots.rowActions || $$slots.append}
@@ -1835,30 +1836,17 @@ function resizeHeader(th, header) {
1835
1836
  width: fit-content;
1836
1837
  }
1837
1838
 
1838
- .slot-append {
1839
- width: 1px;
1840
- min-width: unset;
1841
- box-sizing: content-box;
1842
- }
1843
-
1844
1839
  .table-header {
1845
1840
  position: sticky;
1846
1841
  top: 0;
1847
1842
  z-index: 2;
1843
+ top: -1px;
1848
1844
  height: var(
1849
1845
  --dynamic-table-header-height,
1850
1846
  var(--dynamic-table-default-header-height)
1851
1847
  );
1852
1848
  }
1853
1849
 
1854
- @media not all and (min-resolution:.001dpcm) {
1855
- .table-header {
1856
- position: sticky;
1857
- top: -2px;
1858
- z-index: 2;
1859
- }
1860
- }
1861
-
1862
1850
  .table-subheader {
1863
1851
  top: var(--main-header-height);
1864
1852
  z-index: 1;
@@ -179,6 +179,7 @@ declare const __propDef: {
179
179
  [value: string]: number;
180
180
  } | undefined;
181
181
  dynamicFilters?: boolean | undefined;
182
+ useSelectedItemsOnly?: boolean | undefined;
182
183
  };
183
184
  events: {
184
185
  scroll: Event;
@@ -5,7 +5,7 @@ import "./Autocomplete.css";
5
5
  import { scrollInMenu } from "../common/scroller";
6
6
  let clazz = {};
7
7
  export { clazz as class };
8
- export let values = [], items, searchFunction = void 0, multiple = false, disabled = false, mandatory = false, placeholder = "", width = "auto", height = "auto", maxWidth = void 0, minWidth = "200px", openingId = "autocomplete-menu", searchText = void 0, maxVisibleChips = void 0, menuOpened = false, closeOnSelect = !multiple, emptySearchTextOnMenuClose = true, menuBoxShadow = "rgb(var(--global-color-background-300), .5) 0px 2px 4px", menuBorderRadius = "5px", mobileDrawer = false, menuWidth = void 0;
8
+ export let values = [], items, searchFunction = void 0, multiple = false, disabled = false, mandatory = false, placeholder = "", width = "auto", height = "auto", maxWidth = void 0, minWidth = "200px", openingId = "autocomplete-menu", searchText = void 0, maxVisibleChips = void 0, menuOpened = false, closeOnSelect = !multiple, emptySearchTextOnMenuClose = true, menuBoxShadow = "rgb(var(--global-color-background-300), .5) 0px 2px 4px", menuBorderRadius = "5px", mobileDrawer = false, menuWidth = void 0, menuAnchor = "bottom-center";
9
9
  let dispatch = createEventDispatcher();
10
10
  function select(item) {
11
11
  if (disabled)
@@ -232,7 +232,7 @@ import MenuOrDrawer from "../../composed/common/MenuOrDrawer.svelte";
232
232
  _boxShadow={menuBoxShadow}
233
233
  _borderRadius={menuBorderRadius}
234
234
  bind:open={menuOpened}
235
- anchor="bottom-center"
235
+ anchor={menuAnchor}
236
236
  closeOnClickOutside
237
237
  bind:refreshPosition
238
238
  bind:menuElement
@@ -36,6 +36,7 @@ declare const __propDef: {
36
36
  menuBorderRadius?: string | undefined;
37
37
  mobileDrawer?: boolean | undefined;
38
38
  menuWidth?: string | undefined | null;
39
+ menuAnchor?: "bottom" | "bottom-center" | "right-center" | undefined;
39
40
  };
40
41
  events: {
41
42
  focus: FocusEvent;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@likable-hair/svelte",
3
3
  "description": "A Svelte component for likablehair and others",
4
- "version": "3.3.19",
4
+ "version": "3.3.21",
5
5
  "scripts": {
6
6
  "host": "vite --host",
7
7
  "dev": "vite dev",