@servicetitan/anvil2 1.42.0 → 1.42.2

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.
@@ -1,430 +1,2 @@
1
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import { forwardRef, useRef, useMemo, useState, useLayoutEffect } from 'react';
3
- import { useTrackingId } from './useTrackingId.js';
4
- import { S as SrOnly } from './SrOnly-C_I8eH4C.js';
5
- import { c as cx } from './index-tZvMCc77.js';
6
- import { B as BreakpointSm } from './primitive-BoyEHaOo.js';
7
- import { u as useMergeRefs } from './useMergeRefs-Bde85AWI-Bde85AWI.js';
8
- import { B as ButtonToggle } from './ButtonToggle-Bm4KRl3o-B1-LbfjY.js';
9
- import { a as Menu } from './Menu-TtVJnSrA-yBYichuJ.js';
10
- import { S as SvgMoreHoriz } from './more_horiz-DJgdQiy0.js';
11
- import { S as SvgKeyboardArrowDown } from './keyboard_arrow_down-C8WQ38p1.js';
12
- import { B as Button } from './Button-BaHFf1AT-BQy-PFB5.js';
13
- import { T as Text } from './Text-CED_yrId-DsRYZw2-.js';
14
- import { F as Flex } from './Flex-CiK7uNUu-BfxHG4L0.js';
15
- import { S as SvgKeyboardArrowLeft, a as SvgKeyboardArrowRight } from './keyboard_arrow_right-DZWNVytH.js';
16
-
17
- import './Pagination.css';const pagination$1 = "_pagination_1gk5t_2";
18
- const styles$5 = {
19
- pagination: pagination$1
20
- };
21
-
22
- const styles$4 = {
23
- "pagination-item": "_pagination-item_1fk4w_2",
24
- "pagination-item-button": "_pagination-item-button_1fk4w_15"
25
- };
26
-
27
- const PaginationItem = forwardRef(
28
- (props, ref) => {
29
- const { page, isActive, onClick, className, ...rest } = props;
30
- const paginationClassName = cx(styles$4["pagination-item"], className);
31
- const paginationButtonClassName = cx(styles$4["pagination-item-button"], {
32
- [styles$4.active]: isActive
33
- });
34
- return /* @__PURE__ */ jsx("li", { ref, ...rest, className: paginationClassName, children: /* @__PURE__ */ jsx(
35
- ButtonToggle,
36
- {
37
- className: paginationButtonClassName,
38
- size: "small",
39
- onClick,
40
- "aria-current": isActive ? "page" : void 0,
41
- checked: isActive,
42
- children: page
43
- }
44
- ) });
45
- }
46
- );
47
- PaginationItem.displayName = "PaginationItem";
48
-
49
- const styles$3 = {
50
- "pagination-item-overflow-menu": "_pagination-item-overflow-menu_ainsh_2",
51
- "pagination-item-overflow-menu-content": "_pagination-item-overflow-menu-content_ainsh_7"
52
- };
53
-
54
- const PaginationOverflowMenu = forwardRef((props, ref) => {
55
- const { startPage, endPage, length, onItemClick, ...rest } = props;
56
- return /* @__PURE__ */ jsx("li", { className: styles$3["pagination-item-overflow-menu"], ref, ...rest, children: /* @__PURE__ */ jsx(
57
- Menu,
58
- {
59
- icon: SvgMoreHoriz,
60
- size: "small",
61
- appearance: "ghost",
62
- maxHeight: 200,
63
- contentClassName: styles$3["pagination-item-overflow-menu-content"],
64
- "aria-label": "More pages",
65
- children: Array.from({ length }).map((_, index) => /* @__PURE__ */ jsx(
66
- Menu.Item,
67
- {
68
- label: `${startPage + index}`,
69
- onClick: () => {
70
- onItemClick(startPage + index);
71
- }
72
- },
73
- index
74
- ))
75
- },
76
- `${startPage}-${endPage}`
77
- ) });
78
- });
79
- PaginationOverflowMenu.displayName = "PaginationOverflowMenu";
80
-
81
- const styles$2 = {
82
- "pagination-items-per-page-button": "_pagination-items-per-page-button_8rijc_2"
83
- };
84
-
85
- const PaginationItemsPerPageMenu = forwardRef((props, ref) => {
86
- const { itemsPerPage, itemsPerPageOptions, onItemsPerPageChange } = props;
87
- return /* @__PURE__ */ jsxs(Flex, { alignItems: "center", gap: "2", ref, children: [
88
- /* @__PURE__ */ jsx(Text, { size: "small", children: "Rows per page" }),
89
- /* @__PURE__ */ jsx(
90
- Menu,
91
- {
92
- trigger: ({ ref: ref2, ...rest }) => {
93
- return /* @__PURE__ */ jsx(
94
- Button,
95
- {
96
- ref: ref2,
97
- ...rest,
98
- className: styles$2["pagination-items-per-page-button"],
99
- appearance: "ghost",
100
- icon: { after: SvgKeyboardArrowDown },
101
- size: "small",
102
- children: itemsPerPage
103
- }
104
- );
105
- },
106
- children: itemsPerPageOptions.map((option) => /* @__PURE__ */ jsx(
107
- Menu.Item,
108
- {
109
- label: option,
110
- onClick: () => {
111
- onItemsPerPageChange?.(option);
112
- }
113
- },
114
- option
115
- ))
116
- }
117
- )
118
- ] });
119
- });
120
- PaginationItemsPerPageMenu.displayName = "PaginationItemsPerPageMenu";
121
-
122
- const styles$1 = {
123
- "pagination-list": "_pagination-list_tabhr_2"
124
- };
125
-
126
- const PaginationList = forwardRef(
127
- (props, ref) => {
128
- const { page, totalPages, children, onPageChange, className } = props;
129
- const paginationListClassName = cx(styles$1["pagination-list"], className);
130
- return /* @__PURE__ */ jsxs(Fragment, { children: [
131
- /* @__PURE__ */ jsx(
132
- Button,
133
- {
134
- appearance: "ghost",
135
- icon: SvgKeyboardArrowLeft,
136
- size: "small",
137
- "aria-label": "Previous page",
138
- disabled: page === 1,
139
- onClick: () => {
140
- if (page > 1) {
141
- onPageChange?.(page - 1);
142
- }
143
- }
144
- }
145
- ),
146
- /* @__PURE__ */ jsx("ul", { ref, className: paginationListClassName, children }),
147
- /* @__PURE__ */ jsx(
148
- Button,
149
- {
150
- appearance: "ghost",
151
- icon: SvgKeyboardArrowRight,
152
- size: "small",
153
- "aria-label": "Next page",
154
- disabled: page === totalPages,
155
- onClick: () => {
156
- if (page < totalPages) {
157
- onPageChange?.(page + 1);
158
- }
159
- }
160
- }
161
- )
162
- ] });
163
- }
164
- );
165
- PaginationList.displayName = "PaginationList";
166
-
167
- const styles$6 = {
168
- "pagination-total-count": "_pagination-total-count_efq0t_2"
169
- };
170
-
171
- const PaginationTotalCount = ({
172
- firstItem,
173
- lastItem,
174
- totalCount,
175
- className
176
- }) => {
177
- const paginationTotalCountClassName = cx(
178
- styles$6["pagination-total-count"],
179
- className
180
- );
181
- return /* @__PURE__ */ jsxs(
182
- Text,
183
- {
184
- size: "small",
185
- "aria-live": "polite",
186
- "aria-atomic": "true",
187
- className: paginationTotalCountClassName,
188
- children: [
189
- firstItem,
190
- " - ",
191
- lastItem,
192
- " ",
193
- totalCount ? `of ${totalCount}` : "",
194
- " items"
195
- ]
196
- }
197
- );
198
- };
199
-
200
- const PaginationElement = forwardRef(
201
- (props, ref) => {
202
- const { className, children, ...rest } = props;
203
- const paginationClassName = cx(styles$5.pagination, className);
204
- return /* @__PURE__ */ jsx("nav", { ref, className: paginationClassName, ...rest, children });
205
- }
206
- );
207
- PaginationElement.displayName = "Pagination";
208
- const Pagination$1 = Object.assign(PaginationElement, {
209
- List: PaginationList,
210
- Item: PaginationItem,
211
- OverflowMenu: PaginationOverflowMenu,
212
- ItemsPerPageMenu: PaginationItemsPerPageMenu,
213
- TotalCount: PaginationTotalCount
214
- });
215
-
216
- const usePaginationArray = ({
217
- page,
218
- totalPages,
219
- maxArrayLength = 7
220
- }) => {
221
- const prevRef = useRef(null);
222
- return useMemo(() => {
223
- const maxPagesToShow = maxArrayLength - 2;
224
- let result = [];
225
- const addRange = (start, end) => {
226
- const count = end - start + 1;
227
- if (count === 1) {
228
- result.push({ type: "page", page: start });
229
- } else if (count >= 2) {
230
- result.push({
231
- type: "overflow",
232
- startPage: start,
233
- endPage: end,
234
- length: count
235
- });
236
- }
237
- };
238
- if (totalPages <= maxArrayLength) {
239
- result = Array.from({ length: totalPages }, (_, i) => ({
240
- type: "page",
241
- page: i + 1
242
- }));
243
- } else if (page <= maxPagesToShow) {
244
- for (let i = 1; i <= maxPagesToShow; i++) {
245
- result.push({ type: "page", page: i });
246
- }
247
- addRange(maxArrayLength - 1, totalPages - 1);
248
- result.push({ type: "page", page: totalPages });
249
- } else if (page >= totalPages - maxPagesToShow + 1) {
250
- result.push({ type: "page", page: 1 });
251
- addRange(2, totalPages - maxPagesToShow);
252
- for (let i = totalPages - (maxPagesToShow - 1); i <= totalPages; i++) {
253
- result.push({ type: "page", page: i });
254
- }
255
- } else {
256
- result.push({ type: "page", page: 1 });
257
- addRange(2, page - 2);
258
- result.push({ type: "page", page: page - 1 });
259
- result.push({ type: "page", page });
260
- result.push({ type: "page", page: page + 1 });
261
- addRange(page + 2, totalPages - 1);
262
- result.push({ type: "page", page: totalPages });
263
- }
264
- const prev = prevRef.current;
265
- let shouldRemakeForJump = false;
266
- if (prev && prev.totalPages === totalPages && prev.maxArrayLength === maxArrayLength) {
267
- const start = Math.min(prev.prevPage, page);
268
- const end = Math.max(prev.prevPage, page);
269
- const hasOverflowBetween = prev.array.some(
270
- (item) => item.type === "overflow" && // Check if overflow intersects with the range (not completely covers)
271
- !(item.endPage < start || item.startPage > end)
272
- );
273
- const newPageInOverflow = prev.array.some(
274
- (item) => item.type === "overflow" && item.startPage <= page && item.endPage >= page
275
- );
276
- shouldRemakeForJump = hasOverflowBetween || newPageInOverflow;
277
- }
278
- if (shouldRemakeForJump) {
279
- prevRef.current = {
280
- array: result,
281
- totalPages,
282
- maxArrayLength,
283
- prevPage: page
284
- };
285
- return result;
286
- }
287
- if (prev && prev.totalPages === totalPages && prev.maxArrayLength === maxArrayLength && prev.array.some((item) => item.type === "page" && item.page === page)) {
288
- return prev.array;
289
- }
290
- prevRef.current = {
291
- array: result,
292
- totalPages,
293
- maxArrayLength,
294
- prevPage: page
295
- };
296
- return result;
297
- }, [page, totalPages, maxArrayLength]);
298
- };
299
-
300
- const pagination = "_pagination_1pkjs_1";
301
- const styles = {
302
- pagination: pagination
303
- };
304
-
305
- const Pagination = forwardRef(
306
- (props, ref) => {
307
- const {
308
- "aria-label": ariaLabel,
309
- page,
310
- itemsPerPage,
311
- itemsPerPageOptions,
312
- totalItemCount: totalItemCountProp,
313
- showCount,
314
- onPageChange,
315
- onItemsPerPageChange,
316
- className,
317
- ...rest
318
- } = props;
319
- const data = {
320
- "aria-label": ariaLabel
321
- };
322
- const trackingId = useTrackingId({
323
- name: "Pagination",
324
- data,
325
- hasOverride: !!rest["data-tracking-id"]
326
- });
327
- const totalItemCount = totalItemCountProp ?? 0;
328
- const totalPages = Math.ceil(totalItemCount / itemsPerPage);
329
- const elRef = useRef(null);
330
- const combinedRef = useMergeRefs([elRef, ref]);
331
- const [isNarrow, setIsNarrow] = useState(false);
332
- const pageArray = usePaginationArray({
333
- page,
334
- totalPages,
335
- maxArrayLength: 7
336
- });
337
- const isPageAvailable = pageArray.some(
338
- (item) => item.type === "page" && item.page === page
339
- );
340
- if (!isPageAvailable && page !== 1 && totalPages > 0) {
341
- requestAnimationFrame(() => {
342
- onPageChange?.(1);
343
- });
344
- }
345
- const firstItem = 1 + (page - 1) * itemsPerPage;
346
- const lastItem = firstItem - 1 + itemsPerPage;
347
- const itemRangeText = `${firstItem} - ${lastItem} ${totalItemCount ? `of ${totalItemCount}` : ""} items`;
348
- useLayoutEffect(() => {
349
- const resizeObserver = new ResizeObserver((entries) => {
350
- const entry = entries[0];
351
- if (entry) {
352
- setIsNarrow(
353
- entry.contentRect.width < Number(BreakpointSm.value.replace("px", ""))
354
- );
355
- }
356
- });
357
- if (elRef.current) {
358
- resizeObserver.observe(elRef.current);
359
- }
360
- return () => {
361
- resizeObserver.disconnect();
362
- };
363
- }, []);
364
- return /* @__PURE__ */ jsxs(
365
- Pagination$1,
366
- {
367
- ref: combinedRef,
368
- "data-tracking-id": trackingId,
369
- className: cx(styles.pagination, className),
370
- children: [
371
- /* @__PURE__ */ jsx(
372
- Pagination$1.List,
373
- {
374
- page,
375
- totalPages,
376
- onPageChange: (page2) => onPageChange?.(page2),
377
- className: styles.paginationList,
378
- children: pageArray.map((item) => {
379
- if (item.type === "page") {
380
- return /* @__PURE__ */ jsx(
381
- Pagination$1.Item,
382
- {
383
- page: item.page,
384
- isActive: item.page === page,
385
- onClick: () => onPageChange?.(item.page)
386
- },
387
- item.page
388
- );
389
- }
390
- return /* @__PURE__ */ jsx(
391
- Pagination$1.OverflowMenu,
392
- {
393
- startPage: item.startPage,
394
- endPage: item.endPage,
395
- length: item.length,
396
- onItemClick: (item2) => onPageChange?.(item2)
397
- },
398
- item.startPage
399
- );
400
- })
401
- }
402
- ),
403
- isNarrow === false && /* @__PURE__ */ jsxs(Fragment, { children: [
404
- itemsPerPageOptions && /* @__PURE__ */ jsx(
405
- Pagination$1.ItemsPerPageMenu,
406
- {
407
- itemsPerPage,
408
- itemsPerPageOptions,
409
- onItemsPerPageChange: (itemsPerPage2) => onItemsPerPageChange?.(itemsPerPage2)
410
- }
411
- ),
412
- showCount && /* @__PURE__ */ jsx(
413
- Pagination$1.TotalCount,
414
- {
415
- firstItem,
416
- lastItem,
417
- totalCount: totalItemCount
418
- }
419
- )
420
- ] }),
421
- !showCount || isNarrow ? /* @__PURE__ */ jsx(SrOnly, { "aria-live": "polite", "aria-atomic": "true", children: itemRangeText }) : null
422
- ]
423
- }
424
- );
425
- }
426
- );
427
- Pagination.displayName = "Pagination";
428
-
429
- export { Pagination, Pagination as default };
1
+ export { P as Pagination, P as default } from './Pagination-DU_qvFRR.js';
430
2
  //# sourceMappingURL=Pagination.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Pagination.js","sources":["../../hammer-react/dist/Pagination-BaxseNqz.js","../src/components/Pagination/internal/usePaginationArray.ts","../src/components/Pagination/Pagination.tsx"],"sourcesContent":["import { jsx, jsxs, Fragment } from 'react/jsx-runtime';\nimport { forwardRef } from 'react';\nimport cx from 'classnames';\nimport { B as ButtonToggle } from './ButtonToggle-Bm4KRl3o.js';\nimport { M as Menu } from './Menu-TtVJnSrA.js';\nimport IconMoreHoriz from '@servicetitan/hammer-icon/mdi/round/more_horiz.svg';\nimport IconKeyboardArrowDown from '@servicetitan/hammer-icon/mdi/round/keyboard_arrow_down.svg';\nimport { B as Button } from './Button-BaHFf1AT.js';\nimport { T as Text } from './Text-CED_yrId.js';\nimport { F as Flex } from './Flex-CiK7uNUu.js';\nimport Prev from '@servicetitan/hammer-icon/mdi/round/keyboard_arrow_left.svg';\nimport Next from '@servicetitan/hammer-icon/mdi/round/keyboard_arrow_right.svg';\n\nimport './Pagination.css';const pagination = \"_pagination_1gk5t_2\";\nconst styles$5 = {\n\tpagination: pagination\n};\n\nconst styles$4 = {\n\t\"pagination-item\": \"_pagination-item_1fk4w_2\",\n\t\"pagination-item-button\": \"_pagination-item-button_1fk4w_15\"\n};\n\nconst PaginationItem = forwardRef(\n (props, ref) => {\n const { page, isActive, onClick, className, ...rest } = props;\n const paginationClassName = cx(styles$4[\"pagination-item\"], className);\n const paginationButtonClassName = cx(styles$4[\"pagination-item-button\"], {\n [styles$4.active]: isActive\n });\n return /* @__PURE__ */ jsx(\"li\", { ref, ...rest, className: paginationClassName, children: /* @__PURE__ */ jsx(\n ButtonToggle,\n {\n className: paginationButtonClassName,\n size: \"small\",\n onClick,\n \"aria-current\": isActive ? \"page\" : void 0,\n checked: isActive,\n children: page\n }\n ) });\n }\n);\nPaginationItem.displayName = \"PaginationItem\";\n\nconst styles$3 = {\n\t\"pagination-item-overflow-menu\": \"_pagination-item-overflow-menu_ainsh_2\",\n\t\"pagination-item-overflow-menu-content\": \"_pagination-item-overflow-menu-content_ainsh_7\"\n};\n\nconst PaginationOverflowMenu = forwardRef((props, ref) => {\n const { startPage, endPage, length, onItemClick, ...rest } = props;\n return /* @__PURE__ */ jsx(\"li\", { className: styles$3[\"pagination-item-overflow-menu\"], ref, ...rest, children: /* @__PURE__ */ jsx(\n Menu,\n {\n icon: IconMoreHoriz,\n size: \"small\",\n appearance: \"ghost\",\n maxHeight: 200,\n contentClassName: styles$3[\"pagination-item-overflow-menu-content\"],\n \"aria-label\": \"More pages\",\n children: Array.from({ length }).map((_, index) => /* @__PURE__ */ jsx(\n Menu.Item,\n {\n label: `${startPage + index}`,\n onClick: () => {\n onItemClick(startPage + index);\n }\n },\n index\n ))\n },\n `${startPage}-${endPage}`\n ) });\n});\nPaginationOverflowMenu.displayName = \"PaginationOverflowMenu\";\n\nconst styles$2 = {\n\t\"pagination-items-per-page-button\": \"_pagination-items-per-page-button_8rijc_2\"\n};\n\nconst PaginationItemsPerPageMenu = forwardRef((props, ref) => {\n const { itemsPerPage, itemsPerPageOptions, onItemsPerPageChange } = props;\n return /* @__PURE__ */ jsxs(Flex, { alignItems: \"center\", gap: \"2\", ref, children: [\n /* @__PURE__ */ jsx(Text, { size: \"small\", children: \"Rows per page\" }),\n /* @__PURE__ */ jsx(\n Menu,\n {\n trigger: ({ ref: ref2, ...rest }) => {\n return /* @__PURE__ */ jsx(\n Button,\n {\n ref: ref2,\n ...rest,\n className: styles$2[\"pagination-items-per-page-button\"],\n appearance: \"ghost\",\n icon: { after: IconKeyboardArrowDown },\n size: \"small\",\n children: itemsPerPage\n }\n );\n },\n children: itemsPerPageOptions.map((option) => /* @__PURE__ */ jsx(\n Menu.Item,\n {\n label: option,\n onClick: () => {\n onItemsPerPageChange?.(option);\n }\n },\n option\n ))\n }\n )\n ] });\n});\nPaginationItemsPerPageMenu.displayName = \"PaginationItemsPerPageMenu\";\n\nconst styles$1 = {\n\t\"pagination-list\": \"_pagination-list_tabhr_2\"\n};\n\nconst PaginationList = forwardRef(\n (props, ref) => {\n const { page, totalPages, children, onPageChange, className } = props;\n const paginationListClassName = cx(styles$1[\"pagination-list\"], className);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n Button,\n {\n appearance: \"ghost\",\n icon: Prev,\n size: \"small\",\n \"aria-label\": \"Previous page\",\n disabled: page === 1,\n onClick: () => {\n if (page > 1) {\n onPageChange?.(page - 1);\n }\n }\n }\n ),\n /* @__PURE__ */ jsx(\"ul\", { ref, className: paginationListClassName, children }),\n /* @__PURE__ */ jsx(\n Button,\n {\n appearance: \"ghost\",\n icon: Next,\n size: \"small\",\n \"aria-label\": \"Next page\",\n disabled: page === totalPages,\n onClick: () => {\n if (page < totalPages) {\n onPageChange?.(page + 1);\n }\n }\n }\n )\n ] });\n }\n);\nPaginationList.displayName = \"PaginationList\";\n\nconst styles = {\n\t\"pagination-total-count\": \"_pagination-total-count_efq0t_2\"\n};\n\nconst PaginationTotalCount = ({\n firstItem,\n lastItem,\n totalCount,\n className\n}) => {\n const paginationTotalCountClassName = cx(\n styles[\"pagination-total-count\"],\n className\n );\n return /* @__PURE__ */ jsxs(\n Text,\n {\n size: \"small\",\n \"aria-live\": \"polite\",\n \"aria-atomic\": \"true\",\n className: paginationTotalCountClassName,\n children: [\n firstItem,\n \" - \",\n lastItem,\n \" \",\n totalCount ? `of ${totalCount}` : \"\",\n \" items\"\n ]\n }\n );\n};\n\nconst PaginationElement = forwardRef(\n (props, ref) => {\n const { className, children, ...rest } = props;\n const paginationClassName = cx(styles$5.pagination, className);\n return /* @__PURE__ */ jsx(\"nav\", { ref, className: paginationClassName, ...rest, children });\n }\n);\nPaginationElement.displayName = \"Pagination\";\nconst Pagination = Object.assign(PaginationElement, {\n List: PaginationList,\n Item: PaginationItem,\n OverflowMenu: PaginationOverflowMenu,\n ItemsPerPageMenu: PaginationItemsPerPageMenu,\n TotalCount: PaginationTotalCount\n});\n\nexport { Pagination as P };\n//# sourceMappingURL=Pagination-BaxseNqz.js.map\n","import { useMemo, useRef } from \"react\";\n\nexport type PageArrayItem =\n | { type: \"page\"; page: number }\n | { type: \"overflow\"; startPage: number; endPage: number; length: number };\n\n/**\n * Custom hook for managing pagination array state and generation.\n *\n * Features:\n * - Automatically generates pagination array based on current page and total pages\n * - Avoids unnecessary regeneration if the current page is already visible\n * - Updates array when page or total pages change and the visible set must change\n * - Handles jumps to first/last page with overflow between current and target\n * - Provides stable reference for the current pagination array\n *\n * @param page The currently selected page\n * @param totalPages Total number of pages\n * @param maxArrayLength Maximum length of the pagination array (including overflows)\n * @returns The current pagination array\n *\n * @example\n * const pageArray = usePaginationArray({\n * page: 5,\n * totalPages: 10,\n * maxArrayLength: 7\n * });\n */\nexport const usePaginationArray = ({\n page,\n totalPages,\n maxArrayLength = 7,\n}: {\n page: number;\n totalPages: number;\n maxArrayLength?: number;\n}): PageArrayItem[] => {\n const prevRef = useRef<{\n array: PageArrayItem[];\n totalPages: number;\n maxArrayLength: number;\n prevPage: number;\n } | null>(null);\n\n return useMemo(() => {\n const maxPagesToShow = maxArrayLength - 2;\n let result: PageArrayItem[] = [];\n const addRange = (start: number, end: number) => {\n const count = end - start + 1;\n if (count === 1) {\n result.push({ type: \"page\", page: start });\n } else if (count >= 2) {\n result.push({\n type: \"overflow\",\n startPage: start,\n endPage: end,\n length: count,\n });\n }\n };\n\n if (totalPages <= maxArrayLength) {\n result = Array.from({ length: totalPages }, (_, i) => ({\n type: \"page\" as const,\n page: i + 1,\n }));\n } else if (page <= maxPagesToShow) {\n // Leading section\n for (let i = 1; i <= maxPagesToShow; i++) {\n result.push({ type: \"page\", page: i });\n }\n addRange(maxArrayLength - 1, totalPages - 1);\n result.push({ type: \"page\", page: totalPages });\n } else if (page >= totalPages - maxPagesToShow + 1) {\n // Trailing section\n result.push({ type: \"page\", page: 1 });\n addRange(2, totalPages - maxPagesToShow);\n for (let i = totalPages - (maxPagesToShow - 1); i <= totalPages; i++) {\n result.push({ type: \"page\", page: i });\n }\n } else {\n // Middle section\n result.push({ type: \"page\", page: 1 });\n addRange(2, page - 2);\n result.push({ type: \"page\", page: page - 1 });\n result.push({ type: \"page\", page: page });\n result.push({ type: \"page\", page: page + 1 });\n addRange(page + 2, totalPages - 1);\n result.push({ type: \"page\", page: totalPages });\n }\n\n const prev = prevRef.current;\n\n // Check if we should remake array due to overflow between pages or new page being in overflow\n let shouldRemakeForJump = false;\n if (\n prev &&\n prev.totalPages === totalPages &&\n prev.maxArrayLength === maxArrayLength\n ) {\n // Check if there is overflow between the new page and the current page\n const start = Math.min(prev.prevPage, page);\n const end = Math.max(prev.prevPage, page);\n const hasOverflowBetween = prev.array.some(\n (item) =>\n item.type === \"overflow\" &&\n // Check if overflow intersects with the range (not completely covers)\n !(item.endPage < start || item.startPage > end),\n );\n\n // Check if the new page is part of an overflow\n const newPageInOverflow = prev.array.some(\n (item) =>\n item.type === \"overflow\" &&\n item.startPage <= page &&\n item.endPage >= page,\n );\n\n shouldRemakeForJump = hasOverflowBetween || newPageInOverflow;\n }\n\n // If we should remake for jump, always return the new array\n if (shouldRemakeForJump) {\n prevRef.current = {\n array: result,\n totalPages,\n maxArrayLength,\n prevPage: page,\n };\n return result;\n }\n\n // Optimization: if the new page is already present in the previous array, reuse the array\n if (\n prev &&\n prev.totalPages === totalPages &&\n prev.maxArrayLength === maxArrayLength &&\n prev.array.some((item) => item.type === \"page\" && item.page === page)\n ) {\n return prev.array;\n }\n\n prevRef.current = {\n array: result,\n totalPages,\n maxArrayLength,\n prevPage: page,\n };\n return result;\n }, [page, totalPages, maxArrayLength]);\n};\n","import {\n Pagination as CorePagination,\n useMergeRefs,\n type PaginationProps as CorePaginationProps,\n} from \"@servicetitan/hammer-react\";\nimport { DataTrackingId } from \"../../types/DataTrackingId\";\nimport { forwardRef, useLayoutEffect, useRef, useState } from \"react\";\nimport { useTrackingId } from \"../../hooks/useTrackingId\";\nimport { usePaginationArray } from \"./internal/usePaginationArray\";\nimport { SrOnly } from \"../SrOnly\";\nimport styles from \"./Pagination.module.scss\";\nimport cx from \"classnames\";\nimport { core } from \"@servicetitan/hammer-token\";\n\n/**\n * Props for the Pagination component\n * @property {number} page - The current page number\n * @property {number} itemsPerPage - Number of items displayed per page\n * @property {number[]} [itemsPerPageOptions] - Available options for items per page selection\n * @property {number} [totalItemCount] - Total number of items across all pages\n * @property {boolean} [showCount] - Whether to display the item count information\n * @property {(page: number) => void} [onPageChange] - Callback when page changes\n * @property {(page: number) => void} [onNextClick] - Callback when next button is clicked\n * @property {(itemsPerPage: number) => void} [onItemsPerPageChange] - Callback when items per page changes\n * @property {(page: number) => void} [onPreviousClick] - Callback when previous button is clicked\n * @extends Omit<CorePaginationProps, \"children\">\n * @extends DataTrackingId\n */\nexport type PaginationProps = Omit<CorePaginationProps, \"children\"> &\n DataTrackingId & {\n page: number;\n itemsPerPage: number;\n itemsPerPageOptions?: number[];\n totalItemCount?: number;\n showCount?: boolean;\n onPageChange?: (page: number) => void;\n onItemsPerPageChange?: (itemsPerPage: number) => void;\n };\n\n/**\n * Pagination component for navigating through paginated content with automatic page array generation.\n *\n * Features:\n * - Automatic page array generation with overflow handling\n * - Supports items per page selection with customizable options\n * - Displays item count information with screen reader support\n * - Handles edge cases like invalid page numbers\n * - Includes previous/next navigation buttons\n * - Supports overflow menus for large page ranges\n * - Fully accessible with proper ARIA attributes\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <Pagination\n * page={1}\n * itemsPerPage={10}\n * totalItemCount={100}\n * itemsPerPageOptions={[10, 20, 50]}\n * showCount={true}\n * onPageChange={(page) => console.log('Page changed to:', page)}\n * onItemsPerPageChange={(itemsPerPage) => console.log('Items per page:', itemsPerPage)}\n * />\n */\nexport const Pagination = forwardRef<HTMLDivElement, PaginationProps>(\n (props, ref) => {\n const {\n \"aria-label\": ariaLabel,\n page,\n itemsPerPage,\n itemsPerPageOptions,\n totalItemCount: totalItemCountProp,\n showCount,\n onPageChange,\n onItemsPerPageChange,\n className,\n ...rest\n } = props;\n\n const data = {\n \"aria-label\": ariaLabel,\n };\n\n const trackingId = useTrackingId({\n name: \"Pagination\",\n data,\n hasOverride: !!rest[\"data-tracking-id\"],\n });\n const totalItemCount = totalItemCountProp ?? 0;\n const totalPages = Math.ceil(totalItemCount / itemsPerPage);\n const elRef = useRef<HTMLDivElement>(null);\n const combinedRef = useMergeRefs([elRef, ref]);\n const [isNarrow, setIsNarrow] = useState(false);\n\n const pageArray = usePaginationArray({\n page,\n totalPages,\n maxArrayLength: 7,\n });\n\n // Check if current page is available in the pageArray, fallback to page 1 if not\n const isPageAvailable = pageArray.some(\n (item) => item.type === \"page\" && item.page === page,\n );\n\n if (!isPageAvailable && page !== 1 && totalPages > 0) {\n // Use requestAnimationFrame to avoid calling onPageChange during render\n requestAnimationFrame(() => {\n onPageChange?.(1);\n });\n }\n\n const firstItem = 1 + (page - 1) * itemsPerPage;\n const lastItem = firstItem - 1 + itemsPerPage;\n const itemRangeText = `${firstItem} - ${lastItem} ${\n totalItemCount ? `of ${totalItemCount}` : \"\"\n } items`;\n\n useLayoutEffect(() => {\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n setIsNarrow(\n entry.contentRect.width <\n Number(core.primitive.BreakpointSm.value.replace(\"px\", \"\")),\n );\n }\n });\n if (elRef.current) {\n resizeObserver.observe(elRef.current);\n }\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n\n return (\n <CorePagination\n ref={combinedRef}\n data-tracking-id={trackingId}\n className={cx(styles.pagination, className)}\n >\n <CorePagination.List\n page={page}\n totalPages={totalPages}\n onPageChange={(page) => onPageChange?.(page)}\n className={styles.paginationList}\n >\n {pageArray.map((item) => {\n if (item.type === \"page\") {\n return (\n <CorePagination.Item\n key={item.page}\n page={item.page}\n isActive={item.page === page}\n onClick={() => onPageChange?.(item.page)}\n />\n );\n }\n return (\n <CorePagination.OverflowMenu\n key={item.startPage}\n startPage={item.startPage}\n endPage={item.endPage}\n length={item.length}\n onItemClick={(item) => onPageChange?.(item)}\n />\n );\n })}\n </CorePagination.List>\n {isNarrow === false && (\n <>\n {itemsPerPageOptions && (\n <CorePagination.ItemsPerPageMenu\n itemsPerPage={itemsPerPage}\n itemsPerPageOptions={itemsPerPageOptions}\n onItemsPerPageChange={(itemsPerPage) =>\n onItemsPerPageChange?.(itemsPerPage)\n }\n />\n )}\n {showCount && (\n <CorePagination.TotalCount\n firstItem={firstItem}\n lastItem={lastItem}\n totalCount={totalItemCount}\n />\n )}\n </>\n )}\n {!showCount || isNarrow ? (\n <SrOnly aria-live=\"polite\" aria-atomic=\"true\">\n {itemRangeText}\n </SrOnly>\n ) : null}\n </CorePagination>\n );\n },\n);\n\nPagination.displayName = \"Pagination\";\n"],"names":["pagination","IconMoreHoriz","IconKeyboardArrowDown","Prev","Next","styles","Pagination","core.primitive.BreakpointSm","CorePagination","page","item","itemsPerPage"],"mappings":"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"}
1
+ {"version":3,"file":"Pagination.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M16.104 13.373a.194.194 0 0 1 .254.115l.376 1.035a.21.21 0 0 1-.117.26q-.19.081-.368.185l-.026.017a3.5 3.5 0 1 0 3.87 5.82.21.21 0 0 1 .285.03l.707.84c.07.085.06.212-.027.28a5 5 0 0 1-.559.374v.001l-.071.04-.132.07q-.052.026-.104.051a6 6 0 0 1-.322.145l-.09.035q-.034.014-.068.027l-.004-.002c-.957.349-2.005.401-3.002.134a5.003 5.003 0 0 1-3.536-6.124 5 5 0 0 1 1.616-2.535l.001-.001.065-.054.054-.043q.17-.133.35-.253l.044-.029q.38-.244.803-.418m-4.57 1.948-.182.486a7 7 0 0 0-.218 3.558l.12.504A7 7 0 0 0 12.26 22H5c-.55 0-1-.45-1-1v-2c0-2.556 4.921-3.89 7.675-3.991q-.075.154-.142.312m9.683 4.062a.21.21 0 0 1 .262-.117l1.032.376a.194.194 0 0 1 .116.255 5 5 0 0 1-.672 1.16.194.194 0 0 1-.278.027l-.842-.706a.21.21 0 0 1-.028-.285 3.5 3.5 0 0 0 .41-.71m-.856-4.013a.196.196 0 0 1 .269.269c-.575.985-1.648 2.794-1.932 3.073a1 1 0 0 1-1.402-1.426c.284-.28 2.083-1.343 3.065-1.916m2.366 1.795a.195.195 0 0 1 .227.163q.046.33.047.672-.001.341-.047.67a.194.194 0 0 1-.227.164l-1.082-.19a.21.21 0 0 1-.168-.232 3.6 3.6 0 0 0 0-.824.21.21 0 0 1 .168-.233zM18 13q.34 0 .67.046c.11.015.182.119.163.227l-.189 1.082a.21.21 0 0 1-.232.168 3.6 3.6 0 0 0-.825 0 .21.21 0 0 1-.233-.168l-.189-1.082a.194.194 0 0 1 .163-.227q.33-.045.672-.046M12 1a6 6 0 0 1 5.811 4.5H20a1 1 0 1 1 0 2h-2.023A5.999 5.999 0 0 1 6 7a6 6 0 0 1 6-6M8.043 7.5C8.339 9.312 10.179 11 12 11s3.66-1.688 3.957-3.5z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M16.104 13.373a.195.195 0 0 1 .254.115l.376 1.035a.21.21 0 0 1-.117.261 3.502 3.502 0 0 0-1.648 4.966 3.5 3.5 0 0 0 4.45 1.448q.038-.016.074-.034.055-.024.109-.052.258-.132.49-.306a.21.21 0 0 1 .286.029l.707.84c.07.085.06.212-.027.28a5 5 0 0 1-.559.374l.001.001q-.13.075-.263.14l-.082.039a5 5 0 0 1-.208.093q-.025.013-.05.024l-.011.003a5 5 0 0 1-3.18.201 5.003 5.003 0 0 1-3.536-6.124 5 5 0 0 1 1.76-2.651l.012-.011.064-.047q.08-.06.161-.115l.074-.05a5 5 0 0 1 .863-.459m-4.57 1.948-.182.486a7 7 0 0 0-.286 1.248c-1.014.108-2.259.378-3.324.804-.71.285-1.215.591-1.51.864-.262.24-.237.333-.232.29V20h5.296a7 7 0 0 0 .964 2H5c-.55 0-1-.45-1-1v-2c0-2.556 4.921-3.89 7.675-3.991q-.075.154-.142.312m9.683 4.062a.21.21 0 0 1 .262-.117l1.032.376a.195.195 0 0 1 .116.255c-.172.418-.4.808-.672 1.16a.194.194 0 0 1-.278.027l-.842-.706a.21.21 0 0 1-.028-.285q.245-.33.41-.71m-.856-4.013a.196.196 0 0 1 .269.269c-.575.985-1.648 2.794-1.932 3.073a1 1 0 0 1-1.402-1.426c.284-.28 2.083-1.343 3.065-1.916m2.366 1.795a.195.195 0 0 1 .227.163q.046.33.047.672-.001.342-.047.67a.195.195 0 0 1-.227.164l-1.082-.19a.21.21 0 0 1-.168-.232 3.6 3.6 0 0 0 0-.824.21.21 0 0 1 .168-.233zM18 13q.34 0 .67.046c.109.015.182.119.163.227l-.189 1.082a.21.21 0 0 1-.232.168 3.6 3.6 0 0 0-.825 0 .21.21 0 0 1-.233-.168l-.189-1.082a.194.194 0 0 1 .163-.227q.33-.045.672-.046M12 1a6 6 0 0 1 5.811 4.5H20a1 1 0 1 1 0 2h-2.023A5.999 5.999 0 0 1 6 7a6 6 0 0 1 6-6M8.043 7.5C8.339 9.312 10.179 11 12 11s3.66-1.688 3.957-3.5z"/></svg>
@@ -52,6 +52,8 @@ export { default as icon_gnav_dial_pad_inactive_outline } from "./st/gnav_dial_p
52
52
  export { default as icon_gnav_dial_pad_outline } from "./st/gnav_dial_pad_outline.svg";
53
53
  export { default as icon_gnav_dispatch_active } from "./st/gnav_dispatch_active.svg";
54
54
  export { default as icon_gnav_dispatch_inactive } from "./st/gnav_dispatch_inactive.svg";
55
+ export { default as icon_gnav_field_pro_active } from "./st/gnav_field_pro_active.svg";
56
+ export { default as icon_gnav_field_pro_inactive } from "./st/gnav_field_pro_inactive.svg";
55
57
  export { default as icon_gnav_fleet_pro_active } from "./st/gnav_fleet_pro_active.svg";
56
58
  export { default as icon_gnav_fleet_pro_inactive } from "./st/gnav_fleet_pro_inactive.svg";
57
59
  export { default as icon_gnav_follow_up_active } from "./st/gnav_follow_up_active.svg";
@@ -37,6 +37,7 @@ export * from './ListView';
37
37
  export * from './Menu';
38
38
  export * from './Overflow';
39
39
  export * from './Page';
40
+ export * from './Pagination';
40
41
  export * from './Popover';
41
42
  export * from './ProgressBar';
42
43
  export * from './Radio';
package/dist/index.js CHANGED
@@ -13,9 +13,9 @@ export { C as Checkbox, a as CheckboxGroup } from './Checkbox-zg8LVvB6.js';
13
13
  export { C as Chip } from './Chip-DXQiqF8k.js';
14
14
  export { C as Combobox, c as ComboboxContent, a as ComboboxElement, i as ComboboxEmpty, g as ComboboxItem, h as ComboboxItemAddNew, f as ComboboxList, d as ComboboxSearchField, b as ComboboxSelect, e as ComboboxSelectTrigger, u as useInfiniteCombobox } from './Combobox-D2aSaDkz.js';
15
15
  export { D as DateField } from './DateField-D28_sa7P.js';
16
- export { D as DateFieldRange } from './DateFieldRange-CgVqJrVg.js';
17
- export { D as DateFieldSingle } from './DateFieldSingle-CLoWDlPO.js';
18
- export { D as DateFieldYearless } from './DateFieldYearless-CXlUH0c7.js';
16
+ export { D as DateFieldRange } from './DateFieldRange--oSGfjYa.js';
17
+ export { D as DateFieldSingle } from './DateFieldSingle-0a8Bk7Yj.js';
18
+ export { D as DateFieldYearless } from './DateFieldYearless-DCv9WJdu.js';
19
19
  export { D as DaysOfTheWeek } from './DaysOfTheWeek-ImBPjEvl.js';
20
20
  export { D as Details, b as DetailsContent, a as DetailsSummary } from './Details-DVg0EOkv.js';
21
21
  export { D as Dialog, d as DialogCancelButton, c as DialogContent, b as DialogFooter, a as DialogHeader } from './Dialog-BR6f-XRH.js';
@@ -37,6 +37,7 @@ export { L as ListView, a as ListViewOption, b as ListViewOptionCell } from './L
37
37
  export { M as Menu, a as MenuItem } from './Menu-DHCOMJx2.js';
38
38
  export { O as Overflow, a as OverflowText } from './Overflow-w-3_04fS.js';
39
39
  export { P as Page } from './Page-KN0DLtcf.js';
40
+ export { P as Pagination } from './Pagination-DU_qvFRR.js';
40
41
  export { P as Popover, d as PopoverButton, c as PopoverClose, b as PopoverContent, a as PopoverTrigger } from './Popover-B1HaUjGI.js';
41
42
  export { P as ProgressBar } from './ProgressBar-lPKNTz6i.js';
42
43
  export { R as Radio, a as RadioGroup } from './Radio-DnOuBPi_.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@servicetitan/anvil2",
3
- "version": "1.42.0",
3
+ "version": "1.42.2",
4
4
  "type": "module",
5
5
  "types": "./dist/index.d.ts",
6
6
  "main": "./dist/index.js",
@@ -25,9 +25,9 @@
25
25
  "@react-hook/resize-observer": "^2.0.1",
26
26
  "@servicetitan/anvil-fonts": ">=14",
27
27
  "classnames": "^2.5.1",
28
- "@servicetitan/hammer-icon": "1.2.0",
29
- "@servicetitan/hammer-react": "1.40.0",
30
- "@servicetitan/hammer-token": "2.5.0"
28
+ "@servicetitan/hammer-react": "1.40.2",
29
+ "@servicetitan/hammer-token": "2.5.0",
30
+ "@servicetitan/hammer-icon": "1.2.0"
31
31
  },
32
32
  "peerDependencies": {
33
33
  "@types/react": "^18",