@mcp-b/web-components 0.2.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.
- package/LICENSE +21 -0
- package/README.md +49 -0
- package/dist/accordion-B1Q3kuP_.d.ts +373 -0
- package/dist/accordion-item-DvPfhpm8.js +307 -0
- package/dist/accordion-item-bPRIahNn.d.ts +63 -0
- package/dist/accordion-zDr-Br4V.js +483 -0
- package/dist/action-bar-CYsjmhwP.d.ts +29 -0
- package/dist/action-bar-CjN_UcnP.js +56 -0
- package/dist/alert-dialog-4CnO3Nb5.d.ts +60 -0
- package/dist/alert-dialog-D25Oi_TS.js +126 -0
- package/dist/avatar-Bje_KpZo.d.ts +141 -0
- package/dist/avatar-CRP0kW3x.js +224 -0
- package/dist/badge-Ct95U4UO.js +301 -0
- package/dist/badge-D1DNQrWn.d.ts +106 -0
- package/dist/breadcrumb-BxZ-nQE5.d.ts +365 -0
- package/dist/breadcrumb-item-BC454oQe.d.ts +59 -0
- package/dist/breadcrumb-item-P5pdq_gE.js +151 -0
- package/dist/breadcrumb-uURhiqWJ.js +384 -0
- package/dist/button-5k_aL_gD.js +802 -0
- package/dist/button-BQofnUt4.d.ts +354 -0
- package/dist/button-group-BydvJTQy.js +197 -0
- package/dist/button-group-COodHeuB.d.ts +155 -0
- package/dist/callout-B8zTf8Go.js +188 -0
- package/dist/callout-DFwPao36.d.ts +103 -0
- package/dist/card-BYDzdMAU.d.ts +177 -0
- package/dist/card-DIg1-X2G.js +332 -0
- package/dist/carousel-Bktu7wrD.js +843 -0
- package/dist/carousel-DQITCtEY.d.ts +423 -0
- package/dist/carousel-item-B5-X31Ha.js +79 -0
- package/dist/carousel-item-BB3jL2tk.d.ts +34 -0
- package/dist/cdn/loader.js +530 -0
- package/dist/checkbox-D6r7PVPj.js +641 -0
- package/dist/checkbox-DoFcDEKB.d.ts +354 -0
- package/dist/checkbox-group-CLvNAO_F.js +201 -0
- package/dist/checkbox-group-Cnh8rAn4.d.ts +152 -0
- package/dist/color-input-Bky89xg_.d.ts +470 -0
- package/dist/color-input-DPIxi9wR.js +894 -0
- package/dist/color-picker-adwOmtRl.js +1240 -0
- package/dist/color-picker-wQw8bPsq.d.ts +360 -0
- package/dist/combobox-B6al50UG.js +1693 -0
- package/dist/combobox-item-D2H1CMxC.d.ts +714 -0
- package/dist/combobox-item-yM6tDrGG.js +225 -0
- package/dist/comparison-B1-nMwmp.d.ts +134 -0
- package/dist/comparison-CyqKrCN-.js +435 -0
- package/dist/components/accordion/accordion.d.ts +2 -0
- package/dist/components/accordion/accordion.js +2 -0
- package/dist/components/accordion-item/accordion-item.d.ts +2 -0
- package/dist/components/accordion-item/accordion-item.js +2 -0
- package/dist/components/action-bar/action-bar.d.ts +2 -0
- package/dist/components/action-bar/action-bar.js +2 -0
- package/dist/components/alert-dialog/alert-dialog.d.ts +2 -0
- package/dist/components/alert-dialog/alert-dialog.js +2 -0
- package/dist/components/avatar/avatar.d.ts +2 -0
- package/dist/components/avatar/avatar.js +2 -0
- package/dist/components/badge/badge.d.ts +2 -0
- package/dist/components/badge/badge.js +2 -0
- package/dist/components/breadcrumb/breadcrumb.d.ts +2 -0
- package/dist/components/breadcrumb/breadcrumb.js +2 -0
- package/dist/components/breadcrumb-item/breadcrumb-item.d.ts +2 -0
- package/dist/components/breadcrumb-item/breadcrumb-item.js +2 -0
- package/dist/components/button/button.d.ts +2 -0
- package/dist/components/button/button.js +2 -0
- package/dist/components/button-group/button-group.d.ts +2 -0
- package/dist/components/button-group/button-group.js +2 -0
- package/dist/components/callout/callout.d.ts +2 -0
- package/dist/components/callout/callout.js +2 -0
- package/dist/components/card/card.d.ts +2 -0
- package/dist/components/card/card.js +2 -0
- package/dist/components/carousel/carousel.d.ts +2 -0
- package/dist/components/carousel/carousel.js +2 -0
- package/dist/components/carousel-item/carousel-item.d.ts +2 -0
- package/dist/components/carousel-item/carousel-item.js +2 -0
- package/dist/components/checkbox/checkbox.d.ts +2 -0
- package/dist/components/checkbox/checkbox.js +2 -0
- package/dist/components/checkbox-group/checkbox-group.d.ts +2 -0
- package/dist/components/checkbox-group/checkbox-group.js +2 -0
- package/dist/components/color-input/color-input.d.ts +2 -0
- package/dist/components/color-input/color-input.js +2 -0
- package/dist/components/color-picker/color-picker.d.ts +2 -0
- package/dist/components/color-picker/color-picker.js +2 -0
- package/dist/components/combobox/combobox.d.ts +2 -0
- package/dist/components/combobox/combobox.js +2 -0
- package/dist/components/combobox-item/combobox-item.d.ts +2 -0
- package/dist/components/combobox-item/combobox-item.js +2 -0
- package/dist/components/comparison/comparison.d.ts +2 -0
- package/dist/components/comparison/comparison.js +2 -0
- package/dist/components/copy/copy.d.ts +2 -0
- package/dist/components/copy/copy.js +291 -0
- package/dist/components/data-table/data-table.d.ts +2 -0
- package/dist/components/data-table/data-table.js +2 -0
- package/dist/components/date/date.d.ts +2 -0
- package/dist/components/date/date.js +2 -0
- package/dist/components/dialog/dialog.d.ts +2 -0
- package/dist/components/dialog/dialog.js +2 -0
- package/dist/components/divider/divider.d.ts +2 -0
- package/dist/components/divider/divider.js +2 -0
- package/dist/components/dropdown/dropdown.d.ts +2 -0
- package/dist/components/dropdown/dropdown.js +2 -0
- package/dist/components/dropdown-item/dropdown-item.d.ts +2 -0
- package/dist/components/dropdown-item/dropdown-item.js +2 -0
- package/dist/components/empty-result/empty-result.d.ts +2 -0
- package/dist/components/empty-result/empty-result.js +2 -0
- package/dist/components/empty-state/empty-state.d.ts +2 -0
- package/dist/components/empty-state/empty-state.js +2 -0
- package/dist/components/expander/expander.d.ts +2 -0
- package/dist/components/expander/expander.js +2 -0
- package/dist/components/field/field.d.ts +2 -0
- package/dist/components/field/field.js +2 -0
- package/dist/components/file-input/file-input.d.ts +2 -0
- package/dist/components/file-input/file-input.js +2 -0
- package/dist/components/filter-bar/filter-bar.d.ts +2 -0
- package/dist/components/filter-bar/filter-bar.js +2 -0
- package/dist/components/form-section/form-section.d.ts +2 -0
- package/dist/components/form-section/form-section.js +2 -0
- package/dist/components/icon/icon.d.ts +2 -0
- package/dist/components/icon/icon.js +2 -0
- package/dist/components/include/include.d.ts +2 -0
- package/dist/components/include/include.js +2 -0
- package/dist/components/index.d.ts +85 -0
- package/dist/components/index.js +86 -0
- package/dist/components/infinite-scroller/infinite-scroller.d.ts +2 -0
- package/dist/components/infinite-scroller/infinite-scroller.js +2 -0
- package/dist/components/intersection-observer/intersection-observer.d.ts +2 -0
- package/dist/components/intersection-observer/intersection-observer.js +2 -0
- package/dist/components/listbox/listbox.d.ts +2 -0
- package/dist/components/listbox/listbox.js +2 -0
- package/dist/components/listbox-item/listbox-item.d.ts +2 -0
- package/dist/components/listbox-item/listbox-item.js +2 -0
- package/dist/components/lorem-ipsum/lorem-ipsum.d.ts +2 -0
- package/dist/components/lorem-ipsum/lorem-ipsum.js +2 -0
- package/dist/components/meter/meter.d.ts +2 -0
- package/dist/components/meter/meter.js +2 -0
- package/dist/components/metric/metric.d.ts +2 -0
- package/dist/components/metric/metric.js +2 -0
- package/dist/components/metric-grid/metric-grid.d.ts +2 -0
- package/dist/components/metric-grid/metric-grid.js +2 -0
- package/dist/components/mutation-observer/mutation-observer.d.ts +2 -0
- package/dist/components/mutation-observer/mutation-observer.js +2 -0
- package/dist/components/navicon/navicon.d.ts +2 -0
- package/dist/components/navicon/navicon.js +2 -0
- package/dist/components/number/number.d.ts +2 -0
- package/dist/components/number/number.js +2 -0
- package/dist/components/number-field/number-field.d.ts +2 -0
- package/dist/components/number-field/number-field.js +2 -0
- package/dist/components/pagination/pagination.d.ts +2 -0
- package/dist/components/pagination/pagination.js +2 -0
- package/dist/components/popover/popover.d.ts +2 -0
- package/dist/components/popover/popover.js +2 -0
- package/dist/components/preview-card/preview-card.d.ts +2 -0
- package/dist/components/preview-card/preview-card.js +2 -0
- package/dist/components/progress/progress.d.ts +2 -0
- package/dist/components/progress/progress.js +2 -0
- package/dist/components/radio/radio.d.ts +2 -0
- package/dist/components/radio/radio.js +2 -0
- package/dist/components/radio-item/radio-item.d.ts +2 -0
- package/dist/components/radio-item/radio-item.js +2 -0
- package/dist/components/random-content/random-content.d.ts +2 -0
- package/dist/components/random-content/random-content.js +2 -0
- package/dist/components/rating/rating.d.ts +2 -0
- package/dist/components/rating/rating.js +2 -0
- package/dist/components/resize-observer/resize-observer.d.ts +2 -0
- package/dist/components/resize-observer/resize-observer.js +2 -0
- package/dist/components/scroll-area/scroll-area.d.ts +2 -0
- package/dist/components/scroll-area/scroll-area.js +2 -0
- package/dist/components/scroller/scroller.d.ts +2 -0
- package/dist/components/scroller/scroller.js +2 -0
- package/dist/components/search-list/search-list.d.ts +2 -0
- package/dist/components/search-list/search-list.js +2 -0
- package/dist/components/select/select.d.ts +2 -0
- package/dist/components/select/select.js +2 -0
- package/dist/components/selection-summary/selection-summary.d.ts +2 -0
- package/dist/components/selection-summary/selection-summary.js +2 -0
- package/dist/components/share/share.d.ts +2 -0
- package/dist/components/share/share.js +2 -0
- package/dist/components/slide-activator/slide-activator.d.ts +2 -0
- package/dist/components/slide-activator/slide-activator.js +2 -0
- package/dist/components/slider/slider.d.ts +2 -0
- package/dist/components/slider/slider.js +2 -0
- package/dist/components/sparkline/sparkline.d.ts +2 -0
- package/dist/components/sparkline/sparkline.js +2 -0
- package/dist/components/spinner/spinner.d.ts +2 -0
- package/dist/components/spinner/spinner.js +2 -0
- package/dist/components/splitter/splitter.d.ts +2 -0
- package/dist/components/splitter/splitter.js +2 -0
- package/dist/components/switch/switch.d.ts +2 -0
- package/dist/components/switch/switch.js +2 -0
- package/dist/components/tab/tab.d.ts +2 -0
- package/dist/components/tab/tab.js +2 -0
- package/dist/components/tab-list/tab-list.d.ts +2 -0
- package/dist/components/tab-list/tab-list.js +2 -0
- package/dist/components/tab-panel/tab-panel.d.ts +2 -0
- package/dist/components/tab-panel/tab-panel.js +2 -0
- package/dist/components/text-area/text-area.d.ts +2 -0
- package/dist/components/text-area/text-area.js +2 -0
- package/dist/components/text-field/text-field.d.ts +2 -0
- package/dist/components/text-field/text-field.js +2 -0
- package/dist/components/text-mask/text-mask.d.ts +2 -0
- package/dist/components/text-mask/text-mask.js +2 -0
- package/dist/components/timed-content/timed-content.d.ts +2 -0
- package/dist/components/timed-content/timed-content.js +2 -0
- package/dist/components/toast/toast.d.ts +2 -0
- package/dist/components/toast/toast.js +2 -0
- package/dist/components/toast-item/toast-item.d.ts +2 -0
- package/dist/components/toast-item/toast-item.js +2 -0
- package/dist/components/toggle-icon/toggle-icon.d.ts +2 -0
- package/dist/components/toggle-icon/toggle-icon.js +2 -0
- package/dist/components/toggle-tag/toggle-tag.d.ts +2 -0
- package/dist/components/toggle-tag/toggle-tag.js +2 -0
- package/dist/components/toolbar/toolbar.d.ts +2 -0
- package/dist/components/toolbar/toolbar.js +2 -0
- package/dist/components/tooltip/tooltip.d.ts +2 -0
- package/dist/components/tooltip/tooltip.js +2 -0
- package/dist/components/transition-group/transition-group.d.ts +2 -0
- package/dist/components/transition-group/transition-group.js +2 -0
- package/dist/components/zoomable-frame/zoomable-frame.d.ts +2 -0
- package/dist/components/zoomable-frame/zoomable-frame.js +2 -0
- package/dist/copy-CvC9vaGw.d.ts +206 -0
- package/dist/copy.styles-DWGvGNTP.js +100 -0
- package/dist/data-table-CITa8DSn.js +247 -0
- package/dist/data-table-DL5RhE0d.d.ts +89 -0
- package/dist/date-CJPmOdi9.js +146 -0
- package/dist/date-DtaTBM71.d.ts +142 -0
- package/dist/decorate-DcF3lt7P.js +9 -0
- package/dist/dialog-Cx46HMaZ.js +983 -0
- package/dist/dialog-N-v0woIy.d.ts +414 -0
- package/dist/divider-9vNsfHW8.js +169 -0
- package/dist/divider-DWuAxcXv.d.ts +79 -0
- package/dist/docs/custom-elements.json +29301 -0
- package/dist/dropdown-BXSKpVX9.js +1123 -0
- package/dist/dropdown-Bo00Vlr5.d.ts +537 -0
- package/dist/dropdown-item-_lIs-Tfd.d.ts +111 -0
- package/dist/dropdown-item-i77cRuN6.js +504 -0
- package/dist/empty-result-B2ln1yFL.js +65 -0
- package/dist/empty-result-B54x_Ab2.d.ts +31 -0
- package/dist/empty-state-BLWjtKUo.js +186 -0
- package/dist/empty-state-SGKjpwp3.d.ts +117 -0
- package/dist/expander-BUev0BmM.d.ts +174 -0
- package/dist/expander-Bwvxj6Oa.js +342 -0
- package/dist/field-BEyS909F.js +163 -0
- package/dist/field-ITx0jVw-.d.ts +69 -0
- package/dist/file-input-BEumLJjg.js +841 -0
- package/dist/file-input-D2D6YC0B.d.ts +378 -0
- package/dist/filter-bar-Bj2QzEn9.d.ts +35 -0
- package/dist/filter-bar-Dcs67aXo.js +66 -0
- package/dist/form-section-BchPetkj.js +83 -0
- package/dist/form-section-xFBTBULQ.d.ts +34 -0
- package/dist/icon-BPVkNsY4.js +165 -0
- package/dist/icon-Ci9CPZJV.d.ts +72 -0
- package/dist/icon-library-D_if7p2h.d.ts +2 -0
- package/dist/include-CQHVVtNs.d.ts +103 -0
- package/dist/include-qNUh_6kT.js +155 -0
- package/dist/index.d.ts +89 -0
- package/dist/index.js +92 -0
- package/dist/infinite-scroller-BmmtnWNt.js +285 -0
- package/dist/infinite-scroller-CuUEAlB9.d.ts +174 -0
- package/dist/intersection-observer-B6TciOAQ.js +503 -0
- package/dist/intersection-observer-B7nmP7Zz.d.ts +418 -0
- package/dist/listbox-C3XXRWGX.js +1257 -0
- package/dist/listbox-DD4ujIJe.d.ts +682 -0
- package/dist/listbox-item-CwD9s3VY.js +135 -0
- package/dist/listbox-item-DQEJWp4Z.d.ts +53 -0
- package/dist/localize-322EtXNX.d.ts +66 -0
- package/dist/lorem-ipsum-B2x3V-v8.js +198 -0
- package/dist/lorem-ipsum-CR82CSuJ.d.ts +130 -0
- package/dist/meter-BC7uaJWf.d.ts +73 -0
- package/dist/meter-BIDyjwFp.js +155 -0
- package/dist/metric-CjlLq_VA.d.ts +36 -0
- package/dist/metric-DbuOcDp_.js +86 -0
- package/dist/metric-grid-C2Pb0Zl3.js +37 -0
- package/dist/metric-grid-C5Xbb1_0.d.ts +27 -0
- package/dist/mutation-observer-BmrZ-GER.d.ts +326 -0
- package/dist/mutation-observer-DS8EBuOp.js +388 -0
- package/dist/navicon-Dic5Qjzb.d.ts +159 -0
- package/dist/navicon-_yMHY27-.js +486 -0
- package/dist/number-BNtNXNF3.js +162 -0
- package/dist/number-BwbnErlB.d.ts +143 -0
- package/dist/number-field-BQHB7UYo.js +726 -0
- package/dist/number-field-odk4lKXM.d.ts +422 -0
- package/dist/pagination-6z2qcf3U.d.ts +322 -0
- package/dist/pagination-DuKPuzdb.js +679 -0
- package/dist/popover-D0sxTU6o.d.ts +259 -0
- package/dist/popover-DJBrJ0za.js +556 -0
- package/dist/preview-card-C7H1FPfd.js +287 -0
- package/dist/preview-card-DitOCZTD.d.ts +86 -0
- package/dist/progress-Db0_axHQ.d.ts +181 -0
- package/dist/progress-DzVk260j.js +494 -0
- package/dist/radio-BtDG9xJM.js +658 -0
- package/dist/radio-CieMa4zU.d.ts +460 -0
- package/dist/radio-item-DIrUStAX.js +264 -0
- package/dist/radio-item-Xq2U3cMu.d.ts +69 -0
- package/dist/random-content-BhSeJFKz.d.ts +380 -0
- package/dist/random-content-BwiirXdG.js +450 -0
- package/dist/rating-4xNsWumY.d.ts +369 -0
- package/dist/rating-C1BcJDIO.js +722 -0
- package/dist/resize-observer-BseSbVWP.d.ts +187 -0
- package/dist/resize-observer-DcrLhddo.js +236 -0
- package/dist/scroll-area-COc1857S.js +127 -0
- package/dist/scroll-area-CVYDf5qY.d.ts +61 -0
- package/dist/scroller-LYgBVyfY.js +590 -0
- package/dist/scroller-bB2rGs7b.d.ts +374 -0
- package/dist/search-list-Clmrg8EV.js +884 -0
- package/dist/search-list-n0GYO7rh.d.ts +777 -0
- package/dist/select-CkZK2jJn.d.ts +506 -0
- package/dist/select-DLIaRnA4.js +690 -0
- package/dist/selection-summary-BVnNJ8Lw.js +48 -0
- package/dist/selection-summary-DmFkGyZI.d.ts +34 -0
- package/dist/share-DPlqP2dc.d.ts +162 -0
- package/dist/share-bsgXZCl7.js +250 -0
- package/dist/sigvelo.d.ts +5 -0
- package/dist/sigvelo.js +5 -0
- package/dist/sigvelo.loader.d.ts +3 -0
- package/dist/sigvelo.loader.js +102 -0
- package/dist/slide-activator-D7bBz69E.d.ts +429 -0
- package/dist/slide-activator-DlxQt9R9.js +798 -0
- package/dist/slider-B0FVsV1o.d.ts +921 -0
- package/dist/slider-B90Il7x3.js +1744 -0
- package/dist/sparkline-CcpTaJ_Z.js +358 -0
- package/dist/sparkline-DlCIt81-.d.ts +235 -0
- package/dist/spinner-C04Dmc0H.js +188 -0
- package/dist/spinner-CZ19x_dC.d.ts +99 -0
- package/dist/splitter-DBDJAzsp.d.ts +325 -0
- package/dist/splitter-MnD4In9H.js +638 -0
- package/dist/switch-CPaEKbog.js +581 -0
- package/dist/switch-Cief9M59.d.ts +248 -0
- package/dist/tab-BcqYGsuW.d.ts +44 -0
- package/dist/tab-C-FtuNmh.js +102 -0
- package/dist/tab-list-B_Ye_Oj9.js +691 -0
- package/dist/tab-list-DDvS8qHr.d.ts +450 -0
- package/dist/tab-panel-BaBl6eep.js +60 -0
- package/dist/tab-panel-BzSJlSfd.d.ts +38 -0
- package/dist/text-area-B_mjCE9W.d.ts +327 -0
- package/dist/text-area-Czixaz-_.js +556 -0
- package/dist/text-field-BClWMp6q.d.ts +424 -0
- package/dist/text-field-inpJfp0A.js +687 -0
- package/dist/text-mask-CNKVKSFp.d.ts +336 -0
- package/dist/text-mask-DDEurj90.js +370 -0
- package/dist/themes/sigvelo.css +10 -0
- package/dist/themes/utilities.css +9 -0
- package/dist/timed-content-D2mGFamc.d.ts +181 -0
- package/dist/timed-content-pvEP4l5V.js +226 -0
- package/dist/toast-BnZaIg6Z.js +636 -0
- package/dist/toast-cEBVK9NQ.d.ts +487 -0
- package/dist/toast-item-BPpJT6vD.d.ts +159 -0
- package/dist/toast-item-IS8IFUEg.js +372 -0
- package/dist/toggle-icon-4oLDeEt4.js +752 -0
- package/dist/toggle-icon-DlwMMWZL.d.ts +359 -0
- package/dist/toggle-tag-1sfTFJtg.js +434 -0
- package/dist/toggle-tag-IVvMGT4R.d.ts +245 -0
- package/dist/toolbar-CABq0ZL1.d.ts +122 -0
- package/dist/toolbar-CEZ0-F-X.js +196 -0
- package/dist/tooltip-DbyoPFNe.js +521 -0
- package/dist/tooltip-ahFthek8.d.ts +192 -0
- package/dist/transition-group-3hnAnwSd.js +801 -0
- package/dist/transition-group-DD_CjSNC.d.ts +608 -0
- package/dist/translations/en.d.ts +6 -0
- package/dist/translations/en.js +75 -0
- package/dist/translations/es.d.ts +6 -0
- package/dist/translations/es.js +75 -0
- package/dist/types/custom-element-jsx.d.ts +13723 -0
- package/dist/utilities/icon-library.d.ts +3 -0
- package/dist/utilities/icon-library.js +93 -0
- package/dist/utilities/localize.d.ts +2 -0
- package/dist/utilities/localize.js +6 -0
- package/dist/zoomable-frame-Cldvj5sE.js +398 -0
- package/dist/zoomable-frame-r6S6587z.d.ts +162 -0
- package/package.json +83 -0
|
@@ -0,0 +1,679 @@
|
|
|
1
|
+
import { Localize } from "./utilities/localize.js";
|
|
2
|
+
import "./icon-BPVkNsY4.js";
|
|
3
|
+
import { t as __decorate } from "./decorate-DcF3lt7P.js";
|
|
4
|
+
import { css } from "lit";
|
|
5
|
+
import { property } from "lit/decorators.js";
|
|
6
|
+
import hostStyles from "@mcp-b/wc-support/styles/host.styles";
|
|
7
|
+
import { SigveloElement } from "@mcp-b/wc-support/base/sigvelo-element";
|
|
8
|
+
import { classMap } from "lit/directives/class-map.js";
|
|
9
|
+
import { ifDefined } from "lit/directives/if-defined.js";
|
|
10
|
+
import { html as html$1, literal } from "lit/static-html.js";
|
|
11
|
+
import { clamp } from "@mcp-b/wc-support/utilities/math";
|
|
12
|
+
import { SigveloBeforePageChangeEvent, SigveloPageChangeEvent } from "@mcp-b/wc-support/events/page";
|
|
13
|
+
//#region src/components/pagination/pagination.styles.ts
|
|
14
|
+
var pagination_styles_default = css`
|
|
15
|
+
:host {
|
|
16
|
+
display: inline-flex;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
ul {
|
|
20
|
+
display: flex;
|
|
21
|
+
flex-wrap: wrap;
|
|
22
|
+
align-items: center;
|
|
23
|
+
justify-content: start;
|
|
24
|
+
margin: 0;
|
|
25
|
+
padding: 0;
|
|
26
|
+
gap: 0.25em;
|
|
27
|
+
list-style: none;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
li {
|
|
31
|
+
display: flex;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
[part~="button"] {
|
|
35
|
+
display: flex;
|
|
36
|
+
align-items: center;
|
|
37
|
+
justify-content: center;
|
|
38
|
+
min-width: 2.25em;
|
|
39
|
+
min-height: 2.25em;
|
|
40
|
+
border-radius: var(--sigvelo-radius-md);
|
|
41
|
+
color: var(--sigvelo-color-text);
|
|
42
|
+
font: inherit;
|
|
43
|
+
line-height: 1;
|
|
44
|
+
font-family: inherit;
|
|
45
|
+
font-variant-numeric: tabular-nums;
|
|
46
|
+
text-align: center;
|
|
47
|
+
text-decoration: none;
|
|
48
|
+
cursor: pointer;
|
|
49
|
+
transition:
|
|
50
|
+
var(--sigvelo-motion-duration-interaction) color ease,
|
|
51
|
+
var(--sigvelo-motion-duration-interaction) border-color ease,
|
|
52
|
+
var(--sigvelo-motion-duration-interaction) background-color ease,
|
|
53
|
+
var(--sigvelo-motion-duration-interaction) translate ease;
|
|
54
|
+
|
|
55
|
+
user-select: none;
|
|
56
|
+
-webkit-user-select: none;
|
|
57
|
+
|
|
58
|
+
&:active:not(.disabled, .current) {
|
|
59
|
+
translate: 0 var(--sigvelo-motion-distance-xs);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
&:focus-visible {
|
|
63
|
+
outline: var(--sigvelo-focus-ring);
|
|
64
|
+
outline-offset: var(--sigvelo-focus-offset);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* Current page */
|
|
68
|
+
&.current:not(.disabled) {
|
|
69
|
+
font-weight: var(--sigvelo-font-weight-semibold);
|
|
70
|
+
cursor: default;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* Disabled buttons */
|
|
74
|
+
&.disabled {
|
|
75
|
+
box-shadow: none;
|
|
76
|
+
cursor: not-allowed;
|
|
77
|
+
opacity: 0.5;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* Normal */
|
|
82
|
+
:host([variant="normal"]) [part~="button"] {
|
|
83
|
+
border: var(--sigvelo-border-style) var(--sigvelo-border-width)
|
|
84
|
+
var(--sigvelo-color-neutral-border-subtle);
|
|
85
|
+
background-color: var(--sigvelo-color-surface);
|
|
86
|
+
|
|
87
|
+
@media (hover: hover) {
|
|
88
|
+
&:hover:not(.disabled, .current) {
|
|
89
|
+
border-color: color-mix(
|
|
90
|
+
in oklab,
|
|
91
|
+
var(--sigvelo-color-neutral-border-subtle),
|
|
92
|
+
light-dark(black, white) 5%
|
|
93
|
+
);
|
|
94
|
+
background-color: var(--sigvelo-color-neutral-bg-subtle);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
&.current:not(.disabled) {
|
|
99
|
+
border-color: var(--sigvelo-color-primary-bg);
|
|
100
|
+
background-color: var(--sigvelo-color-primary-bg);
|
|
101
|
+
color: var(--sigvelo-color-primary-text-on-bg);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/* Filled */
|
|
106
|
+
:host([variant="filled"]) [part~="button"] {
|
|
107
|
+
border: none;
|
|
108
|
+
background-color: var(--sigvelo-color-neutral-bg-subtle);
|
|
109
|
+
|
|
110
|
+
@media (hover: hover) {
|
|
111
|
+
&:hover:not(.disabled, .current) {
|
|
112
|
+
background-color: var(--sigvelo-color-neutral-bg-muted);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
&.current:not(.disabled) {
|
|
117
|
+
background-color: var(--sigvelo-color-primary-bg);
|
|
118
|
+
color: var(--sigvelo-color-primary-text-on-bg);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* Unstyled */
|
|
123
|
+
:host([variant="unstyled"]) [part~="button"] {
|
|
124
|
+
border: none;
|
|
125
|
+
background-color: transparent;
|
|
126
|
+
|
|
127
|
+
&.current:not(.disabled) {
|
|
128
|
+
background-color: var(--sigvelo-color-primary-bg);
|
|
129
|
+
color: var(--sigvelo-color-primary-text-on-bg);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* Icons */
|
|
134
|
+
sigvelo-icon,
|
|
135
|
+
::slotted(sigvelo-icon) {
|
|
136
|
+
font-size: 1.25em;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/* Disabled */
|
|
140
|
+
:host(:state(disabled)) {
|
|
141
|
+
cursor: not-allowed;
|
|
142
|
+
opacity: 0.5;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* Compact format */
|
|
146
|
+
:host([format="compact"]) #list {
|
|
147
|
+
display: flex;
|
|
148
|
+
align-items: center;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
#range {
|
|
152
|
+
margin-inline: 0.5em;
|
|
153
|
+
font-variant-numeric: tabular-nums;
|
|
154
|
+
}
|
|
155
|
+
`;
|
|
156
|
+
//#endregion
|
|
157
|
+
//#region src/components/pagination/pagination.ts
|
|
158
|
+
/**
|
|
159
|
+
* <sigvelo-pagination>
|
|
160
|
+
*
|
|
161
|
+
* @summary Splits content into numbered pages so users can navigate datasets in manageable chunks.
|
|
162
|
+
* @tag sigvelo-pagination
|
|
163
|
+
* @documentation https://design-system.sigvelo.com/docs/components/pagination
|
|
164
|
+
* @status stable
|
|
165
|
+
* @since 1.0
|
|
166
|
+
*
|
|
167
|
+
* @dependency sigvelo-icon
|
|
168
|
+
*
|
|
169
|
+
* @slot previous-icon - A custom icon to use for the previous button.
|
|
170
|
+
* @slot next-icon - A custom icon to use for the next button.
|
|
171
|
+
* @slot jump-backward-icon - A custom icon to use for the jump backward button.
|
|
172
|
+
* @slot jump-forward-icon - A custom icon to use for jump forward button.
|
|
173
|
+
*
|
|
174
|
+
* @event sigvelo-before-page-change - Emitted when the page is going to change but before it actually changes. Calling
|
|
175
|
+
* `event.preventDefault()` will prevent the page from changing. Inspect `event.detail` to get the `currentPage` and
|
|
176
|
+
* `requestedPage` properties.
|
|
177
|
+
* @event sigvelo-page-change - Emitted after the page has been changed and the UI has been updated.
|
|
178
|
+
*
|
|
179
|
+
* @csspart nav - The navigation container, a `<nav>` element.
|
|
180
|
+
* @csspart list - The list that contains the pagination items, a `<ul>` element.
|
|
181
|
+
* @csspart item - A pagination item, an `<li>` element.
|
|
182
|
+
* @csspart button - A pagination button, a `<button>` or an `<a>` element.
|
|
183
|
+
* @csspart button-first - The button that navigates to the first page.
|
|
184
|
+
* @csspart button-previous - The button that navigates to the previous page.
|
|
185
|
+
* @csspart button-next - The button that navigates to the next page.
|
|
186
|
+
* @csspart button-last - The button that navigates to the last page.
|
|
187
|
+
* @csspart button-page - A button that navigates to a specific page.
|
|
188
|
+
* @csspart button-current - The button that represents the current page.
|
|
189
|
+
* @csspart button-jump-backward - The jump backward button.
|
|
190
|
+
* @csspart button-jump-forward - The jump forward button.
|
|
191
|
+
* @csspart range - The page range that shows the page when viewed in the compact format, e.g. "1 of 10".
|
|
192
|
+
*
|
|
193
|
+
* @cssstate disabled - Applied when the pagination is disabled.
|
|
194
|
+
*
|
|
195
|
+
* @example Default
|
|
196
|
+
* ```html
|
|
197
|
+
* <sigvelo-pagination total-pages="5"></sigvelo-pagination>
|
|
198
|
+
* ```
|
|
199
|
+
*
|
|
200
|
+
* @example Setting the number of pages
|
|
201
|
+
* Use the `total-pages` attribute to set the total number of pages available.
|
|
202
|
+
*
|
|
203
|
+
* ```html
|
|
204
|
+
* <sigvelo-pagination total-pages="20"></sigvelo-pagination>
|
|
205
|
+
* ```
|
|
206
|
+
*
|
|
207
|
+
* @example Setting the initial page
|
|
208
|
+
* Use the `page` attribute to set the initial page that's selected.
|
|
209
|
+
*
|
|
210
|
+
* ```html
|
|
211
|
+
* <sigvelo-pagination total-pages="5" page="3"></sigvelo-pagination>
|
|
212
|
+
* ```
|
|
213
|
+
*
|
|
214
|
+
* @example Responding to page changes
|
|
215
|
+
* When the user changes the page, the `sigvelo-page-change` event will be emitted. You can listen to this event to update the view or redirect the user to the appropriate destination.
|
|
216
|
+
*
|
|
217
|
+
* ```html
|
|
218
|
+
* <sigvelo-pagination
|
|
219
|
+
* total-pages="10"
|
|
220
|
+
* page="1"
|
|
221
|
+
* id="pagination__responding"
|
|
222
|
+
* ></sigvelo-pagination>
|
|
223
|
+
*
|
|
224
|
+
* <script>
|
|
225
|
+
* const pagination = document.getElementById('pagination__responding');
|
|
226
|
+
*
|
|
227
|
+
* pagination.addEventListener('sigvelo-page-change', () => {
|
|
228
|
+
* //
|
|
229
|
+
* // Update the view here
|
|
230
|
+
* //
|
|
231
|
+
* console.log(`Showing page ${pagination.page}`);
|
|
232
|
+
*
|
|
233
|
+
* //
|
|
234
|
+
* // Alternatively, you can send the user to a URL:
|
|
235
|
+
* //
|
|
236
|
+
* // location.href = `/page/${pagination.page}`
|
|
237
|
+
* //
|
|
238
|
+
* });
|
|
239
|
+
* <\/script>
|
|
240
|
+
* ```
|
|
241
|
+
*
|
|
242
|
+
* @example Changing the page programmatically
|
|
243
|
+
* Set the `page` property to any valid page to change the current page. Note that programmatic changes _will not_ dispatch page change events.
|
|
244
|
+
*
|
|
245
|
+
* ```html
|
|
246
|
+
* <sigvelo-pagination
|
|
247
|
+
* total-pages="10"
|
|
248
|
+
* page="1"
|
|
249
|
+
* id="pagination__setting"
|
|
250
|
+
* ></sigvelo-pagination>
|
|
251
|
+
*
|
|
252
|
+
* <sigvelo-select label="Page" value="1" style="max-width: 100px; margin-block-start: 1.5rem;">
|
|
253
|
+
* <option value="1">1</option>
|
|
254
|
+
* <option value="2">2</option>
|
|
255
|
+
* <option value="3">3</option>
|
|
256
|
+
* <option value="4">4</option>
|
|
257
|
+
* <option value="5">5</option>
|
|
258
|
+
* <option value="6">6</option>
|
|
259
|
+
* <option value="7">7</option>
|
|
260
|
+
* <option value="8">8</option>
|
|
261
|
+
* <option value="9">9</option>
|
|
262
|
+
* <option value="10">10</option>
|
|
263
|
+
* </sigvelo-select>
|
|
264
|
+
*
|
|
265
|
+
* <script>
|
|
266
|
+
* const pagination = document.getElementById('pagination__setting');
|
|
267
|
+
* const select = pagination.nextElementSibling;
|
|
268
|
+
*
|
|
269
|
+
* select.addEventListener('input', () => {
|
|
270
|
+
* pagination.page = select.value;
|
|
271
|
+
* });
|
|
272
|
+
*
|
|
273
|
+
* pagination.addEventListener('sigvelo-page-change', () => {
|
|
274
|
+
* select.value = pagination.page;
|
|
275
|
+
* });
|
|
276
|
+
* <\/script>
|
|
277
|
+
* ```
|
|
278
|
+
*
|
|
279
|
+
* @example Rendering links instead of buttons
|
|
280
|
+
* By default, the pagination component renders `<button>` elements internally. To have it render links instead, set the `link-formatter` attribute to a URL with a `{page}` placeholder that corresponds to the target page, e.g. `/path/to/{page}`.
|
|
281
|
+
*
|
|
282
|
+
* ```html
|
|
283
|
+
* <sigvelo-pagination
|
|
284
|
+
* total-pages="10"
|
|
285
|
+
* page="5"
|
|
286
|
+
* link-formatter="https://example.com/path/to/{page}"
|
|
287
|
+
* ></sigvelo-pagination>
|
|
288
|
+
* ```
|
|
289
|
+
*
|
|
290
|
+
* For more control over the URL, you can set the `linkFormatter` property to a JavaScript function that accepts a page number and returns a URL.
|
|
291
|
+
*
|
|
292
|
+
* ```html
|
|
293
|
+
* <sigvelo-pagination id="pagination__links" total-pages="5"></sigvelo-pagination>
|
|
294
|
+
*
|
|
295
|
+
* <script>
|
|
296
|
+
* const pagination = document.getElementById('pagination__links');
|
|
297
|
+
*
|
|
298
|
+
* pagination.linkFormatter = page => `https://example.com/path/to/${page}`;
|
|
299
|
+
* <\/script>
|
|
300
|
+
* ```
|
|
301
|
+
*
|
|
302
|
+
* **Note:** When a link formatter is provided, users will be redirected to the corresponding URL when they select a page. In this case, the pagination component _will not_ update dynamically. This is the intended behavior when using links.
|
|
303
|
+
*
|
|
304
|
+
* @example Changing the format
|
|
305
|
+
* Set the `format` attribute to `compact` or `standard` to change the pagination's format.
|
|
306
|
+
*
|
|
307
|
+
* ```html
|
|
308
|
+
* <sigvelo-pagination
|
|
309
|
+
* format="compact"
|
|
310
|
+
* total-pages="5"
|
|
311
|
+
* id="pagination__format"
|
|
312
|
+
* ></sigvelo-pagination>
|
|
313
|
+
*
|
|
314
|
+
* <sigvelo-radio label="Format" value="compact" class="sigvelo-vh-label" style="margin-block-start: 1.5rem;">
|
|
315
|
+
* <sigvelo-radio-item value="compact">Compact</sigvelo-radio-item>
|
|
316
|
+
* <sigvelo-radio-item value="standard">Standard</sigvelo-radio-item>
|
|
317
|
+
* </sigvelo-select>
|
|
318
|
+
*
|
|
319
|
+
* <script>
|
|
320
|
+
* const pagination = document.getElementById('pagination__format');
|
|
321
|
+
* const radio = pagination.nextElementSibling;
|
|
322
|
+
*
|
|
323
|
+
* radio.addEventListener('input', () => {
|
|
324
|
+
* pagination.format = radio.value;
|
|
325
|
+
* });
|
|
326
|
+
* <\/script>
|
|
327
|
+
* ```
|
|
328
|
+
*
|
|
329
|
+
* @example Changing the variant
|
|
330
|
+
* Set the `variant` attribute to `normal`, `filled`, or `unstyled` to change the pagination's variant.
|
|
331
|
+
*
|
|
332
|
+
* ```html
|
|
333
|
+
* <sigvelo-pagination variant="normal" total-pages="5"></sigvelo-pagination>
|
|
334
|
+
* <sigvelo-pagination variant="filled" total-pages="5"></sigvelo-pagination>
|
|
335
|
+
* <sigvelo-pagination variant="unstyled" total-pages="5"></sigvelo-pagination>
|
|
336
|
+
* ```
|
|
337
|
+
*
|
|
338
|
+
* @example Changing the number of buttons
|
|
339
|
+
* Use the `siblings` attribute to control the number of pages that show on each side of the current page. The default is 3. The minimum is 2.
|
|
340
|
+
*
|
|
341
|
+
* ```html
|
|
342
|
+
* <sigvelo-pagination siblings="2" total-pages="20" page="10"></sigvelo-pagination>
|
|
343
|
+
* <sigvelo-pagination siblings="3" total-pages="20" page="10"></sigvelo-pagination>
|
|
344
|
+
* <sigvelo-pagination siblings="4" total-pages="20" page="10"></sigvelo-pagination>
|
|
345
|
+
* ```
|
|
346
|
+
*
|
|
347
|
+
* @example Changing the size
|
|
348
|
+
* Pagination controls are sized relative to the current font size. To change their size, apply `font-size` to the pagination or an ancestor element.
|
|
349
|
+
*
|
|
350
|
+
* ```html
|
|
351
|
+
* <sigvelo-pagination
|
|
352
|
+
* total-pages="5"
|
|
353
|
+
* page="1"
|
|
354
|
+
* style="font-size: 0.75rem;"
|
|
355
|
+
* ></sigvelo-pagination>
|
|
356
|
+
*
|
|
357
|
+
* <sigvelo-pagination
|
|
358
|
+
* total-pages="5"
|
|
359
|
+
* page="1"
|
|
360
|
+
* style="font-size: 1rem;"
|
|
361
|
+
* ></sigvelo-pagination>
|
|
362
|
+
*
|
|
363
|
+
* <sigvelo-pagination
|
|
364
|
+
* total-pages="5"
|
|
365
|
+
* page="1"
|
|
366
|
+
* style="font-size: 1.25rem;"
|
|
367
|
+
* ></sigvelo-pagination>
|
|
368
|
+
* ```
|
|
369
|
+
*
|
|
370
|
+
* @example Using custom icons
|
|
371
|
+
* Use the `previous-icon`, `next-icon`, and `jump-icon` slots to override the default icons.
|
|
372
|
+
*
|
|
373
|
+
* ```html
|
|
374
|
+
* <sigvelo-pagination total-pages="10">
|
|
375
|
+
* <sigvelo-icon slot="previous-icon" name="arrow-left"></sigvelo-icon>
|
|
376
|
+
* <sigvelo-icon slot="next-icon" name="arrow-right"></sigvelo-icon>
|
|
377
|
+
* <sigvelo-icon slot="jump-backward-icon" name="chevrons-left"></sigvelo-icon>
|
|
378
|
+
* <sigvelo-icon slot="jump-forward-icon" name="chevrons-right"></sigvelo-icon>
|
|
379
|
+
* </sigvelo-pagination>
|
|
380
|
+
* ```
|
|
381
|
+
*
|
|
382
|
+
* @example Removing nav buttons
|
|
383
|
+
* Use `without-nav` to remove the previous and next navigation buttons.
|
|
384
|
+
*
|
|
385
|
+
* ```html
|
|
386
|
+
* <sigvelo-pagination
|
|
387
|
+
* total-pages="10"
|
|
388
|
+
* page="1"
|
|
389
|
+
* without-nav
|
|
390
|
+
* ></sigvelo-pagination>
|
|
391
|
+
* ```
|
|
392
|
+
*
|
|
393
|
+
* @example Disabling
|
|
394
|
+
* Add the `disabled` attribute to disable the pagination control.
|
|
395
|
+
*
|
|
396
|
+
* ```html
|
|
397
|
+
* <sigvelo-pagination
|
|
398
|
+
* total-pages="10"
|
|
399
|
+
* page="1"
|
|
400
|
+
* disabled
|
|
401
|
+
* ></sigvelo-pagination>
|
|
402
|
+
* ```
|
|
403
|
+
*
|
|
404
|
+
* @example Styling pagination
|
|
405
|
+
* Pagination controls come with a simple, minimal appearance. Feel free to customize them with your own styles.
|
|
406
|
+
*
|
|
407
|
+
* ```html
|
|
408
|
+
* <sigvelo-pagination total-pages="10" page="5" variant="unstyled" id="pagination__styling"></sigvelo-pagination>
|
|
409
|
+
*
|
|
410
|
+
* <style>
|
|
411
|
+
* #pagination__styling {
|
|
412
|
+
* &::part(button) {
|
|
413
|
+
* border-radius: var(--sigvelo-radius-full);
|
|
414
|
+
* }
|
|
415
|
+
*
|
|
416
|
+
* <!-- Light gray circles for previous and next buttons -->
|
|
417
|
+
* &::part(button-previous),
|
|
418
|
+
* &::part(button-next) {
|
|
419
|
+
* background-color: var(--sigvelo-color-neutral-bg-subtle);
|
|
420
|
+
* }
|
|
421
|
+
*
|
|
422
|
+
* <!-- The current page is larger and has a subtle gradient -->
|
|
423
|
+
* &::part(button-current) {
|
|
424
|
+
* background: linear-gradient(45deg, #ff1493, #ff69b4);
|
|
425
|
+
* color: white;
|
|
426
|
+
* scale: 1.1;
|
|
427
|
+
* }
|
|
428
|
+
* }
|
|
429
|
+
* </style>
|
|
430
|
+
* ```
|
|
431
|
+
*/
|
|
432
|
+
var SigveloPagination = class extends SigveloElement {
|
|
433
|
+
constructor(..._args) {
|
|
434
|
+
super(..._args);
|
|
435
|
+
this.localize = new Localize(this);
|
|
436
|
+
this.label = "";
|
|
437
|
+
this.totalPages = 1;
|
|
438
|
+
this.page = 1;
|
|
439
|
+
this.siblings = 3;
|
|
440
|
+
this.jump = 5;
|
|
441
|
+
this.format = "standard";
|
|
442
|
+
this.linkFormatter = "";
|
|
443
|
+
this.disabled = false;
|
|
444
|
+
this.variant = "normal";
|
|
445
|
+
this.withoutNav = false;
|
|
446
|
+
}
|
|
447
|
+
static {
|
|
448
|
+
this.styles = [hostStyles, pagination_styles_default];
|
|
449
|
+
}
|
|
450
|
+
willUpdate(changedProperties) {
|
|
451
|
+
super.willUpdate(changedProperties);
|
|
452
|
+
if (changedProperties.has("page")) this.page = Number(this.page);
|
|
453
|
+
}
|
|
454
|
+
updated(changedProperties) {
|
|
455
|
+
if (changedProperties.has("disabled")) this.customStates.set("disabled", this.disabled);
|
|
456
|
+
}
|
|
457
|
+
/** Changes the current page, emitting a cancellable 'sigvelo-page-change' event. */
|
|
458
|
+
async changePage(newPage) {
|
|
459
|
+
if (this.disabled || this.linkFormatter) return;
|
|
460
|
+
if (newPage < 1 || newPage > this.totalPages || newPage === this.page) return;
|
|
461
|
+
const beforePageChangeEvent = new SigveloBeforePageChangeEvent({
|
|
462
|
+
currentPage: this.page,
|
|
463
|
+
requestedPage: newPage
|
|
464
|
+
});
|
|
465
|
+
this.dispatchEvent(beforePageChangeEvent);
|
|
466
|
+
if (beforePageChangeEvent.defaultPrevented) return;
|
|
467
|
+
this.page = newPage;
|
|
468
|
+
await this.updateComplete;
|
|
469
|
+
const pageChangeEvent = new SigveloPageChangeEvent();
|
|
470
|
+
this.dispatchEvent(pageChangeEvent);
|
|
471
|
+
}
|
|
472
|
+
/** Generates the list of pagination items, including pages and jump buttons. */
|
|
473
|
+
getPaginationItems() {
|
|
474
|
+
const items = [];
|
|
475
|
+
const clampedTotalButtons = clamp(2 * this.siblings + 1, 5, Infinity);
|
|
476
|
+
if (this.totalPages < 1) return items;
|
|
477
|
+
if (this.totalPages <= clampedTotalButtons) for (let i = 1; i <= this.totalPages; i++) items.push({
|
|
478
|
+
type: "page",
|
|
479
|
+
page: i
|
|
480
|
+
});
|
|
481
|
+
else {
|
|
482
|
+
const middlePageCount = clampedTotalButtons - 4;
|
|
483
|
+
const sideButtons = Math.floor(middlePageCount / 2);
|
|
484
|
+
const showJumpBackward = this.page > sideButtons + 2;
|
|
485
|
+
const showJumpForward = this.page < this.totalPages - sideButtons - 1;
|
|
486
|
+
let rangeStart, rangeEnd;
|
|
487
|
+
if (!showJumpBackward && showJumpForward) {
|
|
488
|
+
rangeStart = 2;
|
|
489
|
+
rangeEnd = clampedTotalButtons - 2;
|
|
490
|
+
} else if (showJumpBackward && !showJumpForward) {
|
|
491
|
+
rangeStart = this.totalPages - (clampedTotalButtons - 3);
|
|
492
|
+
rangeEnd = this.totalPages - 1;
|
|
493
|
+
} else if (showJumpBackward && showJumpForward) {
|
|
494
|
+
rangeStart = Math.max(2, this.page - sideButtons);
|
|
495
|
+
rangeEnd = Math.min(this.totalPages - 1, this.page + sideButtons);
|
|
496
|
+
if (rangeEnd - rangeStart + 1 < middlePageCount) {
|
|
497
|
+
if (rangeStart === 2) rangeEnd = Math.min(this.totalPages - 1, rangeStart + middlePageCount - 1);
|
|
498
|
+
else if (rangeEnd === this.totalPages - 1) rangeStart = Math.max(2, rangeEnd - middlePageCount + 1);
|
|
499
|
+
}
|
|
500
|
+
} else {
|
|
501
|
+
rangeStart = 2;
|
|
502
|
+
rangeEnd = this.totalPages - 1;
|
|
503
|
+
}
|
|
504
|
+
items.push({
|
|
505
|
+
type: "page",
|
|
506
|
+
page: 1
|
|
507
|
+
});
|
|
508
|
+
if (rangeStart === 3) items.push({
|
|
509
|
+
type: "page",
|
|
510
|
+
page: 2
|
|
511
|
+
});
|
|
512
|
+
else if (showJumpBackward) items.push({
|
|
513
|
+
type: "jump",
|
|
514
|
+
position: "start"
|
|
515
|
+
});
|
|
516
|
+
for (let i = rangeStart; i <= rangeEnd; i++) items.push({
|
|
517
|
+
type: "page",
|
|
518
|
+
page: i
|
|
519
|
+
});
|
|
520
|
+
if (rangeEnd === this.totalPages - 2) items.push({
|
|
521
|
+
type: "page",
|
|
522
|
+
page: this.totalPages - 1
|
|
523
|
+
});
|
|
524
|
+
else if (showJumpForward) items.push({
|
|
525
|
+
type: "jump",
|
|
526
|
+
position: "end"
|
|
527
|
+
});
|
|
528
|
+
items.push({
|
|
529
|
+
type: "page",
|
|
530
|
+
page: this.totalPages
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
return items;
|
|
534
|
+
}
|
|
535
|
+
handleNavClick(event) {
|
|
536
|
+
if (this.disabled) event.preventDefault();
|
|
537
|
+
}
|
|
538
|
+
renderLink(page) {
|
|
539
|
+
page = clamp(page, 1, this.totalPages);
|
|
540
|
+
if (typeof this.linkFormatter === "string") return this.linkFormatter.replace(/\{page\}/g, page + "");
|
|
541
|
+
else if (typeof this.linkFormatter === "function") return this.linkFormatter(page);
|
|
542
|
+
else return;
|
|
543
|
+
}
|
|
544
|
+
render() {
|
|
545
|
+
const isLink = this.linkFormatter;
|
|
546
|
+
const tag = isLink ? literal`a` : literal`button`;
|
|
547
|
+
const label = this.label || this.localize.term("pagination");
|
|
548
|
+
const isPrevDisabled = this.page <= 1 || this.disabled;
|
|
549
|
+
const isNextDisabled = this.page >= this.totalPages || this.disabled;
|
|
550
|
+
const isRtl = this.localize.dir() === "rtl";
|
|
551
|
+
const chevronLeftIcon = html$1`
|
|
552
|
+
<sigvelo-icon library="system" name="chevron-left"></sigvelo-icon>
|
|
553
|
+
`;
|
|
554
|
+
const chevronRightIcon = html$1`
|
|
555
|
+
<sigvelo-icon library="system" name="chevron-right"></sigvelo-icon>
|
|
556
|
+
`;
|
|
557
|
+
let content;
|
|
558
|
+
const previousButton = html$1`
|
|
559
|
+
<li part="item">
|
|
560
|
+
<${tag}
|
|
561
|
+
href=${ifDefined(this.renderLink(this.page - 1))}
|
|
562
|
+
part="button button-previous"
|
|
563
|
+
class=${classMap({ disabled: isPrevDisabled || this.disabled })}
|
|
564
|
+
aria-label="${this.localize.term("previous")}"
|
|
565
|
+
?disabled=${ifDefined(isLink ? void 0 : isPrevDisabled || this.disabled)}
|
|
566
|
+
tabindex=${ifDefined(this.disabled ? "-1" : void 0)}
|
|
567
|
+
@click=${() => this.changePage(this.page - 1)}
|
|
568
|
+
>
|
|
569
|
+
<slot name="previous-icon"> ${isRtl ? chevronRightIcon : chevronLeftIcon} </slot>
|
|
570
|
+
</${tag}>
|
|
571
|
+
</li>
|
|
572
|
+
`;
|
|
573
|
+
const nextButton = html$1`
|
|
574
|
+
<li part="item">
|
|
575
|
+
<${tag}
|
|
576
|
+
href=${ifDefined(this.renderLink(this.page + 1))}
|
|
577
|
+
part="button button-next"
|
|
578
|
+
class=${classMap({ disabled: isNextDisabled || this.disabled })}
|
|
579
|
+
aria-label="${this.localize.term("next")}"
|
|
580
|
+
?disabled=${ifDefined(isLink ? void 0 : isNextDisabled || this.disabled)}
|
|
581
|
+
tabindex=${ifDefined(this.disabled ? "-1" : void 0)}
|
|
582
|
+
@click=${() => this.changePage(this.page + 1)}
|
|
583
|
+
>
|
|
584
|
+
<slot name="next-icon"> ${isRtl ? chevronLeftIcon : chevronRightIcon} </slot>
|
|
585
|
+
</${tag}>
|
|
586
|
+
</li>
|
|
587
|
+
`;
|
|
588
|
+
if (this.format === "compact") content = html$1`
|
|
589
|
+
<li part="item">
|
|
590
|
+
<span id="range" part="range">
|
|
591
|
+
${this.localize.term("numberOfTotal", this.localize.number(this.page, { useGrouping: true }), this.localize.number(this.totalPages, { useGrouping: true }))}
|
|
592
|
+
</span>
|
|
593
|
+
</li>
|
|
594
|
+
`;
|
|
595
|
+
else content = this.getPaginationItems().map((item) => {
|
|
596
|
+
if (item.type === "jump") {
|
|
597
|
+
const jumpToPage = this.page + (item.position === "start" ? -5 : 5);
|
|
598
|
+
return html$1`
|
|
599
|
+
<li part="item">
|
|
600
|
+
<${tag}
|
|
601
|
+
href=${ifDefined(this.renderLink(jumpToPage))}
|
|
602
|
+
part="button ${item.position === "start" ? "button-jump-backward" : "button-jump-forward"}"
|
|
603
|
+
class=${classMap({ disabled: this.disabled })}
|
|
604
|
+
aria-label="${this.localize.term(item.position === "start" ? "jumpBackward" : "jumpForward")}"
|
|
605
|
+
?disabled=${ifDefined(isLink ? void 0 : this.disabled)}
|
|
606
|
+
tabindex=${ifDefined(this.disabled ? "-1" : void 0)}
|
|
607
|
+
@click=${() => this.changePage(clamp(this.page + (item.position === "start" ? -5 : 5), 1, this.totalPages))}
|
|
608
|
+
>
|
|
609
|
+
<slot name=${item.position === "start" ? "jump-backward-icon" : "jump-forward-icon"}>
|
|
610
|
+
<sigvelo-icon library="system" name="dots" family="filled"></sigvelo-icon>
|
|
611
|
+
</slot>
|
|
612
|
+
</${tag}>
|
|
613
|
+
</li>
|
|
614
|
+
`;
|
|
615
|
+
} else {
|
|
616
|
+
const isCurrent = item.page === this.page;
|
|
617
|
+
const part = `button button-page${isCurrent ? " button-current" : ""}${item.page === 1 ? " button-first" : ""}${item.page === this.totalPages ? " button-last" : ""}`;
|
|
618
|
+
return html$1`
|
|
619
|
+
<li part="item">
|
|
620
|
+
<${tag}
|
|
621
|
+
href=${ifDefined(this.renderLink(item.page))}
|
|
622
|
+
part=${part}
|
|
623
|
+
class=${classMap({
|
|
624
|
+
current: isCurrent,
|
|
625
|
+
disabled: this.disabled
|
|
626
|
+
})}
|
|
627
|
+
aria-label=${this.localize.term("pageNumber", item.page)}
|
|
628
|
+
aria-current=${ifDefined(isCurrent ? "page" : void 0)}
|
|
629
|
+
?disabled=${ifDefined(isLink ? void 0 : this.disabled)}
|
|
630
|
+
tabindex=${ifDefined(this.disabled ? "-1" : void 0)}
|
|
631
|
+
@click=${() => this.changePage(item.page)}
|
|
632
|
+
>
|
|
633
|
+
${this.localize.number(item.page, { useGrouping: true })}
|
|
634
|
+
</${tag}>
|
|
635
|
+
</li>
|
|
636
|
+
`;
|
|
637
|
+
}
|
|
638
|
+
});
|
|
639
|
+
return html$1`
|
|
640
|
+
<nav id="nav" part="nav" aria-label="${label}" @click=${this.handleNavClick}>
|
|
641
|
+
<ul id="list" part="list">
|
|
642
|
+
${this.withoutNav ? "" : previousButton} ${content} ${this.withoutNav ? "" : nextButton}
|
|
643
|
+
</ul>
|
|
644
|
+
</nav>
|
|
645
|
+
`;
|
|
646
|
+
}
|
|
647
|
+
};
|
|
648
|
+
__decorate([property()], SigveloPagination.prototype, "label", void 0);
|
|
649
|
+
__decorate([property({
|
|
650
|
+
attribute: "total-pages",
|
|
651
|
+
type: Number
|
|
652
|
+
})], SigveloPagination.prototype, "totalPages", void 0);
|
|
653
|
+
__decorate([property({
|
|
654
|
+
type: Number,
|
|
655
|
+
reflect: true
|
|
656
|
+
})], SigveloPagination.prototype, "page", void 0);
|
|
657
|
+
__decorate([property({
|
|
658
|
+
attribute: "siblings",
|
|
659
|
+
type: Number
|
|
660
|
+
})], SigveloPagination.prototype, "siblings", void 0);
|
|
661
|
+
__decorate([property({
|
|
662
|
+
attribute: "jump",
|
|
663
|
+
type: Number
|
|
664
|
+
})], SigveloPagination.prototype, "jump", void 0);
|
|
665
|
+
__decorate([property({ reflect: true })], SigveloPagination.prototype, "format", void 0);
|
|
666
|
+
__decorate([property({ attribute: "link-formatter" })], SigveloPagination.prototype, "linkFormatter", void 0);
|
|
667
|
+
__decorate([property({
|
|
668
|
+
type: Boolean,
|
|
669
|
+
reflect: true
|
|
670
|
+
})], SigveloPagination.prototype, "disabled", void 0);
|
|
671
|
+
__decorate([property({ reflect: true })], SigveloPagination.prototype, "variant", void 0);
|
|
672
|
+
__decorate([property({
|
|
673
|
+
type: Boolean,
|
|
674
|
+
attribute: "without-nav",
|
|
675
|
+
reflect: true
|
|
676
|
+
})], SigveloPagination.prototype, "withoutNav", void 0);
|
|
677
|
+
customElements.define("sigvelo-pagination", SigveloPagination);
|
|
678
|
+
//#endregion
|
|
679
|
+
export { SigveloPagination as t };
|