@dnanpm/ui-components 0.8.0 → 0.10.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 (249) hide show
  1. package/README.md +13 -0
  2. package/dist/components/Accordion/Accordion.css +9 -2
  3. package/dist/components/AccordionItem/AccordionItem.cjs +4 -4
  4. package/dist/components/AccordionItem/AccordionItem.cjs.map +1 -1
  5. package/dist/components/AccordionItem/AccordionItem.css +8 -2
  6. package/dist/components/AccordionItem/AccordionItem.d.ts.map +1 -1
  7. package/dist/components/AccordionItem/AccordionItem.js +2 -2
  8. package/dist/components/AccordionItem/AccordionItem.js.map +1 -1
  9. package/dist/components/Avatar/Avatar.cjs +83 -0
  10. package/dist/components/Avatar/Avatar.cjs.map +1 -0
  11. package/dist/components/Avatar/Avatar.css +188 -0
  12. package/dist/components/Avatar/Avatar.d.ts +3 -0
  13. package/dist/components/Avatar/Avatar.d.ts.map +1 -0
  14. package/dist/components/Avatar/Avatar.js +83 -0
  15. package/dist/components/Avatar/Avatar.js.map +1 -0
  16. package/dist/components/Avatar/Avatar.module.css.cjs +40 -0
  17. package/dist/components/Avatar/Avatar.module.css.cjs.map +1 -0
  18. package/dist/components/Avatar/Avatar.module.css.js +40 -0
  19. package/dist/components/Avatar/Avatar.module.css.js.map +1 -0
  20. package/dist/components/Avatar/Avatar.types.d.ts +66 -0
  21. package/dist/components/Avatar/Avatar.types.d.ts.map +1 -0
  22. package/dist/components/Avatar/Avatar.utils.cjs +17 -0
  23. package/dist/components/Avatar/Avatar.utils.cjs.map +1 -0
  24. package/dist/components/Avatar/Avatar.utils.d.ts +6 -0
  25. package/dist/components/Avatar/Avatar.utils.d.ts.map +1 -0
  26. package/dist/components/Avatar/Avatar.utils.js +17 -0
  27. package/dist/components/Avatar/Avatar.utils.js.map +1 -0
  28. package/dist/components/Avatar/index.d.ts +3 -0
  29. package/dist/components/Avatar/index.d.ts.map +1 -0
  30. package/dist/components/Breadcrumb/Breadcrumb.cjs +9 -12
  31. package/dist/components/Breadcrumb/Breadcrumb.cjs.map +1 -1
  32. package/dist/components/Breadcrumb/Breadcrumb.css +20 -17
  33. package/dist/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  34. package/dist/components/Breadcrumb/Breadcrumb.js +2 -5
  35. package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -1
  36. package/dist/components/Breadcrumb/Breadcrumb.module.css.cjs +5 -8
  37. package/dist/components/Breadcrumb/Breadcrumb.module.css.cjs.map +1 -1
  38. package/dist/components/Breadcrumb/Breadcrumb.module.css.js +5 -8
  39. package/dist/components/Breadcrumb/Breadcrumb.module.css.js.map +1 -1
  40. package/dist/components/Button/Button.cjs +29 -3
  41. package/dist/components/Button/Button.cjs.map +1 -1
  42. package/dist/components/Button/Button.css +76 -30
  43. package/dist/components/Button/Button.d.ts +1 -1
  44. package/dist/components/Button/Button.d.ts.map +1 -1
  45. package/dist/components/Button/Button.js +28 -2
  46. package/dist/components/Button/Button.js.map +1 -1
  47. package/dist/components/Button/Button.module.css.cjs +19 -11
  48. package/dist/components/Button/Button.module.css.cjs.map +1 -1
  49. package/dist/components/Button/Button.module.css.js +19 -11
  50. package/dist/components/Button/Button.module.css.js.map +1 -1
  51. package/dist/components/Button/Button.types.d.ts +20 -3
  52. package/dist/components/Button/Button.types.d.ts.map +1 -1
  53. package/dist/components/Button/index.d.ts +1 -1
  54. package/dist/components/Button/index.d.ts.map +1 -1
  55. package/dist/components/ButtonCard/ButtonCard.cjs +19 -14
  56. package/dist/components/ButtonCard/ButtonCard.cjs.map +1 -1
  57. package/dist/components/ButtonCard/ButtonCard.css +62 -20
  58. package/dist/components/ButtonCard/ButtonCard.d.ts +2 -1
  59. package/dist/components/ButtonCard/ButtonCard.d.ts.map +1 -1
  60. package/dist/components/ButtonCard/ButtonCard.js +17 -12
  61. package/dist/components/ButtonCard/ButtonCard.js.map +1 -1
  62. package/dist/components/ButtonCard/ButtonCard.module.css.cjs +14 -12
  63. package/dist/components/ButtonCard/ButtonCard.module.css.cjs.map +1 -1
  64. package/dist/components/ButtonCard/ButtonCard.module.css.js +14 -12
  65. package/dist/components/ButtonCard/ButtonCard.module.css.js.map +1 -1
  66. package/dist/components/ButtonCard/ButtonCard.types.d.ts +3 -2
  67. package/dist/components/ButtonCard/ButtonCard.types.d.ts.map +1 -1
  68. package/dist/components/Checkbox/Checkbox.cjs +105 -0
  69. package/dist/components/Checkbox/Checkbox.cjs.map +1 -0
  70. package/dist/components/Checkbox/Checkbox.css +323 -0
  71. package/dist/components/Checkbox/Checkbox.d.ts +3 -0
  72. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
  73. package/dist/components/Checkbox/Checkbox.js +105 -0
  74. package/dist/components/Checkbox/Checkbox.js.map +1 -0
  75. package/dist/components/Checkbox/Checkbox.module.css.cjs +35 -0
  76. package/dist/components/Checkbox/Checkbox.module.css.cjs.map +1 -0
  77. package/dist/components/Checkbox/Checkbox.module.css.js +35 -0
  78. package/dist/components/Checkbox/Checkbox.module.css.js.map +1 -0
  79. package/dist/components/Checkbox/Checkbox.types.d.ts +47 -0
  80. package/dist/components/Checkbox/Checkbox.types.d.ts.map +1 -0
  81. package/dist/components/Checkbox/index.d.ts +3 -0
  82. package/dist/components/Checkbox/index.d.ts.map +1 -0
  83. package/dist/components/ContentCard/ContentCard.cjs +97 -0
  84. package/dist/components/ContentCard/ContentCard.cjs.map +1 -0
  85. package/dist/components/ContentCard/ContentCard.css +254 -0
  86. package/dist/components/ContentCard/ContentCard.d.ts +3 -0
  87. package/dist/components/ContentCard/ContentCard.d.ts.map +1 -0
  88. package/dist/components/ContentCard/ContentCard.js +97 -0
  89. package/dist/components/ContentCard/ContentCard.js.map +1 -0
  90. package/dist/components/ContentCard/ContentCard.module.css.cjs +24 -0
  91. package/dist/components/ContentCard/ContentCard.module.css.cjs.map +1 -0
  92. package/dist/components/ContentCard/ContentCard.module.css.js +25 -0
  93. package/dist/components/ContentCard/ContentCard.module.css.js.map +1 -0
  94. package/dist/components/ContentCard/ContentCard.types.d.ts +100 -0
  95. package/dist/components/ContentCard/ContentCard.types.d.ts.map +1 -0
  96. package/dist/components/ContentCard/index.d.ts +3 -0
  97. package/dist/components/ContentCard/index.d.ts.map +1 -0
  98. package/dist/components/Drawer/Drawer.cjs +15 -7
  99. package/dist/components/Drawer/Drawer.cjs.map +1 -1
  100. package/dist/components/Drawer/Drawer.css +47 -45
  101. package/dist/components/Drawer/Drawer.d.ts.map +1 -1
  102. package/dist/components/Drawer/Drawer.js +12 -4
  103. package/dist/components/Drawer/Drawer.js.map +1 -1
  104. package/dist/components/Drawer/Drawer.module.css.cjs +16 -16
  105. package/dist/components/Drawer/Drawer.module.css.js +16 -16
  106. package/dist/components/Footer/Footer.cjs +8 -9
  107. package/dist/components/Footer/Footer.cjs.map +1 -1
  108. package/dist/components/Footer/Footer.css +91 -84
  109. package/dist/components/Footer/Footer.d.ts.map +1 -1
  110. package/dist/components/Footer/Footer.js +1 -2
  111. package/dist/components/Footer/Footer.js.map +1 -1
  112. package/dist/components/Footer/Footer.module.css.cjs +39 -39
  113. package/dist/components/Footer/Footer.module.css.js +39 -39
  114. package/dist/components/FunctionButton/FunctionButton.cjs +2 -2
  115. package/dist/components/FunctionButton/FunctionButton.cjs.map +1 -1
  116. package/dist/components/FunctionButton/FunctionButton.css +5 -2
  117. package/dist/components/FunctionButton/FunctionButton.js +1 -1
  118. package/dist/components/FunctionButton/FunctionButton.js.map +1 -1
  119. package/dist/components/Hero/Hero.cjs +30 -29
  120. package/dist/components/Hero/Hero.cjs.map +1 -1
  121. package/dist/components/Hero/Hero.css +86 -74
  122. package/dist/components/Hero/Hero.d.ts +1 -1
  123. package/dist/components/Hero/Hero.d.ts.map +1 -1
  124. package/dist/components/Hero/Hero.js +30 -29
  125. package/dist/components/Hero/Hero.js.map +1 -1
  126. package/dist/components/Hero/Hero.module.css.cjs +20 -17
  127. package/dist/components/Hero/Hero.module.css.cjs.map +1 -1
  128. package/dist/components/Hero/Hero.module.css.js +20 -17
  129. package/dist/components/Hero/Hero.module.css.js.map +1 -1
  130. package/dist/components/Hero/Hero.types.d.ts +2 -6
  131. package/dist/components/Hero/Hero.types.d.ts.map +1 -1
  132. package/dist/components/IconButton/IconButton.cjs +3 -4
  133. package/dist/components/IconButton/IconButton.cjs.map +1 -1
  134. package/dist/components/IconButton/IconButton.css +5 -2
  135. package/dist/components/IconButton/IconButton.d.ts.map +1 -1
  136. package/dist/components/IconButton/IconButton.js +1 -2
  137. package/dist/components/IconButton/IconButton.js.map +1 -1
  138. package/dist/components/Label/Label.css +5 -2
  139. package/dist/components/MainNavigation/MainNavigation.cjs +556 -191
  140. package/dist/components/MainNavigation/MainNavigation.cjs.map +1 -1
  141. package/dist/components/MainNavigation/MainNavigation.css +297 -170
  142. package/dist/components/MainNavigation/MainNavigation.d.ts +1 -1
  143. package/dist/components/MainNavigation/MainNavigation.d.ts.map +1 -1
  144. package/dist/components/MainNavigation/MainNavigation.js +526 -161
  145. package/dist/components/MainNavigation/MainNavigation.js.map +1 -1
  146. package/dist/components/MainNavigation/MainNavigation.module.css.cjs +80 -68
  147. package/dist/components/MainNavigation/MainNavigation.module.css.cjs.map +1 -1
  148. package/dist/components/MainNavigation/MainNavigation.module.css.js +80 -68
  149. package/dist/components/MainNavigation/MainNavigation.module.css.js.map +1 -1
  150. package/dist/components/MainNavigation/MainNavigation.types.d.ts +55 -21
  151. package/dist/components/MainNavigation/MainNavigation.types.d.ts.map +1 -1
  152. package/dist/components/MainNavigation/MainNavigation.utils.cjs +28 -4
  153. package/dist/components/MainNavigation/MainNavigation.utils.cjs.map +1 -1
  154. package/dist/components/MainNavigation/MainNavigation.utils.d.ts +11 -1
  155. package/dist/components/MainNavigation/MainNavigation.utils.d.ts.map +1 -1
  156. package/dist/components/MainNavigation/MainNavigation.utils.js +28 -4
  157. package/dist/components/MainNavigation/MainNavigation.utils.js.map +1 -1
  158. package/dist/components/MainNavigation/index.d.ts +1 -1
  159. package/dist/components/MainNavigation/index.d.ts.map +1 -1
  160. package/dist/components/Modal/Modal.cjs +14 -6
  161. package/dist/components/Modal/Modal.cjs.map +1 -1
  162. package/dist/components/Modal/Modal.css +43 -40
  163. package/dist/components/Modal/Modal.d.ts.map +1 -1
  164. package/dist/components/Modal/Modal.js +12 -4
  165. package/dist/components/Modal/Modal.js.map +1 -1
  166. package/dist/components/Modal/Modal.module.css.cjs +18 -18
  167. package/dist/components/Modal/Modal.module.css.js +18 -18
  168. package/dist/components/Notification/Notification.cjs +3 -2
  169. package/dist/components/Notification/Notification.cjs.map +1 -1
  170. package/dist/components/Notification/Notification.css +20 -12
  171. package/dist/components/Notification/Notification.d.ts.map +1 -1
  172. package/dist/components/Notification/Notification.js +2 -1
  173. package/dist/components/Notification/Notification.js.map +1 -1
  174. package/dist/components/Notification/Notification.module.css.cjs +9 -9
  175. package/dist/components/Notification/Notification.module.css.js +9 -9
  176. package/dist/components/Pagination/Pagination.cjs +142 -0
  177. package/dist/components/Pagination/Pagination.cjs.map +1 -0
  178. package/dist/components/Pagination/Pagination.css +256 -0
  179. package/dist/components/Pagination/Pagination.d.ts +3 -0
  180. package/dist/components/Pagination/Pagination.d.ts.map +1 -0
  181. package/dist/components/Pagination/Pagination.js +142 -0
  182. package/dist/components/Pagination/Pagination.js.map +1 -0
  183. package/dist/components/Pagination/Pagination.module.css.cjs +34 -0
  184. package/dist/components/Pagination/Pagination.module.css.cjs.map +1 -0
  185. package/dist/components/Pagination/Pagination.module.css.js +34 -0
  186. package/dist/components/Pagination/Pagination.module.css.js.map +1 -0
  187. package/dist/components/Pagination/Pagination.types.d.ts +20 -0
  188. package/dist/components/Pagination/Pagination.types.d.ts.map +1 -0
  189. package/dist/components/Pagination/Pagination.utils.cjs +76 -0
  190. package/dist/components/Pagination/Pagination.utils.cjs.map +1 -0
  191. package/dist/components/Pagination/Pagination.utils.d.ts +21 -0
  192. package/dist/components/Pagination/Pagination.utils.d.ts.map +1 -0
  193. package/dist/components/Pagination/Pagination.utils.js +76 -0
  194. package/dist/components/Pagination/Pagination.utils.js.map +1 -0
  195. package/dist/components/Pagination/index.d.ts +3 -0
  196. package/dist/components/Pagination/index.d.ts.map +1 -0
  197. package/dist/components/Pictograph/Pictograph.css +9 -2
  198. package/dist/components/Pictograph/PictographItem.css +9 -2
  199. package/dist/components/Quote/Quote.css +5 -2
  200. package/dist/components/Spinner/Spinner.css +9 -2
  201. package/dist/design-tokens/dist/tokens.cjs +5 -0
  202. package/dist/design-tokens/dist/tokens.cjs.map +1 -0
  203. package/dist/design-tokens/dist/tokens.js +5 -0
  204. package/dist/design-tokens/dist/tokens.js.map +1 -0
  205. package/dist/index.cjs +8 -0
  206. package/dist/index.cjs.map +1 -1
  207. package/dist/index.d.ts +10 -2
  208. package/dist/index.d.ts.map +1 -1
  209. package/dist/index.js +8 -0
  210. package/dist/index.js.map +1 -1
  211. package/dist/styles/utilities.css +6 -0
  212. package/dist/styles/utils/elevation.css +34 -26
  213. package/dist/styles/utils/focus.css +63 -65
  214. package/dist/styles/utils/index.cjs +33 -0
  215. package/dist/styles/utils/index.cjs.map +1 -0
  216. package/dist/styles/utils/index.d.ts +20 -0
  217. package/dist/styles/utils/index.d.ts.map +1 -0
  218. package/dist/styles/utils/index.js +33 -0
  219. package/dist/styles/utils/index.js.map +1 -0
  220. package/dist/styles/utils/overlay.css +35 -28
  221. package/dist/styles/utils/text-decoration.css +19 -12
  222. package/dist/styles.css +46 -12
  223. package/dist/utils/index.d.ts +1 -0
  224. package/dist/utils/index.d.ts.map +1 -1
  225. package/dist/utils/isRenderable/index.d.ts +2 -0
  226. package/dist/utils/isRenderable/index.d.ts.map +1 -0
  227. package/dist/utils/isRenderable/isRenderable.cjs +5 -0
  228. package/dist/utils/isRenderable/isRenderable.cjs.map +1 -0
  229. package/dist/utils/isRenderable/isRenderable.d.ts +4 -0
  230. package/dist/utils/isRenderable/isRenderable.d.ts.map +1 -0
  231. package/dist/utils/isRenderable/isRenderable.js +5 -0
  232. package/dist/utils/isRenderable/isRenderable.js.map +1 -0
  233. package/package.json +12 -4
  234. package/dist/styles/utils/elevation.module.css.cjs +0 -16
  235. package/dist/styles/utils/elevation.module.css.cjs.map +0 -1
  236. package/dist/styles/utils/elevation.module.css.js +0 -16
  237. package/dist/styles/utils/elevation.module.css.js.map +0 -1
  238. package/dist/styles/utils/focus.module.css.cjs +0 -16
  239. package/dist/styles/utils/focus.module.css.cjs.map +0 -1
  240. package/dist/styles/utils/focus.module.css.js +0 -16
  241. package/dist/styles/utils/focus.module.css.js.map +0 -1
  242. package/dist/styles/utils/overlay.module.css.cjs +0 -13
  243. package/dist/styles/utils/overlay.module.css.cjs.map +0 -1
  244. package/dist/styles/utils/overlay.module.css.js +0 -13
  245. package/dist/styles/utils/overlay.module.css.js.map +0 -1
  246. package/dist/styles/utils/text-decoration.module.css.cjs +0 -13
  247. package/dist/styles/utils/text-decoration.module.css.cjs.map +0 -1
  248. package/dist/styles/utils/text-decoration.module.css.js +0 -13
  249. package/dist/styles/utils/text-decoration.module.css.js.map +0 -1
@@ -0,0 +1,256 @@
1
+ @layer dds-base, dds-components;@layer dds-components { @layer fallback, components; }@layer dds-components.components{._pagination_1w4hz_1 {
2
+ container: pagination / inline-size;
3
+ width: 100%;
4
+ min-width: 0;
5
+ font: var(--typography-label-lg);
6
+ }
7
+
8
+ ._pagination__list_1w4hz_8 {
9
+ --_pagination-3: flex;
10
+ --_pagination-cell: var(--spacing-space-40);
11
+
12
+ display: flex;
13
+ flex-wrap: wrap;
14
+ align-items: center;
15
+ gap: var(--spacing-space-8);
16
+ margin: 0;
17
+ padding: 0;
18
+ list-style: none;
19
+ }
20
+
21
+ ._pagination__list--wide_1w4hz_21 {
22
+ --_pagination-cell: var(--spacing-space-64);
23
+ }
24
+
25
+ ._pagination__list--arrows_1w4hz_25 {
26
+ --_pagination-3: initial;
27
+
28
+ flex-wrap: nowrap;
29
+ }
30
+
31
+ ._pagination__item_1w4hz_31,
32
+ ._pagination__arrow_1w4hz_32 {
33
+ flex: 0 0 auto;
34
+ margin: 0;
35
+ padding: 0;
36
+ }
37
+
38
+ ._pagination__item_1w4hz_31 {
39
+ display: var(
40
+ --_pagination-member-3,
41
+ var(--_pagination-member-5, var(--_pagination-member-7, var(--_pagination-member-9, none)))
42
+ );
43
+ }
44
+
45
+ ._pagination__item--3_1w4hz_45 {
46
+ --_pagination-member-3: var(--_pagination-3);
47
+ }
48
+
49
+ ._pagination__item--5_1w4hz_49 {
50
+ --_pagination-member-5: var(--_pagination-5);
51
+ }
52
+
53
+ ._pagination__item--7_1w4hz_53 {
54
+ --_pagination-member-7: var(--_pagination-7);
55
+ }
56
+
57
+ ._pagination__item--9_1w4hz_57 {
58
+ --_pagination-member-9: var(--_pagination-9);
59
+ }
60
+
61
+ /* Each query budget reserves one extra cell for a number focused before a resize. */
62
+ ._pagination__item_1w4hz_31:focus-within,
63
+ ._pagination__item--current_1w4hz_63 {
64
+ display: flex;
65
+ }
66
+
67
+ ._pagination__button_1w4hz_67,
68
+ ._pagination__gap_1w4hz_68 {
69
+ box-sizing: border-box;
70
+ display: inline-flex;
71
+ flex: 0 0 auto;
72
+ align-items: center;
73
+ justify-content: center;
74
+ min-width: var(--_pagination-cell);
75
+ min-height: var(--spacing-space-40);
76
+ font: inherit;
77
+ font-variant-numeric: tabular-nums;
78
+ white-space: nowrap;
79
+ }
80
+
81
+ ._pagination__button_1w4hz_67 {
82
+ appearance: none;
83
+ padding: var(--spacing-space-8);
84
+ border: var(--borderwidth-semantic-xs) solid var(--color-semantic-border-neutral-mid);
85
+ border-radius: var(--radius-semantic-sm);
86
+ background: var(--color-semantic-surface-base);
87
+ color: var(--color-semantic-foreground-default);
88
+ cursor: pointer;
89
+
90
+ &:hover,
91
+ &:focus-visible {
92
+ background: var(--color-semantic-surface-neutral-mid);
93
+ }
94
+
95
+ &[aria-current='page'] {
96
+ border-color: transparent;
97
+ background: var(--color-semantic-interactive-primary-default);
98
+ color: var(--color-semantic-foreground-inverse);
99
+
100
+ &:hover,
101
+ &:focus-visible,
102
+ &:active {
103
+ background: var(--color-semantic-interactive-primary-hover);
104
+ }
105
+ }
106
+
107
+ &:disabled {
108
+ background: var(--color-semantic-interactive-neutral-disabled);
109
+ color: var(--color-semantic-foreground-muted);
110
+ cursor: default;
111
+ }
112
+
113
+ & > svg {
114
+ width: var(--spacing-space-16);
115
+ height: var(--spacing-space-16);
116
+ }
117
+ }
118
+
119
+ ._pagination__arrow_1w4hz_32 ._pagination__button_1w4hz_67 {
120
+ min-width: var(--spacing-space-40);
121
+ }
122
+
123
+ ._pagination__gap_1w4hz_68 {
124
+ color: var(--color-semantic-foreground-default);
125
+
126
+ & > svg {
127
+ width: var(--spacing-space-16);
128
+ height: var(--spacing-space-16);
129
+ }
130
+ }
131
+
132
+ @scope ([data-color-scheme='dark']) to ([data-color-scheme='light']) {
133
+ ._pagination__gap_1w4hz_68 {
134
+ color: var(--color-semantic-foreground-inverse);
135
+ }
136
+ }
137
+
138
+ /* Thresholds include 8px gaps, 8px focus clearance, arrows, and one spare page cell. */
139
+ @container pagination (width >= 17.5em) {
140
+ ._pagination__list--normal_1w4hz_140._pagination__list--arrows_1w4hz_25 {
141
+ --_pagination-3: flex;
142
+ }
143
+ }
144
+
145
+ @container pagination (width >= 18em) {
146
+ ._pagination__list--normal_1w4hz_140:not(._pagination__list--arrows_1w4hz_25) {
147
+ --_pagination-3: initial;
148
+ --_pagination-5: flex;
149
+ }
150
+ }
151
+
152
+ @container pagination (width >= 23.5em) {
153
+ ._pagination__list--wide_1w4hz_21._pagination__list--arrows_1w4hz_25 {
154
+ --_pagination-3: flex;
155
+ }
156
+ }
157
+
158
+ @container pagination (width >= 24em) {
159
+ ._pagination__list--normal_1w4hz_140._pagination__list--arrows_1w4hz_25 {
160
+ --_pagination-3: initial;
161
+ --_pagination-5: flex;
162
+ }
163
+
164
+ ._pagination__list--normal_1w4hz_140:not(._pagination__list--arrows_1w4hz_25) {
165
+ --_pagination-5: initial;
166
+ --_pagination-7: flex;
167
+ }
168
+ }
169
+
170
+ @container pagination (width >= 27em) {
171
+ ._pagination__list--wide_1w4hz_21:not(._pagination__list--arrows_1w4hz_25) {
172
+ --_pagination-3: initial;
173
+ --_pagination-5: flex;
174
+ }
175
+ }
176
+
177
+ @container pagination (width >= 30em) {
178
+ ._pagination__list--normal_1w4hz_140._pagination__list--arrows_1w4hz_25 {
179
+ --_pagination-5: initial;
180
+ --_pagination-7: flex;
181
+ }
182
+
183
+ ._pagination__list--normal_1w4hz_140:not(._pagination__list--arrows_1w4hz_25) {
184
+ --_pagination-7: initial;
185
+ --_pagination-9: flex;
186
+ }
187
+ }
188
+
189
+ @container pagination (width >= 33em) {
190
+ ._pagination__list--wide_1w4hz_21._pagination__list--arrows_1w4hz_25 {
191
+ --_pagination-3: initial;
192
+ --_pagination-5: flex;
193
+ }
194
+ }
195
+
196
+ @container pagination (width >= 36em) {
197
+ ._pagination__list--normal_1w4hz_140._pagination__list--arrows_1w4hz_25 {
198
+ --_pagination-7: initial;
199
+ --_pagination-9: flex;
200
+ }
201
+
202
+ ._pagination__list--wide_1w4hz_21:not(._pagination__list--arrows_1w4hz_25) {
203
+ --_pagination-5: initial;
204
+ --_pagination-7: flex;
205
+ }
206
+ }
207
+
208
+ @container pagination (width >= 42em) {
209
+ ._pagination__list--wide_1w4hz_21._pagination__list--arrows_1w4hz_25 {
210
+ --_pagination-5: initial;
211
+ --_pagination-7: flex;
212
+ }
213
+ }
214
+
215
+ @container pagination (width >= 45em) {
216
+ ._pagination__list--wide_1w4hz_21:not(._pagination__list--arrows_1w4hz_25) {
217
+ --_pagination-7: initial;
218
+ --_pagination-9: flex;
219
+ }
220
+ }
221
+
222
+ @container pagination (width >= 51em) {
223
+ ._pagination__list--wide_1w4hz_21._pagination__list--arrows_1w4hz_25 {
224
+ --_pagination-7: initial;
225
+ --_pagination-9: flex;
226
+ }
227
+ }
228
+
229
+ ._pagination__sr-only_1w4hz_229 {
230
+ position: absolute;
231
+ width: 1px;
232
+ height: 1px;
233
+ padding: 0;
234
+ margin: -1px;
235
+ overflow: hidden;
236
+ white-space: nowrap;
237
+ border: 0;
238
+ clip: rect(0, 0, 0, 0);
239
+ }
240
+
241
+ @media (forced-colors: active) {
242
+ ._pagination__button_1w4hz_67[aria-current='page'] {
243
+ border-color: Highlight;
244
+ background: Highlight;
245
+ color: HighlightText;
246
+ }
247
+
248
+ ._pagination__button_1w4hz_67:disabled {
249
+ border-color: GrayText;
250
+ color: GrayText;
251
+ }
252
+ }
253
+
254
+ /**
255
+ * Do not edit directly, this file was auto-generated.
256
+ */ }
@@ -0,0 +1,3 @@
1
+ import { PaginationProps } from './Pagination.types';
2
+ export declare const Pagination: ({ currentPage, totalPages, onPageChange, showPreviousNext, previousPageLabel, nextPageLabel, formatPageLabel, formatPageAnnouncement, className, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, onFocusCapture, onBlurCapture, ref, ...props }: PaginationProps) => import("react/jsx-runtime").JSX.Element | null;
3
+ //# sourceMappingURL=Pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../../src/components/Pagination/Pagination.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAO1D,eAAO,MAAM,UAAU,GAAI,6PAgBxB,eAAe,mDAoIjB,CAAC"}
@@ -0,0 +1,142 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { ChevronLeftFilled, MoreFilled, ChevronRightFilled } from "@dnanpm/icons";
3
+ import { useRef, useState, useLayoutEffect } from "react";
4
+ import { focusStyles } from "../../styles/utils/index.js";
5
+ import { validatePages, getPageCandidates, getPageWidth } from "./Pagination.utils.js";
6
+ import styles from "./Pagination.module.css.js";
7
+ import { cn } from "../../utils/cn/cn.js";
8
+ const defaultPageLabel = (page) => `Sivu ${page}`;
9
+ const defaultAnnouncement = (page, total) => `Sivu ${page} / ${total}`;
10
+ const Pagination = ({
11
+ currentPage,
12
+ totalPages,
13
+ onPageChange,
14
+ showPreviousNext = true,
15
+ previousPageLabel = "Edellinen sivu",
16
+ nextPageLabel = "Seuraava sivu",
17
+ formatPageLabel = defaultPageLabel,
18
+ formatPageAnnouncement = defaultAnnouncement,
19
+ className,
20
+ "aria-label": ariaLabel,
21
+ "aria-labelledby": ariaLabelledBy,
22
+ onFocusCapture,
23
+ onBlurCapture,
24
+ ref,
25
+ ...props
26
+ }) => {
27
+ validatePages(currentPage, totalPages);
28
+ const currentButton = useRef(null);
29
+ const focusedButton = useRef(null);
30
+ const [announcement, setAnnouncement] = useState({
31
+ page: currentPage,
32
+ empty: totalPages === 0,
33
+ text: ""
34
+ });
35
+ if (announcement.page !== currentPage || announcement.empty !== (totalPages === 0)) {
36
+ setAnnouncement({
37
+ page: currentPage,
38
+ empty: totalPages === 0,
39
+ text: totalPages > 0 && !announcement.empty && announcement.page !== currentPage ? formatPageAnnouncement(currentPage, totalPages) : ""
40
+ });
41
+ }
42
+ useLayoutEffect(() => {
43
+ const focused = focusedButton.current;
44
+ if (focused && (!focused.isConnected || focused.disabled) && (document.activeElement === document.body || document.activeElement === focused)) {
45
+ currentButton.current?.focus();
46
+ }
47
+ }, [currentPage, totalPages, showPreviousNext]);
48
+ if (totalPages === 0) return null;
49
+ const requestPage = (page) => {
50
+ if (page !== currentPage) onPageChange(page);
51
+ };
52
+ const buttonClass = cn(styles.pagination__button, focusStyles.focusable);
53
+ return /* @__PURE__ */ jsxs(
54
+ "nav",
55
+ {
56
+ ref,
57
+ className: cn(styles.pagination, className),
58
+ "aria-label": ariaLabel ?? (ariaLabelledBy ? void 0 : "Sivutus"),
59
+ "aria-labelledby": ariaLabelledBy,
60
+ onFocusCapture: (event) => {
61
+ if (event.target instanceof HTMLButtonElement) focusedButton.current = event.target;
62
+ onFocusCapture?.(event);
63
+ },
64
+ onBlurCapture: (event) => {
65
+ const button = focusedButton.current;
66
+ const focusLeftPagination = event.relatedTarget ? !event.currentTarget.contains(event.relatedTarget) : button?.isConnected && !button.disabled;
67
+ if (focusLeftPagination) {
68
+ focusedButton.current = null;
69
+ }
70
+ onBlurCapture?.(event);
71
+ },
72
+ ...props,
73
+ children: [
74
+ /* @__PURE__ */ jsxs(
75
+ "ul",
76
+ {
77
+ className: cn(
78
+ styles.pagination__list,
79
+ styles[`pagination__list--${getPageWidth(totalPages)}`],
80
+ { [styles["pagination__list--arrows"]]: showPreviousNext }
81
+ ),
82
+ children: [
83
+ showPreviousNext && /* @__PURE__ */ jsx("li", { className: styles.pagination__arrow, children: /* @__PURE__ */ jsx(
84
+ "button",
85
+ {
86
+ type: "button",
87
+ className: buttonClass,
88
+ "aria-label": previousPageLabel,
89
+ disabled: currentPage === 1,
90
+ onClick: () => requestPage(currentPage - 1),
91
+ children: /* @__PURE__ */ jsx(ChevronLeftFilled, { "aria-hidden": "true", size: "16" })
92
+ }
93
+ ) }),
94
+ getPageCandidates(currentPage, totalPages).map(({ item, budgets }) => /* @__PURE__ */ jsx(
95
+ "li",
96
+ {
97
+ className: cn(
98
+ styles.pagination__item,
99
+ {
100
+ [styles["pagination__item--current"]]: item.kind === "page" && item.page === currentPage
101
+ },
102
+ budgets.map((budget) => styles[`pagination__item--${budget}`])
103
+ ),
104
+ "aria-hidden": item.kind === "gap" ? true : void 0,
105
+ children: item.kind === "page" ? /* @__PURE__ */ jsx(
106
+ "button",
107
+ {
108
+ type: "button",
109
+ ref: item.page === currentPage ? currentButton : void 0,
110
+ className: buttonClass,
111
+ "aria-label": formatPageLabel(item.page),
112
+ "aria-current": item.page === currentPage ? "page" : void 0,
113
+ onClick: () => requestPage(item.page),
114
+ children: item.page
115
+ }
116
+ ) : /* @__PURE__ */ jsx("span", { className: styles.pagination__gap, children: /* @__PURE__ */ jsx(MoreFilled, { "aria-hidden": "true", size: "16" }) })
117
+ },
118
+ item.key
119
+ )),
120
+ showPreviousNext && /* @__PURE__ */ jsx("li", { className: styles.pagination__arrow, children: /* @__PURE__ */ jsx(
121
+ "button",
122
+ {
123
+ type: "button",
124
+ className: buttonClass,
125
+ "aria-label": nextPageLabel,
126
+ disabled: currentPage === totalPages,
127
+ onClick: () => requestPage(currentPage + 1),
128
+ children: /* @__PURE__ */ jsx(ChevronRightFilled, { "aria-hidden": "true", size: "16" })
129
+ }
130
+ ) })
131
+ ]
132
+ }
133
+ ),
134
+ /* @__PURE__ */ jsx("span", { className: styles["pagination__sr-only"], "aria-live": "polite", "aria-atomic": "true", children: announcement.text })
135
+ ]
136
+ }
137
+ );
138
+ };
139
+ export {
140
+ Pagination
141
+ };
142
+ //# sourceMappingURL=Pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pagination.js","sources":["../../../src/components/Pagination/Pagination.tsx"],"sourcesContent":["import { ChevronLeftFilled, ChevronRightFilled, MoreFilled } from '@dnanpm/icons';\nimport { useLayoutEffect, useRef, useState } from 'react';\nimport { cn } from '../../utils/cn';\nimport { focusStyles } from '../../styles/utils';\nimport type { PaginationProps } from './Pagination.types';\nimport { getPageCandidates, getPageWidth, validatePages } from './Pagination.utils';\nimport styles from './Pagination.module.css';\n\nconst defaultPageLabel = (page: number) => `Sivu ${page}`;\nconst defaultAnnouncement = (page: number, total: number) => `Sivu ${page} / ${total}`;\n\nexport const Pagination = ({\n currentPage,\n totalPages,\n onPageChange,\n showPreviousNext = true,\n previousPageLabel = 'Edellinen sivu',\n nextPageLabel = 'Seuraava sivu',\n formatPageLabel = defaultPageLabel,\n formatPageAnnouncement = defaultAnnouncement,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n onFocusCapture,\n onBlurCapture,\n ref,\n ...props\n}: PaginationProps) => {\n validatePages(currentPage, totalPages);\n const currentButton = useRef<HTMLButtonElement>(null);\n const focusedButton = useRef<HTMLButtonElement | null>(null);\n const [announcement, setAnnouncement] = useState({\n page: currentPage,\n empty: totalPages === 0,\n text: '',\n });\n\n if (announcement.page !== currentPage || announcement.empty !== (totalPages === 0)) {\n setAnnouncement({\n page: currentPage,\n empty: totalPages === 0,\n text:\n totalPages > 0 && !announcement.empty && announcement.page !== currentPage\n ? formatPageAnnouncement(currentPage, totalPages)\n : '',\n });\n }\n\n useLayoutEffect(() => {\n const focused = focusedButton.current;\n if (\n focused &&\n (!focused.isConnected || focused.disabled) &&\n (document.activeElement === document.body || document.activeElement === focused)\n ) {\n currentButton.current?.focus();\n }\n }, [currentPage, totalPages, showPreviousNext]);\n\n if (totalPages === 0) return null;\n\n const requestPage = (page: number) => {\n if (page !== currentPage) onPageChange(page);\n };\n const buttonClass = cn(styles.pagination__button, focusStyles.focusable);\n\n return (\n <nav\n ref={ref}\n className={cn(styles.pagination, className)}\n aria-label={ariaLabel ?? (ariaLabelledBy ? undefined : 'Sivutus')}\n aria-labelledby={ariaLabelledBy}\n onFocusCapture={(event) => {\n if (event.target instanceof HTMLButtonElement) focusedButton.current = event.target;\n onFocusCapture?.(event);\n }}\n onBlurCapture={(event) => {\n const button = focusedButton.current;\n const focusLeftPagination = event.relatedTarget\n ? !event.currentTarget.contains(event.relatedTarget)\n : button?.isConnected && !button.disabled;\n\n if (focusLeftPagination) {\n focusedButton.current = null;\n }\n onBlurCapture?.(event);\n }}\n {...props}\n >\n <ul\n className={cn(\n styles.pagination__list,\n styles[`pagination__list--${getPageWidth(totalPages)}`],\n { [styles['pagination__list--arrows']]: showPreviousNext },\n )}\n >\n {showPreviousNext && (\n <li className={styles.pagination__arrow}>\n <button\n type=\"button\"\n className={buttonClass}\n aria-label={previousPageLabel}\n disabled={currentPage === 1}\n onClick={() => requestPage(currentPage - 1)}\n >\n <ChevronLeftFilled aria-hidden=\"true\" size=\"16\" />\n </button>\n </li>\n )}\n {getPageCandidates(currentPage, totalPages).map(({ item, budgets }) => (\n <li\n key={item.key}\n className={cn(\n styles.pagination__item,\n {\n [styles['pagination__item--current']]:\n item.kind === 'page' && item.page === currentPage,\n },\n budgets.map((budget) => styles[`pagination__item--${budget}`]),\n )}\n aria-hidden={item.kind === 'gap' ? true : undefined}\n >\n {item.kind === 'page' ? (\n <button\n type=\"button\"\n ref={item.page === currentPage ? currentButton : undefined}\n className={buttonClass}\n aria-label={formatPageLabel(item.page)}\n aria-current={item.page === currentPage ? 'page' : undefined}\n onClick={() => requestPage(item.page)}\n >\n {item.page}\n </button>\n ) : (\n <span className={styles.pagination__gap}>\n <MoreFilled aria-hidden=\"true\" size=\"16\" />\n </span>\n )}\n </li>\n ))}\n {showPreviousNext && (\n <li className={styles.pagination__arrow}>\n <button\n type=\"button\"\n className={buttonClass}\n aria-label={nextPageLabel}\n disabled={currentPage === totalPages}\n onClick={() => requestPage(currentPage + 1)}\n >\n <ChevronRightFilled aria-hidden=\"true\" size=\"16\" />\n </button>\n </li>\n )}\n </ul>\n <span className={styles['pagination__sr-only']} aria-live=\"polite\" aria-atomic=\"true\">\n {announcement.text}\n </span>\n </nav>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ require('./Pagination.css');
2
+ "use strict";
3
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
4
+ const pagination = "_pagination_1w4hz_1";
5
+ const pagination__list = "_pagination__list_1w4hz_8";
6
+ const pagination__item = "_pagination__item_1w4hz_31";
7
+ const pagination__arrow = "_pagination__arrow_1w4hz_32";
8
+ const pagination__button = "_pagination__button_1w4hz_67";
9
+ const pagination__gap = "_pagination__gap_1w4hz_68";
10
+ const styles = {
11
+ pagination,
12
+ pagination__list,
13
+ "pagination__list--wide": "_pagination__list--wide_1w4hz_21",
14
+ "pagination__list--arrows": "_pagination__list--arrows_1w4hz_25",
15
+ pagination__item,
16
+ pagination__arrow,
17
+ "pagination__item--3": "_pagination__item--3_1w4hz_45",
18
+ "pagination__item--5": "_pagination__item--5_1w4hz_49",
19
+ "pagination__item--7": "_pagination__item--7_1w4hz_53",
20
+ "pagination__item--9": "_pagination__item--9_1w4hz_57",
21
+ "pagination__item--current": "_pagination__item--current_1w4hz_63",
22
+ pagination__button,
23
+ pagination__gap,
24
+ "pagination__list--normal": "_pagination__list--normal_1w4hz_140",
25
+ "pagination__sr-only": "_pagination__sr-only_1w4hz_229"
26
+ };
27
+ exports.default = styles;
28
+ exports.pagination = pagination;
29
+ exports.pagination__arrow = pagination__arrow;
30
+ exports.pagination__button = pagination__button;
31
+ exports.pagination__gap = pagination__gap;
32
+ exports.pagination__item = pagination__item;
33
+ exports.pagination__list = pagination__list;
34
+ //# sourceMappingURL=Pagination.module.css.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pagination.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,34 @@
1
+ import './Pagination.css';
2
+ const pagination = "_pagination_1w4hz_1";
3
+ const pagination__list = "_pagination__list_1w4hz_8";
4
+ const pagination__item = "_pagination__item_1w4hz_31";
5
+ const pagination__arrow = "_pagination__arrow_1w4hz_32";
6
+ const pagination__button = "_pagination__button_1w4hz_67";
7
+ const pagination__gap = "_pagination__gap_1w4hz_68";
8
+ const styles = {
9
+ pagination,
10
+ pagination__list,
11
+ "pagination__list--wide": "_pagination__list--wide_1w4hz_21",
12
+ "pagination__list--arrows": "_pagination__list--arrows_1w4hz_25",
13
+ pagination__item,
14
+ pagination__arrow,
15
+ "pagination__item--3": "_pagination__item--3_1w4hz_45",
16
+ "pagination__item--5": "_pagination__item--5_1w4hz_49",
17
+ "pagination__item--7": "_pagination__item--7_1w4hz_53",
18
+ "pagination__item--9": "_pagination__item--9_1w4hz_57",
19
+ "pagination__item--current": "_pagination__item--current_1w4hz_63",
20
+ pagination__button,
21
+ pagination__gap,
22
+ "pagination__list--normal": "_pagination__list--normal_1w4hz_140",
23
+ "pagination__sr-only": "_pagination__sr-only_1w4hz_229"
24
+ };
25
+ export {
26
+ styles as default,
27
+ pagination,
28
+ pagination__arrow,
29
+ pagination__button,
30
+ pagination__gap,
31
+ pagination__item,
32
+ pagination__list
33
+ };
34
+ //# sourceMappingURL=Pagination.module.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pagination.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,20 @@
1
+ import { ComponentPropsWithRef } from 'react';
2
+ export interface PaginationProps extends Omit<ComponentPropsWithRef<'nav'>, 'children' | 'onChange'> {
3
+ /** One-based current page. The application owns this value. */
4
+ readonly currentPage: number;
5
+ /** Nonnegative safe integer. Zero renders nothing. */
6
+ readonly totalPages: number;
7
+ /** Requests a different page; does not load results or update currentPage. */
8
+ readonly onPageChange: (page: number) => void;
9
+ /** Show the Previous and Next controls. @default true */
10
+ readonly showPreviousNext?: boolean;
11
+ /** Accessible name of the Previous control. @default 'Edellinen sivu' */
12
+ readonly previousPageLabel?: string;
13
+ /** Accessible name of the Next control. @default 'Seuraava sivu' */
14
+ readonly nextPageLabel?: string;
15
+ /** Accessible name of each numbered control. @default page => `Sivu ${page}` */
16
+ readonly formatPageLabel?: (page: number) => string;
17
+ /** Announcement after a controlled page change. @default (page, total) => `Sivu ${page} / ${total}` */
18
+ readonly formatPageAnnouncement?: (page: number, totalPages: number) => string;
19
+ }
20
+ //# sourceMappingURL=Pagination.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pagination.types.d.ts","sourceRoot":"","sources":["../../../src/components/Pagination/Pagination.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AAEnD,MAAM,WAAW,eAAgB,SAAQ,IAAI,CACzC,qBAAqB,CAAC,KAAK,CAAC,EAC5B,UAAU,GAAG,UAAU,CAC1B;IACG,+DAA+D;IAC/D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,sDAAsD;IACtD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,8EAA8E;IAC9E,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,yDAAyD;IACzD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,yEAAyE;IACzE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,oEAAoE;IACpE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,gFAAgF;IAChF,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACpD,uGAAuG;IACvG,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC;CAClF"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const pageBudgets = [3, 5, 7, 9];
4
+ const validatePages = (currentPage, totalPages) => {
5
+ if (!Number.isSafeInteger(totalPages) || totalPages < 0) {
6
+ throw new RangeError("Pagination: totalPages must be a nonnegative safe integer.");
7
+ }
8
+ if (!Number.isSafeInteger(currentPage) || currentPage < 1 || totalPages > 0 && currentPage > totalPages) {
9
+ throw new RangeError(
10
+ "Pagination: currentPage must be a positive safe integer within totalPages."
11
+ );
12
+ }
13
+ };
14
+ const pageItem = (page) => ({
15
+ key: `page-${page}`,
16
+ kind: "page",
17
+ page
18
+ });
19
+ const getPageItems = (currentPage, totalPages, budget) => {
20
+ if (totalPages === 0) return [];
21
+ const count = Math.min(budget, totalPages);
22
+ if (totalPages <= budget || budget < 7) {
23
+ const start2 = Math.max(
24
+ 1,
25
+ Math.min(currentPage - Math.floor(count / 2), totalPages - count + 1)
26
+ );
27
+ return Array.from({ length: count }, (_, index) => pageItem(start2 + index));
28
+ }
29
+ const siblings = (budget - 5) / 2;
30
+ const windowSize = budget - 4;
31
+ const start = Math.max(2, Math.min(currentPage - siblings, totalPages - windowSize));
32
+ const pages = [1];
33
+ if (currentPage <= siblings + 2) {
34
+ for (let page = 2; page <= budget - 2; page++) pages.push(page);
35
+ } else if (currentPage >= totalPages - siblings - 1) {
36
+ for (let offset = budget - 3; offset >= 1; offset--) pages.push(totalPages - offset);
37
+ } else {
38
+ for (let offset = 0; offset < windowSize; offset++) pages.push(start + offset);
39
+ }
40
+ pages.push(totalPages);
41
+ return pages.flatMap((page, index) => {
42
+ const previous = pages[index - 1];
43
+ if (previous === void 0 || page === previous + 1) return [pageItem(page)];
44
+ if (page === previous + 2) return [pageItem(previous + 1), pageItem(page)];
45
+ return [
46
+ { key: `gap-${previous}-${page}`, kind: "gap", after: previous, before: page },
47
+ pageItem(page)
48
+ ];
49
+ });
50
+ };
51
+ const getPageCandidates = (currentPage, totalPages) => {
52
+ const candidates = /* @__PURE__ */ new Map();
53
+ for (const budget of pageBudgets) {
54
+ for (const item of getPageItems(currentPage, totalPages, budget)) {
55
+ const existing = candidates.get(item.key);
56
+ if (existing) existing.budgets.push(budget);
57
+ else candidates.set(item.key, { item, budgets: [budget] });
58
+ }
59
+ }
60
+ return [...candidates.values()].sort((a, b) => {
61
+ const aPosition = a.item.kind === "page" ? a.item.page : a.item.after;
62
+ const bPosition = b.item.kind === "page" ? b.item.page : b.item.after;
63
+ return aPosition - bPosition || Number(a.item.kind === "gap") - Number(b.item.kind === "gap");
64
+ });
65
+ };
66
+ const getPageWidth = (totalPages) => {
67
+ const digits = String(totalPages).length;
68
+ if (digits <= 2) return "normal";
69
+ return "wide";
70
+ };
71
+ exports.getPageCandidates = getPageCandidates;
72
+ exports.getPageItems = getPageItems;
73
+ exports.getPageWidth = getPageWidth;
74
+ exports.pageBudgets = pageBudgets;
75
+ exports.validatePages = validatePages;
76
+ //# sourceMappingURL=Pagination.utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pagination.utils.cjs","sources":["../../../src/components/Pagination/Pagination.utils.ts"],"sourcesContent":["export const pageBudgets = [3, 5, 7, 9] as const;\nexport type PageBudget = (typeof pageBudgets)[number];\n\nexport type PaginationItem =\n | { readonly key: string; readonly kind: 'page'; readonly page: number }\n | {\n readonly key: string;\n readonly kind: 'gap';\n readonly after: number;\n readonly before: number;\n };\n\nexport interface PaginationCandidate {\n readonly item: PaginationItem;\n readonly budgets: readonly PageBudget[];\n}\n\nexport const validatePages = (currentPage: number, totalPages: number) => {\n if (!Number.isSafeInteger(totalPages) || totalPages < 0) {\n throw new RangeError('Pagination: totalPages must be a nonnegative safe integer.');\n }\n if (\n !Number.isSafeInteger(currentPage) ||\n currentPage < 1 ||\n (totalPages > 0 && currentPage > totalPages)\n ) {\n throw new RangeError(\n 'Pagination: currentPage must be a positive safe integer within totalPages.',\n );\n }\n};\n\nconst pageItem = (page: number): PaginationItem => ({\n key: `page-${page}`,\n kind: 'page',\n page,\n});\n\nexport const getPageItems = (\n currentPage: number,\n totalPages: number,\n budget: PageBudget,\n): PaginationItem[] => {\n if (totalPages === 0) return [];\n\n const count = Math.min(budget, totalPages);\n if (totalPages <= budget || budget < 7) {\n const start = Math.max(\n 1,\n Math.min(currentPage - Math.floor(count / 2), totalPages - count + 1),\n );\n return Array.from({ length: count }, (_, index) => pageItem(start + index));\n }\n\n const siblings = (budget - 5) / 2;\n const windowSize = budget - 4;\n const start = Math.max(2, Math.min(currentPage - siblings, totalPages - windowSize));\n const pages = [1];\n if (currentPage <= siblings + 2) {\n for (let page = 2; page <= budget - 2; page++) pages.push(page);\n } else if (currentPage >= totalPages - siblings - 1) {\n for (let offset = budget - 3; offset >= 1; offset--) pages.push(totalPages - offset);\n } else {\n for (let offset = 0; offset < windowSize; offset++) pages.push(start + offset);\n }\n pages.push(totalPages);\n\n return pages.flatMap((page, index): PaginationItem[] => {\n const previous = pages[index - 1];\n if (previous === undefined || page === previous + 1) return [pageItem(page)];\n if (page === previous + 2) return [pageItem(previous + 1), pageItem(page)];\n return [\n { key: `gap-${previous}-${page}`, kind: 'gap', after: previous, before: page },\n pageItem(page),\n ];\n });\n};\n\nexport const getPageCandidates = (\n currentPage: number,\n totalPages: number,\n): PaginationCandidate[] => {\n const candidates = new Map<string, { item: PaginationItem; budgets: PageBudget[] }>();\n for (const budget of pageBudgets) {\n for (const item of getPageItems(currentPage, totalPages, budget)) {\n const existing = candidates.get(item.key);\n if (existing) existing.budgets.push(budget);\n else candidates.set(item.key, { item, budgets: [budget] });\n }\n }\n return [...candidates.values()].sort((a, b) => {\n const aPosition = a.item.kind === 'page' ? a.item.page : a.item.after;\n const bPosition = b.item.kind === 'page' ? b.item.page : b.item.after;\n return (\n aPosition - bPosition || Number(a.item.kind === 'gap') - Number(b.item.kind === 'gap')\n );\n });\n};\n\nexport const getPageWidth = (totalPages: number) => {\n const digits = String(totalPages).length;\n if (digits <= 2) return 'normal';\n return 'wide';\n};\n"],"names":["start"],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export declare const pageBudgets: readonly [3, 5, 7, 9];
2
+ export type PageBudget = (typeof pageBudgets)[number];
3
+ export type PaginationItem = {
4
+ readonly key: string;
5
+ readonly kind: 'page';
6
+ readonly page: number;
7
+ } | {
8
+ readonly key: string;
9
+ readonly kind: 'gap';
10
+ readonly after: number;
11
+ readonly before: number;
12
+ };
13
+ export interface PaginationCandidate {
14
+ readonly item: PaginationItem;
15
+ readonly budgets: readonly PageBudget[];
16
+ }
17
+ export declare const validatePages: (currentPage: number, totalPages: number) => void;
18
+ export declare const getPageItems: (currentPage: number, totalPages: number, budget: PageBudget) => PaginationItem[];
19
+ export declare const getPageCandidates: (currentPage: number, totalPages: number) => PaginationCandidate[];
20
+ export declare const getPageWidth: (totalPages: number) => "normal" | "wide";
21
+ //# sourceMappingURL=Pagination.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pagination.utils.d.ts","sourceRoot":"","sources":["../../../src/components/Pagination/Pagination.utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,uBAAwB,CAAC;AACjD,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtD,MAAM,MAAM,cAAc,GACpB;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACtE;IACI,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B,CAAC;AAER,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;CAC3C;AAED,eAAO,MAAM,aAAa,GAAI,aAAa,MAAM,EAAE,YAAY,MAAM,SAapE,CAAC;AAQF,eAAO,MAAM,YAAY,GACrB,aAAa,MAAM,EACnB,YAAY,MAAM,EAClB,QAAQ,UAAU,KACnB,cAAc,EAkChB,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC1B,aAAa,MAAM,EACnB,YAAY,MAAM,KACnB,mBAAmB,EAgBrB,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,YAAY,MAAM,sBAI9C,CAAC"}