@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';
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,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PaginationEntryKind = void 0;
4
+ exports.getPaginationEntries = getPaginationEntries;
5
+ const getRange_1 = require("./getRange");
6
+ var PaginationEntryKind;
7
+ (function (PaginationEntryKind) {
8
+ PaginationEntryKind["Page"] = "page";
9
+ PaginationEntryKind["Break"] = "break";
10
+ })(PaginationEntryKind || (exports.PaginationEntryKind = PaginationEntryKind = {}));
11
+ function createPageEntry(page) {
12
+ return { kind: PaginationEntryKind.Page, page };
13
+ }
14
+ function createBreakEntry(start, end) {
15
+ return { kind: PaginationEntryKind.Break, start, end };
16
+ }
17
+ var GroupPosition;
18
+ (function (GroupPosition) {
19
+ GroupPosition["Left"] = "left";
20
+ GroupPosition["Middle"] = "middle";
21
+ GroupPosition["Right"] = "right";
22
+ })(GroupPosition || (GroupPosition = {}));
23
+ function getPaginationState(options) {
24
+ const { firstPage, lastPage, currentPage, maxLength } = options;
25
+ const currentPageSiblingsCount = maxLength - 5; /* First page, break, current page, break and last page. */
26
+ const displayedPagesCount = maxLength - 2; /* First or last page and break. */
27
+ function getGroupPosition() {
28
+ if (lastPage <= maxLength) {
29
+ return null;
30
+ }
31
+ if (currentPage < displayedPagesCount) {
32
+ return GroupPosition.Left;
33
+ }
34
+ if (lastPage + firstPage - currentPage < displayedPagesCount) {
35
+ return GroupPosition.Right;
36
+ }
37
+ return GroupPosition.Middle;
38
+ }
39
+ return {
40
+ firstPage,
41
+ lastPage,
42
+ currentPage,
43
+ currentPageSiblingsCount,
44
+ displayedPagesCount,
45
+ groupPosition: getGroupPosition(),
46
+ };
47
+ }
48
+ function getEntriesGroupedOnTheLeft(state) {
49
+ const { firstPage, lastPage, displayedPagesCount } = state;
50
+ const groupFirstPage = firstPage;
51
+ const groupLastPage = displayedPagesCount;
52
+ const group = (0, getRange_1.getRange)(groupFirstPage, groupLastPage).map(createPageEntry);
53
+ return [...group, createBreakEntry(groupLastPage + 1, lastPage - 1), createPageEntry(lastPage)];
54
+ }
55
+ function getEntriesGroupedInTheMiddle(state) {
56
+ const { firstPage, lastPage, currentPage, currentPageSiblingsCount } = state;
57
+ const groupFirstPage = Math.floor(currentPage - currentPageSiblingsCount / 2);
58
+ const groupLastPage = Math.floor(currentPage + currentPageSiblingsCount / 2);
59
+ const group = (0, getRange_1.getRange)(groupFirstPage, groupLastPage).map(createPageEntry);
60
+ return [
61
+ createPageEntry(firstPage),
62
+ createBreakEntry(firstPage + 1, groupFirstPage - 1),
63
+ ...group,
64
+ createBreakEntry(groupLastPage + 1, lastPage - 1),
65
+ createPageEntry(lastPage),
66
+ ];
67
+ }
68
+ function getEntriesGroupedOnTheRight(state) {
69
+ const { firstPage, lastPage, displayedPagesCount } = state;
70
+ const groupFirstPage = lastPage + firstPage - displayedPagesCount;
71
+ const groupLastPage = lastPage;
72
+ const group = (0, getRange_1.getRange)(groupFirstPage, groupLastPage).map(createPageEntry);
73
+ return [createPageEntry(firstPage), createBreakEntry(firstPage + 1, groupFirstPage - 1), ...group];
74
+ }
75
+ const getGroupedEntriesByGroupPosition = {
76
+ [GroupPosition.Left]: getEntriesGroupedOnTheLeft,
77
+ [GroupPosition.Middle]: getEntriesGroupedInTheMiddle,
78
+ [GroupPosition.Right]: getEntriesGroupedOnTheRight,
79
+ };
80
+ function getPaginationEntries(options) {
81
+ const state = getPaginationState(options);
82
+ return state.groupPosition === null
83
+ ? (0, getRange_1.getRange)(state.firstPage, state.lastPage).map(createPageEntry)
84
+ : getGroupedEntriesByGroupPosition[state.groupPosition](state);
85
+ }
@@ -0,0 +1 @@
1
+ export declare function getRange(start: number, end: number): number[];
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getRange = getRange;
4
+ function getRange(start, end) {
5
+ return Array.from({ length: end - start + 1 }, (_, value) => value + start);
6
+ }
@@ -0,0 +1,2 @@
1
+ export * from './getRange';
2
+ export * from './getPaginationEntries';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./getRange"), exports);
18
+ __exportStar(require("./getPaginationEntries"), exports);
@@ -0,0 +1,24 @@
1
+ import { WithSupportProps } from '@cloud-ru/ds-utils';
2
+ import { MouseEvent } from 'react';
3
+ import { PaginationSize, Variant } from '../../types.js';
4
+ export type PaginationProps = WithSupportProps<{
5
+ /** Общее количество страниц */
6
+ total: number;
7
+ /** Текущая страница */
8
+ page: number;
9
+ /** Варианты тега кнопок: <a/> или <button/> */
10
+ variant?: Variant;
11
+ /** Максимальное количество страниц/элементов, помещающихся до транкейта */
12
+ maxLength?: number;
13
+ /** Колбэк смены значения */
14
+ onChange(page: number, event?: MouseEvent<HTMLButtonElement | HTMLAnchorElement>): void;
15
+ /** Колбэк форматирования ссылки */
16
+ hrefFormatter?(page: number): string;
17
+ /** CSS класснейм */
18
+ className?: string;
19
+ /** Размер
20
+ * @default 'm'
21
+ */
22
+ size?: PaginationSize;
23
+ }>;
24
+ export declare function Pagination({ total, page, onChange, hrefFormatter, className, variant, size, maxLength, ...rest }: PaginationProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,58 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button } from '@cloud-ru/ds-button';
3
+ import { ChevronLeftSVG, ChevronRightSVG } from '@cloud-ru/ds-icons/interface/system';
4
+ import { extractSupportProps } from '@cloud-ru/ds-utils';
5
+ import { useEffect, useRef, useState } from 'react';
6
+ import { getPageMoreTestId, getPageNumberTestId, PAGINATION_SIZE, TEST_IDS, VARIANT } from '../../constants.js';
7
+ import { PaginationContext } from '../../contexts.js';
8
+ import { getPaginationEntries, PaginationEntryKind } from '../../utils/index.js';
9
+ import { PaginationNumberItem } from '../PaginationNumberItem/index.js';
10
+ import styles from './styles.module.css';
11
+ const FIRST_PAGE = 1;
12
+ const ARROW_STEP = 1;
13
+ const MAX_LENGTH = 7;
14
+ export function Pagination({ total, page, onChange, hrefFormatter, className, variant = VARIANT.Button, size = PAGINATION_SIZE.M, maxLength = MAX_LENGTH, ...rest }) {
15
+ const entries = getPaginationEntries({
16
+ firstPage: FIRST_PAGE,
17
+ lastPage: total,
18
+ currentPage: page,
19
+ maxLength,
20
+ });
21
+ const buttonRefs = useRef([]);
22
+ const [buttonToFocus, setButtonToFocus] = useState(-1);
23
+ useEffect(() => {
24
+ buttonRefs.current[buttonToFocus]?.focus();
25
+ }, [buttonToFocus]);
26
+ const handlePreviousPageButtonClick = () => {
27
+ const newPage = page - ARROW_STEP;
28
+ onChange(newPage);
29
+ if (newPage === FIRST_PAGE) {
30
+ setButtonToFocus(FIRST_PAGE);
31
+ }
32
+ };
33
+ const handleNextPageButtonClick = () => {
34
+ const newPage = page + ARROW_STEP;
35
+ onChange(newPage);
36
+ if (newPage === total) {
37
+ setButtonToFocus(total);
38
+ }
39
+ };
40
+ const handleMoreButtonClick = (start, end) => {
41
+ const targetPage = Math.floor((start + end) / 2);
42
+ onChange(targetPage);
43
+ setButtonToFocus(targetPage);
44
+ };
45
+ const renderEntry = (entry) => {
46
+ if (entry.kind === PaginationEntryKind.Page) {
47
+ return (_jsx("li", { children: _jsx(PaginationNumberItem, { label: entry.page, activated: entry.page === page, onClick: e => onChange(entry.page, e), setButtonRef: (el) => {
48
+ buttonRefs.current[entry.page] = el;
49
+ }, href: hrefFormatter?.(entry.page), "aria-current": entry.page === page ? 'page' : undefined, "data-test-id": getPageNumberTestId(entry.page) }) }, entry.page));
50
+ }
51
+ if (entry.kind === PaginationEntryKind.Break) {
52
+ return (_jsx("li", { children: _jsx(PaginationNumberItem, { label: '...', onClick: () => handleMoreButtonClick(entry.start, entry.end), "data-test-id": getPageMoreTestId(entry.start, entry.end) }) }, `${entry.start}-${entry.end}`));
53
+ }
54
+ return null;
55
+ };
56
+ const buttonSize = size === PAGINATION_SIZE.M ? 'm' : 's';
57
+ return (_jsx(PaginationContext.Provider, { value: { size, variant }, children: _jsx("nav", { className: className, "aria-label": 'Pagination', "data-size": size, "data-variant": variant, ...extractSupportProps(rest), children: _jsxs("ul", { className: styles.pagination, "data-size": size, children: [_jsx("li", { children: _jsx(Button, { view: 'simple', appearance: 'neutral', icon: _jsx(ChevronLeftSVG, {}), onClick: handlePreviousPageButtonClick, disabled: page === FIRST_PAGE, size: buttonSize, "aria-label": 'Previous page', "data-test-id": TEST_IDS.prev }) }), entries.map(renderEntry), _jsx("li", { children: _jsx(Button, { view: 'simple', appearance: 'neutral', icon: _jsx(ChevronRightSVG, {}), onClick: handleNextPageButtonClick, disabled: page === total, size: buttonSize, "aria-label": 'Next page', "data-test-id": TEST_IDS.next }) })] }) }) }));
58
+ }
@@ -0,0 +1 @@
1
+ export * from './Pagination.js';
@@ -0,0 +1 @@
1
+ export * from './Pagination.js';
@@ -0,0 +1,19 @@
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
+ }
@@ -0,0 +1,10 @@
1
+ import { WithSupportProps } from '@cloud-ru/ds-utils';
2
+ import { MouseEvent, Ref } from 'react';
3
+ export type PaginationNumberItemProps = WithSupportProps<{
4
+ label: number | string;
5
+ activated?: boolean;
6
+ onClick(event: MouseEvent<HTMLButtonElement | HTMLAnchorElement>): void;
7
+ href?: string;
8
+ setButtonRef?: Ref<HTMLButtonElement | HTMLAnchorElement>;
9
+ }>;
10
+ export declare function PaginationNumberItem({ label, activated, onClick, href, setButtonRef, ...rest }: PaginationNumberItemProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { extractSupportProps } from '@cloud-ru/ds-utils';
3
+ import { usePaginationContext } from '../../contexts.js';
4
+ import styles from './styles.module.css';
5
+ export function PaginationNumberItem({ label, activated, onClick, href, setButtonRef, ...rest }) {
6
+ const { size, variant } = usePaginationContext();
7
+ const stateLayer = activated ? 'activatedOnBackground' : 'emptyNeutralOnBackground';
8
+ if (variant === 'link') {
9
+ return (_jsxs("a", { role: 'button', className: styles.root, onClick: onClick, ref: setButtonRef, "data-size": size, ...extractSupportProps(rest), "data-activated": activated || undefined, href: href, children: [_jsx("span", { className: styles.stateLayer, "aria-hidden": true, "data-state": stateLayer }), _jsx("span", { className: styles.textWrapper, children: label })] }));
10
+ }
11
+ return (_jsxs("button", { type: 'button', className: styles.root, onClick: onClick, ref: setButtonRef, "data-size": size, ...extractSupportProps(rest), "data-activated": activated || undefined, children: [_jsx("span", { className: styles.stateLayer, "aria-hidden": true, "data-state": stateLayer }), _jsx("span", { className: styles.textWrapper, children: label })] }));
12
+ }
@@ -0,0 +1 @@
1
+ export * from './PaginationNumberItem.js';
@@ -0,0 +1 @@
1
+ export * from './PaginationNumberItem.js';