@star-insure/sdk 3.1.0 → 3.1.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.
@@ -12,6 +12,10 @@ var uuid = require('uuid');
12
12
  var react$1 = require('@headlessui/react');
13
13
  var cn = _interopDefault(require('classnames'));
14
14
  var lodash = require('lodash');
15
+ var hi2 = require('react-icons/hi2');
16
+ var Select = _interopDefault(require('react-select'));
17
+ var createSlots = require('create-slots');
18
+ var core = require('@inertiajs/core');
15
19
 
16
20
  function parseDate(dateString) {
17
21
  // Make sure we've only got 10 characters
@@ -2226,6 +2230,730 @@ function ErrorList(_ref) {
2226
2230
  }))));
2227
2231
  }
2228
2232
 
2233
+ /**
2234
+ * A wrapper around Inertia's usePage function that gives better type-safety
2235
+ */
2236
+
2237
+ function usePage() {
2238
+ // @ts-ignore
2239
+ return react.usePage();
2240
+ }
2241
+
2242
+ function BackButton(_ref) {
2243
+ var back = _ref.back;
2244
+
2245
+ var _React$useState = React__default.useState(typeof back === 'string' ? back : undefined),
2246
+ backUrl = _React$useState[0],
2247
+ setBackUrl = _React$useState[1];
2248
+
2249
+ var breadcrumbs = usePage().props.breadcrumbs;
2250
+ /**
2251
+ * Set the back URL on mount
2252
+ */
2253
+
2254
+ React__default.useEffect(function () {
2255
+ if (typeof window !== 'undefined') {
2256
+ // Set back button URL
2257
+ if (back && typeof back === 'boolean') {
2258
+ // If we haven't provided a path as a prop, use the last breadcrumb that's not the current one
2259
+ var crumb = breadcrumbs.slice(breadcrumbs.length - 2, breadcrumbs.length - 1);
2260
+
2261
+ if (crumb && crumb.length === 1) {
2262
+ // Strip off everything but the path so the <Link> component works
2263
+ var url = crumb[0].url;
2264
+
2265
+ if (url) {
2266
+ setBackUrl(new URL(url).pathname);
2267
+ }
2268
+ }
2269
+ }
2270
+ }
2271
+ }, [breadcrumbs]);
2272
+ return React__default.createElement(react.Link, {
2273
+ href: backUrl || '/',
2274
+ className: "hover:text-teal transition-all p-1 -mr-1"
2275
+ }, React__default.createElement(hi2.HiArrowLeft, {
2276
+ className: "h-5 w-5 stroke-[1.25]"
2277
+ }));
2278
+ }
2279
+
2280
+ function SearchBar(_ref) {
2281
+ var search = _ref.search,
2282
+ active = _ref.active,
2283
+ onActive = _ref.onActive,
2284
+ placeholder = _ref.placeholder;
2285
+
2286
+ var _React$useState = React__default.useState(''),
2287
+ query = _React$useState[0],
2288
+ setQuery = _React$useState[1];
2289
+
2290
+ var searchRef = React__default.useRef(null);
2291
+ /**
2292
+ * Populate search input on load
2293
+ */
2294
+
2295
+ React__default.useEffect(function () {
2296
+ if (typeof window !== 'undefined') {
2297
+ // Populate search
2298
+ var _search = new URLSearchParams(window.location.search);
2299
+
2300
+ var q = _search.get('search');
2301
+
2302
+ if (q) {
2303
+ setQuery(q);
2304
+ onActive(true);
2305
+ }
2306
+ }
2307
+ }, []);
2308
+ /**
2309
+ * Minimise the search bar on click outside if there's no search query
2310
+ */
2311
+
2312
+ useClickOutside(searchRef, function () {
2313
+ if (!query) {
2314
+ onActive(false);
2315
+ }
2316
+ });
2317
+ /**
2318
+ * Handle the search function
2319
+ */
2320
+
2321
+ function handleSearch(e, queryOverride) {
2322
+ var _window;
2323
+
2324
+ e == null ? void 0 : e.preventDefault();
2325
+ if (typeof search !== 'string') return;
2326
+ var path = search;
2327
+
2328
+ if (path[0] !== '/') {
2329
+ path = "/" + path;
2330
+ }
2331
+
2332
+ var params = new URLSearchParams((_window = window) == null ? void 0 : _window.location.search);
2333
+ params.set('search', queryOverride != null ? queryOverride : query);
2334
+ params.set('page', '1');
2335
+ react.router.get(path + "?" + params.toString());
2336
+ }
2337
+
2338
+ return React__default.createElement("div", {
2339
+ ref: searchRef,
2340
+ className: ""
2341
+ }, !active && React__default.createElement("button", {
2342
+ title: "Open Search Bar",
2343
+ type: "button",
2344
+ onClick: function onClick() {
2345
+ return onActive(true);
2346
+ },
2347
+ className: "flex items-center justify-center rounded-full hover:text-teal p-1 transition-colors hover:bg-gray-100"
2348
+ }, React__default.createElement(hi2.HiMagnifyingGlass, {
2349
+ className: "h-5 w-5 stroke-[1.25]"
2350
+ })), active && React__default.createElement("form", {
2351
+ onSubmit: handleSearch,
2352
+ className: "group flex items-center gap-2 rounded-full bg-white pr-4 pl-1 shadow transition-all focus-within:outline-none focus-within:ring-1 focus-within:ring-teal"
2353
+ }, React__default.createElement("input", {
2354
+ type: "text",
2355
+ name: "search",
2356
+ id: "search",
2357
+ value: query,
2358
+ onChange: function onChange(e) {
2359
+ return setQuery(e.currentTarget.value || '');
2360
+ },
2361
+ className: "!focus:border-0 !border-0 !bg-transparent !shadow-none !ring-opacity-0 !transition-none placeholder:text-gray-400 !py-1.5 text-sm",
2362
+ autoFocus: true,
2363
+ placeholder: placeholder
2364
+ }), query && React__default.createElement("button", {
2365
+ type: "button",
2366
+ title: "Clear Search",
2367
+ onClick: function onClick() {
2368
+ setQuery('');
2369
+ handleSearch(undefined, '');
2370
+ }
2371
+ }, React__default.createElement(hi2.HiXMark, {
2372
+ className: "h-5 w-5"
2373
+ })), React__default.createElement("button", {
2374
+ type: "submit"
2375
+ }, React__default.createElement(hi2.HiMagnifyingGlass, {
2376
+ className: "h-5 w-5"
2377
+ }))));
2378
+ }
2379
+
2380
+ function Action(_ref) {
2381
+ var title = _ref.title,
2382
+ href = _ref.href,
2383
+ _ref$as = _ref.as,
2384
+ as = _ref$as === void 0 ? 'Link' : _ref$as,
2385
+ _ref$target = _ref.target,
2386
+ target = _ref$target === void 0 ? '_self' : _ref$target,
2387
+ type = _ref.type,
2388
+ _ref$onClick = _ref.onClick,
2389
+ _onClick = _ref$onClick === void 0 ? function () {} : _ref$onClick;
2390
+
2391
+ var className = 'bg-white rounded-full font-bold px-3 py-1.5 text-xs whitespace-nowrap hover:bg-gray-100 hover:border-gray-300 transition-colors border border-gray-200';
2392
+
2393
+ if (as === 'Link' && href) {
2394
+ return React__default.createElement(react.Link, {
2395
+ className: className,
2396
+ href: href
2397
+ }, title);
2398
+ }
2399
+
2400
+ if (as === 'a' && href) {
2401
+ return React__default.createElement("a", {
2402
+ className: className,
2403
+ target: target,
2404
+ href: href
2405
+ }, title);
2406
+ }
2407
+
2408
+ return React__default.createElement("button", {
2409
+ className: className,
2410
+ type: type,
2411
+ onClick: function onClick() {
2412
+ return _onClick();
2413
+ }
2414
+ }, title);
2415
+ }
2416
+
2417
+ var DropdownTitle = /*#__PURE__*/createSlots.createSlot('button');
2418
+ var DropdownContent = /*#__PURE__*/createSlots.createSlot('form');
2419
+
2420
+ function Dropdown(_ref) {
2421
+ var children = _ref.children,
2422
+ onClose = _ref.onClose,
2423
+ active = _ref.active;
2424
+ var ref = React__default.useRef(null);
2425
+ var innerRef = React__default.useRef(null);
2426
+ useClickOutside(ref, function () {
2427
+ return onClose(false);
2428
+ });
2429
+ React__default.useEffect(function () {
2430
+ var current = ref == null ? void 0 : ref.current;
2431
+ var innerCurrent = innerRef.current;
2432
+ current == null ? void 0 : current.classList.toggle('active', active);
2433
+ if (!current || !innerCurrent) return;
2434
+ var pos = current == null ? void 0 : current.getBoundingClientRect();
2435
+ innerCurrent.style.setProperty('left', (pos == null ? void 0 : pos.left) + "px");
2436
+ }, [active, ref.current, innerRef.current]);
2437
+ return createSlots.createHost(children, function (Slots) {
2438
+ return React__default.createElement("div", {
2439
+ ref: ref,
2440
+ className: "static inline-block"
2441
+ }, Slots.get(DropdownTitle), active && React__default.createElement("div", {
2442
+ ref: innerRef,
2443
+ className: "absolute children z-10 flex flex-col"
2444
+ }, Slots.get(DropdownContent)));
2445
+ });
2446
+ }
2447
+ Dropdown.Title = DropdownTitle;
2448
+ Dropdown.Content = DropdownContent;
2449
+
2450
+ function FilterItem(_ref) {
2451
+ var _filter$options, _filter$options2, _filter$options3, _selected$, _selected$2;
2452
+
2453
+ var filter = _ref.filter;
2454
+
2455
+ var _React$useState = React__default.useState(false),
2456
+ isOpen = _React$useState[0],
2457
+ setOpen = _React$useState[1];
2458
+
2459
+ var _React$useState2 = React__default.useState([]),
2460
+ selected = _React$useState2[0],
2461
+ setSelected = _React$useState2[1];
2462
+
2463
+ var _React$useState3 = React__default.useState([]),
2464
+ selectedOptions = _React$useState3[0],
2465
+ setSelectedOptions = _React$useState3[1]; // Filter type: select
2466
+
2467
+
2468
+ var hasFilters = selected.length > 0; // Populate values on load
2469
+
2470
+ React__default.useEffect(function () {
2471
+ if (typeof window !== 'undefined') {
2472
+ var search = new URLSearchParams(window.location.search);
2473
+
2474
+ if (filter.type === 'date') {
2475
+ var fromDate = search.get(filter.name + "[from]");
2476
+ var toDate = search.get(filter.name + "[to]");
2477
+
2478
+ if (fromDate && toDate) {
2479
+ setSelected([fromDate, toDate]);
2480
+ }
2481
+ } else if (filter.type === 'greaterThan') {
2482
+ var selectedFromUrl = search.getAll(filter.name + "-GTE");
2483
+
2484
+ if (selectedFromUrl) {
2485
+ setSelected(selectedFromUrl);
2486
+ }
2487
+ } else if (filter.type === 'scope') {
2488
+ var _selectedFromUrl = search.getAll("scope" + filter.name);
2489
+
2490
+ if (_selectedFromUrl) {
2491
+ setSelected(_selectedFromUrl);
2492
+ }
2493
+ } else if (filter.type === 'select') {
2494
+ var _selectedFromUrl2 = search.getAll(filter.name + "[]");
2495
+
2496
+ if (_selectedFromUrl2) {
2497
+ setSelected(_selectedFromUrl2);
2498
+
2499
+ var _selectedOptions = filter.options && filter.options.filter(function (item) {
2500
+ return _selectedFromUrl2.includes(item.value.toString());
2501
+ });
2502
+
2503
+ _selectedOptions && setSelectedOptions(_selectedOptions);
2504
+ }
2505
+ } else {
2506
+ var _selectedFromUrl3 = search.getAll(filter.name + "[]");
2507
+
2508
+ if (_selectedFromUrl3) {
2509
+ setSelected(_selectedFromUrl3);
2510
+ }
2511
+ }
2512
+ }
2513
+ }, []);
2514
+
2515
+ function handleInput(e) {
2516
+ var _e$currentTarget = e.currentTarget,
2517
+ value = _e$currentTarget.value,
2518
+ checked = _e$currentTarget.checked;
2519
+
2520
+ if (checked) {
2521
+ setSelected(function (curr) {
2522
+ return [].concat(curr, [value]);
2523
+ });
2524
+ } else {
2525
+ setSelected(selected.filter(function (f) {
2526
+ return f !== value;
2527
+ }));
2528
+ }
2529
+ }
2530
+
2531
+ function handleDateSelect(e) {
2532
+ var _e$currentTarget2 = e.currentTarget,
2533
+ name = _e$currentTarget2.name,
2534
+ value = _e$currentTarget2.value; // First value in "selected" will be the "from", second will be the "to"
2535
+
2536
+ if (name.includes('from')) {
2537
+ return setSelected([value]);
2538
+ }
2539
+
2540
+ if (name.includes('to')) {
2541
+ // Make sure we have a "from" value first
2542
+ if (selected.length === 0) {
2543
+ // We'll default to a year ago if nothing entered
2544
+ return setSelected([dateFns.format(dateFns.subYears(new Date(), 1), 'yyyy-MM-dd'), value]);
2545
+ }
2546
+
2547
+ return setSelected([selected[0], value]);
2548
+ }
2549
+
2550
+ return setSelected([]);
2551
+ }
2552
+ /**
2553
+ * Handle Select for FilterType: Select
2554
+ */
2555
+
2556
+
2557
+ var handleSelectedOptions = function handleSelectedOptions(options) {
2558
+ setSelectedOptions(options);
2559
+ var selectedValues = options.map(function (option) {
2560
+ return option.value.toString();
2561
+ });
2562
+
2563
+ if (selectedValues.length > 0) {
2564
+ setSelected(selectedValues);
2565
+ } else {
2566
+ setSelected([]);
2567
+ }
2568
+ };
2569
+ /**
2570
+ * For Filter Select
2571
+ * Removes the Clear Button
2572
+ */
2573
+
2574
+
2575
+ function NullComponent() {
2576
+ return null;
2577
+ }
2578
+
2579
+ function handleSelect(e) {
2580
+ var value = e.currentTarget.value;
2581
+
2582
+ if (value) {
2583
+ setSelected([value]);
2584
+ } else {
2585
+ setSelected([]);
2586
+ }
2587
+ }
2588
+
2589
+ function handleApply(e) {
2590
+ e.preventDefault();
2591
+ var search = new URLSearchParams(window.location.search); // Reset the page in the query
2592
+
2593
+ search.set('page', '1');
2594
+
2595
+ if (filter.type === 'date') {
2596
+ var from = selected[0],
2597
+ to = selected[1];
2598
+ search.set(filter.name + "[from]", from != null ? from : dateFns.format(new Date(), 'yyyy-MM-dd'));
2599
+ search.set(filter.name + "[to]", to != null ? to : dateFns.format(new Date(), 'yyyy-MM-dd'));
2600
+ } else if (filter.type === 'greaterThan') {
2601
+ search["delete"](filter.name + "-GTE");
2602
+
2603
+ if (selected.length > 0) {
2604
+ search.set(filter.name + "-GTE", selected[0]);
2605
+ }
2606
+ } else if (filter.type === 'scope') {
2607
+ search["delete"]("" + filter.name);
2608
+
2609
+ if (selected.length > 0) {
2610
+ search.set("scope" + filter.name, selected[0]);
2611
+ }
2612
+ } else {
2613
+ // Clear this filter first
2614
+ search["delete"](filter.name + "[]"); // Apply the filters to the query string
2615
+
2616
+ selected.forEach(function (selectedValue) {
2617
+ // Fall back to option equality filters
2618
+ search.append(filter.name + "[]", selectedValue);
2619
+ });
2620
+ } // Fetch new data
2621
+
2622
+
2623
+ react.router.get(window.location.pathname + "?" + search.toString());
2624
+ }
2625
+
2626
+ function handleClear() {
2627
+ var search = new URLSearchParams(window.location.search); // Reset the page in the query
2628
+
2629
+ search.set('page', '1'); // Clear this filter
2630
+
2631
+ if (filter.type === 'date') {
2632
+ search["delete"](filter.name + "[from]");
2633
+ search["delete"](filter.name + "[to]");
2634
+ } else if (filter.type === 'greaterThan') {
2635
+ search["delete"](filter.name + "-GTE");
2636
+ } else if (filter.type === 'scope') {
2637
+ search["delete"]("scope" + filter.name);
2638
+ } else {
2639
+ search["delete"](filter.name + "[]");
2640
+ } // Fetch new data
2641
+
2642
+
2643
+ react.router.get(window.location.pathname + "?" + search.toString());
2644
+ }
2645
+
2646
+ function handleClick(force) {
2647
+ if (typeof force === 'boolean') {
2648
+ return setOpen(force);
2649
+ }
2650
+
2651
+ setOpen(!isOpen);
2652
+ }
2653
+
2654
+ return React__default.createElement(Dropdown, {
2655
+ onClose: function onClose() {
2656
+ return setOpen(!open);
2657
+ },
2658
+ active: isOpen
2659
+ }, React__default.createElement(Dropdown.Title, {
2660
+ onClick: function onClick() {
2661
+ return handleClick();
2662
+ },
2663
+ className: cn('flex rounded-2xl border hover:border-teal bg-gray-600 min-w-[90px] px-2 py-1 items-center justify-between shrink-0 gap-2 text-xs text-white hover:bg-teal transition-colors', {
2664
+ '!bg-teal border-teal': hasFilters
2665
+ })
2666
+ }, React__default.createElement("p", {
2667
+ className: "whitespace-nowrap"
2668
+ }, filter.label), React__default.createElement(hi2.HiChevronDown, null)), React__default.createElement(Dropdown.Content, {
2669
+ className: "mt-2 flex max-h-[350px] min-w-[200px] flex-col gap-2 rounded-md border border-gray-300 bg-white p-4 shadow-lg " + (filter.type && filter.type === 'select' ? '' : 'overflow-y-scroll'),
2670
+ onSubmit: handleApply
2671
+ }, React__default.createElement("div", {
2672
+ className: "flex flex-col items-start gap-1"
2673
+ }, (!filter.type || filter.type === 'options') && ((_filter$options = filter.options) == null ? void 0 : _filter$options.map(function (option, i) {
2674
+ return React__default.createElement("div", {
2675
+ className: "checkbox text-sm ",
2676
+ key: option.label + "-" + i
2677
+ }, React__default.createElement("input", {
2678
+ type: "checkbox",
2679
+ name: filter.name,
2680
+ id: option.label,
2681
+ value: option.value.toString(),
2682
+ checked: selected.includes(option.value.toString()),
2683
+ onChange: handleInput
2684
+ }), React__default.createElement("label", {
2685
+ className: "whitespace-nowrap",
2686
+ htmlFor: option.label
2687
+ }, option.label));
2688
+ })), filter.type === 'greaterThan' && filter.options && React__default.createElement("label", {
2689
+ className: "mb-2 w-full"
2690
+ }, React__default.createElement("div", {
2691
+ className: "text-sm"
2692
+ }, "Greater than or equal to"), React__default.createElement("select", {
2693
+ name: filter.name,
2694
+ id: filter.label,
2695
+ value: selected[0],
2696
+ onChange: handleSelect,
2697
+ className: "w-full"
2698
+ }, React__default.createElement("option", {
2699
+ value: ""
2700
+ }, "Select option"), (_filter$options2 = filter.options) == null ? void 0 : _filter$options2.map(function (option) {
2701
+ return React__default.createElement("option", {
2702
+ key: option.value,
2703
+ value: option.value
2704
+ }, option.label);
2705
+ }))), filter.type === 'scope' && filter.options && React__default.createElement("label", {
2706
+ className: "mb-2 w-full"
2707
+ }, React__default.createElement("select", {
2708
+ name: filter.name,
2709
+ id: filter.label,
2710
+ value: selected[0],
2711
+ onChange: handleSelect,
2712
+ className: "w-full"
2713
+ }, React__default.createElement("option", {
2714
+ value: ""
2715
+ }, "Select option"), (_filter$options3 = filter.options) == null ? void 0 : _filter$options3.map(function (option) {
2716
+ return React__default.createElement("option", {
2717
+ key: option.value,
2718
+ value: option.value
2719
+ }, option.label);
2720
+ }))), filter.type === 'date' && React__default.createElement("div", {
2721
+ className: "mb-2 flex flex-col gap-4"
2722
+ }, React__default.createElement("label", {
2723
+ className: "text-xs"
2724
+ }, "From", React__default.createElement("input", {
2725
+ type: "date",
2726
+ name: filter.name + "[from]",
2727
+ id: filter.name + "[from]",
2728
+ onChange: handleDateSelect,
2729
+ value: (_selected$ = selected[0]) != null ? _selected$ : ''
2730
+ })), React__default.createElement("label", {
2731
+ className: "text-xs"
2732
+ }, "To", React__default.createElement("input", {
2733
+ type: "date",
2734
+ name: filter.name + "[to]",
2735
+ id: filter.name + "[to]",
2736
+ onChange: handleDateSelect,
2737
+ value: (_selected$2 = selected[1]) != null ? _selected$2 : ''
2738
+ }))), filter.type === 'select' && filter.options && React__default.createElement("div", {
2739
+ className: "w-full"
2740
+ }, React__default.createElement(Select, {
2741
+ isMulti: true,
2742
+ options: filter.options,
2743
+ className: "basic-multi-select text-sm w-64 !transition-none",
2744
+ classNamePrefix: "select",
2745
+ onChange: handleSelectedOptions,
2746
+ components: {
2747
+ ClearIndicator: NullComponent
2748
+ },
2749
+ value: selectedOptions,
2750
+ theme: function theme(_theme) {
2751
+ return _extends({}, _theme, {
2752
+ colors: _extends({}, _theme.colors, {
2753
+ primary25: 'rgb(111, 199, 182)',
2754
+ primary: 'rgb(111, 199, 182)'
2755
+ })
2756
+ });
2757
+ }
2758
+ }))), React__default.createElement("div", {
2759
+ className: "flex items-center gap-2"
2760
+ }, React__default.createElement(Button, {
2761
+ type: "button",
2762
+ className: "!min-w-[0px] flex-grow !px-2 text-sm !transition-none",
2763
+ onClick: handleClear
2764
+ }, "Clear"), React__default.createElement(Button, {
2765
+ type: "submit",
2766
+ status: "primary",
2767
+ className: "!min-w-[0px] flex-grow !px-2 text-sm !transition-none"
2768
+ }, "Apply"))));
2769
+ }
2770
+
2771
+ function PageHeader(_ref) {
2772
+ var title = _ref.title,
2773
+ search = _ref.search,
2774
+ _ref$className = _ref.className,
2775
+ className = _ref$className === void 0 ? '' : _ref$className,
2776
+ _ref$innerClassName = _ref.innerClassName,
2777
+ innerClassName = _ref$innerClassName === void 0 ? '' : _ref$innerClassName,
2778
+ _ref$back = _ref.back,
2779
+ back = _ref$back === void 0 ? true : _ref$back,
2780
+ _ref$actions = _ref.actions,
2781
+ actions = _ref$actions === void 0 ? [] : _ref$actions,
2782
+ _ref$filterOptions = _ref.filterOptions,
2783
+ filterOptions = _ref$filterOptions === void 0 ? [] : _ref$filterOptions;
2784
+
2785
+ var _React$useState = React__default.useState(false),
2786
+ isSearchActive = _React$useState[0],
2787
+ setSearchActive = _React$useState[1];
2788
+
2789
+ var scrollContainerRef = React__default.useRef(null);
2790
+
2791
+ var _React$useState2 = React__default.useState(false),
2792
+ overScroll = _React$useState2[0],
2793
+ setOverScroll = _React$useState2[1];
2794
+
2795
+ React__default.useEffect(function () {
2796
+ var current = scrollContainerRef.current;
2797
+ if (!current) return;
2798
+
2799
+ var listener = function listener() {
2800
+ var activeDropdown = current.querySelector('.active');
2801
+ if (!activeDropdown) return;
2802
+ var childrenContainer = activeDropdown.querySelector('.children');
2803
+ if (!childrenContainer) return;
2804
+ var pos = activeDropdown.getBoundingClientRect();
2805
+ var posChild = childrenContainer.getBoundingClientRect();
2806
+ var posContainer = current.getBoundingClientRect(); // if the dropdown content moves outside the scroll container to the left, make it disappear
2807
+
2808
+ if (posChild.left <= posContainer.left - 50) {
2809
+ // @ts-ignore
2810
+ childrenContainer.style.visibility = 'hidden';
2811
+ } else if (posChild.left >= posContainer.right - 50) {
2812
+ // @ts-ignore
2813
+ childrenContainer.style.visibility = 'hidden';
2814
+ } else {
2815
+ // @ts-ignore
2816
+ childrenContainer.style.visibility = 'visible';
2817
+ } // @ts-ignore
2818
+
2819
+
2820
+ childrenContainer.style.left = pos.left + "px";
2821
+ };
2822
+
2823
+ var mouseListener = function mouseListener(e) {
2824
+ var pos = current.getBoundingClientRect();
2825
+
2826
+ if (e.clientX > pos.left && e.clientX < pos.right && e.clientY > pos.top && e.clientY < pos.bottom) {
2827
+ setOverScroll(true);
2828
+ } else {
2829
+ setOverScroll(false);
2830
+ }
2831
+ };
2832
+
2833
+ current.addEventListener('scroll', listener);
2834
+ document.addEventListener('mousemove', mouseListener);
2835
+ return function () {
2836
+ current.removeEventListener('scroll', listener);
2837
+ document.removeEventListener('mousemove', mouseListener);
2838
+ };
2839
+ }, []);
2840
+ React__default.useEffect(function () {
2841
+ var scrollListener = function scrollListener(e) {
2842
+ if (overScroll) {
2843
+ var _scrollContainerRef$c;
2844
+
2845
+ e.preventDefault();
2846
+ (_scrollContainerRef$c = scrollContainerRef.current) == null ? void 0 : _scrollContainerRef$c.scrollBy({
2847
+ left: e.deltaY,
2848
+ behavior: 'auto'
2849
+ });
2850
+ }
2851
+ };
2852
+
2853
+ document.addEventListener('wheel', scrollListener, {
2854
+ passive: false
2855
+ });
2856
+ return function () {
2857
+ document.removeEventListener('wheel', scrollListener);
2858
+ };
2859
+ }, [overScroll]);
2860
+
2861
+ function handleClear() {
2862
+ core.router.get("" + window.location.pathname);
2863
+ }
2864
+
2865
+ var _React$useState3 = React__default.useState(false),
2866
+ hasScroll = _React$useState3[0],
2867
+ setHasScroll = _React$useState3[1];
2868
+
2869
+ var checkScroll = React__default.useCallback(function () {
2870
+ var current = scrollContainerRef.current;
2871
+ if (!current) return;
2872
+ var pos = current.getBoundingClientRect();
2873
+ setHasScroll(current.scrollWidth > pos.width + 11);
2874
+ }, [scrollContainerRef.current]);
2875
+ React__default.useEffect(function () {
2876
+ checkScroll();
2877
+ window.addEventListener('resize', checkScroll);
2878
+ return function () {
2879
+ window.removeEventListener('resize', checkScroll);
2880
+ };
2881
+ }, [checkScroll]);
2882
+
2883
+ function clickRight() {
2884
+ var _scrollContainerRef$c2;
2885
+
2886
+ (_scrollContainerRef$c2 = scrollContainerRef.current) == null ? void 0 : _scrollContainerRef$c2.scrollBy({
2887
+ left: 100,
2888
+ behavior: 'auto'
2889
+ });
2890
+ checkScroll();
2891
+ }
2892
+
2893
+ function clickLeft() {
2894
+ var _scrollContainerRef$c3;
2895
+
2896
+ (_scrollContainerRef$c3 = scrollContainerRef.current) == null ? void 0 : _scrollContainerRef$c3.scrollBy({
2897
+ left: -100,
2898
+ behavior: 'auto'
2899
+ });
2900
+ checkScroll();
2901
+ }
2902
+
2903
+ var filteredActions = React__default.useMemo(function () {
2904
+ return actions.filter(function (action) {
2905
+ return !action.hidden;
2906
+ });
2907
+ }, [actions]);
2908
+ return React__default.createElement("section", {
2909
+ className: cn('col-span-full max-w-full rounded-lg bg-white p-2 shadow', className)
2910
+ }, React__default.createElement("div", {
2911
+ className: cn('grid grid-cols-[auto_1fr_auto] min-h-[60px] rounded gap-4 bg-gray-100 p-3', innerClassName)
2912
+ }, React__default.createElement("div", {
2913
+ className: "mr-auto flex items-center gap-4"
2914
+ }, back && React__default.createElement(BackButton, {
2915
+ back: back
2916
+ }), search && React__default.createElement(SearchBar, {
2917
+ search: search,
2918
+ active: isSearchActive,
2919
+ onActive: setSearchActive,
2920
+ placeholder: "Search " + title + "..."
2921
+ }), !isSearchActive && React__default.createElement("h1", {
2922
+ className: "text-base font-bold"
2923
+ }, title)), React__default.createElement("div", {
2924
+ className: "flex ml-auto items-center max-w-sm md:max-w-md lg:max-w-lg xl:max-w-2xl gap-2 h-full min-w-0"
2925
+ }, filterOptions.length > 0 && React__default.createElement(React__default.Fragment, null, React__default.createElement("button", {
2926
+ onClick: handleClear,
2927
+ className: "p-1.5 hover:text-red-500"
2928
+ }, React__default.createElement(hi2.HiXMark, {
2929
+ className: "w-5 h-5 stroke-[1.25]"
2930
+ })), hasScroll && React__default.createElement(hi2.HiChevronLeft, {
2931
+ onClick: clickLeft,
2932
+ className: "w-5 h-5 text-gray-400 stroke-[1.25]"
2933
+ }), React__default.createElement("div", {
2934
+ ref: scrollContainerRef,
2935
+ className: "flex items-center h-full w-full gap-3 overflow-x-scroll hide-scroll"
2936
+ }, filterOptions.map(function (filter) {
2937
+ return React__default.createElement(FilterItem, {
2938
+ key: filter.name,
2939
+ filter: filter
2940
+ });
2941
+ })), hasScroll && React__default.createElement(hi2.HiChevronRight, {
2942
+ onClick: clickRight,
2943
+ className: "w-5 h-5 text-gray-400 stroke-[1.25]"
2944
+ }))), filteredActions.length > 0 && React__default.createElement("div", {
2945
+ className: "flex items-center gap-3"
2946
+ }, filterOptions.length > 0 && React__default.createElement("div", {
2947
+ className: "w-[1px] h-full bg-gray-300"
2948
+ }), React__default.createElement("nav", {
2949
+ className: "flex items-center gap-2"
2950
+ }, filteredActions.map(function (action) {
2951
+ return React__default.createElement(Action, Object.assign({
2952
+ key: action.title + "-" + action.as + "-" + action.href
2953
+ }, action));
2954
+ })))));
2955
+ }
2956
+
2229
2957
  exports.Button = Button;
2230
2958
  exports.Card = Card;
2231
2959
  exports.DateOfBirthField = DateOfBirthField;
@@ -2233,6 +2961,7 @@ exports.ErrorList = ErrorList;
2233
2961
  exports.FormTester = FormTester;
2234
2962
  exports.Modal = Modal;
2235
2963
  exports.MoneyField = MoneyField;
2964
+ exports.PageHeader = PageHeader;
2236
2965
  exports.Pagination = Pagination;
2237
2966
  exports.QuoteRequestFormContext = QuoteRequestFormContext;
2238
2967
  exports.QuoteRequestFormProvider = QuoteRequestFormProvider;