@star-insure/sdk 3.1.0 → 3.1.1

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