@fastkit/vui 0.6.19 → 0.6.20

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.
@@ -8,7 +8,9 @@ var vueColorScheme = require('@fastkit/vue-color-scheme');
8
8
  var vueUtils = require('@fastkit/vue-utils');
9
9
  var vueLoading = require('@fastkit/vue-loading');
10
10
  var iconFont = require('@fastkit/icon-font');
11
+ var helpers = require('@fastkit/helpers');
11
12
  var vueRouter = require('vue-router');
13
+ var vueAppLayout = require('@fastkit/vue-app-layout');
12
14
 
13
15
  const CONTROL_SIZES = ['sm', 'md', 'lg'];
14
16
  const CONTROL_FIELD_VARIANTS = ['outlined', 'filled', 'flat'];
@@ -531,6 +533,296 @@ const VButton = vue.defineComponent({
531
533
 
532
534
  });
533
535
 
536
+ function _isSlot$8(s) {
537
+ return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !vue.isVNode(s);
538
+ }
539
+
540
+ const PAGINATION_ALIGNS = ['left', 'center', 'right'];
541
+ function paginationProps() {
542
+ return vueUtils.createPropsOptions({
543
+ /**
544
+ * Active Pages
545
+ */
546
+ modelValue: {
547
+ type: vueUtils.rawNumberPropType,
548
+ default: 1
549
+ },
550
+
551
+ /**
552
+ * Total number of pages
553
+ */
554
+ length: {
555
+ type: vueUtils.rawNumberPropType,
556
+ default: 0
557
+ },
558
+
559
+ /**
560
+ * Maximum number of links to display.
561
+ */
562
+ totalVisible: vueUtils.rawNumberPropType,
563
+
564
+ /**
565
+ * true when narrowing
566
+ */
567
+ dense: Boolean,
568
+ disabled: Boolean,
569
+ align: {
570
+ type: String,
571
+ default: 'center'
572
+ },
573
+
574
+ /**
575
+ * To synchronize with a query, use the query name
576
+ */
577
+ routeQuery: String,
578
+ beforeChange: Function,
579
+ color: String
580
+ });
581
+ }
582
+ const VPagination = vue.defineComponent({
583
+ name: 'VPagination',
584
+ props: paginationProps(),
585
+ emits: {
586
+ change: page => true
587
+ },
588
+
589
+ setup(props, ctx) {
590
+ const vui = useVui();
591
+ const elRef = vue.ref(null);
592
+ const router = vueRouter.useRouter();
593
+ const route = vueRouter.useRoute();
594
+ const internalValue = vue.ref(1);
595
+ const containerWidth = vue.ref(0);
596
+ const itemSize = vue.ref(0);
597
+ const capacityLength = vue.computed(() => {
598
+ const _itemSize = itemSize.value;
599
+ if (!_itemSize) return 0;
600
+ return Math.floor(containerWidth.value / _itemSize);
601
+ });
602
+ const colorScope = vueColorScheme.useScopeColorClass({
603
+ color: () => props.color || vui.setting('primaryScope')
604
+ });
605
+ const computedLength = vue.computed(() => vueUtils.resolveNumberish(props.length));
606
+ const computedTotalVisible = vue.computed(() => vueUtils.resolveNumberish(props.totalVisible));
607
+ const computedNumbersLength = vue.computed(() => capacityLength.value - 2 - 2);
608
+ const computedPage = vue.computed(() => {
609
+ const {
610
+ routeQuery
611
+ } = props;
612
+
613
+ if (routeQuery) {
614
+ return vueUtils.getRouteQuery(route.query, routeQuery, Number, 1);
615
+ }
616
+
617
+ return internalValue.value;
618
+ });
619
+
620
+ const _range = (from, to) => helpers.range(to - from, from);
621
+
622
+ const computedItems = vue.computed(() => {
623
+ const maxButtons = computedNumbersLength.value;
624
+ const totalVisible = computedTotalVisible.value;
625
+ const length = computedLength.value;
626
+ const pageValue = computedPage.value;
627
+ const maxLength = Math.min(Math.max(0, totalVisible || 0) || length, Math.max(0, maxButtons) || length, length);
628
+
629
+ if (length <= maxLength) {
630
+ return _range(1, length);
631
+ }
632
+
633
+ const even = maxLength % 2 === 0 ? 1 : 0;
634
+ const left = Math.floor(maxLength / 2);
635
+ const right = length - left + 1 + even;
636
+
637
+ if (pageValue > left && pageValue < right) {
638
+ const start = pageValue - left + 2;
639
+ const end = pageValue + left - 2 - even;
640
+ return [1, 'truncate', ..._range(start, end), 'truncate', length];
641
+ } else if (pageValue === left) {
642
+ const end = pageValue + left - 1 - even;
643
+ return [..._range(1, end), 'truncate', length];
644
+ } else if (pageValue === right) {
645
+ const start = pageValue - left + 1;
646
+ return [1, 'truncate', ..._range(start, length)];
647
+ } else {
648
+ return [..._range(1, left), 'truncate', ..._range(right, length)];
649
+ }
650
+ });
651
+ const isActive = vue.computed(() => computedLength.value > 1);
652
+ const isTransitioning = vue.computed(() => {
653
+ const {
654
+ routeQuery
655
+ } = props;
656
+ if (!routeQuery) return false; // @TODO
657
+ // return this.$location.isQueryOnlyTransitioning(routeQuery);
658
+
659
+ return false;
660
+ });
661
+ const isDisabled = vue.computed(() => props.disabled || isTransitioning.value);
662
+ const classes = vue.computed(() => [{
663
+ 'v-pagination--disabled': isDisabled.value,
664
+ 'v-pagination--dense': props.dense,
665
+ [`v-pagination--${props.align}`]: true
666
+ }, colorScope.value.className]);
667
+
668
+ async function setPage(value) {
669
+ if (isDisabled.value) return;
670
+ const {
671
+ beforeChange,
672
+ routeQuery
673
+ } = props;
674
+ const newPage = vueUtils.resolveNumberish(value);
675
+ if (computedPage.value === newPage) return;
676
+
677
+ if (beforeChange) {
678
+ try {
679
+ let result = beforeChange(newPage);
680
+ if (helpers.isPromise(result)) result = await result;
681
+ if (result === false) return;
682
+ } catch (e) {}
683
+ }
684
+
685
+ if (routeQuery) {
686
+ const to = createRoutableLocationByPage(newPage, routeQuery);
687
+ return router.push(to).then(failure => {
688
+ !failure && ctx.emit('change', newPage);
689
+ });
690
+ } else {
691
+ internalValue.value = newPage;
692
+ ctx.emit('update:modelValue', newPage);
693
+ ctx.emit('change', newPage);
694
+ }
695
+ }
696
+
697
+ function createPageInfo(source) {
698
+ const currentPage = computedPage.value;
699
+ const length = computedLength.value;
700
+ let number;
701
+ let page;
702
+ let active;
703
+ let disabled;
704
+
705
+ if (typeof source === 'number') {
706
+ number = true;
707
+ page = source;
708
+ active = currentPage === page;
709
+ disabled = false;
710
+ } else if (source === 'truncate') {
711
+ number = false;
712
+ active = false;
713
+ disabled = false;
714
+ } else {
715
+ number = false;
716
+ const isPrev = source === 'prev';
717
+ const ammount = isPrev ? -1 : 1;
718
+ page = currentPage + ammount;
719
+ active = false;
720
+ disabled = page < 1 || page > length;
721
+ }
722
+
723
+ return {
724
+ number,
725
+ page,
726
+ active,
727
+ disabled
728
+ };
729
+ }
730
+
731
+ function createRoutableLocationByPage(page, routeQuery) {
732
+ return vueUtils.getQueryMergedLocation({
733
+ [routeQuery]: page
734
+ }, route);
735
+ }
736
+
737
+ function genItem(source, index) {
738
+ const {
739
+ number,
740
+ page,
741
+ active,
742
+ disabled
743
+ } = createPageInfo(source);
744
+ const type = number ? 'num' : source; // const staticClass = `pagination__item`;
745
+
746
+ const classes = ['v-pagination__item', {
747
+ [`v-pagination__item--${type}`]: true,
748
+ 'v-pagination__item--active': active,
749
+ 'v-pagination__item--disabled': disabled
750
+ }];
751
+ const children = number ? page : (() => {
752
+ if (type === 'truncate') {
753
+ return vue.createVNode("span", null, [vue.createTextVNode("...")]);
754
+ }
755
+
756
+ const isPrev = type === 'prev';
757
+ const name = isPrev ? 'chevron-left' : 'chevron-right';
758
+ return vue.createVNode(VIcon, {
759
+ "class": "v-pagination__item__icon",
760
+ "name": name
761
+ }, null);
762
+ })();
763
+
764
+ const onClick = ev => {
765
+ ev.preventDefault();
766
+ if (page === undefined || active || disabled) return;
767
+ setPage(page);
768
+ };
769
+
770
+ const key = `${source}-${index}`;
771
+ const {
772
+ routeQuery
773
+ } = props;
774
+
775
+ if (page !== undefined && routeQuery) {
776
+ const to = createRoutableLocationByPage(page, routeQuery);
777
+ return vue.createVNode(vueRouter.RouterLink, {
778
+ "class": classes,
779
+ "to": to,
780
+ "key": key
781
+ }, _isSlot$8(children) ? children : {
782
+ default: () => [children]
783
+ });
784
+ } else {
785
+ return vue.createVNode("button", {
786
+ "class": classes,
787
+ "type": "button",
788
+ "value": page,
789
+ "onClick": onClick,
790
+ "key": key
791
+ }, [children]);
792
+ }
793
+ }
794
+
795
+ vue.watch(() => props.modelValue, modelValue => {
796
+ internalValue.value = vueUtils.resolveNumberish(modelValue);
797
+ }, {
798
+ immediate: true
799
+ });
800
+ return () => {
801
+ if (!isActive.value) return undefined;
802
+ const $items = ['prev', ...computedItems.value, 'next'].map((i, index) => genItem(i, index));
803
+ return vue.withDirectives(vue.createVNode("nav", {
804
+ "class": ['v-pagination', classes.value],
805
+ "ref": elRef
806
+ }, [$items]), [vueUtils.resizeDirectiveArgument(({
807
+ width
808
+ }) => {
809
+ const el = elRef.value;
810
+
811
+ if (el) {
812
+ const style = window.getComputedStyle(el, 'before');
813
+ const width = style.getPropertyValue('width');
814
+ const margin = style.getPropertyValue('margin');
815
+ const size = parseFloat(width) + parseFloat(margin) * 0.5;
816
+ itemSize.value = size;
817
+ }
818
+
819
+ containerWidth.value = width;
820
+ })]);
821
+ };
822
+ }
823
+
824
+ });
825
+
534
826
  function createListTileProps() {
535
827
  const icon = rawIconProp();
536
828
  return { ...vueUtils.navigationableProps,
@@ -651,6 +943,51 @@ const VDrawerLayout = vue.defineComponent({
651
943
 
652
944
  });
653
945
 
946
+ function _isSlot$7(s) {
947
+ return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !vue.isVNode(s);
948
+ }
949
+
950
+ const VHero = vue.defineComponent({
951
+ name: 'VHero',
952
+ props: {
953
+ color: {
954
+ type: String,
955
+ default: 'primary'
956
+ },
957
+ tag: {
958
+ type: String,
959
+ default: 'header'
960
+ },
961
+ hTag: {
962
+ type: String,
963
+ default: 'h1'
964
+ }
965
+ },
966
+
967
+ setup(props, ctx) {
968
+ return () => {
969
+ let _slot;
970
+
971
+ const TagName = props.tag;
972
+ const HTagName = props.hTag;
973
+ return vue.createVNode(vueAppLayout.VAppContainer, {
974
+ "pulled": true
975
+ }, {
976
+ default: () => [vue.createVNode(TagName, {
977
+ "class": ['v-hero', vueColorScheme.toScopeColorClass(props.color)]
978
+ }, {
979
+ default: () => [vue.createVNode(HTagName, {
980
+ "class": "v-hero__title"
981
+ }, _isSlot$7(_slot = vueUtils.renderSlotOrEmpty(ctx.slots, 'default')) ? _slot : {
982
+ default: () => [_slot]
983
+ })]
984
+ })]
985
+ });
986
+ };
987
+ }
988
+
989
+ });
990
+
654
991
  function _isSlot$6(s) {
655
992
  return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !vue.isVNode(s);
656
993
  }
@@ -1897,6 +2234,7 @@ exports.VSnackbar = vueKit.VSnackbar;
1897
2234
  exports.ICON_NAMES = iconFont.ICON_NAMES;
1898
2235
  exports.CONTROL_FIELD_VARIANTS = CONTROL_FIELD_VARIANTS;
1899
2236
  exports.CONTROL_SIZES = CONTROL_SIZES;
2237
+ exports.PAGINATION_ALIGNS = PAGINATION_ALIGNS;
1900
2238
  exports.VApp = VApp;
1901
2239
  exports.VButton = VButton;
1902
2240
  exports.VCard = VCard;
@@ -1906,12 +2244,14 @@ exports.VCheckbox = VCheckbox;
1906
2244
  exports.VCheckboxGroup = VCheckboxGroup;
1907
2245
  exports.VDrawerLayout = VDrawerLayout;
1908
2246
  exports.VForm = VForm;
2247
+ exports.VHero = VHero;
1909
2248
  exports.VIcon = VIcon;
1910
2249
  exports.VListTile = VListTile;
1911
2250
  exports.VNavigation = VNavigation;
1912
2251
  exports.VNavigationItem = VNavigationItem;
1913
2252
  exports.VOption = VOption;
1914
2253
  exports.VOptionGroup = VOptionGroup;
2254
+ exports.VPagination = VPagination;
1915
2255
  exports.VPaper = VPaper;
1916
2256
  exports.VRadio = VRadio;
1917
2257
  exports.VRadioGroup = VRadioGroup;
@@ -1953,6 +2293,7 @@ exports.defineFormSelectorComponent = defineFormSelectorComponent;
1953
2293
  exports.iconProps = iconProps;
1954
2294
  exports.installVuiPlugin = installVuiPlugin;
1955
2295
  exports.listTileEmits = listTileEmits;
2296
+ exports.paginationProps = paginationProps;
1956
2297
  exports.rawIconProp = rawIconProp;
1957
2298
  exports.renderNavigationItemInput = renderNavigationItemInput;
1958
2299
  exports.resolveNavigationItemInput = resolveNavigationItemInput;
package/dist/vui.css CHANGED
@@ -512,6 +512,15 @@ template {
512
512
  --toolbar-dense-height: calc(var(--toolbar-height) * 0.8);
513
513
  --card-content-padding: 1rem;
514
514
  --card-actions-padding: 0.5rem;
515
+ --pagination-item-radius: 2px;
516
+ --pagination-item-font-size: var(--root-em);
517
+ --pagination-item-size: calc(var(--root-em) * 2);
518
+ --pagination-item-margin: calc(var(--root-em) * 0.5);
519
+ --pagination-item-font-size-dense: calc(
520
+ var(--pagination-item-font-size) * 0.625
521
+ );
522
+ --pagination-item-size-dense: calc(var(--pagination-item-size) * 0.8125);
523
+ --pagination-item-margin-dense: calc(var(--pagination-item-margin) * 0.75);
515
524
  }
516
525
 
517
526
  :root,
@@ -922,6 +931,108 @@ h6,
922
931
  z-index: 1;
923
932
  transform: translate(-50%, -50%);
924
933
  }
934
+ .v-pagination {
935
+ --pagination-size: var(--pagination-item-size);
936
+ --pagination-margin: var(--pagination-item-margin);
937
+ --pagination-font-size: var(--pagination-item-font-size);
938
+ --pagination-radius: var(--pagination-item-radius);
939
+ display: flex;
940
+ align-items: center;
941
+ overflow: hidden;
942
+ font-weight: bold;
943
+ line-height: 1;
944
+ }
945
+ .v-pagination::before {
946
+ width: var(--pagination-size);
947
+ margin: var(--pagination-margin);
948
+ content: none;
949
+ }
950
+ .v-pagination--left {
951
+ justify-content: flex-start;
952
+ }
953
+ .v-pagination--center {
954
+ justify-content: center;
955
+ }
956
+ .v-pagination--right {
957
+ justify-content: flex-end;
958
+ }
959
+ .v-pagination__item,
960
+ .v-pagination a.v-pagination__item {
961
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
962
+ padding: 0;
963
+ touch-action: manipulation;
964
+ cursor: pointer;
965
+ user-select: none;
966
+ background-color: transparent;
967
+ border: 0;
968
+ outline: 0;
969
+ appearance: none;
970
+ display: flex;
971
+ align-items: center;
972
+ justify-content: center;
973
+ min-width: var(--pagination-size);
974
+ height: var(--pagination-size);
975
+ margin: calc(var(--pagination-margin) * 0.5);
976
+ font-size: var(--pagination-font-size);
977
+ color: inherit;
978
+ border-radius: var(--pagination-radius);
979
+ transition: 0.1s;
980
+ }
981
+ .v-pagination__item::-moz-focus-inner,
982
+ .v-pagination a.v-pagination__item::-moz-focus-inner {
983
+ border: 0;
984
+ }
985
+ .v-pagination__item, .v-pagination__item:hover, .v-pagination__item:focus,
986
+ .v-pagination a.v-pagination__item,
987
+ .v-pagination a.v-pagination__item:hover,
988
+ .v-pagination a.v-pagination__item:focus {
989
+ text-decoration: none;
990
+ }
991
+ .v-pagination__item:hover, .v-pagination__item:focus,
992
+ .v-pagination a.v-pagination__item:hover,
993
+ .v-pagination a.v-pagination__item:focus {
994
+ background: rgba(0, 0, 0, 0.1);
995
+ }
996
+ .v-pagination__item--active, .v-pagination__item--active:hover, .v-pagination__item--active:focus, .v-pagination__item--active:active,
997
+ .v-pagination a.v-pagination__item--active,
998
+ .v-pagination a.v-pagination__item--active:hover,
999
+ .v-pagination a.v-pagination__item--active:focus,
1000
+ .v-pagination a.v-pagination__item--active:active {
1001
+ color: var(--text-color);
1002
+ pointer-events: none;
1003
+ background-color: var(--main-color);
1004
+ }
1005
+ .v-pagination__item--disabled,
1006
+ .v-pagination a.v-pagination__item--disabled {
1007
+ color: var(--palette-muted) !important;
1008
+ pointer-events: none !important;
1009
+ background: transparent !important;
1010
+ }
1011
+ .v-pagination__item--truncate,
1012
+ .v-pagination a.v-pagination__item--truncate {
1013
+ color: var(--palette-muted) !important;
1014
+ pointer-events: none !important;
1015
+ background: transparent !important;
1016
+ }
1017
+ .v-pagination__item .v-icon,
1018
+ .v-pagination a.v-pagination__item .v-icon {
1019
+ font-size: 150%;
1020
+ }
1021
+ .v-pagination--dense .v-pagination__item {
1022
+ --pagination-size: var(--pagination-item-size-dense);
1023
+ --pagination-margin: var(--pagination-item-margin-dense);
1024
+ --pagination-font-size: var(--pagination-item-font-size-dense);
1025
+ }
1026
+ .v-pagination--disabled .v-pagination__item {
1027
+ color: var(--palette-muted);
1028
+ pointer-events: none;
1029
+ }
1030
+ .v-pagination--disabled .v-pagination__item:hover, .v-pagination--disabled .v-pagination__item:focus {
1031
+ background: transparent;
1032
+ }
1033
+ .v-pagination--disabled .v-pagination__item--active {
1034
+ background: var(--palette-muted);
1035
+ }
925
1036
  .v-list-tile {
926
1037
  --tile-background: var(--main-color, transparent);
927
1038
  --tile-active-background: var(--deep-color, transparent);
@@ -994,6 +1105,21 @@ h6,
994
1105
  flex: 0 0 auto;
995
1106
  margin-top: auto;
996
1107
  }
1108
+ .v-hero {
1109
+ --hero-background-color: var(--main-color);
1110
+ --hero-text-color: var(--text-color);
1111
+ padding: 20px 30px;
1112
+ margin: 0;
1113
+ color: var(--hero-text-color);
1114
+ background-color: var(--hero-background-color);
1115
+ }
1116
+ .v-hero__title {
1117
+ margin: 0;
1118
+ font-size: 1.75rem;
1119
+ font-weight: 300;
1120
+ line-height: 1;
1121
+ color: inherit;
1122
+ }
997
1123
  .v-navigation-item--opened {
998
1124
  --tile-background: var(--tile-active-background);
999
1125
  --tile-text-color: var(--tile-text-active-color);
package/dist/vui.d.ts CHANGED
@@ -484,6 +484,44 @@ export declare interface NavigationItemInput extends ExtractPropInput<ReturnType
484
484
  children?: NavigationItemInput[];
485
485
  }
486
486
 
487
+ export declare const PAGINATION_ALIGNS: readonly ["left", "center", "right"];
488
+
489
+ export declare function paginationProps(): {
490
+ /**
491
+ * Active Pages
492
+ */
493
+ modelValue: {
494
+ type: PropType<string | number>;
495
+ default: number;
496
+ };
497
+ /**
498
+ * Total number of pages
499
+ */
500
+ length: {
501
+ type: PropType<string | number>;
502
+ default: number;
503
+ };
504
+ /**
505
+ * Maximum number of links to display.
506
+ */
507
+ totalVisible: PropType<string | number>;
508
+ /**
509
+ * true when narrowing
510
+ */
511
+ dense: BooleanConstructor;
512
+ disabled: BooleanConstructor;
513
+ align: {
514
+ type: PropType<"left" | "center" | "right">;
515
+ default: string;
516
+ };
517
+ /**
518
+ * To synchronize with a query, use the query name
519
+ */
520
+ routeQuery: StringConstructor;
521
+ beforeChange: PropType<VPaginationGuard>;
522
+ color: PropType<ScopeName>;
523
+ };
524
+
487
525
  export declare type RawIconProp = IconName | EmptyIconSymbol | ToggleableIconHook;
488
526
 
489
527
  export declare function rawIconProp(): PropType<RawIconProp>;
@@ -1313,6 +1351,33 @@ export declare interface VFormSlots {
1313
1351
  default: VueForm;
1314
1352
  }
1315
1353
 
1354
+ export declare const VHero: DefineComponent<{
1355
+ color: {
1356
+ type: PropType<ScopeName>;
1357
+ default: string;
1358
+ };
1359
+ tag: {
1360
+ type: StringConstructor;
1361
+ default: string;
1362
+ };
1363
+ hTag: {
1364
+ type: StringConstructor;
1365
+ default: string;
1366
+ };
1367
+ }, () => JSX.Element, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, Record<string, any>, string, VNodeProps & AllowedComponentProps & ComponentCustomProps, Readonly<{
1368
+ color?: unknown;
1369
+ tag?: unknown;
1370
+ hTag?: unknown;
1371
+ } & {
1372
+ color: ScopeName;
1373
+ tag: string;
1374
+ hTag: string;
1375
+ } & {}>, {
1376
+ color: ScopeName;
1377
+ tag: string;
1378
+ hTag: string;
1379
+ }>;
1380
+
1316
1381
  export declare const VIcon: DefineComponent<{
1317
1382
  name: {
1318
1383
  type: PropType<IconName | "$empty">;
@@ -1736,6 +1801,77 @@ export declare const VOptionGroup: DefineComponent<{
1736
1801
  disabled: boolean;
1737
1802
  }>;
1738
1803
 
1804
+ export declare const VPagination: DefineComponent<{
1805
+ /**
1806
+ * Active Pages
1807
+ */
1808
+ modelValue: {
1809
+ type: PropType<string | number>;
1810
+ default: number;
1811
+ };
1812
+ /**
1813
+ * Total number of pages
1814
+ */
1815
+ length: {
1816
+ type: PropType<string | number>;
1817
+ default: number;
1818
+ };
1819
+ /**
1820
+ * Maximum number of links to display.
1821
+ */
1822
+ totalVisible: PropType<string | number>;
1823
+ /**
1824
+ * true when narrowing
1825
+ */
1826
+ dense: BooleanConstructor;
1827
+ disabled: BooleanConstructor;
1828
+ align: {
1829
+ type: PropType<"left" | "center" | "right">;
1830
+ default: string;
1831
+ };
1832
+ /**
1833
+ * To synchronize with a query, use the query name
1834
+ */
1835
+ routeQuery: StringConstructor;
1836
+ beforeChange: PropType<VPaginationGuard>;
1837
+ color: PropType<ScopeName>;
1838
+ }, () => JSX.Element | undefined, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
1839
+ change: (page: number) => true;
1840
+ }, string, VNodeProps & AllowedComponentProps & ComponentCustomProps, Readonly<{
1841
+ modelValue?: unknown;
1842
+ length?: unknown;
1843
+ totalVisible?: unknown;
1844
+ dense?: unknown;
1845
+ disabled?: unknown;
1846
+ align?: unknown;
1847
+ routeQuery?: unknown;
1848
+ beforeChange?: unknown;
1849
+ color?: unknown;
1850
+ } & {
1851
+ dense: boolean;
1852
+ disabled: boolean;
1853
+ length: string | number;
1854
+ modelValue: string | number;
1855
+ align: "left" | "center" | "right";
1856
+ } & {
1857
+ totalVisible?: string | number | undefined;
1858
+ routeQuery?: string | undefined;
1859
+ beforeChange?: VPaginationGuard | undefined;
1860
+ color?: ScopeName | undefined;
1861
+ }> & {
1862
+ onChange?: ((page: number) => any) | undefined;
1863
+ }, {
1864
+ dense: boolean;
1865
+ disabled: boolean;
1866
+ length: string | number;
1867
+ modelValue: string | number;
1868
+ align: "left" | "center" | "right";
1869
+ }>;
1870
+
1871
+ export declare type VPaginationAlign = typeof PAGINATION_ALIGNS[number];
1872
+
1873
+ export declare type VPaginationGuard = (page: number) => boolean | void | Promise<boolean | void>;
1874
+
1739
1875
  export declare const VPaper: DefineComponent<{
1740
1876
  square: BooleanConstructor;
1741
1877
  headerProps: PropType<ARGS>;