@cloud-ru/ds-pagination 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE +201 -0
  3. package/README.md +174 -0
  4. package/dist/cjs/components/Pagination/Pagination.d.ts +24 -0
  5. package/dist/cjs/components/Pagination/Pagination.js +64 -0
  6. package/dist/cjs/components/Pagination/index.d.ts +1 -0
  7. package/dist/cjs/components/Pagination/index.js +17 -0
  8. package/dist/cjs/components/Pagination/styles.module.css +19 -0
  9. package/dist/cjs/components/PaginationNumberItem/PaginationNumberItem.d.ts +10 -0
  10. package/dist/cjs/components/PaginationNumberItem/PaginationNumberItem.js +18 -0
  11. package/dist/cjs/components/PaginationNumberItem/index.d.ts +1 -0
  12. package/dist/cjs/components/PaginationNumberItem/index.js +17 -0
  13. package/dist/cjs/components/PaginationNumberItem/styles.module.css +149 -0
  14. package/dist/cjs/components/PaginationSlider/PaginationSlider.d.ts +17 -0
  15. package/dist/cjs/components/PaginationSlider/PaginationSlider.js +16 -0
  16. package/dist/cjs/components/PaginationSlider/index.d.ts +1 -0
  17. package/dist/cjs/components/PaginationSlider/index.js +17 -0
  18. package/dist/cjs/components/PaginationSlider/styles.module.css +25 -0
  19. package/dist/cjs/components/PaginationSliderItem/PaginationSliderItem.d.ts +10 -0
  20. package/dist/cjs/components/PaginationSliderItem/PaginationSliderItem.js +12 -0
  21. package/dist/cjs/components/PaginationSliderItem/index.d.ts +1 -0
  22. package/dist/cjs/components/PaginationSliderItem/index.js +17 -0
  23. package/dist/cjs/components/PaginationSliderItem/styles.module.css +102 -0
  24. package/dist/cjs/components/index.d.ts +2 -0
  25. package/dist/cjs/components/index.js +18 -0
  26. package/dist/cjs/constants.d.ts +31 -0
  27. package/dist/cjs/constants.js +37 -0
  28. package/dist/cjs/contexts.d.ts +7 -0
  29. package/dist/cjs/contexts.js +11 -0
  30. package/dist/cjs/index.d.ts +4 -0
  31. package/dist/cjs/index.js +20 -0
  32. package/dist/cjs/package.json +3 -0
  33. package/dist/cjs/style.css +295 -0
  34. package/dist/cjs/types.d.ts +5 -0
  35. package/dist/cjs/types.js +2 -0
  36. package/dist/cjs/utils/getPaginationEntries.d.ts +20 -0
  37. package/dist/cjs/utils/getPaginationEntries.js +85 -0
  38. package/dist/cjs/utils/getRange.d.ts +1 -0
  39. package/dist/cjs/utils/getRange.js +6 -0
  40. package/dist/cjs/utils/index.d.ts +2 -0
  41. package/dist/cjs/utils/index.js +18 -0
  42. package/dist/esm/components/Pagination/Pagination.d.ts +24 -0
  43. package/dist/esm/components/Pagination/Pagination.js +58 -0
  44. package/dist/esm/components/Pagination/index.d.ts +1 -0
  45. package/dist/esm/components/Pagination/index.js +1 -0
  46. package/dist/esm/components/Pagination/styles.module.css +19 -0
  47. package/dist/esm/components/PaginationNumberItem/PaginationNumberItem.d.ts +10 -0
  48. package/dist/esm/components/PaginationNumberItem/PaginationNumberItem.js +12 -0
  49. package/dist/esm/components/PaginationNumberItem/index.d.ts +1 -0
  50. package/dist/esm/components/PaginationNumberItem/index.js +1 -0
  51. package/dist/esm/components/PaginationNumberItem/styles.module.css +149 -0
  52. package/dist/esm/components/PaginationSlider/PaginationSlider.d.ts +17 -0
  53. package/dist/esm/components/PaginationSlider/PaginationSlider.js +10 -0
  54. package/dist/esm/components/PaginationSlider/index.d.ts +1 -0
  55. package/dist/esm/components/PaginationSlider/index.js +1 -0
  56. package/dist/esm/components/PaginationSlider/styles.module.css +25 -0
  57. package/dist/esm/components/PaginationSliderItem/PaginationSliderItem.d.ts +10 -0
  58. package/dist/esm/components/PaginationSliderItem/PaginationSliderItem.js +6 -0
  59. package/dist/esm/components/PaginationSliderItem/index.d.ts +1 -0
  60. package/dist/esm/components/PaginationSliderItem/index.js +1 -0
  61. package/dist/esm/components/PaginationSliderItem/styles.module.css +102 -0
  62. package/dist/esm/components/index.d.ts +2 -0
  63. package/dist/esm/components/index.js +2 -0
  64. package/dist/esm/constants.d.ts +31 -0
  65. package/dist/esm/constants.js +31 -0
  66. package/dist/esm/contexts.d.ts +7 -0
  67. package/dist/esm/contexts.js +7 -0
  68. package/dist/esm/index.d.ts +4 -0
  69. package/dist/esm/index.js +4 -0
  70. package/dist/esm/style.css +295 -0
  71. package/dist/esm/types.d.ts +5 -0
  72. package/dist/esm/types.js +1 -0
  73. package/dist/esm/utils/getPaginationEntries.d.ts +20 -0
  74. package/dist/esm/utils/getPaginationEntries.js +81 -0
  75. package/dist/esm/utils/getRange.d.ts +1 -0
  76. package/dist/esm/utils/getRange.js +3 -0
  77. package/dist/esm/utils/index.d.ts +2 -0
  78. package/dist/esm/utils/index.js +2 -0
  79. package/dist/tsconfig.cjs.tsbuildinfo +1 -0
  80. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  81. package/package.json +44 -0
  82. package/src/components/Pagination/Pagination.tsx +162 -0
  83. package/src/components/Pagination/index.ts +1 -0
  84. package/src/components/Pagination/styles.module.scss +27 -0
  85. package/src/components/PaginationNumberItem/PaginationNumberItem.tsx +59 -0
  86. package/src/components/PaginationNumberItem/index.ts +1 -0
  87. package/src/components/PaginationNumberItem/styles.module.scss +82 -0
  88. package/src/components/PaginationSlider/PaginationSlider.tsx +50 -0
  89. package/src/components/PaginationSlider/index.ts +1 -0
  90. package/src/components/PaginationSlider/styles.module.scss +31 -0
  91. package/src/components/PaginationSliderItem/PaginationSliderItem.tsx +29 -0
  92. package/src/components/PaginationSliderItem/index.ts +1 -0
  93. package/src/components/PaginationSliderItem/styles.module.scss +137 -0
  94. package/src/components/index.ts +2 -0
  95. package/src/constants.ts +35 -0
  96. package/src/contexts.ts +16 -0
  97. package/src/index.ts +4 -0
  98. package/src/types.ts +7 -0
  99. package/src/utils/getPaginationEntries.ts +118 -0
  100. package/src/utils/getRange.ts +3 -0
  101. package/src/utils/index.ts +2 -0
@@ -0,0 +1,295 @@
1
+ .pagination{
2
+ display:flex;
3
+ flex-direction:row;
4
+ align-items:center;
5
+ margin:0;
6
+ padding:0;
7
+ list-style-type:none;
8
+ }
9
+ .pagination[data-size=s]{
10
+ gap:var(--sn-pagination-anatomy-size-s-paginationNumber-gap, var(--sn-primitive-dimension-4, 4px));
11
+ }
12
+ .pagination[data-size=m]{
13
+ gap:var(--sn-pagination-anatomy-size-m-paginationNumber-gap, var(--sn-primitive-dimension-4, 4px));
14
+ }
15
+ .pagination > li{
16
+ display:flex;
17
+ align-items:center;
18
+ justify-content:center;
19
+ }
20
+ @charset "UTF-8";
21
+ .stateLayer{
22
+ visibility:initial;
23
+ }
24
+
25
+ .root{
26
+ cursor:pointer;
27
+ position:relative;
28
+ display:inline-flex;
29
+ align-items:center;
30
+ justify-content:center;
31
+ box-sizing:border-box;
32
+ margin:0;
33
+ padding:0;
34
+ border:none;
35
+ font-family:inherit;
36
+ color:var(--sn-theme-color-available-version-textTertiary, var(--sn-brand-color-text-version-tertiary, rgba(65, 66, 78, 0.5490196078)));
37
+ text-decoration:none;
38
+ background-color:transparent;
39
+ outline:0;
40
+ outline-offset:0;
41
+ }
42
+ .root[data-size=s]{
43
+ border-radius:var(--sn-pagination-anatomy-size-s-paginationNumber-itemPaginationNumber-borderRadius, var(--sn-brand-anatomy-radius-button-s, var(--sn-primitive-dimension-2, 2px)));
44
+ min-width:var(--sn-pagination-anatomy-size-s-paginationNumber-itemPaginationNumber-minWidth, var(--sn-primitive-dimension-24, 24px));
45
+ height:var(--sn-pagination-anatomy-size-s-paginationNumber-itemPaginationNumber-height, var(--sn-primitive-dimension-24, 24px));
46
+ }
47
+ .root[data-size=s] .textWrapper{
48
+ font-family:var(--sn-regular-label-s-fontFamily, var(--sn-brand-font-fontFamily-regular-label, var(--sn-primitive-fontFamily-brandA-sans, SB Sans Interface)));
49
+ font-weight:var(--sn-regular-label-s-fontWeight, var(--sn-theme-typography-fontWeight-regular-label-s, var(--sn-brand-font-fontWeight-light-regular-label-s, var(--sn-primitive-font-fontWeightValue-500, 500))));
50
+ line-height:var(--sn-regular-label-s-lineHeight, var(--sn-density-typography-roleLabel-lineHeightS, var(--sn-primitive-font-lineHeight-by14, 20px)));
51
+ font-size:var(--sn-regular-label-s-fontSize, var(--sn-density-typography-roleLabel-fontSizeS, var(--sn-primitive-font-fontSize-14, 14px)));
52
+ letter-spacing:var(--sn-regular-label-s-letterSpacing, var(--sn-primitive-font-letterSpacing-s, 0px));
53
+ paragraph-spacing:var(--sn-regular-label-s-paragraphSpacing, var(--sn-primitive-font-paragraphSpacing-byFontSize11, 5px));
54
+ padding-left:var(--sn-pagination-anatomy-size-s-paginationNumber-itemPaginationNumber-textWrapper-paddingHorizontal, var(--sn-density-spacing-control-wrapper-horizontal-s, var(--sn-primitive-dimension-8, 8px)));
55
+ padding-right:var(--sn-pagination-anatomy-size-s-paginationNumber-itemPaginationNumber-textWrapper-paddingHorizontal, var(--sn-density-spacing-control-wrapper-horizontal-s, var(--sn-primitive-dimension-8, 8px)));
56
+ }
57
+ .root[data-size=m]{
58
+ min-width:var(--sn-pagination-anatomy-size-m-paginationNumber-itemPaginationNumber-minWidth, var(--sn-primitive-dimension-32, 32px));
59
+ border-radius:var(--sn-pagination-anatomy-size-m-paginationNumber-itemPaginationNumber-borderRadius, var(--sn-brand-anatomy-radius-button-m, var(--sn-primitive-dimension-2, 2px)));
60
+ height:var(--sn-pagination-anatomy-size-m-paginationNumber-itemPaginationNumber-height, var(--sn-primitive-dimension-32, 32px));
61
+ }
62
+ .root[data-size=m] .textWrapper{
63
+ font-family:var(--sn-regular-label-m-fontFamily, var(--sn-brand-font-fontFamily-regular-label, var(--sn-primitive-fontFamily-brandA-sans, SB Sans Interface)));
64
+ font-weight:var(--sn-regular-label-m-fontWeight, var(--sn-theme-typography-fontWeight-regular-label-m, var(--sn-brand-font-fontWeight-light-regular-label-m, var(--sn-primitive-font-fontWeightValue-550, 550))));
65
+ line-height:var(--sn-regular-label-m-lineHeight, var(--sn-density-typography-roleLabel-lineHeightM, var(--sn-primitive-font-lineHeight-by16, 24px)));
66
+ font-size:var(--sn-regular-label-m-fontSize, var(--sn-density-typography-roleLabel-fontSizeM, var(--sn-primitive-font-fontSize-16, 16px)));
67
+ letter-spacing:var(--sn-regular-label-m-letterSpacing, var(--sn-primitive-font-letterSpacing-s, 0px));
68
+ paragraph-spacing:var(--sn-regular-label-m-paragraphSpacing, var(--sn-primitive-font-paragraphSpacing-byFontSize12, 6px));
69
+ padding-left:var(--sn-pagination-anatomy-size-m-paginationNumber-itemPaginationNumber-textWrapper-paddingHorizontal, var(--sn-density-spacing-control-wrapper-horizontal-m, var(--sn-primitive-dimension-8, 8px)));
70
+ padding-right:var(--sn-pagination-anatomy-size-m-paginationNumber-itemPaginationNumber-textWrapper-paddingHorizontal, var(--sn-density-spacing-control-wrapper-horizontal-m, var(--sn-primitive-dimension-8, 8px)));
71
+ }
72
+ .root[data-activated]{
73
+ color:var(--sn-theme-color-primary-text, var(--sn-brand-color-primary-45, var(--sn-brandRole-color-brandA-45, var(--sn-primitive-color-brandA-45, #22775b))));
74
+ }
75
+ .root:focus-visible{
76
+ outline:var(--sn-theme-color-available-complementary, #000000) solid var(--sn-primitive-strokeWeight-strokeSemiBold, 2px);
77
+ outline-offset:var(--sn-primitive-strokeWeight-strokeSemiBold, 2px);
78
+ }
79
+ .root .stateLayer{
80
+ position:absolute;
81
+ inset:0;
82
+ border-radius:inherit;
83
+ }
84
+ .root .stateLayer[data-state=borderOnBackground]{
85
+ border-color:var(--sn-theme-color-material-stateLayer-neutral-border-default-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-default-borderColor, rgba(159, 166, 198, 0.3019607843)));
86
+ border-style:solid;
87
+ border-width:var(--sn-primitive-strokeWeight-strokeRegular, 1px);
88
+ }
89
+ .root .stateLayer[data-state=emptyNeutralOnBackground]{
90
+ background:var(--sn-theme-color-material-stateLayer-neutral-onBackground-defaultEmpty-filled, var(--sn-brand-color-state-neutral-forLightMode-default-background, rgba(120, 123, 138, 0)));
91
+ }
92
+ .root .stateLayer[data-state=activatedOnBackground]{
93
+ background:var(--sn-theme-color-material-stateLayer-activated-default-filled, var(--sn-brand-color-state-activated-default-background, var(--sn-brandRole-color-brandA-backgroundActivatedDefault, rgba(56, 159, 116, 0.1490196078))));
94
+ }
95
+ .root .stateLayer[data-state=versionOnColor]{
96
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-default-filled, rgba(0, 0, 0, 0.0509803922));
97
+ }
98
+ .root .stateLayer[data-state=emptyVersionOnColor]{
99
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-defaultEmpty-filled, rgba(0, 0, 0, 0));
100
+ }
101
+ .root .stateLayer[data-state=inversionOnColor]{
102
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-default-filled, rgba(255, 255, 255, 0.1019607843));
103
+ }
104
+ .root .stateLayer[data-state=emptyInversionOnColor]{
105
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-defaultEmpty-filled, rgba(255, 255, 255, 0));
106
+ }
107
+ .root .stateLayer[data-state=emptyDarkOnAccent]{
108
+ background:var(--sn-theme-color-material-stateLayer-darkOnAccent-defaultEmpty-filled, rgba(0, 0, 0, 0));
109
+ }
110
+ @media (hover: hover){
111
+ .root:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=borderOnBackground]{
112
+ border-color:var(--sn-theme-color-material-stateLayer-neutral-border-hovered-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-hovered-borderColor, rgba(159, 166, 198, 0.6509803922)));
113
+ }
114
+ .root:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyNeutralOnBackground]{
115
+ background:var(--sn-theme-color-material-stateLayer-neutral-onBackground-hovered-filled, var(--sn-brand-color-state-neutral-forLightMode-hovered-background, rgba(188, 195, 220, 0.1490196078)));
116
+ }
117
+ .root:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=activatedOnBackground]{
118
+ background:var(--sn-theme-color-material-stateLayer-activated-hovered-filled, var(--sn-brand-color-state-activated-hovered-background, var(--sn-brandRole-color-brandA-backgroundActivatedHovered, rgba(56, 159, 116, 0.3490196078))));
119
+ }
120
+ .root:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=versionOnColor]{
121
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-hovered-filled, rgba(0, 0, 0, 0.1019607843));
122
+ }
123
+ .root:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyVersionOnColor]{
124
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-hovered-filled, rgba(0, 0, 0, 0.1019607843));
125
+ }
126
+ .root:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=inversionOnColor]{
127
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-hovered-filled, rgba(255, 255, 255, 0.1490196078));
128
+ }
129
+ .root:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyInversionOnColor]{
130
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-hovered-filled, rgba(255, 255, 255, 0.1490196078));
131
+ }
132
+ .root:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyDarkOnAccent]{
133
+ background:var(--sn-theme-color-material-stateLayer-darkOnAccent-hovered-filled, rgba(0, 0, 0, 0.0588235294));
134
+ }
135
+ }
136
+ .root{
137
+ }
138
+ .root[data-loading] .stateLayer[data-state=borderOnBackground], .root:active:not([data-disabled], [data-loading]) .stateLayer[data-state=borderOnBackground], .root[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=borderOnBackground]{
139
+ border-color:var(--sn-theme-color-material-stateLayer-neutral-border-pressed-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-pressed-borderColor, rgba(159, 166, 198, 0.8)));
140
+ }
141
+ .root[data-loading] .stateLayer[data-state=emptyNeutralOnBackground], .root:active:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyNeutralOnBackground], .root[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyNeutralOnBackground]{
142
+ background:var(--sn-theme-color-material-stateLayer-neutral-onBackground-pressed-filled, var(--sn-brand-color-state-neutral-forLightMode-pressed-background, rgba(188, 195, 220, 0.3019607843)));
143
+ }
144
+ .root[data-loading] .stateLayer[data-state=activatedOnBackground], .root:active:not([data-disabled], [data-loading]) .stateLayer[data-state=activatedOnBackground], .root[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=activatedOnBackground]{
145
+ background:var(--sn-theme-color-material-stateLayer-activated-pressed-filled, var(--sn-brand-color-state-activated-pressed-background, var(--sn-brandRole-color-brandA-backgroundActivatedPressed, rgba(56, 159, 116, 0.4509803922))));
146
+ }
147
+ .root[data-loading] .stateLayer[data-state=versionOnColor], .root:active:not([data-disabled], [data-loading]) .stateLayer[data-state=versionOnColor], .root[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=versionOnColor]{
148
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-pressed-filled, rgba(0, 0, 0, 0.1490196078));
149
+ }
150
+ .root[data-loading] .stateLayer[data-state=emptyVersionOnColor], .root:active:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyVersionOnColor], .root[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyVersionOnColor]{
151
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-pressed-filled, rgba(0, 0, 0, 0.1490196078));
152
+ }
153
+ .root[data-loading] .stateLayer[data-state=inversionOnColor], .root:active:not([data-disabled], [data-loading]) .stateLayer[data-state=inversionOnColor], .root[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=inversionOnColor]{
154
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-pressed-filled, rgba(255, 255, 255, 0.0509803922));
155
+ }
156
+ .root[data-loading] .stateLayer[data-state=emptyInversionOnColor], .root:active:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyInversionOnColor], .root[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyInversionOnColor]{
157
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-pressed-filled, rgba(255, 255, 255, 0.0509803922));
158
+ }
159
+ .root[data-loading] .stateLayer[data-state=emptyDarkOnAccent], .root:active:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyDarkOnAccent], .root[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyDarkOnAccent]{
160
+ background:var(--sn-theme-color-material-stateLayer-darkOnAccent-pressed-filled, rgba(0, 0, 0, 0.1215686275));
161
+ }
162
+
163
+ .textWrapper{
164
+ display:inline-flex;
165
+ align-items:center;
166
+ justify-content:center;
167
+ min-width:0;
168
+ }
169
+ .paginationSlider{
170
+ display:flex;
171
+ flex-direction:row;
172
+ gap:0;
173
+ align-items:center;
174
+ width:-moz-fit-content;
175
+ width:fit-content;
176
+ margin:0;
177
+ padding:0;
178
+ list-style-type:none;
179
+ }
180
+ .paginationSlider[data-size=xs]{
181
+ border-radius:var(--sn-pagination-anatomy-size-xs-paginationSlider-borderRadius, var(--sn-primitive-dimension-full, 10000px));
182
+ }
183
+ .paginationSlider[data-size=s]{
184
+ border-radius:var(--sn-pagination-anatomy-size-s-paginationSlider-borderRadius, var(--sn-primitive-dimension-full, 10000px));
185
+ }
186
+ .paginationSlider{
187
+ background-color:var(--sn-theme-color-material-stateLayer-versionOnColor-default-filled, rgba(0, 0, 0, 0.0509803922));
188
+ }
189
+ .paginationSlider > li{
190
+ display:flex;
191
+ align-items:center;
192
+ justify-content:center;
193
+ }
194
+ .root{
195
+ cursor:pointer;
196
+ position:relative;
197
+ display:inline-flex;
198
+ align-items:center;
199
+ justify-content:center;
200
+ box-sizing:border-box;
201
+ margin:0;
202
+ padding:0;
203
+ border:none;
204
+ background:transparent;
205
+ outline:0;
206
+ outline-offset:0;
207
+ }
208
+ .root[data-size=xs]{
209
+ min-width:var(--sn-pagination-anatomy-size-xs-paginationSlider-itemPaginationSlider-minWidth, var(--sn-primitive-dimension-16, 16px));
210
+ height:var(--sn-pagination-anatomy-size-xs-paginationSlider-itemPaginationSlider-height, var(--sn-primitive-dimension-16, 16px));
211
+ padding:var(--sn-pagination-anatomy-size-xs-paginationSlider-itemPaginationSlider-padding, var(--sn-primitive-dimension-4, 4px));
212
+ width:var(--sn-pagination-anatomy-size-xs-paginationSlider-itemPaginationSlider-minWidth, var(--sn-primitive-dimension-16, 16px));
213
+ }
214
+ .root[data-size=xs]:not(.root[data-size=xs][data-activated]) .dot{
215
+ height:var(--sn-pagination-anatomy-size-xs-paginationSlider-itemPaginationSlider-slider-activatedFalse-default-height, var(--sn-primitive-dimension-6, 6px));
216
+ width:var(--sn-pagination-anatomy-size-xs-paginationSlider-itemPaginationSlider-slider-activatedFalse-default-width, var(--sn-primitive-dimension-6, 6px));
217
+ border-radius:var(--sn-pagination-anatomy-size-xs-paginationSlider-itemPaginationSlider-slider-activatedFalse-default-borderRadius, var(--sn-primitive-dimension-full, 10000px));
218
+ background-color:var(--sn-theme-color-neutral-background2Level, var(--sn-brand-color-neutral-99, var(--sn-primitive-color-gray-99, #ffffff)));
219
+ box-shadow:var(--sn-boxShadow-elevation-level1, var(--sn-theme-effect-shadow-level1-layer1-positionX, 0) var(--sn-theme-effect-shadow-level1-layer1-positionY, 0) var(--sn-theme-effect-shadow-level1-layer1-blur, 4px) var(--sn-theme-effect-shadow-level1-layer1-speed, 0) var(--sn-theme-effect-shadow-layer1Color, rgba(0, 0, 0, 0.0784313725)), var(--sn-theme-effect-shadow-level1-layer2-positionX, 0) var(--sn-theme-effect-shadow-level1-layer2-positionY, 2px) var(--sn-theme-effect-shadow-level1-layer2-blur, 4px) var(--sn-theme-effect-shadow-level1-layer2-speed, 1px) var(--sn-theme-effect-shadow-layer2Color, rgba(0, 0, 0, 0.0784313725)));
220
+ }
221
+ @media (hover: hover){
222
+ .root[data-size=xs]:not(.root[data-size=xs][data-activated]):hover .dot{
223
+ height:var(--sn-pagination-anatomy-size-xs-paginationSlider-itemPaginationSlider-slider-activatedFalse-hovered-height, var(--sn-primitive-dimension-10, 10px));
224
+ width:var(--sn-pagination-anatomy-size-xs-paginationSlider-itemPaginationSlider-slider-activatedFalse-hovered-width, var(--sn-primitive-dimension-10, 10px));
225
+ border-radius:var(--sn-pagination-anatomy-size-xs-paginationSlider-itemPaginationSlider-slider-activatedFalse-hovered-borderRadius, var(--sn-primitive-dimension-full, 10000px));
226
+ }
227
+ }
228
+ .root[data-size=xs]:not(.root[data-size=xs][data-activated]){
229
+ }
230
+ .root[data-size=xs]:not(.root[data-size=xs][data-activated]):active .dot{
231
+ height:var(--sn-pagination-anatomy-size-xs-paginationSlider-itemPaginationSlider-slider-activatedFalse-pressed-height, var(--sn-primitive-dimension-6, 6px));
232
+ width:var(--sn-pagination-anatomy-size-xs-paginationSlider-itemPaginationSlider-slider-activatedFalse-pressed-width, var(--sn-primitive-dimension-6, 6px));
233
+ border-radius:var(--sn-pagination-anatomy-size-xs-paginationSlider-itemPaginationSlider-slider-activatedFalse-pressed-borderRadius, var(--sn-primitive-dimension-full, 10000px));
234
+ }
235
+ .root[data-size=xs][data-activated] .dot{
236
+ height:var(--sn-pagination-anatomy-size-xs-paginationSlider-itemPaginationSlider-slider-activatedTrue-default-height, var(--sn-primitive-dimension-8, 8px));
237
+ width:var(--sn-pagination-anatomy-size-xs-paginationSlider-itemPaginationSlider-slider-activatedTrue-default-width, var(--sn-primitive-dimension-8, 8px));
238
+ border-radius:var(--sn-pagination-anatomy-size-xs-paginationSlider-itemPaginationSlider-slider-activatedTrue-default-borderRadius, var(--sn-primitive-dimension-full, 10000px));
239
+ background-color:var(--sn-theme-color-primary-accent, var(--sn-brand-color-primary-55, var(--sn-brandRole-color-brandA-55, var(--sn-primitive-color-brandA-55, #389f74))));
240
+ box-shadow:none;
241
+ }
242
+ .root[data-size=xs]:focus-visible .dot{
243
+ outline:var(--sn-theme-color-available-complementary, #000000) solid var(--sn-primitive-strokeWeight-strokeSemiBold, 2px);
244
+ outline-offset:var(--sn-primitive-strokeWeight-strokeSemiBold, 2px);
245
+ }
246
+ .root[data-size=s]{
247
+ height:var(--sn-pagination-anatomy-size-s-paginationSlider-itemPaginationSlider-height, var(--sn-primitive-dimension-24, 24px));
248
+ min-width:var(--sn-pagination-anatomy-size-s-paginationSlider-itemPaginationSlider-minWidth, var(--sn-primitive-dimension-24, 24px));
249
+ padding:var(--sn-pagination-anatomy-size-s-paginationSlider-itemPaginationSlider-padding, var(--sn-primitive-dimension-4, 4px));
250
+ width:var(--sn-pagination-anatomy-size-s-paginationSlider-itemPaginationSlider-minWidth, var(--sn-primitive-dimension-24, 24px));
251
+ }
252
+ .root[data-size=s]:not(.root[data-size=s][data-activated]) .dot{
253
+ width:var(--sn-pagination-anatomy-size-s-paginationSlider-itemPaginationSlider-slider-activatedFalse-default-width, var(--sn-primitive-dimension-8, 8px));
254
+ height:var(--sn-pagination-anatomy-size-s-paginationSlider-itemPaginationSlider-slider-activatedFalse-default-height, var(--sn-primitive-dimension-8, 8px));
255
+ border-radius:var(--sn-pagination-anatomy-size-s-paginationSlider-itemPaginationSlider-slider-activatedFalse-default-borderRadius, var(--sn-primitive-dimension-full, 10000px));
256
+ background-color:var(--sn-theme-color-neutral-background2Level, var(--sn-brand-color-neutral-99, var(--sn-primitive-color-gray-99, #ffffff)));
257
+ box-shadow:var(--sn-boxShadow-elevation-level1, var(--sn-theme-effect-shadow-level1-layer1-positionX, 0) var(--sn-theme-effect-shadow-level1-layer1-positionY, 0) var(--sn-theme-effect-shadow-level1-layer1-blur, 4px) var(--sn-theme-effect-shadow-level1-layer1-speed, 0) var(--sn-theme-effect-shadow-layer1Color, rgba(0, 0, 0, 0.0784313725)), var(--sn-theme-effect-shadow-level1-layer2-positionX, 0) var(--sn-theme-effect-shadow-level1-layer2-positionY, 2px) var(--sn-theme-effect-shadow-level1-layer2-blur, 4px) var(--sn-theme-effect-shadow-level1-layer2-speed, 1px) var(--sn-theme-effect-shadow-layer2Color, rgba(0, 0, 0, 0.0784313725)));
258
+ }
259
+ @media (hover: hover){
260
+ .root[data-size=s]:not(.root[data-size=s][data-activated]):hover .dot{
261
+ width:var(--sn-pagination-anatomy-size-s-paginationSlider-itemPaginationSlider-slider-activatedFalse-hovered-width, var(--sn-primitive-dimension-12, 12px));
262
+ height:var(--sn-pagination-anatomy-size-s-paginationSlider-itemPaginationSlider-slider-activatedFalse-hovered-height, var(--sn-primitive-dimension-12, 12px));
263
+ border-radius:var(--sn-pagination-anatomy-size-s-paginationSlider-itemPaginationSlider-slider-activatedFalse-hovered-borderRadius, var(--sn-primitive-dimension-full, 10000px));
264
+ }
265
+ }
266
+ .root[data-size=s]:not(.root[data-size=s][data-activated]){
267
+ }
268
+ .root[data-size=s]:not(.root[data-size=s][data-activated]):active .dot{
269
+ width:var(--sn-pagination-anatomy-size-s-paginationSlider-itemPaginationSlider-slider-activatedFalse-pressed-width, var(--sn-primitive-dimension-8, 8px));
270
+ height:var(--sn-pagination-anatomy-size-s-paginationSlider-itemPaginationSlider-slider-activatedFalse-pressed-height, var(--sn-primitive-dimension-8, 8px));
271
+ border-radius:var(--sn-pagination-anatomy-size-s-paginationSlider-itemPaginationSlider-slider-activatedFalse-pressed-borderRadius, var(--sn-primitive-dimension-full, 10000px));
272
+ }
273
+ .root[data-size=s][data-activated] .dot{
274
+ width:var(--sn-pagination-anatomy-size-s-paginationSlider-itemPaginationSlider-slider-activatedTrue-default-width, var(--sn-primitive-dimension-12, 12px));
275
+ height:var(--sn-pagination-anatomy-size-s-paginationSlider-itemPaginationSlider-slider-activatedTrue-default-height, var(--sn-primitive-dimension-12, 12px));
276
+ border-radius:var(--sn-pagination-anatomy-size-s-paginationSlider-itemPaginationSlider-slider-activatedTrue-default-borderRadius, var(--sn-primitive-dimension-full, 10000px));
277
+ background-color:var(--sn-theme-color-primary-accent, var(--sn-brand-color-primary-55, var(--sn-brandRole-color-brandA-55, var(--sn-primitive-color-brandA-55, #389f74))));
278
+ box-shadow:none;
279
+ }
280
+ .root[data-size=s]:focus-visible .dot{
281
+ outline:var(--sn-theme-color-available-complementary, #000000) solid var(--sn-primitive-strokeWeight-strokeSemiBold, 2px);
282
+ outline-offset:var(--sn-primitive-strokeWeight-strokeSemiBold, 2px);
283
+ }
284
+
285
+ .dot{
286
+ position:relative;
287
+ flex-shrink:0;
288
+ box-sizing:border-box;
289
+ margin:0;
290
+ padding:0;
291
+ border:none;
292
+ background:transparent;
293
+ outline:0;
294
+ outline-offset:0;
295
+ }
@@ -0,0 +1,5 @@
1
+ import { ValueOf } from '@cloud-ru/ds-utils';
2
+ import { PAGINATION_SIZE, PAGINATION_SLIDER_SIZE, VARIANT } from './constants.js';
3
+ export type PaginationSize = ValueOf<typeof PAGINATION_SIZE>;
4
+ export type PaginationSliderSize = ValueOf<typeof PAGINATION_SLIDER_SIZE>;
5
+ export type Variant = ValueOf<typeof VARIANT>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,20 @@
1
+ export declare enum PaginationEntryKind {
2
+ Page = "page",
3
+ Break = "break"
4
+ }
5
+ export type PaginationEntry = {
6
+ kind: PaginationEntryKind.Page;
7
+ page: number;
8
+ } | {
9
+ kind: PaginationEntryKind.Break;
10
+ start: number;
11
+ end: number;
12
+ };
13
+ type PaginationOptions = {
14
+ firstPage: number;
15
+ lastPage: number;
16
+ currentPage: number;
17
+ maxLength: number;
18
+ };
19
+ export declare function getPaginationEntries(options: PaginationOptions): PaginationEntry[];
20
+ export {};
@@ -0,0 +1,81 @@
1
+ import { getRange } from './getRange.js';
2
+ export var PaginationEntryKind;
3
+ (function (PaginationEntryKind) {
4
+ PaginationEntryKind["Page"] = "page";
5
+ PaginationEntryKind["Break"] = "break";
6
+ })(PaginationEntryKind || (PaginationEntryKind = {}));
7
+ function createPageEntry(page) {
8
+ return { kind: PaginationEntryKind.Page, page };
9
+ }
10
+ function createBreakEntry(start, end) {
11
+ return { kind: PaginationEntryKind.Break, start, end };
12
+ }
13
+ var GroupPosition;
14
+ (function (GroupPosition) {
15
+ GroupPosition["Left"] = "left";
16
+ GroupPosition["Middle"] = "middle";
17
+ GroupPosition["Right"] = "right";
18
+ })(GroupPosition || (GroupPosition = {}));
19
+ function getPaginationState(options) {
20
+ const { firstPage, lastPage, currentPage, maxLength } = options;
21
+ const currentPageSiblingsCount = maxLength - 5; /* First page, break, current page, break and last page. */
22
+ const displayedPagesCount = maxLength - 2; /* First or last page and break. */
23
+ function getGroupPosition() {
24
+ if (lastPage <= maxLength) {
25
+ return null;
26
+ }
27
+ if (currentPage < displayedPagesCount) {
28
+ return GroupPosition.Left;
29
+ }
30
+ if (lastPage + firstPage - currentPage < displayedPagesCount) {
31
+ return GroupPosition.Right;
32
+ }
33
+ return GroupPosition.Middle;
34
+ }
35
+ return {
36
+ firstPage,
37
+ lastPage,
38
+ currentPage,
39
+ currentPageSiblingsCount,
40
+ displayedPagesCount,
41
+ groupPosition: getGroupPosition(),
42
+ };
43
+ }
44
+ function getEntriesGroupedOnTheLeft(state) {
45
+ const { firstPage, lastPage, displayedPagesCount } = state;
46
+ const groupFirstPage = firstPage;
47
+ const groupLastPage = displayedPagesCount;
48
+ const group = getRange(groupFirstPage, groupLastPage).map(createPageEntry);
49
+ return [...group, createBreakEntry(groupLastPage + 1, lastPage - 1), createPageEntry(lastPage)];
50
+ }
51
+ function getEntriesGroupedInTheMiddle(state) {
52
+ const { firstPage, lastPage, currentPage, currentPageSiblingsCount } = state;
53
+ const groupFirstPage = Math.floor(currentPage - currentPageSiblingsCount / 2);
54
+ const groupLastPage = Math.floor(currentPage + currentPageSiblingsCount / 2);
55
+ const group = getRange(groupFirstPage, groupLastPage).map(createPageEntry);
56
+ return [
57
+ createPageEntry(firstPage),
58
+ createBreakEntry(firstPage + 1, groupFirstPage - 1),
59
+ ...group,
60
+ createBreakEntry(groupLastPage + 1, lastPage - 1),
61
+ createPageEntry(lastPage),
62
+ ];
63
+ }
64
+ function getEntriesGroupedOnTheRight(state) {
65
+ const { firstPage, lastPage, displayedPagesCount } = state;
66
+ const groupFirstPage = lastPage + firstPage - displayedPagesCount;
67
+ const groupLastPage = lastPage;
68
+ const group = getRange(groupFirstPage, groupLastPage).map(createPageEntry);
69
+ return [createPageEntry(firstPage), createBreakEntry(firstPage + 1, groupFirstPage - 1), ...group];
70
+ }
71
+ const getGroupedEntriesByGroupPosition = {
72
+ [GroupPosition.Left]: getEntriesGroupedOnTheLeft,
73
+ [GroupPosition.Middle]: getEntriesGroupedInTheMiddle,
74
+ [GroupPosition.Right]: getEntriesGroupedOnTheRight,
75
+ };
76
+ export function getPaginationEntries(options) {
77
+ const state = getPaginationState(options);
78
+ return state.groupPosition === null
79
+ ? getRange(state.firstPage, state.lastPage).map(createPageEntry)
80
+ : getGroupedEntriesByGroupPosition[state.groupPosition](state);
81
+ }
@@ -0,0 +1 @@
1
+ export declare function getRange(start: number, end: number): number[];
@@ -0,0 +1,3 @@
1
+ export function getRange(start, end) {
2
+ return Array.from({ length: end - start + 1 }, (_, value) => value + start);
3
+ }
@@ -0,0 +1,2 @@
1
+ export * from './getRange.js';
2
+ export * from './getPaginationEntries.js';
@@ -0,0 +1,2 @@
1
+ export * from './getRange.js';
2
+ export * from './getPaginationEntries.js';