webcoreui 0.9.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/README.md +22 -6
  2. package/components/Accordion/Accordion.astro +15 -10
  3. package/components/Accordion/Accordion.svelte +14 -12
  4. package/components/Accordion/Accordion.tsx +2 -2
  5. package/components/Alert/Alert.svelte +17 -12
  6. package/components/Alert/Alert.tsx +1 -1
  7. package/components/Alert/alert.ts +10 -3
  8. package/components/AspectRatio/AspectRatio.svelte +7 -4
  9. package/components/AspectRatio/aspectratio.ts +6 -0
  10. package/components/Avatar/Avatar.svelte +11 -9
  11. package/components/Badge/Badge.svelte +14 -10
  12. package/components/Badge/badge.ts +2 -1
  13. package/components/Banner/Banner.astro +10 -4
  14. package/components/Banner/Banner.svelte +14 -10
  15. package/components/Banner/Banner.tsx +1 -0
  16. package/components/Banner/banner.ts +6 -0
  17. package/components/BottomNavigation/BottomNavigation.svelte +7 -5
  18. package/components/Breadcrumb/Breadcrumb.astro +1 -1
  19. package/components/Breadcrumb/Breadcrumb.svelte +8 -6
  20. package/components/Breadcrumb/Breadcrumb.tsx +2 -2
  21. package/components/Button/Button.svelte +12 -8
  22. package/components/Button/Button.tsx +2 -2
  23. package/components/Button/button.ts +2 -3
  24. package/components/Card/Card.svelte +14 -10
  25. package/components/Card/card.ts +6 -0
  26. package/components/Carousel/Carousel.astro +46 -41
  27. package/components/Carousel/carousel.ts +3 -0
  28. package/components/Checkbox/Checkbox.svelte +12 -9
  29. package/components/Checkbox/checkbox.module.scss +4 -0
  30. package/components/Collapsible/Collapsible.astro +8 -5
  31. package/components/Collapsible/Collapsible.svelte +54 -49
  32. package/components/Collapsible/collapsible.ts +8 -0
  33. package/components/ConditionalWrapper/ConditionalWrapper.svelte +10 -6
  34. package/components/ConditionalWrapper/conditionalwrapper.ts +6 -0
  35. package/components/Copy/Copy.astro +17 -11
  36. package/components/Copy/Copy.svelte +68 -61
  37. package/components/Copy/Copy.tsx +1 -0
  38. package/components/Copy/copy.ts +8 -2
  39. package/components/DataTable/DataTable.astro +103 -93
  40. package/components/DataTable/DataTable.svelte +276 -272
  41. package/components/DataTable/datatable.ts +5 -2
  42. package/components/Flex/Flex.svelte +14 -10
  43. package/components/Flex/flex.ts +6 -0
  44. package/components/Footer/Footer.svelte +12 -9
  45. package/components/Footer/footer.ts +6 -0
  46. package/components/Grid/Grid.svelte +12 -8
  47. package/components/Grid/grid.ts +6 -0
  48. package/components/Group/Group.svelte +7 -4
  49. package/components/Group/group.ts +6 -0
  50. package/components/Icon/Icon.astro +19 -5
  51. package/components/Icon/Icon.svelte +23 -7
  52. package/components/Icon/Icon.tsx +19 -5
  53. package/components/Icon/icon.ts +9 -3
  54. package/components/Icon/map.ts +8 -10
  55. package/components/Input/Input.svelte +24 -20
  56. package/components/Input/input.ts +10 -3
  57. package/components/Kbd/Kbd.svelte +7 -4
  58. package/components/Kbd/kbd.ts +6 -0
  59. package/components/List/List.astro +65 -60
  60. package/components/List/List.svelte +149 -147
  61. package/components/List/List.tsx +1 -1
  62. package/components/Masonry/Masonry.svelte +12 -10
  63. package/components/Menu/Menu.astro +8 -3
  64. package/components/Menu/Menu.svelte +15 -10
  65. package/components/Menu/Menu.tsx +3 -1
  66. package/components/Menu/menu.ts +6 -0
  67. package/components/Modal/Modal.astro +1 -0
  68. package/components/Modal/Modal.svelte +18 -13
  69. package/components/Modal/Modal.tsx +2 -1
  70. package/components/Modal/modal.ts +6 -1
  71. package/components/Pagination/Pagination.astro +75 -69
  72. package/components/Pagination/Pagination.svelte +29 -26
  73. package/components/Pagination/Pagination.tsx +5 -4
  74. package/components/Pagination/pagination.module.scss +4 -0
  75. package/components/Popover/Popover.svelte +10 -6
  76. package/components/Popover/popover.ts +6 -0
  77. package/components/Progress/Progress.svelte +12 -10
  78. package/components/Progress/progress.ts +1 -1
  79. package/components/Radio/Radio.svelte +12 -9
  80. package/components/Radio/radio.ts +4 -2
  81. package/components/Rating/Rating.svelte +16 -14
  82. package/components/Ribbon/Ribbon.svelte +9 -6
  83. package/components/Ribbon/ribbon.ts +6 -0
  84. package/components/Select/Select.astro +73 -63
  85. package/components/Select/Select.svelte +27 -22
  86. package/components/Select/Select.tsx +8 -6
  87. package/components/Sheet/Sheet.svelte +9 -5
  88. package/components/Sheet/sheet.ts +6 -2
  89. package/components/Sidebar/Sidebar.svelte +7 -4
  90. package/components/Sidebar/sidebar.ts +6 -0
  91. package/components/Skeleton/Skeleton.svelte +9 -7
  92. package/components/Slider/Slider.svelte +15 -13
  93. package/components/Slider/slider.module.scss +4 -0
  94. package/components/Slider/slider.ts +4 -2
  95. package/components/Spinner/Spinner.svelte +7 -5
  96. package/components/Spoiler/Spoiler.astro +13 -8
  97. package/components/Spoiler/Spoiler.svelte +13 -10
  98. package/components/Spoiler/spoiler.ts +6 -0
  99. package/components/Stepper/Stepper.svelte +9 -7
  100. package/components/Switch/Switch.svelte +15 -12
  101. package/components/Table/Table.svelte +11 -9
  102. package/components/Table/table.ts +1 -1
  103. package/components/Tabs/Tabs.astro +8 -5
  104. package/components/Tabs/Tabs.svelte +14 -11
  105. package/components/Tabs/tabs.ts +7 -1
  106. package/components/Textarea/Textarea.svelte +14 -11
  107. package/components/Textarea/textarea.ts +9 -4
  108. package/components/ThemeSwitcher/ThemeSwitcher.astro +43 -37
  109. package/components/ThemeSwitcher/ThemeSwitcher.svelte +14 -10
  110. package/components/ThemeSwitcher/themeswitcher.ts +7 -0
  111. package/components/Timeline/Timeline.svelte +12 -9
  112. package/components/Timeline/timeline.ts +7 -2
  113. package/components/TimelineItem/TimelineItem.svelte +8 -5
  114. package/components/TimelineItem/timelineitem.ts +6 -0
  115. package/components/Toast/Toast.svelte +18 -10
  116. package/components/Toast/toast.ts +6 -1
  117. package/icons/alert.svg +2 -2
  118. package/icons/check.svg +2 -2
  119. package/icons/chevron-down.svg +3 -0
  120. package/icons/chevron-left.svg +3 -0
  121. package/icons/chevron-right.svg +3 -0
  122. package/icons/chevron-up.svg +3 -0
  123. package/icons/circle-check.svg +3 -3
  124. package/icons/info.svg +3 -3
  125. package/icons.d.ts +4 -5
  126. package/icons.js +4 -5
  127. package/index.d.ts +1 -0
  128. package/index.js +1 -0
  129. package/package.json +20 -20
  130. package/react.d.ts +3 -3
  131. package/svelte.d.ts +98 -98
  132. package/utils/bodyFreeze.ts +13 -0
  133. package/utils/modal.ts +12 -0
  134. package/icons/arrow-down.svg +0 -3
  135. package/icons/arrow-left.svg +0 -3
  136. package/icons/arrow-right.svg +0 -3
  137. package/icons/components.svg +0 -3
  138. package/icons/file.svg +0 -3
@@ -1,5 +1,7 @@
1
- import { type BadgeProps } from '../Badge/badge'
2
- import { type IconProps } from '../Icon/icon'
1
+ import type { Snippet } from 'svelte'
2
+
3
+ import type { BadgeProps } from '../Badge/badge'
4
+ import type { IconProps } from '../Icon/icon'
3
5
 
4
6
  export type CopyProps = {
5
7
  tooltip?: string
@@ -9,6 +11,10 @@ export type CopyProps = {
9
11
  className?: string
10
12
  } & BadgeProps
11
13
 
14
+ export type SvelteCopyProps = {
15
+ children: Snippet
16
+ } & CopyProps
17
+
12
18
  export type ReactCopyProps = {
13
19
  children: React.ReactNode
14
20
  } & CopyProps
@@ -113,7 +113,7 @@ const hasPagination = data?.length && itemsPerPage
113
113
  class:list={classes}
114
114
  style={maxHeight ? `max-height:${maxHeight}` : undefined}
115
115
  >
116
- <table data-items-per-page={itemsPerPage} data-page={hasPagination && 1}>
116
+ <table data-items-per-page={itemsPerPage} data-page={hasPagination ? 1 : undefined}>
117
117
  {headings?.length && (
118
118
  <thead>
119
119
  <tr>
@@ -173,117 +173,120 @@ const hasPagination = data?.length && itemsPerPage
173
173
  import { debounce } from '../../utils/debounce'
174
174
  import { dispatch, listen } from '../../utils/event'
175
175
 
176
- const filters = document.querySelectorAll('[data-id="w-data-table-filter"]')
177
- const sorts = document.querySelectorAll('[data-id="w-data-table-sort"]')
178
-
179
- Array.from(filters).forEach(filter => {
180
- filter.addEventListener('input', debounce((event: Event) => {
181
- const target = event.target as HTMLInputElement
182
- const filterableColumns = target.dataset.filter
183
- const table = target.closest('section')?.querySelector('table') as HTMLTableElement
184
- const pagination = target.closest('section')?.querySelector('.w-data-table-pagination') as HTMLUListElement
185
- const noResults = table.querySelector('tfoot') as HTMLElement
186
- const tableRows = Array.from(table.querySelectorAll('tbody tr') as NodeListOf<HTMLTableRowElement>)
187
-
188
- tableRows.forEach(row => {
189
- const rowValue = Array.from(row.querySelectorAll('td'))
190
- .filter(td => filterableColumns?.includes(td.dataset.name || ''))
191
- .map(td => td.innerText)
192
- .join('')
193
- .toLowerCase()
194
-
195
- if (rowValue.includes(target.value.toLowerCase())) {
196
- row.removeAttribute('data-hidden')
197
- } else {
198
- row.dataset.hidden = 'true'
199
- }
200
- })
176
+ const addEventListeners = () => {
177
+ const filters = document.querySelectorAll('[data-id="w-data-table-filter"]')
178
+ const sorts = document.querySelectorAll('[data-id="w-data-table-sort"]')
201
179
 
202
- const filteredRows = Array.from(
203
- table?.querySelectorAll('tbody tr:not([data-hidden])') as NodeListOf<HTMLTableRowElement>
204
- )
180
+ Array.from(filters).forEach(filter => {
181
+ filter.addEventListener('input', debounce((event: Event) => {
182
+ const target = event.target as HTMLInputElement
183
+ const filterableColumns = target.dataset.filter
184
+ const section = target.closest('section')
185
+ const table = section?.querySelector('table') as HTMLTableElement
186
+ const pagination = section?.querySelector('.w-data-table-pagination') as HTMLUListElement
187
+ const noResults = table.querySelector('tfoot') as HTMLElement
188
+ const tableRows = Array.from(table.querySelectorAll('tbody tr') as NodeListOf<HTMLTableRowElement>)
205
189
 
206
- if (!filteredRows.length) {
207
- noResults.removeAttribute('data-hidden')
208
- } else {
209
- noResults.dataset.hidden = 'true'
210
- }
190
+ tableRows.forEach(row => {
191
+ const rowValue = Array.from(row.querySelectorAll('td'))
192
+ .filter(td => filterableColumns?.includes(td.dataset.name || ''))
193
+ .map(td => td.innerText)
194
+ .join('')
195
+ .toLowerCase()
211
196
 
212
- if (table.dataset.itemsPerPage && filteredRows.length >= Number(table.dataset.itemsPerPage)) {
213
- filteredRows.forEach((row, index) => {
214
- if (index >= Number(table.dataset.itemsPerPage)) {
197
+ if (rowValue.includes(target.value.toLowerCase())) {
198
+ row.removeAttribute('data-hidden')
199
+ } else {
215
200
  row.dataset.hidden = 'true'
216
201
  }
217
202
  })
218
- }
219
-
220
- if (target.value) {
221
- pagination.style.display = 'none'
222
- } else {
223
- pagination.style.display = 'flex'
224
203
 
225
- tableRows.forEach(row => {
226
- if (row.dataset.page !== table.dataset.page) {
227
- row.dataset.hidden = 'true'
228
- } else {
229
- row.removeAttribute('data-hidden')
230
- }
231
- })
232
- }
204
+ const filteredRows = Array.from(
205
+ table?.querySelectorAll('tbody tr:not([data-hidden])') as NodeListOf<HTMLTableRowElement>
206
+ )
233
207
 
234
- dispatch('dataTableFilter', {
235
- results: filteredRows,
236
- numberOfResults: filteredRows.length
237
- })
238
- }, 400))
239
- })
208
+ if (!filteredRows.length) {
209
+ noResults.removeAttribute('data-hidden')
210
+ } else {
211
+ noResults.dataset.hidden = 'true'
212
+ }
240
213
 
241
- Array.from(sorts).forEach(sort => {
242
- let sortOrder = 1
243
-
244
- sort.addEventListener('click', event => {
245
- const target = event.target as HTMLButtonElement
246
- const sortBy = target.parentElement?.dataset.name
247
- const table = target.closest('section')?.querySelector('table')
248
- const tableBody = table?.querySelector('tbody')
249
- const sortedTableRows = Array.from(
250
- table?.querySelectorAll('tbody tr') as NodeListOf<HTMLTableRowElement>
251
- ).sort((a, b) => {
252
- let aValue: string | number = (a.querySelector(`[data-name=${sortBy}]`) as HTMLElement)
253
- ?.innerText.replace(/\s/g, '')
254
- let bValue: string | number = (b.querySelector(`[data-name=${sortBy}]`) as HTMLElement)
255
- ?.innerText.replace(/\s/g, '')
256
-
257
- if (!isNaN(aValue as any)) {
258
- aValue = Number(aValue)
214
+ if (table.dataset.itemsPerPage && filteredRows.length >= Number(table.dataset.itemsPerPage)) {
215
+ filteredRows.forEach((row, index) => {
216
+ if (index >= Number(table.dataset.itemsPerPage)) {
217
+ row.dataset.hidden = 'true'
218
+ }
219
+ })
259
220
  }
260
221
 
261
- if (!isNaN(bValue as any)) {
262
- bValue = Number(bValue)
222
+ if (target.value) {
223
+ pagination.style.display = 'none'
224
+ } else {
225
+ pagination.style.display = 'flex'
226
+
227
+ tableRows.forEach(row => {
228
+ if (row.dataset.page !== table.dataset.page) {
229
+ row.dataset.hidden = 'true'
230
+ } else {
231
+ row.removeAttribute('data-hidden')
232
+ }
233
+ })
263
234
  }
264
235
 
265
- return aValue > bValue
266
- ? sortOrder * -1
267
- : sortOrder
268
- }).map((row, index) => {
269
- if (table?.dataset.page) {
270
- row.dataset.page = `${Math.ceil((index + 1) / Number(table.dataset.itemsPerPage))}`
236
+ dispatch('dataTableFilter', {
237
+ results: filteredRows,
238
+ numberOfResults: filteredRows.length
239
+ })
240
+ }, 400))
241
+ })
271
242
 
272
- if (row.dataset.page !== table.dataset.page) {
273
- row.dataset.hidden = 'true'
274
- } else {
275
- row.removeAttribute('data-hidden')
243
+ Array.from(sorts).forEach(sort => {
244
+ let sortOrder = 1
245
+
246
+ sort.addEventListener('click', event => {
247
+ const target = event.target as HTMLButtonElement
248
+ const sortBy = target.parentElement?.dataset.name
249
+ const table = target.closest('section')?.querySelector('table')
250
+ const tableBody = table?.querySelector('tbody')
251
+ const sortedTableRows = Array.from(
252
+ table?.querySelectorAll('tbody tr') as NodeListOf<HTMLTableRowElement>
253
+ ).sort((a, b) => {
254
+ let aValue: string | number = (a.querySelector(`[data-name=${sortBy}]`) as HTMLElement)
255
+ ?.innerText.replace(/\s/g, '')
256
+ let bValue: string | number = (b.querySelector(`[data-name=${sortBy}]`) as HTMLElement)
257
+ ?.innerText.replace(/\s/g, '')
258
+
259
+ if (!isNaN(aValue as any)) {
260
+ aValue = Number(aValue)
276
261
  }
277
- }
278
262
 
279
- return row
280
- })
263
+ if (!isNaN(bValue as any)) {
264
+ bValue = Number(bValue)
265
+ }
281
266
 
282
- tableBody?.replaceChildren(...sortedTableRows)
267
+ return aValue > bValue
268
+ ? sortOrder * -1
269
+ : sortOrder
270
+ }).map((row, index) => {
271
+ if (table?.dataset.page) {
272
+ row.dataset.page = `${Math.ceil((index + 1) / Number(table.dataset.itemsPerPage))}`
273
+
274
+ if (row.dataset.page !== table.dataset.page) {
275
+ row.dataset.hidden = 'true'
276
+ } else {
277
+ row.removeAttribute('data-hidden')
278
+ }
279
+ }
283
280
 
284
- sortOrder = sortOrder === 1 ? -1 : 1
281
+ return row
282
+ })
283
+
284
+ tableBody?.replaceChildren(...sortedTableRows)
285
+
286
+ sortOrder = sortOrder === 1 ? -1 : 1
287
+ })
285
288
  })
286
- })
289
+ }
287
290
 
288
291
  listen('selectOnChange', event => {
289
292
  const eventName = event.name.toLowerCase().replace(/\s/g, '')
@@ -291,6 +294,10 @@ const hasPagination = data?.length && itemsPerPage
291
294
  ?.closest('section') as HTMLElement)
292
295
  .querySelector('table') as HTMLTableElement
293
296
 
297
+ if (!table) {
298
+ return
299
+ }
300
+
294
301
  const affectedTableCells = Array.from(table.querySelectorAll(`[data-name=${eventName}]`)) as HTMLElement[]
295
302
 
296
303
  const columnToggleListElement = Array.from(event.list.children)
@@ -329,4 +336,7 @@ const hasPagination = data?.length && itemsPerPage
329
336
  }
330
337
  })
331
338
  })
339
+
340
+ document.addEventListener('astro:after-swap', addEventListeners)
341
+ addEventListeners()
332
342
  </script>