snipe-it/public/vendor/livewire/livewire.esm.js
snipe 22c79d8e1b Squashed commit of the following:
commit 6bec573956
Merge: b6ad69fac 1fc5bb54e
Author: snipe <[email protected]>
Date:   Mon Nov 11 13:54:09 2024 +0000

    Merge pull request #15794 from snipe/check_for_file_on_asset_acceptance

    Check that the file exists before trying to download stored EULA

commit 1fc5bb54e1
Author: snipe <[email protected]>
Date:   Mon Nov 11 13:50:53 2024 +0000

    Check that the file exists before trying to download

    Signed-off-by: snipe <[email protected]>

commit b6ad69fac2
Merge: 357ef7e37 47b2cdb84
Author: snipe <[email protected]>
Date:   Sun Nov 10 18:05:20 2024 +0000

    Merge pull request #15793 from snipe/allow_eol_explicit

    Allow user to specify null for calculation or explicit on bulk edit

commit 47b2cdb846
Author: snipe <[email protected]>
Date:   Sun Nov 10 18:04:13 2024 +0000

    Allow user to specify null for calculation or explicit on bulk edit

    Signed-off-by: snipe <[email protected]>

commit 357ef7e375
Merge: 000f3171e 6928b1b27
Author: snipe <[email protected]>
Date:   Sun Nov 10 17:48:25 2024 +0000

    Merge pull request #15792 from snipe/edit_eol_from_bulk

    Added EOL date to bulk asset edit

commit 6928b1b273
Author: snipe <[email protected]>
Date:   Sun Nov 10 17:47:10 2024 +0000

    Added eol date to bulk asset edit

    Signed-off-by: snipe <[email protected]>

commit 000f3171e3
Author: snipe <[email protected]>
Date:   Fri Nov 8 10:28:01 2024 +0000

    Upgrade jspdf-autotable from 3.8.3 to 3.8.4 #15786

    Signed-off-by: snipe <[email protected]>

commit 5ef3183a52
Merge: a41529dbc 050831868
Author: snipe <[email protected]>
Date:   Thu Nov 7 11:44:06 2024 +0000

    Merge pull request #15783 from uberbrady/improve_user_and_location_manager_indexes

    Improved indexes on manager_id for locations and users, including del…

commit 050831868e
Author: Brady Wetherington <[email protected]>
Date:   Thu Nov 7 11:39:27 2024 +0000

    Improved indexes on manager_id for locations and users, including deleted_at

commit a41529dbc4
Merge: aa168fcb5 4fcf5ac7d
Author: snipe <[email protected]>
Date:   Wed Nov 6 21:22:45 2024 +0000

    Merge pull request #15780 from uberbrady/add_manager_indexes

    Add new indexes to locations and users for faster manager lookups

commit 4fcf5ac7da
Author: Brady Wetherington <[email protected]>
Date:   Wed Nov 6 21:19:41 2024 +0000

    Add new indexes to locations and users for faster manager lookups

commit aa168fcb5b
Author: snipe <[email protected]>
Date:   Wed Nov 6 18:41:52 2024 +0000

    Updated BS table to 1.23.5

    Signed-off-by: snipe <[email protected]>

commit 9c1c93ad52
Merge: b96a31253 ad99b8b45
Author: snipe <[email protected]>
Date:   Wed Nov 6 18:40:35 2024 +0000

    Merge pull request #15774 from marcusmoore/feature/sc-27350

    Added Checkout ID column to user accessory table

commit ad99b8b456
Author: Marcus Moore <[email protected]>
Date:   Wed Nov 6 10:37:31 2024 -0800

    Use generic ID translation

commit b96a312539
Merge: 654f67b6a bab1e58ea
Author: snipe <[email protected]>
Date:   Wed Nov 6 18:29:22 2024 +0000

    Merge pull request #15779 from ubc-cpsc/bugfix/CVE-2024-50345

    Fixes CVE-2024-50342, CVE-2024-50345, CVE-2024-51736

commit bab1e58ea4
Author: Joël Pittet <[email protected]>
Date:   Wed Nov 6 09:46:11 2024 -0800

    symfony/http-client CVE-2024-50342, symfony/http-foundation CVE-2024-50345, symfony/process CVE-2024-51736

commit 654f67b6ac
Author: snipe <[email protected]>
Date:   Wed Nov 6 14:05:42 2024 +0000

    Updated webpack

    Signed-off-by: snipe <[email protected]>

commit 3965bcd7c1
Merge: 287f4addf 2362cb5e5
Author: snipe <[email protected]>
Date:   Wed Nov 6 14:02:44 2024 +0000

    Merge pull request #15773 from Godmartinz/Fix_failing_failing_tests

    Fixed notifications for licenses and asset to asset checkoutables

commit 2362cb5e52
Author: Godfrey M <[email protected]>
Date:   Mon Nov 4 16:32:46 2024 -0800

    refactor to getNotifiables

commit e7cb4a75eb
Author: Marcus Moore <[email protected]>
Date:   Mon Nov 4 15:56:53 2024 -0800

    Show accessory checkout id in user accessory table

commit 93494ac554
Author: Godfrey M <[email protected]>
Date:   Mon Nov 4 15:17:58 2024 -0800

    put dataprovider back in for tests

commit 0d707a1851
Author: Godfrey M <[email protected]>
Date:   Mon Nov 4 15:13:10 2024 -0800

    fixes notifications for licenses and asset to asset checkouables

commit 287f4addf0
Merge: f32ebdc7a 2e96d478f
Author: snipe <[email protected]>
Date:   Mon Nov 4 20:06:24 2024 +0000

    Merge pull request #15771 from snipe/revert-15744-chore/action-tests-debugging

    Revert "Added the display of logs when tests fail in GitHub Actions"

commit 2e96d478f1
Author: Marcus Moore <[email protected]>
Date:   Mon Nov 4 11:04:17 2024 -0800

    Revert "Added the display of logs when tests fail in GitHub Actions"

commit f32ebdc7ac
Merge: 5897d37fc d6c7dc8e1
Author: snipe <[email protected]>
Date:   Thu Oct 31 22:39:58 2024 +0000

    Merge pull request #15765 from marcusmoore/chore/add-missing-livewire-file

    Added missing Livewire file

commit d6c7dc8e1c
Author: Marcus Moore <[email protected]>
Date:   Thu Oct 31 15:37:01 2024 -0700

    Add missing livewire file

commit 5897d37fcf
Merge: 49de07045 21a27dcac
Author: snipe <[email protected]>
Date:   Thu Oct 31 20:54:01 2024 +0000

    Merge pull request #15763 from Godmartinz/no_to_email_check

    Fixed emails not being send if target has no email or if not instance of User. Cc_emails will still be sent.

commit 21a27dcac1
Merge: 379138076 49de07045
Author: Godfrey M <[email protected]>
Date:   Thu Oct 31 12:55:46 2024 -0700

    fixed conflicts

commit 3791380764
Author: Godfrey M <[email protected]>
Date:   Thu Oct 31 12:52:47 2024 -0700

    remove unused uses

commit 7a0f79ecd2
Author: Godfrey M <[email protected]>
Date:   Thu Oct 31 12:51:22 2024 -0700

    remove test route

commit 97a449e80e
Author: Godfrey M <[email protected]>
Date:   Thu Oct 31 12:50:13 2024 -0700

    removes instanceof User check

commit e65942064e
Author: Godfrey M <[email protected]>
Date:   Thu Oct 31 12:45:29 2024 -0700

    send emails even if target has no email

commit 49de07045a
Merge: 7e996c40f 73772a013
Author: snipe <[email protected]>
Date:   Thu Oct 31 17:53:17 2024 +0000

    Merge pull request #15731 from Godmartinz/refacto_ms_teams_notifs

    Fixed MS Team Notifications to utilize workflows after deprecation

commit 7e996c40f5
Merge: 73e8f160c 69e74bbdd
Author: snipe <[email protected]>
Date:   Thu Oct 31 02:51:42 2024 +0000

    Merge pull request #15758 from snipe/jerm/fix-deprecation-warning

    Fix ${var} deprecation warning in License model

commit 69e74bbdd3
Author: Jeremy Price <[email protected]>
Date:   Wed Oct 30 19:43:54 2024 -0700

    Fix ${var} deprecation warning in License model

    When upgrading to php8.3 i started getting deprecation warning about
    using ${var} instead of {$var} in 2 places in License.php

    PHP Deprecated:  Using ${var} in strings is deprecated, use {$var} instead in /var/www/snipe-it/app/Models/License.php on line 187
    PHP Deprecated:  Using ${var} in strings is deprecated, use {$var} instead in /var/www/snipe-it/app/Models/License.php on line 219

    This simple fix switches the offending statements to {$var} syntax.

commit 73e8f160cf
Merge: f68df1fa0 bd23772fe
Author: snipe <[email protected]>
Date:   Wed Oct 30 19:29:09 2024 +0000

    Merge pull request #15756 from Godmartinz/cc-email-array

    changes `admin_cc_email` validation to allow an array

commit bd23772fe9
Author: Godfrey M <[email protected]>
Date:   Wed Oct 30 11:42:15 2024 -0700

    changes cc_email validation to allow array

commit 73772a0138
Author: Godfrey M <[email protected]>
Date:   Wed Oct 30 11:12:31 2024 -0700

    change button text

commit b26cae372c
Author: Godfrey M <[email protected]>
Date:   Wed Oct 30 10:40:23 2024 -0700

    merged in develop

commit d6ba303f39
Merge: 9a0eee8f0 f68df1fa0
Author: Godfrey M <[email protected]>
Date:   Wed Oct 30 10:27:45 2024 -0700

    Merge branch 'develop' into refacto_ms_teams_notifs

    # Conflicts:
    #	app/Listeners/CheckoutableListener.php

commit f68df1fa06
Author: snipe <[email protected]>
Date:   Wed Oct 30 13:21:13 2024 +0000

    Made type searchable in action logs

    Signed-off-by: snipe <[email protected]>

commit f0813e03bf
Merge: 05875ebd1 58ff641f8
Author: snipe <[email protected]>
Date:   Wed Oct 30 12:18:41 2024 +0000

    Merge pull request #15681 from Godmartinz/seperating_notification_n_mail

    Separated Notifications and Emails: Check ins and Check outs

commit 05875ebd1f
Author: snipe <[email protected]>
Date:   Mon Oct 28 22:04:35 2024 +0000

    Updated translations

    Signed-off-by: snipe <[email protected]>

commit 9a0eee8f03
Author: Godfrey M <[email protected]>
Date:   Mon Oct 28 15:03:43 2024 -0700

    revert testing variables

commit 6128765d1f
Author: Godfrey M <[email protected]>
Date:   Mon Oct 28 15:03:03 2024 -0700

    change wording on notification button

commit c24f79c025
Author: Godfrey M <[email protected]>
Date:   Mon Oct 28 14:58:43 2024 -0700

    update method comment

commit e7c4343c90
Author: Godfrey M <[email protected]>
Date:   Mon Oct 28 14:56:48 2024 -0700

    readd checkin accessory format

commit c0620c27ff
Author: Godfrey M <[email protected]>
Date:   Mon Oct 28 14:30:34 2024 -0700

    adds back laravels channel formats

commit ed81973fe6
Author: Godfrey M <[email protected]>
Date:   Mon Oct 28 13:57:42 2024 -0700

    adds notifications for deprecation

commit 2d318b394c
Merge: 86d784bd5 5c4971612
Author: snipe <[email protected]>
Date:   Mon Oct 28 18:41:49 2024 +0000

    Merge pull request #15744 from marcusmoore/chore/action-tests-debugging

    Added the display of logs when tests fail in GitHub Actions

commit b987b3dc00
Author: Godfrey M <[email protected]>
Date:   Mon Oct 28 10:57:48 2024 -0700

    adds back the laravel channels package and applies a deprecated check

commit 5c49716129
Author: Marcus Moore <[email protected]>
Date:   Mon Oct 28 10:24:35 2024 -0700

    Dump logs on test failure

commit 86d784bd59
Author: snipe <[email protected]>
Date:   Mon Oct 28 13:37:59 2024 +0000

    Fixed #15740 - use non-translated strings for icons

    Signed-off-by: snipe <[email protected]>

commit 589f9cccdf
Author: snipe <[email protected]>
Date:   Mon Oct 28 12:04:10 2024 +0000

    Fixed  #15732

    Signed-off-by: snipe <[email protected]>

commit 4d848e45e6
Author: snipe <[email protected]>
Date:   Mon Oct 28 11:55:24 2024 +0000

    Fixed #15736

    Signed-off-by: snipe <[email protected]>

commit 58ff641f82
Author: Godfrey M <[email protected]>
Date:   Thu Oct 24 22:53:53 2024 -0700

    removed unused variables

commit ce68f550d8
Author: Godfrey M <[email protected]>
Date:   Thu Oct 24 16:01:17 2024 -0700

    remove alert emails from cc

commit 6f0c1b12b1
Author: Godfrey M <[email protected]>
Date:   Thu Oct 24 15:04:54 2024 -0700

    this adds check out message for consumables

commit 278bc5e52a
Author: Godfrey M <[email protected]>
Date:   Thu Oct 24 14:59:10 2024 -0700

    ads check in and checkout message for license seats

commit cce75a8185
Author: Godfrey M <[email protected]>
Date:   Thu Oct 24 14:48:23 2024 -0700

    adds check in and checkout messag for accessories

commit e27ff13377
Author: Godfrey M <[email protected]>
Date:   Thu Oct 24 14:39:40 2024 -0700

    adds check in and checkout message for assets

commit 56365495a1
Author: Godfrey M <[email protected]>
Date:   Thu Oct 24 14:26:42 2024 -0700

    remove unnecessary fields in accessory checkout mail

commit 18da80e6de
Author: Godfrey M <[email protected]>
Date:   Thu Oct 24 14:24:00 2024 -0700

    fix checkoutable listener for microsoft teams

commit 18760e3fa1
Author: Godfrey M <[email protected]>
Date:   Thu Oct 24 12:21:51 2024 -0700

    replaces teams notification package, passes integration test

commit 57107c487c
Author: Godfrey M <[email protected]>
Date:   Thu Oct 24 09:40:10 2024 -0700

    fixed last test, definetly the last test

commit dfc63641dc
Merge: 07a51ec8b b6340532d
Author: snipe <[email protected]>
Date:   Thu Oct 24 11:40:50 2024 +0100

    Merge pull request #15550 from uberbrady/fix_multi_create_partial_failure

    Fix multi create partial failure (fixes: [RB-18591])

commit 07a51ec8b1
Merge: e0ec6795b 727c0e458
Author: snipe <[email protected]>
Date:   Thu Oct 24 10:03:10 2024 +0100

    Merge pull request #15712 from Godmartinz/fix_import-progress-bar

    Upgraded `livewire v3.5.9 => v3.5.12`

commit 6329f5b87e
Author: Godfrey M <[email protected]>
Date:   Wed Oct 23 17:33:23 2024 -0700

    removed unused variable from test

commit e0ec6795b5
Author: snipe <[email protected]>
Date:   Thu Oct 24 01:27:50 2024 +0100

    Use crucial for seeded data

    Signed-off-by: snipe <[email protected]>

commit 15073a0d38
Author: Godfrey M <[email protected]>
Date:   Wed Oct 23 17:27:37 2024 -0700

    last test to fix

commit a80c09c16d
Merge: ab3b9c451 5509d756b
Author: Godfrey M <[email protected]>
Date:   Wed Oct 23 17:23:55 2024 -0700

    Merge branch 'develop' into seperating_notification_n_mail

commit 5509d756b7
Merge: 55ba6279a b16a978f1
Author: snipe <[email protected]>
Date:   Thu Oct 24 01:12:11 2024 +0100

    Merge pull request #15722 from Godmartinz/fix_component_factory

    Fixed Component Factory: use manufacturer factory for `manufactuer_id`

commit b16a978f1b
Author: Godfrey M <[email protected]>
Date:   Wed Oct 23 16:25:51 2024 -0700

    uses manufacturer factory for manufactuer_id

commit ab3b9c4510
Author: Godfrey M <[email protected]>
Date:   Wed Oct 23 16:24:01 2024 -0700

    remove unnecessary code from checkinasset notification

commit 2cc2b2b1df
Author: Godfrey M <[email protected]>
Date:   Wed Oct 23 16:06:27 2024 -0700

    apply array_filter to cc emails to prevent errors

commit 62d06b44d6
Author: Godfrey M <[email protected]>
Date:   Wed Oct 23 15:43:42 2024 -0700

    set fallback from email address to service.snipe-it.io

commit f29a383179
Merge: fd74c3510 55ba6279a
Author: Godfrey M <[email protected]>
Date:   Wed Oct 23 15:15:14 2024 -0700

    Merge branch 'develop' into seperating_notification_n_mail

    # Conflicts:
    #	app/Notifications/CheckoutConsumableNotification.php

commit fd74c35102
Author: Godfrey M <[email protected]>
Date:   Wed Oct 23 15:08:29 2024 -0700

    remove old notify by mail from consumable notification

commit c681946b1d
Author: Godfrey M <[email protected]>
Date:   Wed Oct 23 15:05:39 2024 -0700

    added component markdown changes

commit 257d25bd9e
Author: Godfrey M <[email protected]>
Date:   Wed Oct 23 14:56:54 2024 -0700

    removed import notification from test, feature is not present in project

commit 6c34a5c52c
Author: Godfrey M <[email protected]>
Date:   Wed Oct 23 14:54:21 2024 -0700

    conditionally check cc emails, initiate variables

commit 1b5f4415ae
Author: Godfrey M <[email protected]>
Date:   Wed Oct 23 14:44:45 2024 -0700

    corrected cc email behavior

commit 55ba6279a4
Author: snipe <[email protected]>
Date:   Wed Oct 23 19:14:17 2024 +0100

    Use trans_choice on alert menu

    Signed-off-by: snipe <[email protected]>

commit a9eea830e3
Author: snipe <[email protected]>
Date:   Wed Oct 23 19:05:34 2024 +0100

    Added manufacturer and model number to component seeders

    Signed-off-by: snipe <[email protected]>

commit af564935d5
Merge: d58f87862 3ee76be7e
Author: snipe <[email protected]>
Date:   Wed Oct 23 17:56:04 2024 +0100

    Merge pull request #15720 from snipe/15695_adds_manufacturer_and_model_number_to_components

    Fixed #15695 - Added manufacturer and model_number to components

commit 3ee76be7e3
Author: snipe <[email protected]>
Date:   Wed Oct 23 17:50:22 2024 +0100

    Added manufacturer and model_number to components

    Signed-off-by: snipe <[email protected]>

commit d58f87862c
Merge: 5da3ce356 0b6859c49
Author: snipe <[email protected]>
Date:   Wed Oct 23 15:09:50 2024 +0100

    Merge pull request #15719 from snipe/#15717_adds_qty_to_consumable

    Fixed #15717 - Added ability to checkout consumables in variable qty via API

commit 0b6859c491
Author: snipe <[email protected]>
Date:   Wed Oct 23 15:05:35 2024 +0100

    Added ability to checkout consumables in variable qty

    Signed-off-by: snipe <[email protected]>

commit 1e9922a0b0
Author: Godfrey M <[email protected]>
Date:   Tue Oct 22 16:14:36 2024 -0700

    fix moar tests

commit ead27accac
Author: Godfrey M <[email protected]>
Date:   Tue Oct 22 15:45:52 2024 -0700

    fixed accessory tests and notifiable target

commit 727c0e458c
Author: Godfrey M <[email protected]>
Date:   Tue Oct 22 14:34:39 2024 -0700

    remove translation

commit 870dc747db
Author: Godfrey M <[email protected]>
Date:   Tue Oct 22 14:27:32 2024 -0700

    oops

commit 0fb3d83fac
Author: Godfrey M <[email protected]>
Date:   Tue Oct 22 14:26:54 2024 -0700

    revert controller change

commit 0d59ccd6a6
Author: Godfrey M <[email protected]>
Date:   Tue Oct 22 14:23:26 2024 -0700

    upgraded livewire v3.5.9 => v3.5.12

commit 5da3ce3564
Merge: c3bbca30a 5ecd2b629
Author: snipe <[email protected]>
Date:   Tue Oct 22 22:10:20 2024 +0100

    Merge pull request #15711 from marcusmoore/fixes/custom-fieldset-checkboxes

    Fixed custom field checkboxes on asset edit page

commit c3bbca30ad
Merge: dccb788a8 37f14fff3
Author: snipe <[email protected]>
Date:   Tue Oct 22 22:07:50 2024 +0100

    Merge pull request #15710 from snipe/fixes_lightbox_for_avif

    Fixes #15701 - load avif files properly in lightbox

commit 37f14fff3b
Author: snipe <[email protected]>
Date:   Tue Oct 22 22:07:28 2024 +0100

    Fixed typo

    Signed-off-by: snipe <[email protected]>

commit eb6c51fabd
Author: snipe <[email protected]>
Date:   Tue Oct 22 22:04:57 2024 +0100

    Fixes #15701 - load avif files properly in lightbox

    Signed-off-by: snipe <[email protected]>

commit 5ecd2b6293
Author: Marcus Moore <[email protected]>
Date:   Tue Oct 22 14:04:05 2024 -0700

    Default checkbox elements to an empty array

commit 1e31592c55
Author: Godfrey M <[email protected]>
Date:   Tue Oct 22 11:49:06 2024 -0700

    messing with the tests

commit dccb788a88
Merge: 5e1d792bb d10fe77ee
Author: snipe <[email protected]>
Date:   Tue Oct 22 17:44:30 2024 +0100

    Merge pull request #15691 from marcusmoore/fixes/get-id-for-current-user

    Updated `Company::getIdForCurrentUser()` to return null in certain scenarios

commit d10fe77ee7
Merge: e1882ee6d 5e1d792bb
Author: Marcus Moore <[email protected]>
Date:   Tue Oct 22 09:38:31 2024 -0700

    Merge branch 'develop' into fixes/get-id-for-current-user

commit 5e1d792bba
Merge: 9cf71976f 780ed91a1
Author: snipe <[email protected]>
Date:   Tue Oct 22 16:52:28 2024 +0100

    Merge pull request #15687 from NebelKreis/fix/dashboard-title-casing

    Fixed #15686: Corrected capitalization for dashboard section titles by removing strtolower()

commit 9cf71976f6
Author: snipe <[email protected]>
Date:   Tue Oct 22 16:51:42 2024 +0100

    Fixed #15706 - Removed purchase order number from asset import

    Signed-off-by: snipe <[email protected]>

commit 15745d9737
Merge: bd97955b9 3f74ff25d
Author: snipe <[email protected]>
Date:   Tue Oct 22 16:39:44 2024 +0100

    Merge pull request #15566 from Godmartinz/status-label-error-message

    Fixed Status Labels Error Message

commit bd97955b9e
Author: snipe <[email protected]>
Date:   Tue Oct 22 16:38:46 2024 +0100

    Bumped hash

    Signed-off-by: snipe <[email protected]>

commit 252d99421c
Merge: 5767a98ad db8170162
Author: snipe <[email protected]>
Date:   Tue Oct 22 16:26:48 2024 +0100

    Merge pull request #15689 from snipe/better_handle_inline_files

    Better handle inline files in file listing

commit 5767a98ad8
Merge: 0c820cbc0 524a44272
Author: snipe <[email protected]>
Date:   Tue Oct 22 16:26:23 2024 +0100

    Merge pull request #15649 from bryanlopezinc/ImproveImporting

    Improve import performance

commit 0c820cbc0d
Merge: 147fcfb8e 3153bbb13
Author: snipe <[email protected]>
Date:   Tue Oct 22 15:56:12 2024 +0100

    Merge pull request #15598 from spencerrlongg/bug/custom_field_validation_issue

    Custom Field Existence Validation Issue

commit db81701621
Merge: a05c33feb 147fcfb8e
Author: snipe <[email protected]>
Date:   Tue Oct 22 15:44:24 2024 +0100

    Merge branch 'develop' into better_handle_inline_files

commit a05c33febf
Author: snipe <[email protected]>
Date:   Tue Oct 22 15:43:19 2024 +0100

    Squashed commit of the following:

    commit 147fcfb8eb
    Merge: 58a3d09b5 fdcc17ca2
    Author: snipe <[email protected]>
    Date:   Tue Oct 22 15:12:55 2024 +0100

        Merge pull request #15676 from Toreg87/fixes/api_create_user_fmcs

        Fix user creation with FullMultipleCompanySupport enabled over API

    commit 58a3d09b5f
    Merge: 30a06a594 867fa2f36
    Author: snipe <[email protected]>
    Date:   Tue Oct 22 14:55:42 2024 +0100

        Merge pull request #15703 from marcusmoore/bug/sc-27188

        Linked accessory files in activity report

    commit 30a06a5942
    Merge: 6c6af78e0 ce3086317
    Author: snipe <[email protected]>
    Date:   Tue Oct 22 11:47:06 2024 +0100

        Merge pull request #15693 from marcusmoore/chore/remove-parallel-testing

        Removed brianium/paratest

    commit 6c6af78e08
    Merge: 9b06bbb6c 3f79fd7ea
    Author: snipe <[email protected]>
    Date:   Tue Oct 22 11:46:04 2024 +0100

        Merge pull request #15705 from marcusmoore/tests/icon-component-test

        Added test to ensure icon component does not end in newline

    commit 3f79fd7ea7
    Author: Marcus Moore <[email protected]>
    Date:   Mon Oct 21 17:07:40 2024 -0700

        Add test to ensure icon component does not end in newline

    commit 9b06bbb6c3
    Merge: 46ad1d072 d7f70146f
    Author: snipe <[email protected]>
    Date:   Mon Oct 21 22:38:26 2024 +0100

        Merge pull request #15704 from marcusmoore/bug/remove-extra-icon

        Removed second icon in accessory file list

    commit ce30863177
    Author: Marcus Moore <[email protected]>
    Date:   Mon Oct 21 13:57:04 2024 -0700

        Remove brianium/paratest dependency

    commit d7f70146f4
    Author: Marcus Moore <[email protected]>
    Date:   Mon Oct 21 13:48:25 2024 -0700

        Remove extra icon in accessory file upload list

    commit 867fa2f36e
    Author: Marcus Moore <[email protected]>
    Date:   Mon Oct 21 12:40:24 2024 -0700

        Display file in activity report for accessories

    commit 0933a2d4ea
    Author: Marcus Moore <[email protected]>
    Date:   Thu Oct 17 18:01:48 2024 -0700

        Remove --parallel flag

    commit 46ad1d072f
    Merge: bcb4bd9eb 3cf746d7d
    Author: snipe <[email protected]>
    Date:   Thu Oct 17 15:29:47 2024 +0100

        Merge pull request #15680 from uberbrady/bulk_checkout_to_bulk_actions

        Bulk checkout to bulk actions

    commit bcb4bd9eb4
    Merge: 250037540 f50ccbcc4
    Author: snipe <[email protected]>
    Date:   Thu Oct 17 10:20:13 2024 +0100

        Merge pull request #15683 from Toreg87/fixes/outdated_comment

        Fix outdated comment in CompanyableTrait

    commit f50ccbcc49
    Author: Tobias Regnery <[email protected]>
    Date:   Thu Oct 17 11:07:28 2024 +0200

        Fix outdated comment in CompanyableTrait

        As of commit 5800e8d the user model uses CompanyableTrait so remove this clearly outdated comment

    commit 3cf746d7df
    Author: Brady Wetherington <[email protected]>
    Date:   Wed Oct 16 23:13:32 2024 +0100

        Rework the bulk checkout to not change how all checkouts work

    commit 6b7af802af
    Author: Brady Wetherington <[email protected]>
    Date:   Thu Oct 10 13:28:23 2024 +0100

        Add 'bulk checkout' as one of the bulk actions in the bulk actions toolbar

    commit fdcc17ca2c
    Author: Tobias Regnery <[email protected]>
    Date:   Wed Oct 16 11:18:24 2024 +0200

        Fix user creation with FullMultipleCompanySupport enabled over API

        It is currently possible as a non-superuser to create a new user or patch an existing user with arbitrary company over the API if FullMultipleCompanySupport is enabled.
        Altough a highly unlikely scenario as the user needs permission to create API keys and new users, it is a bug that should get fixed.

        Add a call to getIdForCurrentUser() to normalize the company_id if FullMultipleCompanySupport is enabled.

    Signed-off-by: snipe <[email protected]>

commit 147fcfb8eb
Merge: 58a3d09b5 fdcc17ca2
Author: snipe <[email protected]>
Date:   Tue Oct 22 15:12:55 2024 +0100

    Merge pull request #15676 from Toreg87/fixes/api_create_user_fmcs

    Fix user creation with FullMultipleCompanySupport enabled over API

commit 58a3d09b5f
Merge: 30a06a594 867fa2f36
Author: snipe <[email protected]>
Date:   Tue Oct 22 14:55:42 2024 +0100

    Merge pull request #15703 from marcusmoore/bug/sc-27188

    Linked accessory files in activity report

commit 30a06a5942
Merge: 6c6af78e0 ce3086317
Author: snipe <[email protected]>
Date:   Tue Oct 22 11:47:06 2024 +0100

    Merge pull request #15693 from marcusmoore/chore/remove-parallel-testing

    Removed brianium/paratest

commit 6c6af78e08
Merge: 9b06bbb6c 3f79fd7ea
Author: snipe <[email protected]>
Date:   Tue Oct 22 11:46:04 2024 +0100

    Merge pull request #15705 from marcusmoore/tests/icon-component-test

    Added test to ensure icon component does not end in newline

commit 3f79fd7ea7
Author: Marcus Moore <[email protected]>
Date:   Mon Oct 21 17:07:40 2024 -0700

    Add test to ensure icon component does not end in newline

commit 9b06bbb6c3
Merge: 46ad1d072 d7f70146f
Author: snipe <[email protected]>
Date:   Mon Oct 21 22:38:26 2024 +0100

    Merge pull request #15704 from marcusmoore/bug/remove-extra-icon

    Removed second icon in accessory file list

commit ce30863177
Author: Marcus Moore <[email protected]>
Date:   Mon Oct 21 13:57:04 2024 -0700

    Remove brianium/paratest dependency

commit d7f70146f4
Author: Marcus Moore <[email protected]>
Date:   Mon Oct 21 13:48:25 2024 -0700

    Remove extra icon in accessory file upload list

commit 867fa2f36e
Author: Marcus Moore <[email protected]>
Date:   Mon Oct 21 12:40:24 2024 -0700

    Display file in activity report for accessories

commit e1882ee6d2
Author: Marcus Moore <[email protected]>
Date:   Mon Oct 21 12:21:45 2024 -0700

    Add comment

commit 7eee239378
Author: Marcus Moore <[email protected]>
Date:   Mon Oct 21 12:20:28 2024 -0700

    use is_numeric instead of is_int

commit 4188849ae1
Author: Marcus Moore <[email protected]>
Date:   Mon Oct 21 12:19:48 2024 -0700

    Add failing test case

commit 787e651778
Author: snipe <[email protected]>
Date:   Mon Oct 21 16:52:21 2024 +0100

    Fixed todos with log message

    Signed-off-by: snipe <[email protected]>

commit ef9b6e3b07
Author: snipe <[email protected]>
Date:   Mon Oct 21 16:34:54 2024 +0100

    Code cleanup

    Signed-off-by: snipe <[email protected]>

commit 06c599cc17
Author: snipe <[email protected]>
Date:   Mon Oct 21 16:34:03 2024 +0100

    Added method to show or download file

    Signed-off-by: snipe <[email protected]>

commit 6105323877
Author: snipe <[email protected]>
Date:   Mon Oct 21 14:11:20 2024 +0100

    Use plural class name for src

    Signed-off-by: snipe <[email protected]>

commit 0933a2d4ea
Author: Marcus Moore <[email protected]>
Date:   Thu Oct 17 18:01:48 2024 -0700

    Remove --parallel flag

commit a8d853c44a
Author: Marcus Moore <[email protected]>
Date:   Thu Oct 17 15:26:27 2024 -0700

    Remove focus group tags

commit 7e1b47708e
Author: Marcus Moore <[email protected]>
Date:   Thu Oct 17 15:18:41 2024 -0700

    Fix failing test ensuring company id is an integer

commit 979e4502ff
Author: Marcus Moore <[email protected]>
Date:   Thu Oct 17 15:14:39 2024 -0700

    Have getIdForCurrentUser method return null if FMCS enabled, user is not super admin, and does not have company

commit ff113ef523
Author: Godfrey M <[email protected]>
Date:   Thu Oct 17 14:56:58 2024 -0700

    typo fix

commit 99dd51a965
Author: Marcus Moore <[email protected]>
Date:   Thu Oct 17 14:53:18 2024 -0700

    Improve name

commit 15c2169477
Author: Marcus Moore <[email protected]>
Date:   Thu Oct 17 14:31:05 2024 -0700

    Scaffold additional tests

commit 50fa6ce335
Author: Marcus Moore <[email protected]>
Date:   Thu Oct 17 14:12:22 2024 -0700

    Scaffold tests

commit 7ae76e7db9
Author: Godfrey M <[email protected]>
Date:   Thu Oct 17 13:55:03 2024 -0700

    remove viewdata array from 3 tests

commit b98058ca98
Author: Godfrey M <[email protected]>
Date:   Thu Oct 17 13:48:26 2024 -0700

    fix tests pt 3

commit 83e8186d9e
Author: Godfrey M <[email protected]>
Date:   Thu Oct 17 13:39:56 2024 -0700

    fix assertSent to AssertNotSent on some test

commit cdd4fef7df
Author: Godfrey M <[email protected]>
Date:   Thu Oct 17 13:34:55 2024 -0700

    attempt to fix tests p2

commit dceb8e305f
Author: Godfrey M <[email protected]>
Date:   Thu Oct 17 13:11:39 2024 -0700

    attempt to fix tests

commit 123cdeb858
Author: Godfrey M <[email protected]>
Date:   Thu Oct 17 12:39:48 2024 -0700

    add email check to listener

commit 496b44e887
Author: Godfrey M <[email protected]>
Date:   Thu Oct 17 12:28:57 2024 -0700

    merged composer lock from dev

commit a690cc3582
Author: Godfrey M <[email protected]>
Date:   Thu Oct 17 12:26:55 2024 -0700

    removing my composer stuff again..for the last time

commit ceb3f5cea6
Author: Godfrey M <[email protected]>
Date:   Thu Oct 17 12:19:50 2024 -0700

    added mail-gun and http-client to 8.1

commit 65735a31f1
Author: Godfrey M <[email protected]>
Date:   Thu Oct 17 12:18:34 2024 -0700

    removed symfony/mailgun-mailer symfony/http-client

commit 285d6897cf
Author: Godfrey M <[email protected]>
Date:   Thu Oct 17 12:05:36 2024 -0700

    added a coulple test adjustments and moved mail send logic to listener

commit 159a1d3f43
Author: Marcus Moore <[email protected]>
Date:   Thu Oct 17 11:48:55 2024 -0700

    Be more explicit

commit d1149730be
Author: snipe <[email protected]>
Date:   Thu Oct 17 16:31:17 2024 +0100

    Apply blade component to files views

    Signed-off-by: snipe <[email protected]>

commit 46ad1d072f
Merge: bcb4bd9eb 3cf746d7d
Author: snipe <[email protected]>
Date:   Thu Oct 17 15:29:47 2024 +0100

    Merge pull request #15680 from uberbrady/bulk_checkout_to_bulk_actions

    Bulk checkout to bulk actions

commit 780ed91a10
Author: NebelKreis <[email protected]>
Date:   Thu Oct 17 16:09:25 2024 +0200

    Fix: Removed strtolower() from dashboard titles

    This fix ensures the correct capitalization in different languages.

commit bcb4bd9eb4
Merge: 250037540 f50ccbcc4
Author: snipe <[email protected]>
Date:   Thu Oct 17 10:20:13 2024 +0100

    Merge pull request #15683 from Toreg87/fixes/outdated_comment

    Fix outdated comment in CompanyableTrait

commit f50ccbcc49
Author: Tobias Regnery <[email protected]>
Date:   Thu Oct 17 11:07:28 2024 +0200

    Fix outdated comment in CompanyableTrait

    As of commit 5800e8d the user model uses CompanyableTrait so remove this clearly outdated comment

commit 9a79483375
Author: Godfrey M <[email protected]>
Date:   Wed Oct 16 16:59:18 2024 -0700

    removed namespaces from routing

commit ed6034065b
Author: Godfrey M <[email protected]>
Date:   Wed Oct 16 16:47:36 2024 -0700

    removed test route

commit a7754c1a7f
Author: Godfrey M <[email protected]>
Date:   Wed Oct 16 16:46:52 2024 -0700

    fixed asset checkout markdown, and notifiable variable

commit 0e9b3c9119
Author: snipe <[email protected]>
Date:   Thu Oct 17 00:27:39 2024 +0100

    Check for existence before trying to get the icon

    Signed-off-by: snipe <[email protected]>

commit 4933aa5784
Author: snipe <[email protected]>
Date:   Thu Oct 17 00:27:04 2024 +0100

    Add StorageHelper to app config

    Signed-off-by: snipe <[email protected]>

commit d67addc69e
Author: snipe <[email protected]>
Date:   Thu Oct 17 00:21:43 2024 +0100

    Removed filetype column - it’s dumb

    Signed-off-by: snipe <[email protected]>

commit 02c80ff18a
Author: snipe <[email protected]>
Date:   Thu Oct 17 00:18:40 2024 +0100

    Added comment

    Signed-off-by: snipe <[email protected]>

commit c01190fac2
Author: snipe <[email protected]>
Date:   Thu Oct 17 00:18:34 2024 +0100

    Conditionally add content-type

    Signed-off-by: snipe <[email protected]>

commit 017884f843
Author: snipe <[email protected]>
Date:   Thu Oct 17 00:09:09 2024 +0100

    Added checks and filetype display

    Signed-off-by: snipe <[email protected]>

commit c49921f50f
Author: snipe <[email protected]>
Date:   Thu Oct 17 00:08:54 2024 +0100

    Removed unused (maybe?) API endpoint

    Signed-off-by: snipe <[email protected]>

commit c49abb6aea
Author: snipe <[email protected]>
Date:   Thu Oct 17 00:08:38 2024 +0100

    Refactor the UserFilesController show method for simpler inlining

    Signed-off-by: snipe <[email protected]>

commit ccd2019448
Author: snipe <[email protected]>
Date:   Thu Oct 17 00:08:04 2024 +0100

    Removed unusded use statements

    Signed-off-by: snipe <[email protected]>

commit 96191a5e93
Author: snipe <[email protected]>
Date:   Thu Oct 17 00:07:54 2024 +0100

    Added method to decide if the file should be inlinable

    Signed-off-by: snipe <[email protected]>

commit c56affd663
Author: snipe <[email protected]>
Date:   Thu Oct 17 00:07:37 2024 +0100

    Added SVG icon

    Signed-off-by: snipe <[email protected]>

commit 02bda3cd95
Author: Godfrey M <[email protected]>
Date:   Wed Oct 16 15:53:05 2024 -0700

    adds Checkout Consumable mailable and slackwebhook channel to notifs

commit 02ff646da4
Author: Godfrey M <[email protected]>
Date:   Wed Oct 16 15:44:45 2024 -0700

    adds checkin license mailable

commit 4becdca8aa
Author: Godfrey M <[email protected]>
Date:   Wed Oct 16 15:39:20 2024 -0700

    removes toMail from license notificaqtion

commit 2584d60344
Author: Godfrey M <[email protected]>
Date:   Wed Oct 16 15:38:49 2024 -0700

    adds Licenses seat checkout Mailable

commit f1d83a3f28
Author: Godfrey M <[email protected]>
Date:   Wed Oct 16 15:30:53 2024 -0700

    forgot to add asset checkout markdown to projet

commit c39df34bdf
Author: Godfrey M <[email protected]>
Date:   Wed Oct 16 15:29:50 2024 -0700

    forgot to add accessory mail to project

commit dcdf600b78
Author: Godfrey M <[email protected]>
Date:   Wed Oct 16 15:27:34 2024 -0700

    adds Checkin and Checkout mailables and listner logic

commit 3cf746d7df
Author: Brady Wetherington <[email protected]>
Date:   Wed Oct 16 23:13:32 2024 +0100

    Rework the bulk checkout to not change how all checkouts work

commit 6b7af802af
Author: Brady Wetherington <[email protected]>
Date:   Thu Oct 10 13:28:23 2024 +0100

    Add 'bulk checkout' as one of the bulk actions in the bulk actions toolbar

commit 9710436d54
Author: Godfrey M <[email protected]>
Date:   Wed Oct 16 13:12:07 2024 -0700

    adds Mailables for asset checkin and out

commit 16cffe9a9d
Author: Godfrey M <[email protected]>
Date:   Wed Oct 16 12:53:35 2024 -0700

    simplified checkout webhook call

commit 9e1b86f586
Author: Godfrey M <[email protected]>
Date:   Wed Oct 16 12:51:19 2024 -0700

    sends checkout notification via webhook

commit 3ab2521cb0
Author: Godfrey M <[email protected]>
Date:   Wed Oct 16 12:21:33 2024 -0700

    email comes through, no picture and html markup appear though.

commit 604a964462
Author: Marcus Moore <[email protected]>
Date:   Wed Oct 16 11:52:24 2024 -0700

    Improve scenario descriptions

commit 2f72c66614
Author: Marcus Moore <[email protected]>
Date:   Wed Oct 16 11:30:06 2024 -0700

    Add additional case

commit fdcc17ca2c
Author: Tobias Regnery <[email protected]>
Date:   Wed Oct 16 11:18:24 2024 +0200

    Fix user creation with FullMultipleCompanySupport enabled over API

    It is currently possible as a non-superuser to create a new user or patch an existing user with arbitrary company over the API if FullMultipleCompanySupport is enabled.
    Altough a highly unlikely scenario as the user needs permission to create API keys and new users, it is a bug that should get fixed.

    Add a call to getIdForCurrentUser() to normalize the company_id if FullMultipleCompanySupport is enabled.

commit cba1a56040
Author: Marcus Moore <[email protected]>
Date:   Tue Oct 15 17:38:11 2024 -0700

    Improve readability?

commit d9afde4610
Author: Marcus Moore <[email protected]>
Date:   Tue Oct 15 17:00:22 2024 -0700

    Write failing test

commit 9f06a0e441
Author: Godfrey M <[email protected]>
Date:   Tue Oct 15 14:01:28 2024 -0700

    handle some edge cases, null values clean up variable names

commit 42095c0167
Author: Marcus Moore <[email protected]>
Date:   Tue Oct 15 13:02:22 2024 -0700

    Add reference link

commit f8476f7133
Author: Godfrey M <[email protected]>
Date:   Tue Oct 15 12:49:52 2024 -0700

    finished the construct and mail call in the listner

commit b29d032bf0
Author: Godfrey M <[email protected]>
Date:   Tue Oct 15 11:28:27 2024 -0700

    adds checkoutAssetMail class, and content method

commit 2500375400
Merge: 16c8264e7 e4e1d0d50
Author: snipe <[email protected]>
Date:   Tue Oct 15 17:34:35 2024 +0100

    Merge pull request #15672 from uberbrady/ldap_location_fixes

    Clean up how we use the '$location' in LDAP sync command

commit e4e1d0d50a
Author: Brady Wetherington <[email protected]>
Date:   Tue Oct 15 17:26:31 2024 +0100

    Clean up how we use the '$location' in LDAP sync command

commit 16c8264e76
Merge: 914a64720 0ae9ce0aa
Author: snipe <[email protected]>
Date:   Tue Oct 15 16:42:34 2024 +0100

    Merge pull request #15671 from snipe/bug/sc-27147

    Bug/sc 27147

commit 0ae9ce0aa9
Author: snipe <[email protected]>
Date:   Tue Oct 15 16:41:45 2024 +0100

    Cannot sort by updated at on Users [sc-27147]

    Signed-off-by: snipe <[email protected]>

commit 50b8f180b3
Author: snipe <[email protected]>
Date:   Tue Oct 15 16:41:39 2024 +0100

    More logical grouping in allow_columns

    Signed-off-by: snipe <[email protected]>

commit 914a647204
Merge: 69b6080bd e9225ff3e
Author: snipe <[email protected]>
Date:   Tue Oct 15 12:47:15 2024 +0100

    Merge pull request #15669 from snipe/remlove_ou_requirenedess

    Fixed #15663 - remove requiredness for OU

commit e9225ff3ea
Author: snipe <[email protected]>
Date:   Tue Oct 15 12:43:10 2024 +0100

    Switch to regular HTML for input form field

    Signed-off-by: snipe <[email protected]>

commit d0d4159088
Author: snipe <[email protected]>
Date:   Tue Oct 15 12:42:09 2024 +0100

    Fixed typo

    Signed-off-by: snipe <[email protected]>

commit 69b6080bd8
Merge: ddead359d b997d728f
Author: snipe <[email protected]>
Date:   Tue Oct 15 10:31:29 2024 +0100

    Merge pull request #15666 from snipe/updated_readme_llm

    Added LLM note

commit b997d728fb
Author: snipe <[email protected]>
Date:   Tue Oct 15 10:30:34 2024 +0100

    Added LLM note

    Signed-off-by: snipe <[email protected]>

commit ddead359d0
Merge: 0d35335da f3c4e5566
Author: snipe <[email protected]>
Date:   Mon Oct 14 14:29:34 2024 +0100

    Merge pull request #15660 from Toreg87/fixes/api_asset_create_fmcs2

    Refactor asset creation with API

commit f3c4e55667
Author: Tobias Regnery <[email protected]>
Date:   Mon Oct 14 15:14:41 2024 +0200

    Refactor asset creation with API

    Commit fb4fe3004 restored the previous behaviour to check the company_id in case of FullMultipleCompanySupport.
    But after rereading the code and the laravel documentation, the check is already there where it belongs in AssetStoreRequest::prepareForValidation()
    The bug is the is_int-check of the request input in prepareForValidation(). Is is of type string even if it is a numeric value, so the call to getIdForCurrentUser() never happend.
    Fix this by removing the check and the now redundant call to getIdForCurrentUser().
    Wrong values will get caught by the model-level validation rules.

commit 0d35335da7
Author: snipe <[email protected]>
Date:   Fri Oct 11 16:06:17 2024 +0100

    Removed debugging

    Signed-off-by: snipe <[email protected]>

commit feaa714304
Author: snipe <[email protected]>
Date:   Fri Oct 11 14:23:57 2024 +0100

    Nicer disabled button

    Signed-off-by: snipe <[email protected]>

commit e1a70023b1
Merge: de62359c6 fb4fe3004
Author: snipe <[email protected]>
Date:   Fri Oct 11 11:45:48 2024 +0100

    Merge pull request #15655 from Toreg87/fixes/api_asset_create_fmcs

    Fixes #15654 Fix asset creation with API and FullMultipleCompanySupport

commit de62359c67
Merge: 12bda8fc7 3dc64cc5e
Author: snipe <[email protected]>
Date:   Fri Oct 11 11:29:34 2024 +0100

    Merge pull request #15533 from marcusmoore/testing/fmcs-accessories

    Added tests for accessory api controller

commit 12bda8fc7b
Merge: 8aa298f6b b054017c9
Author: snipe <[email protected]>
Date:   Fri Oct 11 11:27:18 2024 +0100

    Merge pull request #15653 from snipe/15651_admin_user_on_maintenances

    Fixed #15651 - admin user now displaying on maintenances page

commit fb4fe30049
Author: Tobias Regnery <[email protected]>
Date:   Fri Oct 11 12:09:09 2024 +0200

    Fix asset creation with API and FullMultipleCompanySupport

    It is currently possible to create an asset with arbitrary company without being superuser and FullMultipleCompanySupport enabled.
    This bug goes back to 75ac7f80b9 which is part of version 6.3.0.
    Fix this by restoring the previous behaviour to check the company_id with getIdForCurrentUser().

commit b054017c9f
Author: snipe <[email protected]>
Date:   Fri Oct 11 11:16:24 2024 +0100

    Fixed #15651 - admin user now displaying on maintenances page

    Signed-off-by: snipe <[email protected]>

commit 524a442724
Author: bryanlopezinc <[email protected]>
Date:   Thu Oct 10 23:32:07 2024 +0100

    Improved import performance

commit 8aa298f6b0
Merge: 1f3465773 b5b93fdd3
Author: snipe <[email protected]>
Date:   Thu Oct 10 12:30:53 2024 +0100

    Merge pull request #15644 from snipe/form_requests_for_settings

    Form requests for settings

commit 1f34657734
Author: snipe <[email protected]>
Date:   Thu Oct 10 12:30:35 2024 +0100

    Fixed test

    Signed-off-by: snipe <[email protected]>

commit 0856ee648e
Merge: 94a074a19 1dafc970d
Author: snipe <[email protected]>
Date:   Thu Oct 10 12:23:14 2024 +0100

    Merge pull request #15648 from snipe/update_packages

    Updated livewire to 3.5.2

commit 1dafc970df
Author: snipe <[email protected]>
Date:   Thu Oct 10 12:19:57 2024 +0100

    Updated livewire to 3.5.2

    Signed-off-by: snipe <[email protected]>

commit 94a074a193
Merge: 2d49e1eff b34a7c8aa
Author: snipe <[email protected]>
Date:   Thu Oct 10 01:11:10 2024 +0100

    Merge pull request #15601 from snipe/check_db_on_healthcheck

    Fixed #15439 - check database on healthcheck

commit 2d49e1eff2
Merge: 705bc6f0c c2663ea1e
Author: snipe <[email protected]>
Date:   Thu Oct 10 01:09:11 2024 +0100

    Merge pull request #15637 from akemidx/bug/sc-26614

    FIXED: Badge counter showing deleted assets on User page

commit 705bc6f0c0
Merge: 3ee571374 67a605c9a
Author: snipe <[email protected]>
Date:   Thu Oct 10 01:08:25 2024 +0100

    Merge pull request #15642 from uberbrady/fix_bulk_checkout

    Fix bulk checkout to users, assets, and locations

commit b5b93fdd3a
Author: snipe <[email protected]>
Date:   Thu Oct 10 00:27:00 2024 +0100

    Make ldap username required

    Signed-off-by: snipe <[email protected]>

commit d9432baf7a
Author: snipe <[email protected]>
Date:   Wed Oct 9 23:51:20 2024 +0100

    Mlore ldap style improvements

    Signed-off-by: snipe <[email protected]>

commit 90be2a4498
Author: snipe <[email protected]>
Date:   Wed Oct 9 22:26:30 2024 +0100

    Use newer naming convention for errors

    Signed-off-by: snipe <[email protected]>

commit 3886da8941
Author: snipe <[email protected]>
Date:   Wed Oct 9 22:15:49 2024 +0100

    Remove form request from get LDAP method

    Signed-off-by: snipe <[email protected]>

commit 130e0c6242
Author: snipe <[email protected]>
Date:   Wed Oct 9 22:15:37 2024 +0100

    More validation

    Signed-off-by: snipe <[email protected]>

commit 4361a10818
Author: snipe <[email protected]>
Date:   Wed Oct 9 22:15:30 2024 +0100

    Added string

    Signed-off-by: snipe <[email protected]>

commit aa8048ac15
Author: snipe <[email protected]>
Date:   Wed Oct 9 22:15:25 2024 +0100

    Blade changes for ldap

    Signed-off-by: snipe <[email protected]>

commit 710e738e8e
Author: snipe <[email protected]>
Date:   Wed Oct 9 22:15:16 2024 +0100

    Fixed tests

    Signed-off-by: snipe <[email protected]>

commit 3705b91439
Author: snipe <[email protected]>
Date:   Wed Oct 9 20:51:34 2024 +0100

    Added more validation

    Signed-off-by: snipe <[email protected]>

commit 707bdad192
Author: snipe <[email protected]>
Date:   Wed Oct 9 20:33:56 2024 +0100

    Updated test

    Signed-off-by: snipe <[email protected]>

commit 242fe33f97
Author: snipe <[email protected]>
Date:   Wed Oct 9 20:33:42 2024 +0100

    Switch to regular HTML input

    Signed-off-by: snipe <[email protected]>

commit ded79469c1
Author: snipe <[email protected]>
Date:   Wed Oct 9 20:33:29 2024 +0100

    Remove unused controller method

    Signed-off-by: snipe <[email protected]>

commit d9fbf330e5
Author: snipe <[email protected]>
Date:   Wed Oct 9 20:33:15 2024 +0100

    Fixed translations

    Signed-off-by: snipe <[email protected]>

commit 2cb9ac26cd
Author: snipe <[email protected]>
Date:   Wed Oct 9 19:57:04 2024 +0100

    Renamed test

    Signed-off-by: snipe <[email protected]>

commit 185bc966e6
Author: snipe <[email protected]>
Date:   Wed Oct 9 19:46:47 2024 +0100

    Cleaned up use statements in tests

    Signed-off-by: snipe <[email protected]>

commit a7f7e4938f
Author: snipe <[email protected]>
Date:   Wed Oct 9 19:31:56 2024 +0100

    Added form action

    Signed-off-by: snipe <[email protected]>

commit 2883e79193
Author: snipe <[email protected]>
Date:   Wed Oct 9 19:30:55 2024 +0100

    Removed unecessary assets creation

    Signed-off-by: snipe <[email protected]>

commit 9c4191ae0a
Author: snipe <[email protected]>
Date:   Wed Oct 9 19:30:42 2024 +0100

    Basic tests

    Signed-off-by: snipe <[email protected]>

commit 3a77b83e9c
Author: snipe <[email protected]>
Date:   Wed Oct 9 19:30:34 2024 +0100

    Added space

    Signed-off-by: snipe <[email protected]>

commit d9be2b5a5e
Author: snipe <[email protected]>
Date:   Wed Oct 9 19:30:25 2024 +0100

    Trying to use the email_array translation

    Signed-off-by: snipe <[email protected]>

commit 69c43c610c
Author: snipe <[email protected]>
Date:   Wed Oct 9 19:30:00 2024 +0100

    Fixed typo

    Signed-off-by: snipe <[email protected]>

commit 4f957bcf71
Author: snipe <[email protected]>
Date:   Wed Oct 9 18:34:53 2024 +0100

    Required flag

    Signed-off-by: snipe <[email protected]>

commit 5cda7cce48
Author: snipe <[email protected]>
Date:   Wed Oct 9 18:21:40 2024 +0100

    Only accept a positive number for thresholds

    Signed-off-by: snipe <[email protected]>

commit 41b94e7128
Author: snipe <[email protected]>
Date:   Wed Oct 9 18:19:26 2024 +0100

    Fixed form input group

    Signed-off-by: snipe <[email protected]>

commit aa55fa6ff4
Author: snipe <[email protected]>
Date:   Wed Oct 9 18:16:34 2024 +0100

    Switch to form requests for settings

    Signed-off-by: snipe <[email protected]>

commit 67a605c9a5
Author: Brady Wetherington <[email protected]>
Date:   Wed Oct 9 17:01:26 2024 +0100

    Fix bulk checkout to users, assets, and locations

commit c2663ea1e0
Author: akemidx <[email protected]>
Date:   Tue Oct 8 16:38:33 2024 -0400

    withouttrashed

commit 3ee5713740
Merge: ab8a22f77 56e7ea667
Author: snipe <[email protected]>
Date:   Mon Oct 7 23:13:15 2024 +0100

    Merge pull request #15631 from snipe/test/importer-tests

    Add importer tests

commit ab8a22f77e
Merge: 26d7572bc 8c9132aff
Author: snipe <[email protected]>
Date:   Mon Oct 7 22:56:23 2024 +0100

    Merge pull request #15630 from marcusmoore/bug/sc-27028

    Only show EULA when available on print users page

commit 56e7ea6677
Merge: 32551d55d 803532667
Author: snipe <[email protected]>
Date:   Mon Oct 7 22:29:35 2024 +0100

    Merge pull request #15616 from marcusmoore/test/importer-test-updates

    Improve importer tests

commit 26d7572bcc
Merge: 382ebef8c ee046a868
Author: snipe <[email protected]>
Date:   Mon Oct 7 22:28:53 2024 +0100

    Merge pull request #15603 from marcusmoore/fixes/add-reguard

    Added `Model::reguard()` to importer

commit 8c9132aff9
Author: Marcus Moore <[email protected]>
Date:   Mon Oct 7 14:22:49 2024 -0700

    Hide EULA text and button when nothing will be displayed

commit 382ebef8ca
Merge: 2be88cb95 f76da4844
Author: snipe <[email protected]>
Date:   Mon Oct 7 21:26:21 2024 +0100

    Merge pull request #15621 from sniff122/develop

    Docker Env: Change trusted proxies to RFC1918

commit 2be88cb955
Merge: 7fc498a59 3f36d5f9b
Author: snipe <[email protected]>
Date:   Mon Oct 7 11:14:24 2024 +0100

    Merge pull request #15624 from snipe/fixed_line_break_on_print_all_for_users

    Removed duplicate JS and removed line break before user section

commit 3f36d5f9b3
Author: snipe <[email protected]>
Date:   Mon Oct 7 11:08:02 2024 +0100

    Removed duplicate CSS and removed line break before user section

    Signed-off-by: snipe <[email protected]>

commit f76da48448
Author: Lewis Foster <[email protected]>
Date:   Sat Oct 5 18:27:42 2024 +0100

    Docker Env: Change trusted proxies to RFC1918

commit 8035326675
Author: Marcus Moore <[email protected]>
Date:   Thu Oct 3 16:53:19 2024 -0700

    Add test

commit dfdd85abb1
Author: Marcus Moore <[email protected]>
Date:   Thu Oct 3 15:14:07 2024 -0700

    Remove unused imports

commit 063ea1892b
Author: Marcus Moore <[email protected]>
Date:   Thu Oct 3 15:02:03 2024 -0700

    Add trait to clean up files after test runs

commit e213053775
Author: Marcus Moore <[email protected]>
Date:   Thu Oct 3 13:59:58 2024 -0700

    Swap factory syntax

commit 88d549e7c5
Author: Marcus Moore <[email protected]>
Date:   Thu Oct 3 13:40:37 2024 -0700

    Remove unused data provider method

commit 983a25aa5f
Author: Marcus Moore <[email protected]>
Date:   Thu Oct 3 13:39:54 2024 -0700

    Simplify permission tests

commit bde05d6ed9
Author: Marcus Moore <[email protected]>
Date:   Thu Oct 3 13:15:49 2024 -0700

    Use new() instead of times()

commit b5ffe54bd0
Author: Marcus Moore <[email protected]>
Date:   Thu Oct 3 13:15:02 2024 -0700

    Swap assertEquals parameter order

commit 863c0a8b60
Author: Marcus Moore <[email protected]>
Date:   Thu Oct 3 11:43:02 2024 -0700

    Fix import_type for accessory state

commit 32551d55d7
Merge: 7fc498a59 e807cfab8
Author: Marcus Moore <[email protected]>
Date:   Thu Oct 3 11:39:21 2024 -0700

    Merge pull request #15579 from bryanlopezinc/ImportTests

    Add Import data tests

commit 7fc498a597
Merge: 78ca1026f cb281c640
Author: snipe <[email protected]>
Date:   Thu Oct 3 17:39:18 2024 +0100

    Merge pull request #15613 from snipe/css_fixes_for_long_values

    Smarter word-wrapping on long text

commit cb281c6408
Author: snipe <[email protected]>
Date:   Thu Oct 3 17:33:46 2024 +0100

    Tweaked line height

    Signed-off-by: snipe <[email protected]>

commit f483cd448f
Author: snipe <[email protected]>
Date:   Thu Oct 3 17:27:37 2024 +0100

    Smarter work-wrapping on long text

    Signed-off-by: snipe <[email protected]>

commit 78ca1026fd
Merge: 3699d7936 722d5a58e
Author: snipe <[email protected]>
Date:   Thu Oct 3 16:24:32 2024 +0100

    Merge pull request #15612 from snipe/fixes_print_assigned_in_profile

    Fixes print assigned in profile

commit 722d5a58e7
Author: snipe <[email protected]>
Date:   Thu Oct 3 16:19:38 2024 +0100

    Added isset on users

    Signed-off-by: snipe <[email protected]>

commit 7461c3e0ca
Author: snipe <[email protected]>
Date:   Thu Oct 3 16:19:27 2024 +0100

    Change controller to assume a collection. (This is dumb, but whatever)

    Signed-off-by: snipe <[email protected]>

commit 3c0f4181ae
Author: snipe <[email protected]>
Date:   Thu Oct 3 16:19:06 2024 +0100

    Use the newer button style

    Signed-off-by: snipe <[email protected]>

commit 3699d79363
Merge: 54fbd0540 350b627ce
Author: snipe <[email protected]>
Date:   Thu Oct 3 14:34:00 2024 +0100

    Merge pull request #15610 from uberbrady/fix_numeric_sort_bug

    Fix numeric sort 'ambiguous order clause' error

commit 350b627ce1
Author: Brady Wetherington <[email protected]>
Date:   Thu Oct 3 14:23:40 2024 +0100

    Fix numeric sort 'ambiguous order clause' error

commit ee046a8688
Author: Marcus Moore <[email protected]>
Date:   Wed Oct 2 10:50:40 2024 -0700

    Add matching Model::reguard()

commit b34a7c8aad
Author: snipe <[email protected]>
Date:   Wed Oct 2 15:48:35 2024 +0100

    Removed die()

    Signed-off-by: snipe <[email protected]>

commit f92bf5dc20
Author: snipe <[email protected]>
Date:   Wed Oct 2 15:39:27 2024 +0100

    Updated language for failure

    Signed-off-by: snipe <[email protected]>

commit 4d9e85026a
Author: snipe <[email protected]>
Date:   Wed Oct 2 15:36:01 2024 +0100

    Fixed #15439 - check database on healthcheck

    Signed-off-by: snipe <[email protected]>

commit 54fbd0540d
Merge: b483bb163 4db735808
Author: snipe <[email protected]>
Date:   Wed Oct 2 12:40:49 2024 +0100

    Merge branch 'develop' of https://github.com/snipe/snipe-it into develop

commit b483bb1633
Author: snipe <[email protected]>
Date:   Wed Oct 2 12:40:45 2024 +0100

    Bumped version

    Signed-off-by: snipe <[email protected]>

commit 4db7358086
Merge: 0dd6f41f6 b9cfdf2e5
Author: snipe <[email protected]>
Date:   Wed Oct 2 12:38:46 2024 +0100

    Merge pull request #15593 from Godmartinz/Fixed-divide-by-zero-bug

    Fixed divide by zero bug in depreciation transformer

commit 0dd6f41f66
Author: snipe <[email protected]>
Date:   Wed Oct 2 11:04:55 2024 +0100

    Simplified 2fa if/else

    Signed-off-by: snipe <[email protected]>

commit 684c20ae39
Author: snipe <[email protected]>
Date:   Wed Oct 2 11:00:49 2024 +0100

    Fixed parenthasis

    Signed-off-by: snipe <[email protected]>

commit 3153bbb13f
Author: spencerrlongg <[email protected]>
Date:   Tue Oct 1 17:04:18 2024 -0500

    dumb fix

commit 3dc64cc5e0
Author: Marcus Moore <[email protected]>
Date:   Tue Oct 1 13:35:39 2024 -0700

    Reference accessory checkout and not the accessory

commit c32f4e34b4
Author: snipe <[email protected]>
Date:   Tue Oct 1 20:35:49 2024 +0100

    Minor formatting fix

    Signed-off-by: snipe <[email protected]>

commit ca1886cebc
Merge: 45ab49eea a79dfea40
Author: snipe <[email protected]>
Date:   Tue Oct 1 20:31:38 2024 +0100

    Merge pull request #15594 from snipe/localizations/update-2024-10-01

    Updated strings

commit a79dfea40a
Author: snipe <[email protected]>
Date:   Tue Oct 1 20:30:58 2024 +0100

    Updated strings

    Signed-off-by: snipe <[email protected]>

commit 45ab49eeab
Merge: 97d00e5aa 8232618a9
Author: snipe <[email protected]>
Date:   Tue Oct 1 20:26:42 2024 +0100

    Merge pull request #15592 from spencerrlongg/bug/catch_request_notify_errors

    Catch Errors Around Request Notifications

commit 8232618a9f
Author: spencerrlongg <[email protected]>
Date:   Tue Oct 1 14:26:32 2024 -0500

    change the other one too

commit 9a651b567d
Author: spencerrlongg <[email protected]>
Date:   Tue Oct 1 14:24:03 2024 -0500

    change error to warning

commit 97d00e5aa8
Author: snipe <[email protected]>
Date:   Tue Oct 1 20:08:54 2024 +0100

    Fixed erroneous form tag on anchor

    Signed-off-by: snipe <[email protected]>

commit 5b90d79494
Author: Marcus Moore <[email protected]>
Date:   Tue Oct 1 11:50:48 2024 -0700

    Use created_by

commit b9cfdf2e54
Author: Godfrey M <[email protected]>
Date:   Tue Oct 1 11:41:59 2024 -0700

    reworked monthly depreciation variable value

commit 1139acd9f3
Author: spencerrlongg <[email protected]>
Date:   Tue Oct 1 13:36:47 2024 -0500

    catch errors around request notifications

commit b7ad80bd31
Author: Godfrey M <[email protected]>
Date:   Tue Oct 1 11:24:24 2024 -0700

    fix monthly depreciation value

commit 5ffd1b8daa
Author: Godfrey M <[email protected]>
Date:   Tue Oct 1 11:02:39 2024 -0700

    fixes if statement in transformer

commit 9a2117466e
Author: snipe <[email protected]>
Date:   Tue Oct 1 18:23:40 2024 +0100

    Removed placeholder

    Signed-off-by: snipe <[email protected]>

commit 7e3a062984
Author: snipe <[email protected]>
Date:   Tue Oct 1 18:23:07 2024 +0100

    Use <th> for table header in bulk interstitial

    Signed-off-by: snipe <[email protected]>

commit d274fb6963
Merge: cfc04a1d1 27ba641aa
Author: snipe <[email protected]>
Date:   Tue Oct 1 14:32:48 2024 +0100

    Merge pull request #15589 from snipe/adds_checkin_action_on_asset_delete

    Adds checkin action on asset delete via View UI

commit 27ba641aa5
Author: snipe <[email protected]>
Date:   Tue Oct 1 14:30:34 2024 +0100

    Added checkin on delete to API

    Signed-off-by: snipe <[email protected]>

commit 5823197e6f
Author: snipe <[email protected]>
Date:   Tue Oct 1 14:29:02 2024 +0100

    Added checkin action on delete for checked out assets

    Signed-off-by: snipe <[email protected]>

commit cfc04a1d12
Merge: 12da43303 cae8aa784
Author: snipe <[email protected]>
Date:   Tue Oct 1 14:08:58 2024 +0100

    Merge pull request #15588 from snipe/added_more_maxlengths

    Added maxlengths to additional fields

commit cae8aa7840
Author: snipe <[email protected]>
Date:   Tue Oct 1 14:02:54 2024 +0100

    Added maxlengths to additional fields

    Signed-off-by: snipe <[email protected]>

commit 12da43303f
Author: snipe <[email protected]>
Date:   Tue Oct 1 01:44:05 2024 +0100

    Fixed #15584 - regression with required css change

    Signed-off-by: snipe <[email protected]>

commit fdfea390fb
Merge: d609ed50a 5689e940b
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 30 12:59:27 2024 -0700

    Merge branch 'develop' into testing/fmcs-accessories

commit b04afbbc85
Merge: b964ce102 3f311ba2f
Author: snipe <[email protected]>
Date:   Mon Sep 30 19:26:08 2024 +0100

    Merge pull request #15564 from uberbrady/improve_autoclose

    Get us better debugging output for new Github Stale Action

commit b964ce1025
Merge: 6217cba20 68e3f375f
Author: snipe <[email protected]>
Date:   Mon Sep 30 19:25:05 2024 +0100

    Merge pull request #15583 from Godmartinz/remove-sortable-from-depreciations

    Removed sortablity for current value column in depreciations report

commit 6217cba201
Merge: 5689e940b b32ab6a06
Author: snipe <[email protected]>
Date:   Mon Sep 30 19:24:19 2024 +0100

    Merge pull request #15524 from Godmartinz/double-notif-bug

    Fixed double webhook notifications // Separated email and webhook notifications.

commit 68e3f375fc
Author: Godfrey M <[email protected]>
Date:   Mon Sep 30 11:15:49 2024 -0700

    removes sortablity from current value column

commit 5689e940b8
Author: snipe <[email protected]>
Date:   Mon Sep 30 18:23:12 2024 +0100

    Fixed #15581 - missing bracker

    Signed-off-by: snipe <[email protected]>

commit e807cfab86
Merge: 0b3f45856 001348c63
Author: bryanlopezinc <[email protected]>
Date:   Mon Sep 30 12:47:52 2024 +0100

    Merge branch 'develop' into importTests

commit 0b3f458561
Author: bryanlopezinc <[email protected]>
Date:   Mon Sep 30 12:42:41 2024 +0100

    Added tests for Import feature

commit 001348c638
Author: snipe <[email protected]>
Date:   Sun Sep 29 14:33:42 2024 +0100

    Unset required on checkout select :(

    Related to the discussion at #15552

    Signed-off-by: snipe <[email protected]>

commit 1b041af862
Merge: 260b15368 d120585f9
Author: snipe <[email protected]>
Date:   Sun Sep 29 11:25:01 2024 +0100

    Merge remote-tracking branch 'origin/master' into develop

    Signed-off-by: snipe <[email protected]>

    # Conflicts:
    #	public/css/build/app.css
    #	public/css/build/overrides.css
    #	public/css/dist/all.css
    #	public/mix-manifest.json

commit 260b153689
Merge: 36b27fcda 05d74f7a9
Author: snipe <[email protected]>
Date:   Sat Sep 28 16:09:51 2024 +0100

    Merge pull request #15573 from snipe/fixed_requiredness_indicator

    Fixes for requiredness indicator in UI

commit 05d74f7a92
Author: snipe <[email protected]>
Date:   Sat Sep 28 15:42:03 2024 +0100

    Covered setup pages too

    Signed-off-by: snipe <[email protected]>

commit dc85588d7f
Author: snipe <[email protected]>
Date:   Sat Sep 28 15:31:44 2024 +0100

    Don’t show password as required if editing

    Signed-off-by: snipe <[email protected]>

commit 585f998cae
Author: snipe <[email protected]>
Date:   Sat Sep 28 15:28:06 2024 +0100

    Fixes for requiredness display

    Signed-off-by: snipe <[email protected]>

commit d120585f94
Author: snipe <[email protected]>
Date:   Fri Sep 27 14:07:30 2024 +0100

    Check for valid eula for license, consumable

    Signed-off-by: snipe <[email protected]>

commit 166a700342
Merge: 6c85ba349 36b27fcda
Author: snipe <[email protected]>
Date:   Fri Sep 27 13:37:28 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 36b27fcda3
Author: snipe <[email protected]>
Date:   Fri Sep 27 13:37:14 2024 +0100

    Check for valid category before getting the eula

    Signed-off-by: snipe <[email protected]>

commit a44490e448
Author: snipe <[email protected]>
Date:   Fri Sep 27 13:07:24 2024 +0100

    Nowrap on files column

    Signed-off-by: snipe <[email protected]>

commit 9aada2ec70
Merge: ac6411743 ef82f954e
Author: snipe <[email protected]>
Date:   Thu Sep 26 09:09:35 2024 +0100

    Merge pull request #15498 from Godmartinz/Modal_fix

    Refactoring modals with partials and fixing misalignments

commit 3f74ff25d2
Author: Godfrey M <[email protected]>
Date:   Wed Sep 25 16:19:09 2024 -0700

    fixed error message

commit ef82f954e5
Author: Godfrey M <[email protected]>
Date:   Wed Sep 25 15:47:57 2024 -0700

    fixed required css, and user input lengths

commit 3f311ba2fb
Author: Brady Wetherington <[email protected]>
Date:   Wed Sep 25 21:27:45 2024 +0100

    Get us better debugging output for new Github Stale Action

commit 96953aa2ed
Merge: e609b3976 b797c37ac
Author: Godfrey Martinez <[email protected]>
Date:   Wed Sep 25 12:50:01 2024 -0700

    Merge pull request #23 from Godmartinz/Modal_fix_p3

    replace duplicate code with partials

commit b797c37acb
Author: Godfrey M <[email protected]>
Date:   Wed Sep 25 12:48:05 2024 -0700

    replace duplicate code with partials

commit 6c85ba3495
Merge: 9f8473e25 ac6411743
Author: snipe <[email protected]>
Date:   Wed Sep 25 20:45:02 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit ac6411743b
Merge: 9b03f4649 3f0245f88
Author: snipe <[email protected]>
Date:   Wed Sep 25 20:35:58 2024 +0100

    Merge pull request #15563 from snipe/refined_gates_on_user_bulk

    Update for #15534 - Refined gates on user bulk

commit 3f0245f88f
Author: snipe <[email protected]>
Date:   Wed Sep 25 20:33:00 2024 +0100

    Make controller gate match dropdown gate

    Signed-off-by: snipe <[email protected]>

commit c02647a0fa
Author: snipe <[email protected]>
Date:   Wed Sep 25 20:32:03 2024 +0100

    Moved merge into delete gate, since they do technically delete

    Signed-off-by: snipe <[email protected]>

commit edca3f432c
Author: snipe <[email protected]>
Date:   Wed Sep 25 20:30:58 2024 +0100

    Removed gate for delete

    Signed-off-by: snipe <[email protected]>

commit 2218c94aa3
Author: snipe <[email protected]>
Date:   Wed Sep 25 20:29:23 2024 +0100

    Gates the dropdown based on user permissions

    Signed-off-by: snipe <[email protected]>

commit e609b39760
Merge: 0bc98e971 12522a379
Author: Godfrey Martinez <[email protected]>
Date:   Wed Sep 25 12:09:26 2024 -0700

    Merge pull request #22 from Godmartinz/Modal_fix_p2

    Modal fix p2

commit 12522a3791
Author: Godfrey M <[email protected]>
Date:   Wed Sep 25 12:07:15 2024 -0700

    fix spacing issues

commit f6d7ea19e4
Author: snipe <[email protected]>
Date:   Wed Sep 25 19:44:39 2024 +0100

    Set view as base permission, drill down for more intrusive actions

    Signed-off-by: snipe <[email protected]>

commit 18ddffe8f9
Author: Godfrey M <[email protected]>
Date:   Wed Sep 25 11:42:16 2024 -0700

    fix partial variable intialization, fix width of input fields

commit 9b03f46490
Merge: cb6e5042d fac4833b5
Author: snipe <[email protected]>
Date:   Wed Sep 25 19:32:01 2024 +0100

    Merge pull request #15534 from marcusmoore/bulk-print-users

    Added the ability to bulk print users

commit 926a319552
Merge: 0bc98e971 cb6e5042d
Author: Godfrey M <[email protected]>
Date:   Wed Sep 25 11:10:24 2024 -0700

    Merge branch 'develop' into Modal_fix_p2

commit 9f8473e254
Merge: 0e61d0b19 cb6e5042d
Author: snipe <[email protected]>
Date:   Wed Sep 25 18:36:40 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit cb6e5042d9
Merge: c1a887b48 ba69259f2
Author: snipe <[email protected]>
Date:   Wed Sep 25 18:32:59 2024 +0100

    Merge pull request #15547 from snipe/disallow_checkout_with_nondeployable_status

    Fixed #13396 - do not allow checkout to undeployable status types

commit c1a887b48b
Merge: ba1220484 658c94ad8
Author: snipe <[email protected]>
Date:   Wed Sep 25 18:32:21 2024 +0100

    Merge pull request #15561 from snipe/fixes/adds_action_date_to_sorting

    Changed `action_date` to `created_at` in activity report

commit 658c94ad8b
Author: snipe <[email protected]>
Date:   Wed Sep 25 17:25:15 2024 +0100

    Changed action_date to created_at

    Signed-off-by: snipe <[email protected]>

commit 0e61d0b195
Merge: abdddbec4 ba1220484
Author: snipe <[email protected]>
Date:   Wed Sep 25 15:51:38 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit ba12204842
Merge: eeabc8dc9 1c3babaca
Author: snipe <[email protected]>
Date:   Wed Sep 25 15:51:14 2024 +0100

    Merge pull request #15555 from snipe/fixes/user_file_upload

    Fixed case on `$logAction` for user file upload

commit 1c3babacaf
Author: snipe <[email protected]>
Date:   Wed Sep 25 15:46:57 2024 +0100

    Fixed case on logAction for usewr file upload

    Signed-off-by: snipe <[email protected]>

commit abdddbec44
Merge: a425c2b76 eeabc8dc9
Author: snipe <[email protected]>
Date:   Wed Sep 25 11:58:25 2024 +0100

    Merge remote-tracking branch 'origin/develop'

    Signed-off-by: snipe <[email protected]>

    # Conflicts:
    #	public/css/build/app.css
    #	public/css/build/overrides.css
    #	public/css/dist/all.css
    #	public/mix-manifest.json

commit eeabc8dc9d
Author: snipe <[email protected]>
Date:   Wed Sep 25 11:33:45 2024 +0100

    Dev assets

    Signed-off-by: snipe <[email protected]>

commit 21f8ac8e52
Merge: c38222e95 2a2666be0
Author: snipe <[email protected]>
Date:   Wed Sep 25 11:31:23 2024 +0100

    Merge pull request #15552 from Godmartinz/ragged-form-inputs

    Fixed input field misalignments

commit a425c2b765
Merge: 34eb10ff7 c38222e95
Author: snipe <[email protected]>
Date:   Wed Sep 25 10:52:19 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 2a2666be0b
Author: Godfrey M <[email protected]>
Date:   Tue Sep 24 13:24:50 2024 -0700

    makes required a pseudo field

commit c38222e956
Merge: 8cf1e4dce 0ce5832b6
Author: snipe <[email protected]>
Date:   Tue Sep 24 18:10:53 2024 +0100

    Merge pull request #15549 from snipe/fixes/#15548_unify_audit_api_endpoints

    Fixes #15548 - unify audit api endpoints

commit 0ce5832b6c
Author: snipe <[email protected]>
Date:   Tue Sep 24 17:29:40 2024 +0100

    Removed debugging

    Signed-off-by: snipe <[email protected]>

commit b6340532d7
Author: Brady Wetherington <[email protected]>
Date:   Tue Sep 24 17:15:39 2024 +0100

    Improve the error and success messages and linking

commit 5fb43dd159
Author: snipe <[email protected]>
Date:   Tue Sep 24 16:55:56 2024 +0100

    Handle `audit` *and* `audits` for urls

    Signed-off-by: snipe <[email protected]>

commit de57d71bf1
Author: snipe <[email protected]>
Date:   Tue Sep 24 16:30:24 2024 +0100

    Fixed #15548 - unify audit due/overdue APIs

    Signed-off-by: snipe <[email protected]>

commit ba69259f2d
Author: snipe <[email protected]>
Date:   Tue Sep 24 15:35:00 2024 +0100

    Fixed #13396 - do not allow checkout to undeployable status types

    Signed-off-by: snipe <[email protected]>

commit c71411465a
Author: Brady Wetherington <[email protected]>
Date:   Tue Sep 24 15:17:35 2024 +0100

    First pass at better-handling those annoying Rollbars we keep getting

commit 8cf1e4dceb
Merge: ab0c009c0 66249a37e
Author: snipe <[email protected]>
Date:   Tue Sep 24 11:10:20 2024 +0100

    Merge pull request #15544 from snipe/bug/sc-26855

    Fixed app settings view on mobile

commit 66249a37ed
Author: snipe <[email protected]>
Date:   Tue Sep 24 11:08:31 2024 +0100

    Tweaked styles

    Signed-off-by: snipe <[email protected]>

commit 96712cb398
Author: snipe <[email protected]>
Date:   Tue Sep 24 10:55:26 2024 +0100

    Fixed app settings view on mobile

    Signed-off-by: snipe <[email protected]>

commit fac4833b58
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 23 17:15:16 2024 -0700

    Remove unused import

commit a12c9d053f
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 23 16:44:25 2024 -0700

    Hide label when printing

commit 8b3b68b308
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 23 16:43:14 2024 -0700

    Show or hide all eulas at once when printing multiple users

commit 4b02db5031
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 23 16:26:22 2024 -0700

    Add authorization check in bulk users controller

commit ab90c0cf05
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 23 16:10:40 2024 -0700

    Add missing eager load in bulk users controller

commit cef7ddc719
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 23 16:10:21 2024 -0700

    Add eager loads to userscontroller

commit 3870095a28
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 23 15:50:24 2024 -0700

    Fix Cannot read properties of undefined error by removing snipe-table class from eula table

commit a02e250b22
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 23 15:26:15 2024 -0700

    Add page breaks for each user

commit 8ac5c0e471
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 23 14:05:47 2024 -0700

    Re-combine layout and view

commit a2d4dcf6e8
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 23 12:49:36 2024 -0700

    Use bulk actions menu

commit 54044bfa5e
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 23 10:57:57 2024 -0700

    Add eager loads

commit e493cc964d
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 23 10:48:07 2024 -0700

    Remove AssetCountForSidebar middleware from print view

commit 29af210f4f
Merge: 5128fd49e ab0c009c0
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 23 10:26:20 2024 -0700

    Merge branch 'develop' into bulk-print-users

commit 34eb10ff73
Merge: 7d7d58769 ab0c009c0
Author: snipe <[email protected]>
Date:   Fri Sep 20 19:45:20 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit ab0c009c0d
Author: snipe <[email protected]>
Date:   Fri Sep 20 19:45:10 2024 +0100

    Fixed seeder

    Signed-off-by: snipe <[email protected]>

commit 7d7d58769c
Merge: 245d5dc46 b68805cf8
Author: snipe <[email protected]>
Date:   Fri Sep 20 19:13:00 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit b68805cf83
Author: snipe <[email protected]>
Date:   Fri Sep 20 19:11:52 2024 +0100

    Small fix for notifications checkout

    Signed-off-by: snipe <[email protected]>

commit 245d5dc469
Merge: 4ab478bb9 7d858129d
Author: snipe <[email protected]>
Date:   Fri Sep 20 17:28:15 2024 +0100

    Merge remote-tracking branch 'origin/develop'

    Signed-off-by: snipe <[email protected]>

    # Conflicts:
    #	config/version.php

commit 7d858129d9
Author: snipe <[email protected]>
Date:   Fri Sep 20 14:44:19 2024 +0100

    Bumped hash

    Signed-off-by: snipe <[email protected]>

commit 65ce63bc9b
Merge: 5eea9d195 54fba2f54
Author: snipe <[email protected]>
Date:   Fri Sep 20 14:42:07 2024 +0100

    Merge pull request #15537 from snipe/snyk/updated_jspdf_autotable

    Updated jspdf autotable

commit 54fba2f547
Author: snipe <[email protected]>
Date:   Fri Sep 20 14:40:41 2024 +0100

    Update jspdf autotable

    Signed-off-by: snipe <[email protected]>

commit 5eea9d1950
Author: snipe <[email protected]>
Date:   Fri Sep 20 14:33:56 2024 +0100

    Corrected text warning translation

    Signed-off-by: snipe <[email protected]>

commit b84a634ec7
Author: snipe <[email protected]>
Date:   Fri Sep 20 14:33:35 2024 +0100

    Corrected comment

    Signed-off-by: snipe <[email protected]>

commit 2fc88a0e08
Author: snipe <[email protected]>
Date:   Fri Sep 20 14:33:26 2024 +0100

    Eager load adminuser

    Signed-off-by: snipe <[email protected]>

commit bc540b6564
Author: snipe <[email protected]>
Date:   Fri Sep 20 14:02:28 2024 +0100

    Requestable status not saving with manual [sc-26848]

    Signed-off-by: snipe <[email protected]>

commit f53b852dff
Author: snipe <[email protected]>
Date:   Fri Sep 20 13:53:52 2024 +0100

    Make created_by equal one in the seeder

    Signed-off-by: snipe <[email protected]>

commit b83d1a043f
Merge: cdb7ccb8f b21c303e5
Author: snipe <[email protected]>
Date:   Fri Sep 20 13:47:31 2024 +0100

    Merge pull request #15519 from snipe/features/add_created_at_created_by

    Change `user_id` to `created_by`

commit 4ab478bb97
Merge: d96c5e1ba cdb7ccb8f
Author: snipe <[email protected]>
Date:   Fri Sep 20 13:44:45 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit b21c303e56
Merge: b88f2054d cdb7ccb8f
Author: snipe <[email protected]>
Date:   Fri Sep 20 13:43:50 2024 +0100

    Merge remote-tracking branch 'origin/develop' into features/add_created_at_created_by

commit 5128fd49e6
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 19 17:27:25 2024 -0700

    Allow printing all users

commit 2d2d5bdc7e
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 19 17:23:47 2024 -0700

    Pass user in array

commit 8364d26c9b
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 19 17:18:26 2024 -0700

    Extract parent layout

commit efd6d7625f
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 19 17:16:05 2024 -0700

    Remove bad closing tag

commit bdf5708bfc
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 19 17:10:43 2024 -0700

    Remove accidental line

commit e95703cb18
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 19 17:10:07 2024 -0700

    Use eager load

commit 7ad4a29970
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 19 16:54:39 2024 -0700

    Add eager loading

commit cdb7ccb8f3
Merge: 8270947ed d446773fd
Author: snipe <[email protected]>
Date:   Thu Sep 19 21:54:03 2024 +0100

    Merge pull request #15532 from spencerrlongg/bug/15253

    Catch Exceptions on Checkout Notification

commit 8270947ed2
Merge: 4f7c8e0c3 8e1111c68
Author: snipe <[email protected]>
Date:   Thu Sep 19 21:49:27 2024 +0100

    Merge pull request #13291 from akemidx/eol_date_range_for_reports

    Added date range for EOL in custom reports

commit 4f7c8e0c3d
Merge: d7bde3784 3ea5d4ee4
Author: snipe <[email protected]>
Date:   Thu Sep 19 21:36:09 2024 +0100

    Merge pull request #14671 from Robert-Azelis/patch-6

    [FIX] Update EOL date when used bulk update of purchase date

commit d609ed50a4
Merge: d639d6fbc d7bde3784
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 19 13:20:55 2024 -0700

    Merge branch 'develop' into testing/fmcs-accessories

commit b88f2054dd
Author: snipe <[email protected]>
Date:   Thu Sep 19 20:38:34 2024 +0100

    Refactor isDeletable on companies

    Signed-off-by: snipe <[email protected]>

commit d7914e238d
Author: snipe <[email protected]>
Date:   Thu Sep 19 20:34:54 2024 +0100

    Added created by to company on save

    Signed-off-by: snipe <[email protected]>

commit d7bde37842
Merge: 454796e52 4facc4007
Author: snipe <[email protected]>
Date:   Thu Sep 19 20:33:10 2024 +0100

    Merge pull request #15507 from setpill/setpill/feat/use_explicit_attributes_in_ldap_sync

    Added #15506: Explicitly request used LDAP attributes

commit 454796e52a
Merge: eef487d61 7c85ad54e
Author: snipe <[email protected]>
Date:   Thu Sep 19 20:32:03 2024 +0100

    Merge pull request #15518 from snipe/sort_by_numeric_custom_fields

    Fixed #11634 - Sort by numeric columns for numeric custom fields

commit eef487d61b
Merge: dddbf27d7 71dbc7abb
Author: snipe <[email protected]>
Date:   Thu Sep 19 20:31:02 2024 +0100

    Merge pull request #15531 from Godmartinz/status-doesnt-update-in-email

    Fixed mail notification field `status label` not updating

commit 71dbc7abb0
Author: Godfrey M <[email protected]>
Date:   Thu Sep 19 12:23:07 2024 -0700

    refreshed the assetstatus relationship

commit d639d6fbc1
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 19 12:21:54 2024 -0700

    Add tests for accessory select list endpoint

commit 74088ea581
Author: snipe <[email protected]>
Date:   Thu Sep 19 20:13:38 2024 +0100

    Optimize isDeletable counts

    Signed-off-by: snipe <[email protected]>

commit fff069824b
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 19 12:11:03 2024 -0700

    Add tests for update accessory endpoint

commit d446773fdd
Author: spencerrlongg <[email protected]>
Date:   Thu Sep 19 14:05:48 2024 -0500

    catch exceptions on notification

commit f283b5fbe8
Author: snipe <[email protected]>
Date:   Thu Sep 19 19:56:39 2024 +0100

    Eager load adminuser

    Signed-off-by: snipe <[email protected]>

commit a5be18bb14
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 19 11:55:15 2024 -0700

    Add test for limit and offset

commit eb6f05faf7
Author: snipe <[email protected]>
Date:   Thu Sep 19 19:41:46 2024 +0100

    Eager load adminuser

    Signed-off-by: snipe <[email protected]>

commit 118183ff58
Author: snipe <[email protected]>
Date:   Thu Sep 19 19:41:39 2024 +0100

    Removed footer

    Signed-off-by: snipe <[email protected]>

commit 2137890496
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 19 11:33:20 2024 -0700

    Remove dead code

commit ebf6ce6980
Author: snipe <[email protected]>
Date:   Thu Sep 19 19:27:10 2024 +0100

    Refactor for fewer queries

    Signed-off-by: snipe <[email protected]>

commit 9b22d6d493
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 19 11:24:01 2024 -0700

    Add tests for accessory checkouts endpoint

commit 5ebf0ed2b2
Author: snipe <[email protected]>
Date:   Thu Sep 19 19:19:14 2024 +0100

    Updated variable

    Signed-off-by: snipe <[email protected]>

commit 836893cba5
Author: snipe <[email protected]>
Date:   Thu Sep 19 18:35:00 2024 +0100

    Added id to report

    Signed-off-by: snipe <[email protected]>

commit cd98b3817d
Author: snipe <[email protected]>
Date:   Thu Sep 19 18:26:08 2024 +0100

    Removed duplicate line

    Signed-off-by: snipe <[email protected]>

commit 727806372c
Author: snipe <[email protected]>
Date:   Thu Sep 19 18:22:11 2024 +0100

    Added created_by to status label

    Signed-off-by: snipe <[email protected]>

commit 5e1c736d49
Author: snipe <[email protected]>
Date:   Thu Sep 19 18:04:50 2024 +0100

    Added created_by for manufacturers

    Signed-off-by: snipe <[email protected]>

commit 6579fa72da
Author: snipe <[email protected]>
Date:   Thu Sep 19 17:56:05 2024 +0100

    Added scoping for categories and companies

    Signed-off-by: snipe <[email protected]>

commit 82d6e1510f
Author: snipe <[email protected]>
Date:   Thu Sep 19 17:41:05 2024 +0100

    Order by created_by for depreciations

    Signed-off-by: snipe <[email protected]>

commit 822ea96dfd
Author: snipe <[email protected]>
Date:   Thu Sep 19 17:31:46 2024 +0100

    Use auth()->id() instead of Auth::id()

    Signed-off-by: snipe <[email protected]>

commit b247fc33b9
Author: snipe <[email protected]>
Date:   Thu Sep 19 17:28:01 2024 +0100

    Added legacy comment

    Signed-off-by: snipe <[email protected]>

commit 2dcae780c0
Author: snipe <[email protected]>
Date:   Thu Sep 19 17:26:21 2024 +0100

    Reapply deleted code

    Signed-off-by: snipe <[email protected]>

commit 5c3180ffa0
Author: snipe <[email protected]>
Date:   Thu Sep 19 17:25:09 2024 +0100

    Removed duplicate code

    Signed-off-by: snipe <[email protected]>

commit 65eba30038
Author: snipe <[email protected]>
Date:   Thu Sep 19 17:23:34 2024 +0100

    Fixed markdown in acceptance reminder

    Signed-off-by: snipe <[email protected]>

commit bbce7b40ca
Author: snipe <[email protected]>
Date:   Thu Sep 19 17:20:56 2024 +0100

    Additional consistencies

    Signed-off-by: snipe <[email protected]>

commit 02a29c71ef
Author: snipe <[email protected]>
Date:   Thu Sep 19 17:01:48 2024 +0100

    Added created_by

    Signed-off-by: snipe <[email protected]>

commit 6699995972
Author: snipe <[email protected]>
Date:   Thu Sep 19 17:01:36 2024 +0100

    Added created_by to components

    Signed-off-by: snipe <[email protected]>

commit 951f03094a
Author: snipe <[email protected]>
Date:   Thu Sep 19 17:01:17 2024 +0100

    Added created_by to kits

    Signed-off-by: snipe <[email protected]>

commit 354b00ef15
Author: snipe <[email protected]>
Date:   Thu Sep 19 16:45:51 2024 +0100

    Made method name consistent

    Signed-off-by: snipe <[email protected]>

commit c93229179b
Author: snipe <[email protected]>
Date:   Thu Sep 19 16:45:39 2024 +0100

    Added order by created_by to accessories

    Signed-off-by: snipe <[email protected]>

commit a77a7065d7
Author: snipe <[email protected]>
Date:   Thu Sep 19 16:34:10 2024 +0100

    Added order by admin to assets

    Signed-off-by: snipe <[email protected]>

commit 4363e8b34c
Author: snipe <[email protected]>
Date:   Thu Sep 19 16:20:42 2024 +0100

    Updated importer

    Signed-off-by: snipe <[email protected]>

commit 9adb2c24f3
Author: snipe <[email protected]>
Date:   Thu Sep 19 16:06:36 2024 +0100

    Squashed commit of the following:

    commit dddbf27d78
    Author: snipe <[email protected]>
    Date:   Wed Sep 18 14:18:52 2024 +0100

        Updated language strings

        Signed-off-by: snipe <[email protected]>

    commit fcefcc8184
    Merge: 04bb3eec8 3519a82dd
    Author: snipe <[email protected]>
    Date:   Wed Sep 18 13:44:44 2024 +0100

        Merge pull request #15512 from marcusmoore/testing/fmcs

        Added tests for delete methods in api

    commit 04bb3eec83
    Merge: 154d5d8d9 f963b9a19
    Author: snipe <[email protected]>
    Date:   Wed Sep 18 13:41:37 2024 +0100

        Merge pull request #15521 from uberbrady/improve_country_selector

        Fix selected-index of Countries drop-down [fd-44144]

    commit f963b9a19f
    Author: Brady Wetherington <[email protected]>
    Date:   Wed Sep 18 13:24:26 2024 +0100

        Fix selected-index of Countries drop-down

    commit 154d5d8d91
    Merge: 6c996b775 9e5f6d656
    Author: snipe <[email protected]>
    Date:   Tue Sep 17 23:40:25 2024 +0100

        Merge pull request #15491 from uberbrady/numeric_prefixes_add_multiple_assets

        [Fixes fd-43940] Improve multi-asset create when using numeric prefixes to asset_tags

    commit 3519a82ddd
    Author: Marcus Moore <[email protected]>
    Date:   Mon Sep 16 16:55:20 2024 -0700

        Fix name: TestsFullMultipleCompaniesSupport

    commit a629df07bf
    Author: Marcus Moore <[email protected]>
    Date:   Mon Sep 16 14:49:08 2024 -0700

        Implement interfaces on existing test classes

    commit 9a13fcab23
    Author: Marcus Moore <[email protected]>
    Date:   Mon Sep 16 14:38:38 2024 -0700

        Pluralize

    commit f5705a1dde
    Author: Marcus Moore <[email protected]>
    Date:   Mon Sep 16 14:34:55 2024 -0700

        More unification

    commit f325c4afdb
    Author: Marcus Moore <[email protected]>
    Date:   Mon Sep 16 14:32:38 2024 -0700

        Unify assertion method

    commit 1fddacd7d0
    Author: Marcus Moore <[email protected]>
    Date:   Mon Sep 16 14:25:11 2024 -0700

        Re-order test methods

    commit 4af893df61
    Author: Marcus Moore <[email protected]>
    Date:   Mon Sep 16 14:20:24 2024 -0700

        Improve assertions

    commit b8b3f91ce4
    Author: Marcus Moore <[email protected]>
    Date:   Mon Sep 16 13:55:18 2024 -0700

        Formatting

    commit 7f40f55343
    Author: Marcus Moore <[email protected]>
    Date:   Mon Sep 16 13:52:02 2024 -0700

        Add tests for delete supplier endpoint

    commit b06e8d442d
    Author: Marcus Moore <[email protected]>
    Date:   Mon Sep 16 13:37:08 2024 -0700

        Add tests for delete status label endpoint

    commit c269184c60
    Author: Marcus Moore <[email protected]>
    Date:   Mon Sep 16 13:29:41 2024 -0700

        Add tests for delete predefined kit endpoint

    commit 53c673dee2
    Author: Marcus Moore <[email protected]>
    Date:   Mon Sep 16 13:13:12 2024 -0700

        Add tests for delete manufacturer endpoint

    commit 50730fc4fb
    Author: Marcus Moore <[email protected]>
    Date:   Mon Sep 16 12:37:18 2024 -0700

        Add tests for delete location endpoint

    commit 60a54cee79
    Author: Marcus Moore <[email protected]>
    Date:   Mon Sep 16 12:33:30 2024 -0700

        Add tests for delete license endpoint

    commit 446e962a50
    Author: Marcus Moore <[email protected]>
    Date:   Mon Sep 16 10:38:51 2024 -0700

        Add tests for delete group endpoint

    commit 79a4bb7316
    Author: Marcus Moore <[email protected]>
    Date:   Mon Sep 16 10:35:44 2024 -0700

        Add tests for delete depreciation endpoint

    commit 2f76c1bc5b
    Author: Marcus Moore <[email protected]>
    Date:   Mon Sep 16 10:33:21 2024 -0700

        Add assertion

    commit 38b9f4a438
    Author: Marcus Moore <[email protected]>
    Date:   Mon Sep 16 10:29:20 2024 -0700

        Add tests for delete departments endpoint

    commit 3105f53aff
    Author: Marcus Moore <[email protected]>
    Date:   Thu Sep 12 16:54:29 2024 -0700

        Add tests for delete custom fieldsets endpoint

    commit 2047cfed09
    Author: Marcus Moore <[email protected]>
    Date:   Thu Sep 12 16:20:32 2024 -0700

        Add tests for delete custom fields endpoint

    commit e3268d32df
    Author: Marcus Moore <[email protected]>
    Date:   Thu Sep 12 16:00:02 2024 -0700

        Add tests for delete consumable endpoint

    commit 6df8b0ac0e
    Author: Marcus Moore <[email protected]>
    Date:   Thu Sep 12 15:52:07 2024 -0700

        Add tests for delete component endpoint

    commit 910f13c1f7
    Author: Marcus Moore <[email protected]>
    Date:   Thu Sep 12 15:38:30 2024 -0700

        Add tests for delete companies endpoint

    commit 8ce2512f55
    Author: Marcus Moore <[email protected]>
    Date:   Thu Sep 12 13:54:44 2024 -0700

        Add tests for delete category endpoint

    commit 0ec415d4d0
    Author: Marcus Moore <[email protected]>
    Date:   Thu Sep 12 13:46:22 2024 -0700

        Clean up

    commit 2044570e95
    Author: Marcus Moore <[email protected]>
    Date:   Thu Sep 12 13:39:36 2024 -0700

        Add tests for delete asset model endpoint

    commit b336c6273d
    Author: Marcus Moore <[email protected]>
    Date:   Thu Sep 12 13:32:42 2024 -0700

        Pluralize test classes

    commit 5299b3e9f0
    Author: Marcus Moore <[email protected]>
    Date:   Thu Sep 12 13:29:44 2024 -0700

        Remove code handled by CompanyableChildTrait

    commit 872b76b45f
    Author: Marcus Moore <[email protected]>
    Date:   Thu Sep 12 13:29:10 2024 -0700

        Add tests for delete asset maintenance endpoint

    commit 275cf4630e
    Author: Marcus Moore <[email protected]>
    Date:   Thu Sep 12 13:16:37 2024 -0700

        Add tests for delete asset endpoint

    commit 5c2660bd34
    Author: Marcus Moore <[email protected]>
    Date:   Thu Sep 12 13:02:32 2024 -0700

        Introduce interface

    commit c7ae9d9dfa
    Author: Marcus Moore <[email protected]>
    Date:   Thu Sep 12 12:58:47 2024 -0700

        Add tests for delete accessory endpoint

    commit 9e5f6d656a
    Author: Brady Wetherington <[email protected]>
    Date:   Wed Sep 11 15:45:01 2024 +0100

        Improve multi-asset create when using numeric prefixes to asset_tags

    Signed-off-by: snipe <[email protected]>

commit 634a4afa75
Author: snipe <[email protected]>
Date:   Thu Sep 19 16:04:54 2024 +0100

    Fixed 1001 query on license

    Signed-off-by: snipe <[email protected]>

commit 7650628d30
Author: snipe <[email protected]>
Date:   Thu Sep 19 16:00:59 2024 +0100

    Removed free seat count from fillable

    Signed-off-by: snipe <[email protected]>

commit 7f690a6238
Author: snipe <[email protected]>
Date:   Thu Sep 19 15:58:32 2024 +0100

    Fixed variable name

    Signed-off-by: snipe <[email protected]>

commit b32ab6a06c
Author: Godfrey M <[email protected]>
Date:   Wed Sep 18 16:36:24 2024 -0700

    import User model

commit 4ff5fc1ff9
Author: Godfrey M <[email protected]>
Date:   Wed Sep 18 16:19:35 2024 -0700

    clean up variables

commit 86f13a9735
Author: Marcus Moore <[email protected]>
Date:   Wed Sep 18 16:13:34 2024 -0700

    Add index test

commit c40209f500
Author: Godfrey M <[email protected]>
Date:   Wed Sep 18 15:23:44 2024 -0700

    seperates emails and webhook notifications

commit a071fff954
Author: Marcus Moore <[email protected]>
Date:   Wed Sep 18 12:32:14 2024 -0700

    Implement tests

commit 8b50ef077d
Author: Marcus Moore <[email protected]>
Date:   Wed Sep 18 11:58:33 2024 -0700

    Implement test

commit 607f29030f
Author: Marcus Moore <[email protected]>
Date:   Wed Sep 18 11:53:27 2024 -0700

    Stub out test

commit a6bcd3c0c2
Author: Marcus Moore <[email protected]>
Date:   Wed Sep 18 11:47:59 2024 -0700

    Add validation test

commit 9b293afaac
Author: Marcus Moore <[email protected]>
Date:   Wed Sep 18 11:28:29 2024 -0700

    Remove more dead code

commit 636c776620
Author: Marcus Moore <[email protected]>
Date:   Wed Sep 18 11:27:37 2024 -0700

    Remove dead code

commit d5f659024c
Author: Marcus Moore <[email protected]>
Date:   Wed Sep 18 11:27:09 2024 -0700

    Add test for logging

commit 832e50a71e
Author: Marcus Moore <[email protected]>
Date:   Wed Sep 18 11:19:41 2024 -0700

    Implement test

commit fa19686248
Author: Marcus Moore <[email protected]>
Date:   Wed Sep 18 11:18:21 2024 -0700

    Implement test

commit c021609c13
Merge: 7b31df7c1 dddbf27d7
Author: Marcus Moore <[email protected]>
Date:   Wed Sep 18 10:42:58 2024 -0700

    Merge branch 'develop' into testing/fmcs-accessories

commit 655abe8be5
Author: snipe <[email protected]>
Date:   Wed Sep 18 14:32:59 2024 +0100

    Fixed requestable user_id

    Signed-off-by: snipe <[email protected]>

commit d96c5e1ba4
Merge: a807646d3 dddbf27d7
Author: snipe <[email protected]>
Date:   Wed Sep 18 14:20:55 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit dddbf27d78
Author: snipe <[email protected]>
Date:   Wed Sep 18 14:18:52 2024 +0100

    Updated language strings

    Signed-off-by: snipe <[email protected]>

commit bae9982833
Author: snipe <[email protected]>
Date:   Wed Sep 18 14:18:14 2024 +0100

    Updated request methods

    Signed-off-by: snipe <[email protected]>

commit a807646d39
Merge: 83b4bf9cf fcefcc818
Author: snipe <[email protected]>
Date:   Wed Sep 18 13:48:09 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit abe79df6dc
Author: snipe <[email protected]>
Date:   Wed Sep 18 13:47:30 2024 +0100

    Added translation

    Signed-off-by: snipe <[email protected]>

commit fcefcc8184
Merge: 04bb3eec8 3519a82dd
Author: snipe <[email protected]>
Date:   Wed Sep 18 13:44:44 2024 +0100

    Merge pull request #15512 from marcusmoore/testing/fmcs

    Added tests for delete methods in api

commit 04bb3eec83
Merge: 154d5d8d9 f963b9a19
Author: snipe <[email protected]>
Date:   Wed Sep 18 13:41:37 2024 +0100

    Merge pull request #15521 from uberbrady/improve_country_selector

    Fix selected-index of Countries drop-down [fd-44144]

commit f963b9a19f
Author: Brady Wetherington <[email protected]>
Date:   Wed Sep 18 13:24:26 2024 +0100

    Fix selected-index of Countries drop-down

commit 154d5d8d91
Merge: 6c996b775 9e5f6d656
Author: snipe <[email protected]>
Date:   Tue Sep 17 23:40:25 2024 +0100

    Merge pull request #15491 from uberbrady/numeric_prefixes_add_multiple_assets

    [Fixes fd-43940] Improve multi-asset create when using numeric prefixes to asset_tags

commit 1582d81e5b
Author: snipe <[email protected]>
Date:   Tue Sep 17 22:16:41 2024 +0100

    Change `user_id` to `created_by`

    Signed-off-by: snipe <[email protected]>

commit 7c85ad54eb
Author: snipe <[email protected]>
Date:   Tue Sep 17 19:44:03 2024 +0100

    Sort by numeric columns for numeric custom fields

    Signed-off-by: snipe <[email protected]>

commit 7b31df7c14
Author: Marcus Moore <[email protected]>
Date:   Tue Sep 17 09:11:58 2024 -0700

    Begin additional test case

commit 83b4bf9cf8
Merge: 9ff211105 6c996b775
Author: snipe <[email protected]>
Date:   Tue Sep 17 15:54:53 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 6c996b7759
Merge: fe5fc6e0c 9e957baeb
Author: snipe <[email protected]>
Date:   Tue Sep 17 15:54:11 2024 +0100

    Merge pull request #15516 from snipe/fixes/fmcs_edit_user

    Fixed check for outside assets on user update validation

commit 9e957baeb5
Author: snipe <[email protected]>
Date:   Tue Sep 17 15:46:45 2024 +0100

    Fixed check for outside assets on user update validation

    Signed-off-by: snipe <[email protected]>

commit 12fd9cd97a
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 17:00:08 2024 -0700

    Update interface name

commit 9e03c4ba6f
Merge: 8eb1c487b 3519a82dd
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 16:58:46 2024 -0700

    Merge branch 'testing/fmcs' into testing/fmcs-accessories

commit 3519a82ddd
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 16:55:20 2024 -0700

    Fix name: TestsFullMultipleCompaniesSupport

commit 8eb1c487bc
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 16:52:10 2024 -0700

    implement FMCS test for accessory index

commit e835637ef0
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 16:40:10 2024 -0700

    Add accessory checkin test

commit eb35608bb5
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 16:35:33 2024 -0700

    Remove call handled by form request

commit 3f07f682de
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 16:35:21 2024 -0700

    Migrate existing tests to TestsPermissionsRequirement

commit a629df07bf
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 14:49:08 2024 -0700

    Implement interfaces on existing test classes

commit 9a13fcab23
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 14:38:38 2024 -0700

    Pluralize

commit f5705a1dde
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 14:34:55 2024 -0700

    More unification

commit f325c4afdb
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 14:32:38 2024 -0700

    Unify assertion method

commit 1fddacd7d0
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 14:25:11 2024 -0700

    Re-order test methods

commit 4af893df61
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 14:20:24 2024 -0700

    Improve assertions

commit b8b3f91ce4
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 13:55:18 2024 -0700

    Formatting

commit 7f40f55343
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 13:52:02 2024 -0700

    Add tests for delete supplier endpoint

commit b06e8d442d
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 13:37:08 2024 -0700

    Add tests for delete status label endpoint

commit c269184c60
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 13:29:41 2024 -0700

    Add tests for delete predefined kit endpoint

commit 53c673dee2
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 13:13:12 2024 -0700

    Add tests for delete manufacturer endpoint

commit 50730fc4fb
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 12:37:18 2024 -0700

    Add tests for delete location endpoint

commit 60a54cee79
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 12:33:30 2024 -0700

    Add tests for delete license endpoint

commit 446e962a50
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 10:38:51 2024 -0700

    Add tests for delete group endpoint

commit 79a4bb7316
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 10:35:44 2024 -0700

    Add tests for delete depreciation endpoint

commit 2f76c1bc5b
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 10:33:21 2024 -0700

    Add assertion

commit 38b9f4a438
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 16 10:29:20 2024 -0700

    Add tests for delete departments endpoint

commit fe5fc6e0ce
Merge: 62747a009 15183c482
Author: snipe <[email protected]>
Date:   Mon Sep 16 15:56:31 2024 +0100

    Merge pull request #15471 from Godmartinz/Edit_side-panel

    Fixes margin for the sidebar menus while using rtl languages

commit 62747a0090
Merge: b465cc98d c6c5cb73c
Author: snipe <[email protected]>
Date:   Mon Sep 16 15:02:55 2024 +0100

    Merge pull request #15493 from Godmartinz/fix_consumables_media_sizing

    Fixed misalignment of consumables with smaller media

commit 9ff2111055
Merge: 1328366a4 b465cc98d
Author: snipe <[email protected]>
Date:   Mon Sep 16 14:52:48 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit b465cc98d8
Merge: 8774da392 4debaaea3
Author: snipe <[email protected]>
Date:   Mon Sep 16 14:45:06 2024 +0100

    Merge pull request #15510 from snipe/bulk_users_locale_fix

    Fixed #15504 - allow nulling/not changing locale in user bulk edit

commit 4debaaea39
Author: snipe <[email protected]>
Date:   Mon Sep 16 14:31:10 2024 +0100

    Fixed #15504 - allow nulling/not changing locale in user bulk edit

    Signed-off-by: snipe <[email protected]>

commit 1328366a48
Merge: 7e14f8c6d 8774da392
Author: snipe <[email protected]>
Date:   Mon Sep 16 12:38:56 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 4facc4007e
Author: setpill <[email protected]>
Date:   Fri Sep 13 17:05:48 2024 +0200

    feat: Explicitly request LDAP attributes during sync

commit 31da47e046
Author: setpill <[email protected]>
Date:   Fri Sep 13 17:05:28 2024 +0200

    refactor: Put LDAP attribute mapping in array

commit 3105f53aff
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 12 16:54:29 2024 -0700

    Add tests for delete custom fieldsets endpoint

commit 2047cfed09
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 12 16:20:32 2024 -0700

    Add tests for delete custom fields endpoint

commit e3268d32df
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 12 16:00:02 2024 -0700

    Add tests for delete consumable endpoint

commit 6df8b0ac0e
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 12 15:52:07 2024 -0700

    Add tests for delete component endpoint

commit 910f13c1f7
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 12 15:38:30 2024 -0700

    Add tests for delete companies endpoint

commit 8ce2512f55
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 12 13:54:44 2024 -0700

    Add tests for delete category endpoint

commit 0ec415d4d0
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 12 13:46:22 2024 -0700

    Clean up

commit 2044570e95
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 12 13:39:36 2024 -0700

    Add tests for delete asset model endpoint

commit b336c6273d
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 12 13:32:42 2024 -0700

    Pluralize test classes

commit 5299b3e9f0
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 12 13:29:44 2024 -0700

    Remove code handled by CompanyableChildTrait

commit 872b76b45f
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 12 13:29:10 2024 -0700

    Add tests for delete asset maintenance endpoint

commit 275cf4630e
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 12 13:16:37 2024 -0700

    Add tests for delete asset endpoint

commit 5c2660bd34
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 12 13:02:32 2024 -0700

    Introduce interface

commit c7ae9d9dfa
Author: Marcus Moore <[email protected]>
Date:   Thu Sep 12 12:58:47 2024 -0700

    Add tests for delete accessory endpoint

commit 0bc98e971f
Author: Godfrey M <[email protected]>
Date:   Thu Sep 12 12:26:19 2024 -0700

    refactoring modals with partials and fixing misalignments

commit 8774da3921
Merge: ab3b65531 a97530367
Author: snipe <[email protected]>
Date:   Thu Sep 12 16:08:44 2024 +0100

    Merge pull request #15492 from snipe/fixes/edit_to_archived_warning

    Fix - warn user on changing status to undeployable when editing

commit c6c5cb73cf
Author: Godfrey M <[email protected]>
Date:   Wed Sep 11 10:49:27 2024 -0700

    fixes consumables positioning with smaller media

commit a97530367d
Author: snipe <[email protected]>
Date:   Wed Sep 11 17:29:22 2024 +0100

    Fixed tests again

    Signed-off-by: snipe <[email protected]>

commit 43250ae881
Author: snipe <[email protected]>
Date:   Wed Sep 11 17:04:09 2024 +0100

    Updated tests

    Signed-off-by: snipe <[email protected]>

commit 04e96b8f20
Author: snipe <[email protected]>
Date:   Wed Sep 11 16:43:41 2024 +0100

    Added tests

    Signed-off-by: snipe <[email protected]>

commit 98323185de
Author: snipe <[email protected]>
Date:   Wed Sep 11 16:43:33 2024 +0100

    Null and warn if editing asset to a non-deployabe state

    Signed-off-by: snipe <[email protected]>

commit 9e5f6d656a
Author: Brady Wetherington <[email protected]>
Date:   Wed Sep 11 15:45:01 2024 +0100

    Improve multi-asset create when using numeric prefixes to asset_tags

commit 7e14f8c6d6
Merge: fddbdafb9 ab3b65531
Author: snipe <[email protected]>
Date:   Wed Sep 11 12:25:28 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit ab3b655312
Author: snipe <[email protected]>
Date:   Wed Sep 11 12:25:09 2024 +0100

    Fixed #15483 - show EOL by default

    Signed-off-by: snipe <[email protected]>

commit 601d8d7e5f
Merge: 4f0f72b29 ca01261c1
Author: snipe <[email protected]>
Date:   Wed Sep 11 09:46:58 2024 +0100

    Merge pull request #15486 from marcusmoore/fixes/custom-field-values

    Fixed a couple bugs in CustomFieldSetDefaultValuesForModel component

commit ca01261c1f
Merge: 6423df213 4f0f72b29
Author: Marcus Moore <[email protected]>
Date:   Tue Sep 10 16:05:39 2024 -0700

    Merge branch 'develop' into fixes/custom-field-values

commit 15183c4822
Author: Godfrey M <[email protected]>
Date:   Tue Sep 10 11:05:03 2024 -0700

    rephrased the ternary <-correctly spelled

commit fddbdafb99
Author: snipe <[email protected]>
Date:   Tue Sep 10 19:03:56 2024 +0100

    Fixed conflict

    Signed-off-by: snipe <[email protected]>

commit a5dbece1a9
Merge: 713bb104e 4f0f72b29
Author: snipe <[email protected]>
Date:   Tue Sep 10 19:00:05 2024 +0100

    Merge remote-tracking branch 'origin/develop'

    Signed-off-by: snipe <[email protected]>

    # Conflicts:
    #	config/version.php
    #	public/css/build/app.css
    #	public/css/build/overrides.css
    #	public/css/dist/all.css
    #	public/mix-manifest.json

commit 4f0f72b29e
Author: snipe <[email protected]>
Date:   Tue Sep 10 18:15:12 2024 +0100

    Fixed version

    Signed-off-by: snipe <[email protected]>

commit 4183d1834f
Author: snipe <[email protected]>
Date:   Tue Sep 10 18:14:03 2024 +0100

    Pre-release assets

    Signed-off-by: snipe <[email protected]>

commit 713bb104ec
Merge: 7f2cae4f2 4998d60f3
Author: snipe <[email protected]>
Date:   Tue Sep 10 14:46:15 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 4998d60f39
Merge: f6bf2d03c 7cf30003b
Author: snipe <[email protected]>
Date:   Tue Sep 10 14:43:27 2024 +0100

    Merge pull request #15481 from snipe/localizations/2024-09-10

    Updated translations

commit 7cf30003b6
Author: snipe <[email protected]>
Date:   Tue Sep 10 14:41:08 2024 +0100

    Updated strings

    Signed-off-by: snipe <[email protected]>

commit f6bf2d03c4
Merge: 6f44441a8 7c8955b12
Author: snipe <[email protected]>
Date:   Tue Sep 10 11:04:58 2024 +0100

    Merge pull request #15445 from Godmartinz/eula_confusion

    Fixed priority for category eula vs default eula

commit 6f44441a8b
Merge: e7e5dfbdf 76c9015aa
Author: snipe <[email protected]>
Date:   Tue Sep 10 11:04:23 2024 +0100

    Merge pull request #15469 from marcusmoore/accessory_tests

    Added UI tests for creating accessories

commit e7e5dfbdfa
Merge: d62315fbe 5d5f42129
Author: snipe <[email protected]>
Date:   Tue Sep 10 11:04:08 2024 +0100

    Merge pull request #15470 from marcusmoore/company_tests

    Added UI tests for creating companies

commit d62315fbe4
Merge: 7f3f77dec 22a2cc025
Author: snipe <[email protected]>
Date:   Tue Sep 10 11:03:55 2024 +0100

    Merge pull request #15472 from marcusmoore/testing/dashboard_counts

    Added test for dashboard counts

commit 7f3f77dec8
Merge: 82e56c683 0820dd9da
Author: snipe <[email protected]>
Date:   Tue Sep 10 11:03:46 2024 +0100

    Merge pull request #15473 from marcusmoore/testing/accessory_api_tests

    Added some permission tests for accessory api endpoints

commit 82e56c6832
Merge: 549dec9f9 dc6a5bf99
Author: snipe <[email protected]>
Date:   Tue Sep 10 09:37:02 2024 +0100

    Merge pull request #15474 from marcusmoore/bug/sc-26730

    Fixed login success message not being displayed

commit 76c9015aa9
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 9 16:51:40 2024 -0700

    Add test case

commit 5d5f421294
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 9 16:49:43 2024 -0700

    Add test case

commit 367f02af86
Author: Godfrey M <[email protected]>
Date:   Mon Sep 9 16:34:04 2024 -0700

    more partials and includes

commit 7a1c721eca
Author: Godfrey M <[email protected]>
Date:   Mon Sep 9 16:22:56 2024 -0700

    making modal partials for reuse

commit 6423df2133
Merge: 51d63d57c 549dec9f9
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 9 16:07:37 2024 -0700

    Merge branch 'develop' into fixes/custom-field-values

    # Conflicts:
    #	resources/views/livewire/custom-field-set-default-values-for-model.blade.php

commit dc6a5bf998
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 9 14:54:19 2024 -0700

    Reflash session so login message is displayed

commit 0820dd9da4
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 9 14:36:32 2024 -0700

    Update test names

commit aa6ab2df60
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 9 14:35:38 2024 -0700

    Add permission tests for some accessory api endpoints

commit 22a2cc0256
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 9 13:21:10 2024 -0700

    Add test for dashboard counts

commit 57fab0268b
Author: Godfrey M <[email protected]>
Date:   Mon Sep 9 13:02:25 2024 -0700

    made it a terenary

commit ad5768d8b2
Author: Godfrey M <[email protected]>
Date:   Mon Sep 9 12:45:11 2024 -0700

    fixes margin for the sidebar using rtl languages

commit 35533c39d5
Merge: d4426e468 549dec9f9
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 9 12:18:02 2024 -0700

    Merge branch 'develop' into company_tests

commit de403f6e07
Merge: 010f66f4c 549dec9f9
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 9 12:17:53 2024 -0700

    Merge branch 'develop' into accessory_tests

commit 549dec9f9e
Merge: b2a634924 0e9f7153c
Author: snipe <[email protected]>
Date:   Mon Sep 9 20:13:01 2024 +0100

    Merge pull request #15468 from marcusmoore/coverage

    Added coverage commands for Herd users

commit d4426e4686
Author: Marcus Moore <[email protected]>
Date:   Mon Sep 9 11:03:00 2024 -0700

    Add simple tests for company creation via UI

commit b2a6349243
Merge: ce97e2a30 c5dbc5f6b
Author: snipe <[email protected]>
Date:   Mon Sep 9 10:06:42 2024 +0100

    Merge pull request #15465 from snipe/update_city_on_bulk_user_edit

    Correctly save user’s city on bulk edit

commit c5dbc5f6b8
Author: snipe <[email protected]>
Date:   Mon Sep 9 10:01:07 2024 +0100

    Correctly save user’s city on bulk edit

    Signed-off-by: snipe <[email protected]>

commit 7f2cae4f26
Merge: e34f549e4 ce97e2a30
Author: snipe <[email protected]>
Date:   Mon Sep 9 03:56:05 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit ce97e2a30f
Merge: e1fcfc8dc 7d9a0eba0
Author: snipe <[email protected]>
Date:   Mon Sep 9 03:54:28 2024 +0100

    Merge pull request #15463 from snipe/consumables_order_by_remaining

    Added ability to sort on qty and remaining for consumables

commit 7d9a0eba04
Author: snipe <[email protected]>
Date:   Mon Sep 9 03:49:58 2024 +0100

    Added ability to sort on qty and remaining for consumables

    Signed-off-by: snipe <[email protected]>

commit 010f66f4c9
Author: Marcus Moore <[email protected]>
Date:   Wed Sep 4 15:48:11 2024 -0700

    Add validation test

commit 9c6718b459
Author: Marcus Moore <[email protected]>
Date:   Wed Sep 4 15:46:35 2024 -0700

    Organize

commit 9f832a93c9
Author: Marcus Moore <[email protected]>
Date:   Wed Sep 4 15:44:52 2024 -0700

    Ensure user is stored

commit 487d88c012
Author: Marcus Moore <[email protected]>
Date:   Wed Sep 4 15:43:01 2024 -0700

    Add some ui tests for accessories

commit 0e9f7153c0
Author: Marcus Moore <[email protected]>
Date:   Wed Sep 4 15:13:45 2024 -0700

    Add composer commands for generating coverage reports via Herd

commit 7c8955b126
Author: Godfrey M <[email protected]>
Date:   Wed Sep 4 12:38:35 2024 -0700

    revert changes to label view

commit 20fa4c39f9
Author: Godfrey M <[email protected]>
Date:   Wed Sep 4 12:26:44 2024 -0700

    adds setEula to support\settings

commit f04a4a3cf5
Author: Godfrey M <[email protected]>
Date:   Wed Sep 4 12:21:49 2024 -0700

    adds test

commit cf07186ae8
Author: Godfrey M <[email protected]>
Date:   Tue Sep 3 12:23:23 2024 -0700

    gives priority to default eula being checked vs catregory eula

commit 51d63d57c6
Author: Marcus Moore <[email protected]>
Date:   Tue Sep 3 12:22:43 2024 -0700

    Hide the "Add default values" checkbox if no fieldset selected

commit e34f549e4c
Merge: a8813cca9 e1fcfc8dc
Author: snipe <[email protected]>
Date:   Mon Sep 2 19:16:23 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit e1fcfc8dc1
Merge: 13dbf9ee7 9fe8a866e
Author: snipe <[email protected]>
Date:   Mon Sep 2 19:14:49 2024 +0100

    Merge pull request #15440 from snipe/fixes/user_api_put_patch

    Fixes  #15435 - user api put patch API route regression

commit 9fe8a866e0
Author: snipe <[email protected]>
Date:   Mon Sep 2 19:07:21 2024 +0100

    Updated test

    Signed-off-by: snipe <[email protected]>

commit e8e3060a75
Author: snipe <[email protected]>
Date:   Mon Sep 2 18:51:22 2024 +0100

    Added tests

    Signed-off-by: snipe <[email protected]>

commit 6aaf2f623f
Author: snipe <[email protected]>
Date:   Mon Sep 2 18:49:55 2024 +0100

    Removed extra route

    Signed-off-by: snipe <[email protected]>

commit dfbccf50e8
Author: snipe <[email protected]>
Date:   Mon Sep 2 18:48:09 2024 +0100

    Added patch/put back into resource routes

    Signed-off-by: snipe <[email protected]>

commit a8813cca94
Merge: 9fef27a44 13dbf9ee7
Author: snipe <[email protected]>
Date:   Sat Aug 31 13:48:59 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 13dbf9ee74
Author: snipe <[email protected]>
Date:   Sat Aug 31 13:48:42 2024 +0100

    Added icon for dept

    Signed-off-by: snipe <[email protected]>

commit f8bbb7ad9b
Merge: 12fa50597 3c7d455ee
Author: snipe <[email protected]>
Date:   Sat Aug 31 13:47:25 2024 +0100

    Merge pull request #15431 from snipe/add_employee_num_to_asset_overview

    Added employee number to asset view

commit 3c7d455ee3
Author: snipe <[email protected]>
Date:   Sat Aug 31 13:38:38 2024 +0100

    Added employee number to asset view

    Signed-off-by: snipe <[email protected]>

commit 9fef27a448
Merge: d2b88a510 12fa50597
Author: snipe <[email protected]>
Date:   Thu Aug 29 21:07:56 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 12fa505972
Author: snipe <[email protected]>
Date:   Thu Aug 29 21:07:30 2024 +0100

    Disabmiguate licenses company_id

    Signed-off-by: snipe <[email protected]>

commit d2b88a5107
Merge: 4e35f389d 4e4930ba6
Author: snipe <[email protected]>
Date:   Thu Aug 29 21:02:21 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 4e4930ba62
Author: snipe <[email protected]>
Date:   Thu Aug 29 21:01:48 2024 +0100

    Check for array

    Signed-off-by: snipe <[email protected]>

commit 4e35f389df
Merge: e5b9d9a28 76301bc30
Author: snipe <[email protected]>
Date:   Thu Aug 29 20:07:03 2024 +0100

    Merge remote-tracking branch 'origin/develop'

    Signed-off-by: snipe <[email protected]>

    # Conflicts:
    #	public/css/build/app.css
    #	public/css/build/overrides.css
    #	public/css/dist/all.css
    #	public/mix-manifest.json

commit 76301bc30d
Author: snipe <[email protected]>
Date:   Thu Aug 29 20:05:03 2024 +0100

    Fixed typo

    Signed-off-by: snipe <[email protected]>

commit 964e105cf9
Merge: 6fd24c7e1 abb422153
Author: snipe <[email protected]>
Date:   Thu Aug 29 19:20:03 2024 +0100

    Merge pull request #15415 from snipe/rules/prevent_company_switch

    Validation rules to prevent switching user companies if items are assigned to them

commit 6fd24c7e14
Merge: e4ebabdab 231bc1e2d
Author: snipe <[email protected]>
Date:   Thu Aug 29 18:55:11 2024 +0100

    Merge pull request #15418 from snipe/added_multiple_for_custom_report

    Fixed #15416 - Added multiple selects for custom report

commit 231bc1e2de
Author: snipe <[email protected]>
Date:   Thu Aug 29 18:31:34 2024 +0100

    Updated blade selectors

    Signed-off-by: snipe <[email protected]>

commit 37d04b7176
Author: snipe <[email protected]>
Date:   Thu Aug 29 17:52:01 2024 +0100

    Some CSS tweaks for select2

    Signed-off-by: snipe <[email protected]>

commit e62a802926
Author: snipe <[email protected]>
Date:   Thu Aug 29 17:51:44 2024 +0100

    Use whereIn instead of where =

    Signed-off-by: snipe <[email protected]>

commit 69e981364a
Author: snipe <[email protected]>
Date:   Thu Aug 29 17:51:20 2024 +0100

    Made multiple select

    Signed-off-by: snipe <[email protected]>

commit e5b9d9a28b
Merge: 4111ef0d7 e4ebabdab
Author: snipe <[email protected]>
Date:   Thu Aug 29 15:04:32 2024 +0100

    Merge remote-tracking branch 'origin/develop'

    Signed-off-by: snipe <[email protected]>

    # Conflicts:
    #	public/js/build/app.js
    #	public/js/build/vendor.js
    #	public/js/dist/all.js
    #	public/mix-manifest.json

commit abb4221539
Author: snipe <[email protected]>
Date:   Thu Aug 29 14:55:18 2024 +0100

    Validation rules to prevent switchng user companies if assets are assigned

    Signed-off-by: snipe <[email protected]>

commit e4ebabdaba
Merge: b64ed254e da1e38329
Author: snipe <[email protected]>
Date:   Thu Aug 29 14:19:51 2024 +0100

    Merge pull request #15414 from uberbrady/fix_create_user

    Use the null-safe property accessor for new-user creation

commit da1e383295
Author: Brady Wetherington <[email protected]>
Date:   Thu Aug 29 14:09:23 2024 +0100

    Use the null-safe property accessor for new-user creation

commit b64ed254e0
Author: snipe <[email protected]>
Date:   Thu Aug 29 13:49:09 2024 +0100

    Fixed tests

    Signed-off-by: snipe <[email protected]>

commit ba291edc42
Merge: c197644ba ec2ea955d
Author: snipe <[email protected]>
Date:   Thu Aug 29 13:18:52 2024 +0100

    Merge pull request #15412 from uberbrady/ImprovePatchPurchasePrice

    Fix [FD-43836] PATCH of purchase_cost for assets for comma as decimal separator

commit ec2ea955d8
Author: Brady Wetherington <[email protected]>
Date:   Thu Aug 29 12:35:14 2024 +0100

    Fix PATCH of purchase_cost for assets for comma as decimal separator

commit c197644ba7
Merge: 29b30cc5d a8cd1027f
Author: snipe <[email protected]>
Date:   Thu Aug 29 11:38:15 2024 +0100

    Merge pull request #15284 from spencerrlongg/bug/sc-26584

    [Multi-Company] Fixes Users Being Moved With Items Still Assigned

commit 29b30cc5d3
Merge: a89f17a14 6af27516d
Author: snipe <[email protected]>
Date:   Thu Aug 29 11:29:44 2024 +0100

    Merge pull request #15411 from snipe/snyk/upgrade-webpack

    Upgraded webpack

commit 6af27516dc
Author: snipe <[email protected]>
Date:   Thu Aug 29 11:29:00 2024 +0100

    Upgraded webpack

    Signed-off-by: snipe <[email protected]>

commit a89f17a145
Merge: 68c708bde de0565f5b
Author: snipe <[email protected]>
Date:   Thu Aug 29 11:25:56 2024 +0100

    Merge pull request #15410 from snipe/snyk/upgrade-jquery-ui

    Updated jquery UI

commit de0565f5b3
Author: snipe <[email protected]>
Date:   Thu Aug 29 11:24:06 2024 +0100

    Updated jquery UI

    Signed-off-by: snipe <[email protected]>

commit 4111ef0d78
Merge: cfa56e221 68c708bde
Author: snipe <[email protected]>
Date:   Thu Aug 29 11:20:21 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 68c708bdef
Merge: 58e366a06 5581950fe
Author: snipe <[email protected]>
Date:   Thu Aug 29 11:18:34 2024 +0100

    Merge pull request #15409 from snipe/fixes-string

    Corrected language string

commit 5581950fee
Author: snipe <[email protected]>
Date:   Thu Aug 29 11:17:17 2024 +0100

    Corrected language string

    Signed-off-by: snipe <[email protected]>

commit cfa56e2219
Merge: 7f1dfcc93 58e366a06
Author: snipe <[email protected]>
Date:   Thu Aug 29 11:08:53 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 58e366a063
Merge: 26f28a862 b06c52776
Author: snipe <[email protected]>
Date:   Thu Aug 29 11:08:02 2024 +0100

    Merge pull request #15408 from snipe/redirect-on-print-if-user-invalid

    Check that the user exists before trying to print

commit b06c527767
Author: snipe <[email protected]>
Date:   Thu Aug 29 11:06:30 2024 +0100

    Check that the user exists before trying to print

    Signed-off-by: snipe <[email protected]>

commit 7f1dfcc935
Merge: 6f3fb21fe 26f28a862
Author: snipe <[email protected]>
Date:   Wed Aug 28 14:29:06 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 26f28a862a
Merge: e8da7e2df 94c981e22
Author: snipe <[email protected]>
Date:   Wed Aug 28 14:26:03 2024 +0100

    Merge pull request #15404 from snipe/bug/sc-26717-model-delete

    Set image to null if model is deleted

commit 94c981e22c
Author: snipe <[email protected]>
Date:   Wed Aug 28 14:23:49 2024 +0100

    Set image to null if model is deleted

    Signed-off-by: snipe <[email protected]>

commit 6f3fb21fef
Merge: a48e79a1f e8da7e2df
Author: snipe <[email protected]>
Date:   Wed Aug 28 12:50:19 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit e8da7e2df2
Merge: 7b5b559ba d635c86e0
Author: snipe <[email protected]>
Date:   Wed Aug 28 12:46:48 2024 +0100

    Merge pull request #15403 from snipe/clean_up_depreciations

    Fixed #15392 - filter by depreciation when showing models

commit d635c86e00
Author: snipe <[email protected]>
Date:   Wed Aug 28 12:46:30 2024 +0100

    Added tests

    Signed-off-by: snipe <[email protected]>

commit 406ff6984b
Author: snipe <[email protected]>
Date:   Wed Aug 28 12:42:23 2024 +0100

    Added click to select on models table

    Signed-off-by: snipe <[email protected]>

commit c6ddc501c5
Author: snipe <[email protected]>
Date:   Wed Aug 28 12:40:12 2024 +0100

    Filter by depreciation_id

    Signed-off-by: snipe <[email protected]>

commit 4839181beb
Author: snipe <[email protected]>
Date:   Wed Aug 28 12:40:01 2024 +0100

    Added counts to API

    Signed-off-by: snipe <[email protected]>

commit 63a05c89a7
Author: snipe <[email protected]>
Date:   Wed Aug 28 12:39:52 2024 +0100

    Added counts to show method

    Signed-off-by: snipe <[email protected]>

commit 385c4f69f7
Author: snipe <[email protected]>
Date:   Wed Aug 28 12:39:43 2024 +0100

    Added counts to depreciation transformer

    Signed-off-by: snipe <[email protected]>

commit 486cd8c8c9
Author: snipe <[email protected]>
Date:   Wed Aug 28 12:39:09 2024 +0100

    Nicer formatting for searchableAttributes

    Signed-off-by: snipe <[email protected]>

commit eb5d93b3c2
Author: snipe <[email protected]>
Date:   Wed Aug 28 12:38:55 2024 +0100

    Added assets relationship

    Signed-off-by: snipe <[email protected]>

commit a5ff623484
Author: snipe <[email protected]>
Date:   Wed Aug 28 12:38:43 2024 +0100

    Added asset, license, model count to API

    Signed-off-by: snipe <[email protected]>

commit b5a4389815
Author: snipe <[email protected]>
Date:   Wed Aug 28 12:38:31 2024 +0100

    Added badge count, fixed model bulk edit menu

    Signed-off-by: snipe <[email protected]>

commit 7b5b559baa
Merge: 64c4433b9 67a992974
Author: snipe <[email protected]>
Date:   Wed Aug 28 11:57:29 2024 +0100

    Merge pull request #15401 from snipe/fixes-15397-new-window-for-label

    Opens label new window

commit 67a9929745
Author: snipe <[email protected]>
Date:   Wed Aug 28 11:56:54 2024 +0100

    Opens label new window

    Signed-off-by: snipe <[email protected]>

commit a48e79a1fc
Merge: c207d4843 64c4433b9
Author: snipe <[email protected]>
Date:   Tue Aug 27 07:37:53 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 64c4433b98
Merge: d3e8e0663 22bc088f6
Author: snipe <[email protected]>
Date:   Tue Aug 27 07:36:37 2024 +0100

    Merge pull request #15396 from snipe/add_start_end_date_to_users_edit

    Added `start_date` and `end_date` to user bulk edit

commit 22bc088f6f
Author: snipe <[email protected]>
Date:   Tue Aug 27 07:21:19 2024 +0100

    Added start_date and end_date to user bulk edit

    Signed-off-by: snipe <[email protected]>

commit d3e8e06638
Author: snipe <[email protected]>
Date:   Mon Aug 26 14:07:06 2024 +0100

    Add @swift2512 as a contributor

commit c207d48430
Merge: 991e48696 1b933f7ad
Author: snipe <[email protected]>
Date:   Mon Aug 26 14:01:38 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 1b933f7add
Author: snipe <[email protected]>
Date:   Mon Aug 26 13:47:17 2024 +0100

    Added s to fa icons

    Signed-off-by: snipe <[email protected]>

commit 991e48696a
Merge: 797488504 3fe891a05
Author: snipe <[email protected]>
Date:   Mon Aug 26 10:26:06 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 3fe891a05b
Author: snipe <[email protected]>
Date:   Mon Aug 26 10:25:27 2024 +0100

    Removed a few more commas

    Signed-off-by: snipe <[email protected]>

commit 7974885041
Merge: 4ef85bd52 f4c5b712f
Author: snipe <[email protected]>
Date:   Mon Aug 26 10:24:19 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit f4c5b712f4
Author: snipe <[email protected]>
Date:   Mon Aug 26 10:24:07 2024 +0100

    Removed colons

    Signed-off-by: snipe <[email protected]>

commit 4ef85bd529
Merge: 6eab83a85 4c8dc7818
Author: snipe <[email protected]>
Date:   Fri Aug 23 17:58:08 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 4c8dc7818d
Merge: aa86e07cd 5c43a1f87
Author: snipe <[email protected]>
Date:   Fri Aug 23 17:57:00 2024 +0100

    Merge pull request #15389 from snipe/added_generate_label_to_button_stack

    Fixed #15388 - Moved generate label  button

commit 5c43a1f87c
Author: snipe <[email protected]>
Date:   Fri Aug 23 17:54:49 2024 +0100

    Use proper style for buttons

    Signed-off-by: snipe <[email protected]>

commit d3b265de8e
Author: snipe <[email protected]>
Date:   Fri Aug 23 17:48:36 2024 +0100

    Moved button on hardware

    Signed-off-by: snipe <[email protected]>

commit 263151658f
Author: snipe <[email protected]>
Date:   Fri Aug 23 17:44:09 2024 +0100

    Moved general label  button

    Signed-off-by: snipe <[email protected]>

commit 6eab83a85a
Merge: cce1f87da aa86e07cd
Author: snipe <[email protected]>
Date:   Fri Aug 23 15:22:53 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit aa86e07cd2
Author: snipe <[email protected]>
Date:   Fri Aug 23 15:22:39 2024 +0100

    Fixed #15385 - small icon tweaks

    Signed-off-by: snipe <[email protected]>

commit cce1f87da6
Merge: b460e8dc8 d92fa5de6
Author: snipe <[email protected]>
Date:   Fri Aug 23 15:18:30 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit d92fa5de65
Author: snipe <[email protected]>
Date:   Fri Aug 23 15:17:25 2024 +0100

    fa-fw on settings icon

    Signed-off-by: snipe <[email protected]>

commit b460e8dc83
Merge: 50cb7e65c c589140ea
Author: snipe <[email protected]>
Date:   Fri Aug 23 08:42:32 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit c589140ea0
Merge: cc2c8f76d 52894615c
Author: snipe <[email protected]>
Date:   Fri Aug 23 08:42:04 2024 +0100

    Merge pull request #15383 from snipe/re-adds-checkout-button

    Fixed #15378 - Corrected gate on checkin button on asset view

commit 52894615ce
Author: snipe <[email protected]>
Date:   Fri Aug 23 08:40:41 2024 +0100

    More specific gate for checkin

    Signed-off-by: snipe <[email protected]>

commit 8546bbdd65
Author: snipe <[email protected]>
Date:   Fri Aug 23 08:38:47 2024 +0100

    Fixed gate for checkout button

    Signed-off-by: snipe <[email protected]>

commit 50cb7e65c9
Merge: 821dd158d cc2c8f76d
Author: snipe <[email protected]>
Date:   Fri Aug 23 07:32:39 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit cc2c8f76d0
Merge: 1ffa69c43 3957d670d
Author: snipe <[email protected]>
Date:   Fri Aug 23 07:31:29 2024 +0100

    Merge pull request #15375 from Godmartinz/fix-acceptance-reminder-command

    Fixes the `acceptance-reminder` command

commit 1ffa69c43c
Merge: 78d355f13 f85ebd7ff
Author: snipe <[email protected]>
Date:   Fri Aug 23 07:28:20 2024 +0100

    Merge pull request #15380 from snipe/fixed/fixed_nav_bracket

    Added pull-right to angle bracket

commit f85ebd7ffd
Author: snipe <[email protected]>
Date:   Fri Aug 23 07:27:39 2024 +0100

    Added pull-right to angle bracket

    Signed-off-by: snipe <[email protected]>

commit 78d355f136
Merge: ec0346e4a af0a95be1
Author: snipe <[email protected]>
Date:   Fri Aug 23 07:20:23 2024 +0100

    Merge pull request #15377 from marcusmoore/fixes/custom-field-values-on-validation-error

    Fixed custom field defaults being prematurely updated

commit ec0346e4a8
Author: snipe <[email protected]>
Date:   Fri Aug 23 07:19:08 2024 +0100

    Add @setpill as a contributor

commit fc5eb37776
Merge: 833dace2b 1d7853cbf
Author: snipe <[email protected]>
Date:   Fri Aug 23 07:18:41 2024 +0100

    Merge pull request #15379 from setpill/fix/load-trustproxies-middleware

    fixed #15374: load TrustProxies middleware in Kernel.php

commit 9a73311a99
Author: Marcus Moore <[email protected]>
Date:   Thu Aug 22 17:04:04 2024 -0700

    Fix nested checkboxes being updated as a group

commit aec781e7df
Author: Marcus Moore <[email protected]>
Date:   Thu Aug 22 16:03:30 2024 -0700

    Be a little more explicit

commit 1d7853cbfe
Author: setpill <[email protected]>
Date:   Thu Aug 22 19:45:53 2024 +0200

    fixed #15374: load TrustProxies middleware in Kernel.php

commit 7f3c86165b
Author: Marcus Moore <[email protected]>
Date:   Thu Aug 22 13:58:31 2024 -0700

    Conditionally disable Add default values checkbox

commit 10b45812c4
Author: Marcus Moore <[email protected]>
Date:   Thu Aug 22 13:38:01 2024 -0700

    Improve id for checkboxes and radio buttons

commit c3165717ed
Author: Marcus Moore <[email protected]>
Date:   Thu Aug 22 13:20:04 2024 -0700

    Handle old input

commit d0a351a132
Author: Marcus Moore <[email protected]>
Date:   Thu Aug 22 12:59:03 2024 -0700

    Add comment

commit 68749e7e87
Author: Marcus Moore <[email protected]>
Date:   Thu Aug 22 12:58:35 2024 -0700

    Simplify logic

commit 0abb5637e0
Author: Marcus Moore <[email protected]>
Date:   Thu Aug 22 12:54:54 2024 -0700

    WIP: handle old input

commit af0a95be12
Author: Marcus Moore <[email protected]>
Date:   Wed Aug 21 17:00:32 2024 -0700

    Simplify assertions

commit d67975cb62
Author: Marcus Moore <[email protected]>
Date:   Wed Aug 21 16:59:44 2024 -0700

    Implement fix

commit 663b2fd844
Author: Marcus Moore <[email protected]>
Date:   Wed Aug 21 16:59:38 2024 -0700

    Add test case

commit bcace9d019
Author: Marcus Moore <[email protected]>
Date:   Wed Aug 21 16:54:16 2024 -0700

    Point test to correct endpoint

commit b59bf3e7dc
Author: Marcus Moore <[email protected]>
Date:   Wed Aug 21 16:49:29 2024 -0700

    Add failing test

commit 3957d670d0
Author: Godfrey M <[email protected]>
Date:   Thu Aug 22 10:04:46 2024 -0700

    fixes send acceptance reminder query

commit 821dd158d1
Merge: 6c9a40268 833dace2b
Author: snipe <[email protected]>
Date:   Thu Aug 22 15:50:20 2024 +0100

    Merge remote-tracking branch 'origin/develop'

    Signed-off-by: snipe <[email protected]>

    # Conflicts:
    #	public/css/build/app.css
    #	public/css/build/overrides.css
    #	public/css/dist/all.css
    #	public/js/build/app.js
    #	public/js/dist/all.js
    #	public/mix-manifest.json

commit 833dace2b4
Merge: ec365b080 56e31d230
Author: snipe <[email protected]>
Date:   Thu Aug 22 15:00:16 2024 +0100

    Merge pull request #15373 from snipe/fixes/#15366_custom_fields

    Fixed #15366 use the non-admin edit encrypted custom fields permissions

commit 56e31d2303
Author: snipe <[email protected]>
Date:   Thu Aug 22 14:58:09 2024 +0100

    Fixed #15366 - use permission for encrypted custom fields

    Signed-off-by: snipe <[email protected]>

commit ec365b0804
Merge: ca8864c06 aef0ac68c
Author: snipe <[email protected]>
Date:   Thu Aug 22 14:49:13 2024 +0100

    Merge pull request #15372 from StarlessNights/update-docker-compose-files

    Fixed #15371: docker-compose files updated.

commit aef0ac68c3
Author: Iisakki Jaakkola <[email protected]>
Date:   Thu Aug 22 16:10:00 2024 +0300

    Need to use the long format for redis too in docker-compose file.

commit f12f9a816f
Author: Iisakki Jaakkola <[email protected]>
Date:   Thu Aug 22 15:47:12 2024 +0300

    Update the official docker-compose file too while at it.

commit a000d6454f
Author: Iisakki Jaakkola <[email protected]>
Date:   Thu Aug 22 15:46:40 2024 +0300

    Fix non-functional development docker-compose file.

commit ca8864c061
Author: snipe <[email protected]>
Date:   Thu Aug 22 13:28:52 2024 +0100

    Fixed small layout quirks in asset view

    Signed-off-by: snipe <[email protected]>

commit 423f4f9126
Merge: 456c7d8d9 5fa0c87ab
Author: snipe <[email protected]>
Date:   Thu Aug 22 13:25:41 2024 +0100

    Merge pull request #14667 from Godmartinz/add_location_to_create_user_via_asset

    Adds location select to the create new user via asset checkout

commit 456c7d8d91
Merge: 54cfe3f6e d4d19569e
Author: snipe <[email protected]>
Date:   Thu Aug 22 13:20:56 2024 +0100

    Merge pull request #15065 from Godmartinz/explicit_eol_removal_command

    Adds `snipeit:remove-explicit-eols` command

commit 54cfe3f6e6
Merge: 5e0b18104 bb465dbfa
Author: snipe <[email protected]>
Date:   Thu Aug 22 13:20:10 2024 +0100

    Merge pull request #15156 from uberbrady/re-add-stalebot

    Re-add stalebot-esque github Action

commit 5e0b18104d
Merge: ec0b9b198 8b5d3f7fb
Author: snipe <[email protected]>
Date:   Thu Aug 22 12:59:20 2024 +0100

    Merge pull request #15369 from snipe/fixes/checkbox_on_restore

    Fixed checkbox layout on modal from #15296

commit 8b5d3f7fbd
Author: snipe <[email protected]>
Date:   Thu Aug 22 12:56:32 2024 +0100

    Fixed extra closing p tag

    Signed-off-by: snipe <[email protected]>

commit 744f43676d
Author: snipe <[email protected]>
Date:   Thu Aug 22 12:53:16 2024 +0100

    Fixed checkbox layout on modal from #15296

    Signed-off-by: snipe <[email protected]>

commit ec0b9b198f
Merge: 94300d81d 738ef442f
Author: snipe <[email protected]>
Date:   Thu Aug 22 12:43:07 2024 +0100

    Merge pull request #15296 from uberbrady/expose_restore_sanitize

    Expose the 'sanitize' system for backup restores to the web GUI

commit 6c9a402685
Author: snipe <[email protected]>
Date:   Thu Aug 22 11:20:52 2024 +0100

    Updated prod assets

    Signed-off-by: snipe <[email protected]>

commit 1b310f3a24
Merge: c54bff0f8 94300d81d
Author: snipe <[email protected]>
Date:   Thu Aug 22 11:20:42 2024 +0100

    Merge remote-tracking branch 'origin/develop'

    Signed-off-by: snipe <[email protected]>

    # Conflicts:
    #	public/css/build/app.css
    #	public/css/build/overrides.css
    #	public/css/dist/all.css
    #	public/mix-manifest.json

commit 94300d81d6
Author: snipe <[email protected]>
Date:   Thu Aug 22 11:19:32 2024 +0100

    Updated dev assets

    Signed-off-by: snipe <[email protected]>

commit bc9ea5a2ec
Merge: 4635a6efc 963911f2e
Author: snipe <[email protected]>
Date:   Thu Aug 22 11:18:06 2024 +0100

    Merge pull request #15352 from Godmartinz/mobile_breakpoint

    Fixed Mobile misalignment of info on Assets and Users view pages

commit 4635a6efc3
Merge: 9608414ea d29b3bfb9
Author: snipe <[email protected]>
Date:   Thu Aug 22 11:17:49 2024 +0100

    Merge pull request #15360 from snipe/more_print_fixes

    More print fixes for asset view

commit 9608414eae
Merge: 47d8e2f8b 5efddf6f5
Author: snipe <[email protected]>
Date:   Thu Aug 22 11:06:13 2024 +0100

    Merge pull request #15367 from snipe/fixes/15344_added_freeform_to_country_select2

    Fixed #15344 - make select2 for countries freeform-ish

commit 5efddf6f5b
Author: snipe <[email protected]>
Date:   Thu Aug 22 11:01:39 2024 +0100

    Allow clear on country dropdown

    Signed-off-by: snipe <[email protected]>

commit 305dc049a4
Author: snipe <[email protected]>
Date:   Thu Aug 22 11:01:28 2024 +0100

    Added asterisk help text

    Signed-off-by: snipe <[email protected]>

commit 3ac0702094
Author: snipe <[email protected]>
Date:   Thu Aug 22 10:13:22 2024 +0100

    Fixed #15344 - make select2 for countries freeform-ish

    Signed-off-by: snipe <[email protected]>

commit 47d8e2f8b9
Author: snipe <[email protected]>
Date:   Thu Aug 22 09:42:05 2024 +0100

    Add @Scarzy as a contributor

commit a2246b9645
Author: Marcus Moore <[email protected]>
Date:   Wed Aug 21 17:00:32 2024 -0700

    Simplify assertions

commit 1d89759706
Author: Marcus Moore <[email protected]>
Date:   Wed Aug 21 16:59:44 2024 -0700

    Implement fix

commit 206f8fe605
Author: Marcus Moore <[email protected]>
Date:   Wed Aug 21 16:59:38 2024 -0700

    Add test case

commit 21d2217619
Author: Marcus Moore <[email protected]>
Date:   Wed Aug 21 16:54:16 2024 -0700

    Point test to correct endpoint

commit 833bcb282f
Author: Marcus Moore <[email protected]>
Date:   Wed Aug 21 16:49:29 2024 -0700

    Add failing test

commit 83dd9ce20e
Merge: 6fdce3c53 a8eb76fd8
Author: snipe <[email protected]>
Date:   Wed Aug 21 23:15:24 2024 +0100

    Merge pull request #15362 from r-xyz/model-files-api

    Added #9413: AssetModel files endpoints to API

commit a8eb76fd8d
Author: r-xyz <[email protected]>
Date:   Wed Aug 21 22:25:41 2024 +0200

    Fixed model files API routes.

commit cd7db5c4a8
Author: r-xyz <[email protected]>
Date:   Wed Aug 21 22:24:08 2024 +0200

    Fix some typos in models file handler.

commit da7313bc9d
Author: r-xyz <[email protected]>
Date:   Wed Aug 21 20:24:22 2024 +0200

    Fix models files API routes.

commit 4ec361c718
Author: r-xyz <[email protected]>
Date:   Wed Aug 21 19:49:51 2024 +0200

    Add AssetModel files endpoints to API

commit 738ef442fd
Author: Brady Wetherington <[email protected]>
Date:   Wed Aug 21 13:16:51 2024 +0100

    Rename .env var to have DB_ prefix for sanitize-by-default setting

commit d29b3bfb9a
Author: snipe <[email protected]>
Date:   Wed Aug 21 13:06:16 2024 +0100

    Few more hidden-print classes

    Signed-off-by: snipe <[email protected]>

commit 6fdce3c536
Merge: 01c4fe611 1ab29ec3a
Author: snipe <[email protected]>
Date:   Wed Aug 21 13:02:50 2024 +0100

    Merge pull request #15358 from r-xyz/rename-docker-startup

    Renamed  docker startup scripts coherently.

commit 912bbf0e32
Author: snipe <[email protected]>
Date:   Wed Aug 21 13:02:21 2024 +0100

    More print fixes

    Signed-off-by: snipe <[email protected]>

commit c54bff0f83
Merge: d3f30ced9 01c4fe611
Author: snipe <[email protected]>
Date:   Wed Aug 21 12:24:13 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 01c4fe6113
Merge: 7e475a078 0fa9f5797
Author: snipe <[email protected]>
Date:   Wed Aug 21 12:12:23 2024 +0100

    Merge pull request #15359 from uberbrady/improve_windows_upgrade

    Fixed #15190 - Improvements to upgrade.php script to improve Windows experience

commit 0fa9f57971
Author: Brady Wetherington <[email protected]>
Date:   Wed Aug 21 11:53:38 2024 +0100

    Improvements to upgrade.php script to improve Windows experience

commit 1ab29ec3a4
Author: r-xyz <[email protected]>
Date:   Wed Aug 21 11:52:09 2024 +0200

    Rename  docker startup scripts coherently.

commit 7e475a0786
Merge: d0acf5b8a 26b3c62ab
Author: snipe <[email protected]>
Date:   Wed Aug 21 10:41:17 2024 +0100

    Merge pull request #15357 from snipe/tighten_category_view_translations

    Fixed #15330 - Cleaned up category title

commit 26b3c62ab8
Author: snipe <[email protected]>
Date:   Wed Aug 21 10:29:51 2024 +0100

    Cleaned up category title

    Signed-off-by: snipe <[email protected]>

commit d3f30ced94
Merge: 973e2e575 d0acf5b8a
Author: snipe <[email protected]>
Date:   Wed Aug 21 10:13:57 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit d0acf5b8a6
Merge: 09033b19a 74fbc2382
Author: snipe <[email protected]>
Date:   Wed Aug 21 10:12:58 2024 +0100

    Merge pull request #15356 from snipe/validate_location_parent

    Fixed #15341 - validate parent ID

commit 74fbc23823
Author: snipe <[email protected]>
Date:   Wed Aug 21 10:09:35 2024 +0100

    Updated tests

    Signed-off-by: snipe <[email protected]>

commit a23dee52f2
Author: snipe <[email protected]>
Date:   Wed Aug 21 09:58:47 2024 +0100

    Added tests

    Signed-off-by: snipe <[email protected]>

commit 4d03f1e110
Author: snipe <[email protected]>
Date:   Wed Aug 21 09:46:18 2024 +0100

    Fixed #15341 - validate parent ID

    Signed-off-by: snipe <[email protected]>

commit 963911f2e1
Author: Godfrey M <[email protected]>
Date:   Wed Aug 21 00:23:10 2024 -0700

    changed order of info stgack

commit 59832126cb
Author: Marcus Moore <[email protected]>
Date:   Tue Aug 20 16:52:51 2024 -0700

    Improve comment

commit 680cce3ee2
Author: Marcus Moore <[email protected]>
Date:   Tue Aug 20 16:42:29 2024 -0700

    Align indents

commit 6c5ec6a16c
Author: Marcus Moore <[email protected]>
Date:   Tue Aug 20 16:41:24 2024 -0700

    Get datepicker working

commit 5d1f98bf93
Author: Marcus Moore <[email protected]>
Date:   Tue Aug 20 15:38:43 2024 -0700

    Simplify by directly wire:modeling

commit 9d484077ae
Author: Godfrey M <[email protected]>
Date:   Tue Aug 20 14:24:37 2024 -0700

    missed a file

commit 9858b0f37f
Author: Godfrey M <[email protected]>
Date:   Tue Aug 20 14:23:55 2024 -0700

    fixes info tab for users and assets

commit 973e2e5756
Merge: 46ed07642 09033b19a
Author: snipe <[email protected]>
Date:   Tue Aug 20 19:45:53 2024 +0100

    Merge remote-tracking branch 'origin/develop'

    Signed-off-by: snipe <[email protected]>

    # Conflicts:
    #	config/version.php

commit 09033b19a7
Author: snipe <[email protected]>
Date:   Tue Aug 20 19:44:13 2024 +0100

    Bumped hash

    Signed-off-by: snipe <[email protected]>

commit 46ed076428
Merge: d3a555ce9 5fdeb9c41
Author: snipe <[email protected]>
Date:   Tue Aug 20 19:42:56 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 5fdeb9c413
Merge: 22d373407 6c450d133
Author: snipe <[email protected]>
Date:   Tue Aug 20 19:42:08 2024 +0100

    Merge pull request #15351 from snipe/localizations/new_translations_2024-08-20

    Updated languages

commit 22d3734075
Merge: d99b306ae eca6b03f4
Author: snipe <[email protected]>
Date:   Tue Aug 20 19:34:38 2024 +0100

    Merge pull request #15350 from marcusmoore/icon-component-updates

    Fixed icon not rotated and simplified component

commit eca6b03f44
Author: Marcus Moore <[email protected]>
Date:   Tue Aug 20 11:08:53 2024 -0700

    Allow id to be rendered

commit bbdbec7197
Author: Marcus Moore <[email protected]>
Date:   Tue Aug 20 11:00:39 2024 -0700

    Rely on $attributes behavior rendering passed attributes

commit 6c450d1338
Author: snipe <[email protected]>
Date:   Tue Aug 20 18:18:17 2024 +0100

    Updated languages

    Signed-off-by: snipe <[email protected]>

commit a8cd1027f3
Author: spencerrlongg <[email protected]>
Date:   Tue Aug 20 11:40:15 2024 -0500

    rm commented code

commit d3a555ce91
Author: snipe <[email protected]>
Date:   Tue Aug 20 11:49:39 2024 +0100

    Updated assets

    Signed-off-by: snipe <[email protected]>

commit 0f8e041809
Merge: e8a22f3c5 d99b306ae
Author: snipe <[email protected]>
Date:   Tue Aug 20 11:49:32 2024 +0100

    Merge remote-tracking branch 'origin/develop'

    Signed-off-by: snipe <[email protected]>

    # Conflicts:
    #	public/css/build/app.css
    #	public/css/build/overrides.css
    #	public/css/dist/all.css
    #	public/css/dist/bootstrap-table.css
    #	public/js/dist/bootstrap-table.js
    #	public/mix-manifest.json

commit d99b306ae9
Merge: f597d6433 74136761d
Author: snipe <[email protected]>
Date:   Tue Aug 20 11:46:55 2024 +0100

    Merge pull request #15345 from snipe/add_trim_strings_middleware

    Added TrimStrings middleware

commit 74136761df
Author: snipe <[email protected]>
Date:   Tue Aug 20 11:45:13 2024 +0100

    Added TrimStrings middleware

    Signed-off-by: snipe <[email protected]>

commit f597d64339
Merge: 64bed01a9 0072f1500
Author: snipe <[email protected]>
Date:   Tue Aug 20 10:17:26 2024 +0100

    Merge pull request #15342 from snipe/snyk/bs-tables

    [Snyk] Upgrade bootstrap-table from 1.23.0 to 1.23.2

commit 0072f1500e
Author: snipe <[email protected]>
Date:   Tue Aug 20 10:16:27 2024 +0100

    [Snyk] Upgrade bootstrap-table from 1.23.0 to 1.23.2

    Signed-off-by: snipe <[email protected]>

commit 64bed01a91
Merge: f8c72fb0a f6319e11e
Author: snipe <[email protected]>
Date:   Tue Aug 20 10:13:43 2024 +0100

    Merge pull request #15327 from snipe/update_button_style

    Update icons to use blade components, standardize button colors and format

commit f6319e11e7
Author: snipe <[email protected]>
Date:   Tue Aug 20 10:11:27 2024 +0100

    Added fa-fw to sidebar elements

    Signed-off-by: snipe <[email protected]>

commit 5d9f988df3
Author: snipe <[email protected]>
Date:   Tue Aug 20 10:01:49 2024 +0100

    Added fw class to topnav icons

    Signed-off-by: snipe <[email protected]>

commit f8c72fb0ac
Merge: 886514a25 fa765667f
Author: snipe <[email protected]>
Date:   Tue Aug 20 09:57:03 2024 +0100

    Merge pull request #15112 from marcusmoore/livewire-importer-improvements

    Improved handling attempted access of deleted files in importer

commit 8e1111c681
Merge: 697595d96 886514a25
Author: akemidx <[email protected]>
Date:   Mon Aug 19 19:33:44 2024 -0400

    Merge remote-tracking branch 'upstream/develop' into eol_date_range_for_reports

commit 886514a25f
Merge: cb40a82e7 434bdcd6d
Author: snipe <[email protected]>
Date:   Mon Aug 19 22:46:08 2024 +0100

    Merge pull request #15336 from marcusmoore/fixes/remove-displayed-parentheses

    Fixed `)` being added to expected asset checkin report email header

commit fa765667f2
Merge: 94d8a547b cb40a82e7
Author: Marcus Moore <[email protected]>
Date:   Mon Aug 19 14:41:58 2024 -0700

    Merge branch 'develop' into livewire-importer-improvements

commit 434bdcd6d4
Author: Marcus Moore <[email protected]>
Date:   Mon Aug 19 14:31:47 2024 -0700

    Add missing parentheses to conditional

commit be5f3f38f8
Author: snipe <[email protected]>
Date:   Mon Aug 19 14:48:12 2024 +0100

    Settings pages

    Signed-off-by: snipe <[email protected]>

commit 08c3a25b39
Author: snipe <[email protected]>
Date:   Mon Aug 19 14:16:57 2024 +0100

    Little more padding

    Signed-off-by: snipe <[email protected]>

commit 34cd4b6244
Author: snipe <[email protected]>
Date:   Mon Aug 19 14:15:36 2024 +0100

    Added links to apple/google maps

    Signed-off-by: snipe <[email protected]>

commit d89c8682be
Author: snipe <[email protected]>
Date:   Mon Aug 19 13:46:31 2024 +0100

    Reversed location button ordering

    Signed-off-by: snipe <[email protected]>

commit 6f024849e9
Author: snipe <[email protected]>
Date:   Mon Aug 19 13:39:24 2024 +0100

    Few more

    Signed-off-by: snipe <[email protected]>

commit e048f0955f
Author: snipe <[email protected]>
Date:   Mon Aug 19 13:27:21 2024 +0100

    More icons

    Signed-off-by: snipe <[email protected]>

commit 479b2b4fd3
Author: snipe <[email protected]>
Date:   Mon Aug 19 13:23:08 2024 +0100

    More icons

    Signed-off-by: snipe <[email protected]>

commit 84f14a05bd
Author: snipe <[email protected]>
Date:   Mon Aug 19 13:20:19 2024 +0100

    Fixed logging for asset model restore

    Signed-off-by: snipe <[email protected]>

commit 8d52fa51b1
Author: snipe <[email protected]>
Date:   Mon Aug 19 13:20:06 2024 +0100

    Fixed suppliers buttons

    Signed-off-by: snipe <[email protected]>

commit 229d8b9bf5
Author: snipe <[email protected]>
Date:   Mon Aug 19 13:19:59 2024 +0100

    Added location restore

    Signed-off-by: snipe <[email protected]>

commit eb8d43a804
Author: snipe <[email protected]>
Date:   Mon Aug 19 12:32:44 2024 +0100

    Updated buttons on models

    Signed-off-by: snipe <[email protected]>

commit f82266fade
Author: snipe <[email protected]>
Date:   Mon Aug 19 11:58:31 2024 +0100

    Cleaned up presenters

    Signed-off-by: snipe <[email protected]>

commit b4b6f7a35f
Author: snipe <[email protected]>
Date:   Mon Aug 19 11:58:21 2024 +0100

    Added css-consumable to overrides for table headers

    Signed-off-by: snipe <[email protected]>

commit 0bc995b87f
Author: snipe <[email protected]>
Date:   Mon Aug 19 11:58:05 2024 +0100

    Updated more icons

    Signed-off-by: snipe <[email protected]>

commit 59725f2031
Author: snipe <[email protected]>
Date:   Mon Aug 19 11:57:40 2024 +0100

    Removed extra debugging in test

    Signed-off-by: snipe <[email protected]>

commit 00bc9ac806
Author: snipe <[email protected]>
Date:   Sun Aug 18 22:39:14 2024 +0100

    Fixed spacing

    Signed-off-by: snipe <[email protected]>

commit f200960a57
Author: snipe <[email protected]>
Date:   Sun Aug 18 22:26:57 2024 +0100

    Aaaand more

    Signed-off-by: snipe <[email protected]>

commit c700127f1a
Author: snipe <[email protected]>
Date:   Sun Aug 18 22:09:00 2024 +0100

    Updated user view

    Signed-off-by: snipe <[email protected]>

commit ae2f9571b4
Author: snipe <[email protected]>
Date:   Sun Aug 18 21:57:37 2024 +0100

    And still more

    Signed-off-by: snipe <[email protected]>

commit a77dcad336
Author: snipe <[email protected]>
Date:   Sun Aug 18 20:30:53 2024 +0100

    More links

    Signed-off-by: snipe <[email protected]>

commit 7ace9324b4
Author: snipe <[email protected]>
Date:   Sun Aug 18 20:30:22 2024 +0100

    Added padlock sound

    Signed-off-by: snipe <[email protected]>

commit d2e889e927
Author: snipe <[email protected]>
Date:   Sun Aug 18 19:21:59 2024 +0100

    Still more

    Signed-off-by: snipe <[email protected]>

commit 803bdb457c
Author: snipe <[email protected]>
Date:   Sun Aug 18 18:48:19 2024 +0100

    Added calendar

    Signed-off-by: snipe <[email protected]>

commit 7c9b1f6e38
Author: snipe <[email protected]>
Date:   Sun Aug 18 18:39:22 2024 +0100

    Added the plus icon

    Signed-off-by: snipe <[email protected]>

commit d545537a43
Author: snipe <[email protected]>
Date:   Sun Aug 18 18:34:13 2024 +0100

    More icons

    Signed-off-by: snipe <[email protected]>

commit 4d8904938d
Author: snipe <[email protected]>
Date:   Sun Aug 18 18:24:26 2024 +0100

    Added calendar icon for datepickers

    Signed-off-by: snipe <[email protected]>

commit 0c09f2b2c0
Author: snipe <[email protected]>
Date:   Sun Aug 18 18:13:49 2024 +0100

    Moar icon replacement

    Signed-off-by: snipe <[email protected]>

commit bffba02511
Author: snipe <[email protected]>
Date:   Sun Aug 18 17:26:44 2024 +0100

    Updated icons

    Signed-off-by: snipe <[email protected]>

commit 901f4df7ee
Author: snipe <[email protected]>
Date:   Sun Aug 18 17:03:36 2024 +0100

    Added more icons

    Signed-off-by: snipe <[email protected]>

commit 9337cba340
Author: snipe <[email protected]>
Date:   Sun Aug 18 15:53:58 2024 +0100

    Added download

    Signed-off-by: snipe <[email protected]>

commit 2b0c67c263
Author: snipe <[email protected]>
Date:   Sun Aug 18 15:51:00 2024 +0100

    Load the icon helper

    Signed-off-by: snipe <[email protected]>

commit da71f031f5
Author: snipe <[email protected]>
Date:   Sun Aug 18 15:48:24 2024 +0100

    Use icon in hardware view

    Signed-off-by: snipe <[email protected]>

commit d2e585baa7
Author: snipe <[email protected]>
Date:   Sun Aug 18 15:47:45 2024 +0100

    Added icon blade

    Signed-off-by: snipe <[email protected]>

commit a102c085df
Author: snipe <[email protected]>
Date:   Sun Aug 18 15:47:37 2024 +0100

    Added icon helper

    Signed-off-by: snipe <[email protected]>

commit e8a22f3c5b
Merge: d843cf8dc cb40a82e7
Author: snipe <[email protected]>
Date:   Sun Aug 18 04:55:04 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit cb40a82e79
Merge: 7e6ff3cbe 4253acad4
Author: snipe <[email protected]>
Date:   Sun Aug 18 04:54:23 2024 +0100

    Merge pull request #15324 from snipe/jerk_prevention

    Prevent passing an array as login

commit 4253acad4c
Author: snipe <[email protected]>
Date:   Sun Aug 18 04:51:36 2024 +0100

    Prevent passing an array as login

    Signed-off-by: snipe <[email protected]>

commit d843cf8dcc
Merge: 1013dcae6 7e6ff3cbe
Author: snipe <[email protected]>
Date:   Sat Aug 17 00:52:10 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 1013dcae61
Merge: c30c649aa e7ef3bf51
Author: snipe <[email protected]>
Date:   Sat Aug 17 00:38:44 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 70e5e0f9df
Author: spencerrlongg <[email protected]>
Date:   Fri Aug 16 12:52:06 2024 -0500

    get rid of dd

commit dec4691c73
Author: spencerrlongg <[email protected]>
Date:   Fri Aug 16 12:50:09 2024 -0500

    should be good to go now

commit c30c649aaa
Merge: bb1385369 ad6d09b6a
Author: snipe <[email protected]>
Date:   Fri Aug 16 16:44:02 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit bb1385369c
Merge: c1caf6088 43b338d61
Author: snipe <[email protected]>
Date:   Fri Aug 16 16:18:00 2024 +0100

    Merge remote-tracking branch 'origin/develop'

    Signed-off-by: snipe <[email protected]>

    # Conflicts:
    #	public/css/build/app.css
    #	public/css/build/overrides.css
    #	public/css/dist/all.css
    #	public/mix-manifest.json

commit c1caf6088e
Author: snipe <[email protected]>
Date:   Fri Aug 16 13:12:13 2024 +0100

    Prod assets

    Signed-off-by: snipe <[email protected]>

commit 12dfe71ea8
Merge: ca8926871 ea2b1b074
Author: snipe <[email protected]>
Date:   Fri Aug 16 12:48:42 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit ca89268716
Merge: ec5731353 3167ee91d
Author: snipe <[email protected]>
Date:   Fri Aug 16 11:02:56 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 94d8a547b8
Merge: 6521c0252 b39a7c6f0
Author: Marcus Moore <[email protected]>
Date:   Thu Aug 15 13:47:49 2024 -0700

    Merge branch 'develop' into livewire-importer-improvements

commit 43b109fac0
Author: Marcus Moore <[email protected]>
Date:   Thu Aug 15 13:20:22 2024 -0700

    Use cached values for textarea and radio input

commit 75c1e7658f
Author: Marcus Moore <[email protected]>
Date:   Thu Aug 15 10:43:41 2024 -0700

    Improve method name

commit e7c9c799bb
Author: Marcus Moore <[email protected]>
Date:   Thu Aug 15 10:40:23 2024 -0700

    Add wire:keys

commit 6ab976f353
Author: Marcus Moore <[email protected]>
Date:   Thu Aug 15 10:32:33 2024 -0700

    Use cached values for text input

commit ec5731353a
Merge: 3283704fe b39a7c6f0
Author: snipe <[email protected]>
Date:   Thu Aug 15 15:53:52 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 3283704fe8
Author: snipe <[email protected]>
Date:   Thu Aug 15 12:25:08 2024 +0100

    Updated assets

    Signed-off-by: snipe <[email protected]>

commit 540df32046
Merge: 85486fa58 594f50664
Author: snipe <[email protected]>
Date:   Thu Aug 15 12:24:59 2024 +0100

    Merge remote-tracking branch 'origin/develop'

    Signed-off-by: snipe <[email protected]>

    # Conflicts:
    #	public/js/build/app.js
    #	public/js/dist/all.js
    #	public/mix-manifest.json

commit 85486fa58c
Merge: 3618df2ec 10dc1f136
Author: snipe <[email protected]>
Date:   Thu Aug 15 10:53:54 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 3618df2ec5
Merge: a201f22fd 8f7bce7aa
Author: snipe <[email protected]>
Date:   Thu Aug 15 10:44:39 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit a201f22fdb
Author: snipe <[email protected]>
Date:   Thu Aug 15 10:36:12 2024 +0100

    Bumped version

    Signed-off-by: snipe <[email protected]>

commit 6070d530cf
Merge: 6c0cf9447 4d66f7c93
Author: snipe <[email protected]>
Date:   Thu Aug 15 10:35:33 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 6c0cf94473
Merge: bf4b91516 381003eea
Author: snipe <[email protected]>
Date:   Thu Aug 15 10:28:08 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 9622e05cf5
Author: spencerrlongg <[email protected]>
Date:   Wed Aug 14 18:41:06 2024 -0500

    correct api test

commit afaf53cdfc
Author: spencerrlongg <[email protected]>
Date:   Wed Aug 14 18:14:21 2024 -0500

    failing ui test

commit f031309f8f
Author: spencerrlongg <[email protected]>
Date:   Wed Aug 14 16:09:15 2024 -0500

    set up api controller for route/model binding

commit 20ec420ba3
Author: spencerrlongg <[email protected]>
Date:   Wed Aug 14 13:53:29 2024 -0500

    not quite done, api side needs some work

commit ab63a19aff
Author: Marcus Moore <[email protected]>
Date:   Wed Aug 14 11:01:51 2024 -0700

    Initialize concept of cached values

commit a70b94e707
Merge: 120cfd13c 3e2945709
Author: spencerrlongg <[email protected]>
Date:   Wed Aug 14 11:36:19 2024 -0500

    Merge branch 'refs/heads/develop' into bug/sc-26584

commit 008bf036b5
Author: Brady Wetherington <[email protected]>
Date:   Wed Aug 14 16:09:34 2024 +0100

    Got rid of weird namespace declaration and commented-out data-toggle line

commit cc5ad456e6
Author: Brady Wetherington <[email protected]>
Date:   Wed Aug 14 15:59:21 2024 +0100

    Expose the 'sanitize' system for backup restores to the web GUI

commit bf4b915168
Merge: 0a9c2e354 0f1e5181a
Author: snipe <[email protected]>
Date:   Wed Aug 14 10:45:13 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 0a9c2e354f
Merge: 47f1b3b14 e54400718
Author: snipe <[email protected]>
Date:   Wed Aug 14 10:02:43 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 038e86954b
Author: Marcus Moore <[email protected]>
Date:   Tue Aug 13 17:30:53 2024 -0700

    Improve property name

commit f6c1642bf2
Author: Marcus Moore <[email protected]>
Date:   Tue Aug 13 17:01:35 2024 -0700

    Use computed fields in CustomFieldSetDefaultValuesForModel component

commit 120cfd13c5
Author: spencerrlongg <[email protected]>
Date:   Tue Aug 13 14:07:40 2024 -0500

    translation

commit 09f2739298
Author: spencerrlongg <[email protected]>
Date:   Tue Aug 13 13:45:41 2024 -0500

    works, un-reassignable licenses are an issue

commit 47f1b3b14e
Merge: 198b76ebc 3044af941
Author: snipe <[email protected]>
Date:   Tue Aug 13 16:48:06 2024 +0100

    Merge remote-tracking branch 'origin/develop'

    Signed-off-by: snipe <[email protected]>

    # Conflicts:
    #	public/css/build/app.css
    #	public/css/build/overrides.css
    #	public/css/dist/all.css
    #	public/mix-manifest.json

commit 198b76ebc2
Merge: 5546f9676 6e84c29ce
Author: snipe <[email protected]>
Date:   Tue Aug 13 15:47:00 2024 +0100

    Merge remote-tracking branch 'origin/develop'

    Signed-off-by: snipe <[email protected]>

    # Conflicts:
    #	public/css/build/app.css
    #	public/css/build/overrides.css
    #	public/css/dist/all.css
    #	public/mix-manifest.json

commit 5546f9676a
Merge: 46caa478d 9e73eaf95
Author: snipe <[email protected]>
Date:   Tue Aug 13 13:51:33 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit ec863df007
Author: spencerrlongg <[email protected]>
Date:   Mon Aug 12 16:58:53 2024 -0500

    rm conditional that might be unnecessary

commit cc3b8e0681
Author: spencerrlongg <[email protected]>
Date:   Mon Aug 12 16:58:21 2024 -0500

    this should more or less work, but i need to determine if this is the best way

commit ff145abbe7
Author: spencerrlongg <[email protected]>
Date:   Mon Aug 12 16:13:03 2024 -0500

    use array for eager loading, makes ide prettier

commit 46caa478d2
Merge: 4d8569e75 e6106aa7c
Author: snipe <[email protected]>
Date:   Mon Aug 12 20:47:45 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 4d8569e754
Merge: 4dc57f95e c9f8a84d4
Author: snipe <[email protected]>
Date:   Mon Aug 12 18:01:21 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 4dc57f95e2
Merge: 316ee6f81 9d354ca65
Author: snipe <[email protected]>
Date:   Mon Aug 12 16:38:23 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 316ee6f810
Merge: 509cc812e 3f2139349
Author: snipe <[email protected]>
Date:   Mon Aug 12 16:30:53 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 509cc812ea
Merge: d5f66bc0d e7fb29fce
Author: snipe <[email protected]>
Date:   Mon Aug 12 15:58:40 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit d5f66bc0dd
Merge: 1e213c31e ce5be8ac2
Author: snipe <[email protected]>
Date:   Mon Aug 12 10:10:59 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 1e213c31ef
Merge: 91874dfe0 1777bb4b9
Author: snipe <[email protected]>
Date:   Sun Aug 11 10:26:16 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 91874dfe0b
Merge: 0e6eda5e8 5c6c655cd
Author: snipe <[email protected]>
Date:   Sat Aug 10 19:37:37 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 0e6eda5e8a
Merge: 24560b936 60eb60215
Author: snipe <[email protected]>
Date:   Sat Aug 10 18:29:41 2024 +0100

    Merge remote-tracking branch 'origin/develop'

commit 24560b9362
Author: snipe <[email protected]>
Date:   Sat Aug 10 18:24:49 2024 +0100

    Updated prod assets

    Signed-off-by: snipe <[email protected]>

commit 6521c02526
Merge: 8d1cc22c5 9350a2018
Author: Marcus Moore <[email protected]>
Date:   Wed Aug 7 15:20:39 2024 -0700

    Merge branch 'develop' into livewire-importer-improvements

    # Conflicts:
    #	resources/views/livewire/importer.blade.php

commit bb465dbfaa
Author: Brady Wetherington <[email protected]>
Date:   Wed Jul 24 15:09:23 2024 +0100

    Cut down run number to 100 from 1000

commit 8cbcc237c0
Author: Brady Wetherington <[email protected]>
Date:   Wed Jul 24 13:27:31 2024 +0100

    Cleanup of Stale workflow for GH - set to debug-mode to start

commit 97e3af8fc9
Author: Brady Wetherington <[email protected]>
Date:   Sat Jun 29 00:59:47 2024 +0100

    WIP on new GitHub-backed stalebot settings

commit 914e29210a
Author: Brady Wetherington <[email protected]>
Date:   Wed Jun 26 18:53:01 2024 +0100

    Initial rough stab at re-implementing stalebot

commit 8d1cc22c58
Author: Marcus Moore <[email protected]>
Date:   Thu Jul 18 12:00:01 2024 -0700

    Turn on legacy binding since other components still use it

commit 7685de45f2
Author: Marcus Moore <[email protected]>
Date:   Wed Jul 17 17:12:14 2024 -0700

    Turn off legacy binding

commit 199e68ff29
Author: Marcus Moore <[email protected]>
Date:   Wed Jul 17 17:10:12 2024 -0700

    Simplify computed propery

commit 81bffccf01
Author: Marcus Moore <[email protected]>
Date:   Wed Jul 17 16:28:26 2024 -0700

    Use better error message

commit cfca1514c0
Author: Marcus Moore <[email protected]>
Date:   Wed Jul 17 16:22:44 2024 -0700

    Swap file_id for activeFileId

commit b4ed01243b
Author: Marcus Moore <[email protected]>
Date:   Wed Jul 17 13:40:41 2024 -0700

    Add more details

commit 3772a21a51
Author: Marcus Moore <[email protected]>
Date:   Wed Jul 17 13:37:24 2024 -0700

    Move comment up

commit 04b6cb763f
Author: Marcus Moore <[email protected]>
Date:   Wed Jul 17 10:58:48 2024 -0700

    Add todo

commit dd32341502
Author: Marcus Moore <[email protected]>
Date:   Tue Jul 16 17:21:18 2024 -0700

    Display message if attempting to delete non-existent file

commit f58e3114a2
Author: Marcus Moore <[email protected]>
Date:   Tue Jul 16 17:17:45 2024 -0700

    Simplify destroy method and update list

commit eba494ad8c
Author: Marcus Moore <[email protected]>
Date:   Tue Jul 16 17:03:42 2024 -0700

    Make $activeFile a computed property

commit 7e89b58746
Author: Marcus Moore <[email protected]>
Date:   Tue Jul 16 16:08:42 2024 -0700

    Move files to computed property

commit b7744105a0
Author: Marcus Moore <[email protected]>
Date:   Tue Jul 16 14:20:41 2024 -0700

    Migrate import type to component

commit 69263f0e5b
Author: Marcus Moore <[email protected]>
Date:   Tue Jul 16 13:30:29 2024 -0700

    Migrate header row to component

commit 017530ba4b
Author: Marcus Moore <[email protected]>
Date:   Tue Jul 16 12:02:50 2024 -0700

    Make updating hook more specific

commit c8dad528a8
Author: Marcus Moore <[email protected]>
Date:   Mon Jul 15 16:15:58 2024 -0700

    Migrate a couple items out of mount

commit 256e989ba1
Author: Marcus Moore <[email protected]>
Date:   Mon Jul 15 15:49:18 2024 -0700

    Add test for importer

commit 9793016603
Author: Marcus Moore <[email protected]>
Date:   Thu Jul 11 13:32:16 2024 -0700

    Remove unneeded AuthorizesRequests

commit 9e06f2d17f
Author: Marcus Moore <[email protected]>
Date:   Thu Jul 11 13:22:10 2024 -0700

    Remove commented code

commit d4d19569ee
Author: Godfrey M <[email protected]>
Date:   Thu Jul 11 10:52:47 2024 -0700

    adds execution timer

commit 43c7504f89
Author: Godfrey M <[email protected]>
Date:   Thu Jul 11 10:03:51 2024 -0700

    adds an all option, adds help context for all, seperates logic

commit 1fa6a763bc
Author: Godfrey M <[email protected]>
Date:   Wed Jul 10 11:09:57 2024 -0700

    updated description

commit 726308bfd5
Author: Godfrey M <[email protected]>
Date:   Wed Jul 10 10:58:45 2024 -0700

    removed typo

commit 22ddb695f2
Author: Godfrey M <[email protected]>
Date:   Wed Jul 10 10:57:47 2024 -0700

    better description

commit 09b2feac54
Author: Godfrey M <[email protected]>
Date:   Wed Jul 10 10:56:44 2024 -0700

    updates assets with selected model to inherit asset model eol

commit 57e1df86c8
Author: Godfrey M <[email protected]>
Date:   Wed Jul 10 10:21:24 2024 -0700

    finds model and collects assets with such model

commit 3ea5d4ee40
Author: Robert-Azelis <[email protected]>
Date:   Thu May 2 12:55:17 2024 +0200

    Update BulkAssetsController.php

    Fix for bulk updarte of purchase date to calculate new EOL

commit 5fa0c87ab0
Author: Godfrey M <[email protected]>
Date:   Tue Apr 30 12:02:11 2024 -0700

    null debugbar

commit 75aa01791a
Author: Godfrey M <[email protected]>
Date:   Tue Apr 30 11:54:33 2024 -0700

    adds location select to the create new user vice asset checkout

commit 697595d963
Merge: 0bdd8a591 9502525a4
Author: akemidx <[email protected]>
Date:   Tue Nov 21 16:07:26 2023 -0500

    Merge branch 'develop' into eol_date_range_for_reports

commit 0bdd8a5917
Author: akemidx <[email protected]>
Date:   Wed Aug 2 16:40:38 2023 -0400

    fixing key names

commit e35dd2daa1
Author: akemidx <[email protected]>
Date:   Wed Jul 26 17:45:18 2023 -0400

    asset_eol_date stuff

commit f71b69a739
Author: akemidx <[email protected]>
Date:   Wed Jul 26 17:31:06 2023 -0400

    adding eol fields

commit 499a3debcd
Author: akemidx <[email protected]>
Date:   Tue Jul 11 14:08:55 2023 -0400

    this WILL break. i'm back to site not found which is something missing. otherwise the columns are either blank or another value like expected checkin i was using to test a bit

Signed-off-by: snipe <[email protected]>
2024-11-12 15:39:22 +00:00

10927 lines
381 KiB
JavaScript

var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
// ../alpine/packages/alpinejs/dist/module.cjs.js
var require_module_cjs = __commonJS({
"../alpine/packages/alpinejs/dist/module.cjs.js"(exports, module) {
var __create2 = Object.create;
var __defProp2 = Object.defineProperty;
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
var __getOwnPropNames2 = Object.getOwnPropertyNames;
var __getProtoOf2 = Object.getPrototypeOf;
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
var __commonJS2 = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __export = (target, all2) => {
for (var name in all2)
__defProp2(target, name, { get: all2[name], enumerable: true });
};
var __copyProps2 = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames2(from))
if (!__hasOwnProp2.call(to, key) && key !== except)
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
}
return to;
};
var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2(isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target, mod));
var __toCommonJS = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
var require_shared_cjs = __commonJS2({
"node_modules/@vue/shared/dist/shared.cjs.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
function makeMap(str, expectsLowerCase) {
const map = /* @__PURE__ */ Object.create(null);
const list = str.split(",");
for (let i = 0; i < list.length; i++) {
map[list[i]] = true;
}
return expectsLowerCase ? (val) => !!map[val.toLowerCase()] : (val) => !!map[val];
}
var PatchFlagNames = {
[1]: `TEXT`,
[2]: `CLASS`,
[4]: `STYLE`,
[8]: `PROPS`,
[16]: `FULL_PROPS`,
[32]: `HYDRATE_EVENTS`,
[64]: `STABLE_FRAGMENT`,
[128]: `KEYED_FRAGMENT`,
[256]: `UNKEYED_FRAGMENT`,
[512]: `NEED_PATCH`,
[1024]: `DYNAMIC_SLOTS`,
[2048]: `DEV_ROOT_FRAGMENT`,
[-1]: `HOISTED`,
[-2]: `BAIL`
};
var slotFlagsText = {
[1]: "STABLE",
[2]: "DYNAMIC",
[3]: "FORWARDED"
};
var GLOBALS_WHITE_LISTED = "Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt";
var isGloballyWhitelisted = /* @__PURE__ */ makeMap(GLOBALS_WHITE_LISTED);
var range = 2;
function generateCodeFrame(source, start22 = 0, end = source.length) {
let lines = source.split(/(\r?\n)/);
const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);
lines = lines.filter((_, idx) => idx % 2 === 0);
let count = 0;
const res = [];
for (let i = 0; i < lines.length; i++) {
count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0);
if (count >= start22) {
for (let j = i - range; j <= i + range || end > count; j++) {
if (j < 0 || j >= lines.length)
continue;
const line = j + 1;
res.push(`${line}${" ".repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`);
const lineLength = lines[j].length;
const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0;
if (j === i) {
const pad = start22 - (count - (lineLength + newLineSeqLength));
const length = Math.max(1, end > count ? lineLength - pad : end - start22);
res.push(` | ` + " ".repeat(pad) + "^".repeat(length));
} else if (j > i) {
if (end > count) {
const length = Math.max(Math.min(end - count, lineLength), 1);
res.push(` | ` + "^".repeat(length));
}
count += lineLength + newLineSeqLength;
}
}
break;
}
}
return res.join("\n");
}
var specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;
var isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);
var isBooleanAttr2 = /* @__PURE__ */ makeMap(specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`);
var unsafeAttrCharRE = /[>/="'\u0009\u000a\u000c\u0020]/;
var attrValidationCache = {};
function isSSRSafeAttrName(name) {
if (attrValidationCache.hasOwnProperty(name)) {
return attrValidationCache[name];
}
const isUnsafe = unsafeAttrCharRE.test(name);
if (isUnsafe) {
console.error(`unsafe attribute name: ${name}`);
}
return attrValidationCache[name] = !isUnsafe;
}
var propsToAttrMap = {
acceptCharset: "accept-charset",
className: "class",
htmlFor: "for",
httpEquiv: "http-equiv"
};
var isNoUnitNumericStyleProp = /* @__PURE__ */ makeMap(`animation-iteration-count,border-image-outset,border-image-slice,border-image-width,box-flex,box-flex-group,box-ordinal-group,column-count,columns,flex,flex-grow,flex-positive,flex-shrink,flex-negative,flex-order,grid-row,grid-row-end,grid-row-span,grid-row-start,grid-column,grid-column-end,grid-column-span,grid-column-start,font-weight,line-clamp,line-height,opacity,order,orphans,tab-size,widows,z-index,zoom,fill-opacity,flood-opacity,stop-opacity,stroke-dasharray,stroke-dashoffset,stroke-miterlimit,stroke-opacity,stroke-width`);
var isKnownAttr = /* @__PURE__ */ makeMap(`accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`);
function normalizeStyle(value) {
if (isArray2(value)) {
const res = {};
for (let i = 0; i < value.length; i++) {
const item = value[i];
const normalized = normalizeStyle(isString(item) ? parseStringStyle(item) : item);
if (normalized) {
for (const key in normalized) {
res[key] = normalized[key];
}
}
}
return res;
} else if (isObject2(value)) {
return value;
}
}
var listDelimiterRE = /;(?![^(]*\))/g;
var propertyDelimiterRE = /:(.+)/;
function parseStringStyle(cssText) {
const ret = {};
cssText.split(listDelimiterRE).forEach((item) => {
if (item) {
const tmp = item.split(propertyDelimiterRE);
tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());
}
});
return ret;
}
function stringifyStyle(styles) {
let ret = "";
if (!styles) {
return ret;
}
for (const key in styles) {
const value = styles[key];
const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);
if (isString(value) || typeof value === "number" && isNoUnitNumericStyleProp(normalizedKey)) {
ret += `${normalizedKey}:${value};`;
}
}
return ret;
}
function normalizeClass(value) {
let res = "";
if (isString(value)) {
res = value;
} else if (isArray2(value)) {
for (let i = 0; i < value.length; i++) {
const normalized = normalizeClass(value[i]);
if (normalized) {
res += normalized + " ";
}
}
} else if (isObject2(value)) {
for (const name in value) {
if (value[name]) {
res += name + " ";
}
}
}
return res.trim();
}
var HTML_TAGS = "html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot";
var SVG_TAGS = "svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistanceLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view";
var VOID_TAGS = "area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr";
var isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS);
var isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS);
var isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS);
var escapeRE = /["'&<>]/;
function escapeHtml(string) {
const str = "" + string;
const match = escapeRE.exec(str);
if (!match) {
return str;
}
let html = "";
let escaped;
let index;
let lastIndex = 0;
for (index = match.index; index < str.length; index++) {
switch (str.charCodeAt(index)) {
case 34:
escaped = "&quot;";
break;
case 38:
escaped = "&amp;";
break;
case 39:
escaped = "&#39;";
break;
case 60:
escaped = "&lt;";
break;
case 62:
escaped = "&gt;";
break;
default:
continue;
}
if (lastIndex !== index) {
html += str.substring(lastIndex, index);
}
lastIndex = index + 1;
html += escaped;
}
return lastIndex !== index ? html + str.substring(lastIndex, index) : html;
}
var commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;
function escapeHtmlComment(src) {
return src.replace(commentStripRE, "");
}
function looseCompareArrays(a, b) {
if (a.length !== b.length)
return false;
let equal = true;
for (let i = 0; equal && i < a.length; i++) {
equal = looseEqual(a[i], b[i]);
}
return equal;
}
function looseEqual(a, b) {
if (a === b)
return true;
let aValidType = isDate(a);
let bValidType = isDate(b);
if (aValidType || bValidType) {
return aValidType && bValidType ? a.getTime() === b.getTime() : false;
}
aValidType = isArray2(a);
bValidType = isArray2(b);
if (aValidType || bValidType) {
return aValidType && bValidType ? looseCompareArrays(a, b) : false;
}
aValidType = isObject2(a);
bValidType = isObject2(b);
if (aValidType || bValidType) {
if (!aValidType || !bValidType) {
return false;
}
const aKeysCount = Object.keys(a).length;
const bKeysCount = Object.keys(b).length;
if (aKeysCount !== bKeysCount) {
return false;
}
for (const key in a) {
const aHasKey = a.hasOwnProperty(key);
const bHasKey = b.hasOwnProperty(key);
if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) {
return false;
}
}
}
return String(a) === String(b);
}
function looseIndexOf(arr, val) {
return arr.findIndex((item) => looseEqual(item, val));
}
var toDisplayString = (val) => {
return val == null ? "" : isObject2(val) ? JSON.stringify(val, replacer, 2) : String(val);
};
var replacer = (_key, val) => {
if (isMap(val)) {
return {
[`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val2]) => {
entries[`${key} =>`] = val2;
return entries;
}, {})
};
} else if (isSet(val)) {
return {
[`Set(${val.size})`]: [...val.values()]
};
} else if (isObject2(val) && !isArray2(val) && !isPlainObject(val)) {
return String(val);
}
return val;
};
var babelParserDefaultPlugins = [
"bigInt",
"optionalChaining",
"nullishCoalescingOperator"
];
var EMPTY_OBJ = Object.freeze({});
var EMPTY_ARR = Object.freeze([]);
var NOOP = () => {
};
var NO = () => false;
var onRE = /^on[^a-z]/;
var isOn = (key) => onRE.test(key);
var isModelListener = (key) => key.startsWith("onUpdate:");
var extend = Object.assign;
var remove = (arr, el) => {
const i = arr.indexOf(el);
if (i > -1) {
arr.splice(i, 1);
}
};
var hasOwnProperty = Object.prototype.hasOwnProperty;
var hasOwn = (val, key) => hasOwnProperty.call(val, key);
var isArray2 = Array.isArray;
var isMap = (val) => toTypeString(val) === "[object Map]";
var isSet = (val) => toTypeString(val) === "[object Set]";
var isDate = (val) => val instanceof Date;
var isFunction2 = (val) => typeof val === "function";
var isString = (val) => typeof val === "string";
var isSymbol = (val) => typeof val === "symbol";
var isObject2 = (val) => val !== null && typeof val === "object";
var isPromise = (val) => {
return isObject2(val) && isFunction2(val.then) && isFunction2(val.catch);
};
var objectToString = Object.prototype.toString;
var toTypeString = (value) => objectToString.call(value);
var toRawType = (value) => {
return toTypeString(value).slice(8, -1);
};
var isPlainObject = (val) => toTypeString(val) === "[object Object]";
var isIntegerKey = (key) => isString(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key;
var isReservedProp = /* @__PURE__ */ makeMap(",key,ref,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted");
var cacheStringFunction = (fn) => {
const cache = /* @__PURE__ */ Object.create(null);
return (str) => {
const hit = cache[str];
return hit || (cache[str] = fn(str));
};
};
var camelizeRE = /-(\w)/g;
var camelize = cacheStringFunction((str) => {
return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : "");
});
var hyphenateRE = /\B([A-Z])/g;
var hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, "-$1").toLowerCase());
var capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));
var toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``);
var hasChanged = (value, oldValue) => value !== oldValue && (value === value || oldValue === oldValue);
var invokeArrayFns = (fns, arg) => {
for (let i = 0; i < fns.length; i++) {
fns[i](arg);
}
};
var def = (obj, key, value) => {
Object.defineProperty(obj, key, {
configurable: true,
enumerable: false,
value
});
};
var toNumber = (val) => {
const n = parseFloat(val);
return isNaN(n) ? val : n;
};
var _globalThis;
var getGlobalThis = () => {
return _globalThis || (_globalThis = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {});
};
exports2.EMPTY_ARR = EMPTY_ARR;
exports2.EMPTY_OBJ = EMPTY_OBJ;
exports2.NO = NO;
exports2.NOOP = NOOP;
exports2.PatchFlagNames = PatchFlagNames;
exports2.babelParserDefaultPlugins = babelParserDefaultPlugins;
exports2.camelize = camelize;
exports2.capitalize = capitalize;
exports2.def = def;
exports2.escapeHtml = escapeHtml;
exports2.escapeHtmlComment = escapeHtmlComment;
exports2.extend = extend;
exports2.generateCodeFrame = generateCodeFrame;
exports2.getGlobalThis = getGlobalThis;
exports2.hasChanged = hasChanged;
exports2.hasOwn = hasOwn;
exports2.hyphenate = hyphenate;
exports2.invokeArrayFns = invokeArrayFns;
exports2.isArray = isArray2;
exports2.isBooleanAttr = isBooleanAttr2;
exports2.isDate = isDate;
exports2.isFunction = isFunction2;
exports2.isGloballyWhitelisted = isGloballyWhitelisted;
exports2.isHTMLTag = isHTMLTag;
exports2.isIntegerKey = isIntegerKey;
exports2.isKnownAttr = isKnownAttr;
exports2.isMap = isMap;
exports2.isModelListener = isModelListener;
exports2.isNoUnitNumericStyleProp = isNoUnitNumericStyleProp;
exports2.isObject = isObject2;
exports2.isOn = isOn;
exports2.isPlainObject = isPlainObject;
exports2.isPromise = isPromise;
exports2.isReservedProp = isReservedProp;
exports2.isSSRSafeAttrName = isSSRSafeAttrName;
exports2.isSVGTag = isSVGTag;
exports2.isSet = isSet;
exports2.isSpecialBooleanAttr = isSpecialBooleanAttr;
exports2.isString = isString;
exports2.isSymbol = isSymbol;
exports2.isVoidTag = isVoidTag;
exports2.looseEqual = looseEqual;
exports2.looseIndexOf = looseIndexOf;
exports2.makeMap = makeMap;
exports2.normalizeClass = normalizeClass;
exports2.normalizeStyle = normalizeStyle;
exports2.objectToString = objectToString;
exports2.parseStringStyle = parseStringStyle;
exports2.propsToAttrMap = propsToAttrMap;
exports2.remove = remove;
exports2.slotFlagsText = slotFlagsText;
exports2.stringifyStyle = stringifyStyle;
exports2.toDisplayString = toDisplayString;
exports2.toHandlerKey = toHandlerKey;
exports2.toNumber = toNumber;
exports2.toRawType = toRawType;
exports2.toTypeString = toTypeString;
}
});
var require_shared = __commonJS2({
"node_modules/@vue/shared/index.js"(exports2, module2) {
"use strict";
if (false) {
module2.exports = null;
} else {
module2.exports = require_shared_cjs();
}
}
});
var require_reactivity_cjs = __commonJS2({
"node_modules/@vue/reactivity/dist/reactivity.cjs.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
var shared = require_shared();
var targetMap = /* @__PURE__ */ new WeakMap();
var effectStack = [];
var activeEffect;
var ITERATE_KEY = Symbol("iterate");
var MAP_KEY_ITERATE_KEY = Symbol("Map key iterate");
function isEffect(fn) {
return fn && fn._isEffect === true;
}
function effect3(fn, options = shared.EMPTY_OBJ) {
if (isEffect(fn)) {
fn = fn.raw;
}
const effect4 = createReactiveEffect(fn, options);
if (!options.lazy) {
effect4();
}
return effect4;
}
function stop2(effect4) {
if (effect4.active) {
cleanup(effect4);
if (effect4.options.onStop) {
effect4.options.onStop();
}
effect4.active = false;
}
}
var uid = 0;
function createReactiveEffect(fn, options) {
const effect4 = function reactiveEffect() {
if (!effect4.active) {
return fn();
}
if (!effectStack.includes(effect4)) {
cleanup(effect4);
try {
enableTracking();
effectStack.push(effect4);
activeEffect = effect4;
return fn();
} finally {
effectStack.pop();
resetTracking();
activeEffect = effectStack[effectStack.length - 1];
}
}
};
effect4.id = uid++;
effect4.allowRecurse = !!options.allowRecurse;
effect4._isEffect = true;
effect4.active = true;
effect4.raw = fn;
effect4.deps = [];
effect4.options = options;
return effect4;
}
function cleanup(effect4) {
const { deps } = effect4;
if (deps.length) {
for (let i = 0; i < deps.length; i++) {
deps[i].delete(effect4);
}
deps.length = 0;
}
}
var shouldTrack = true;
var trackStack = [];
function pauseTracking() {
trackStack.push(shouldTrack);
shouldTrack = false;
}
function enableTracking() {
trackStack.push(shouldTrack);
shouldTrack = true;
}
function resetTracking() {
const last = trackStack.pop();
shouldTrack = last === void 0 ? true : last;
}
function track2(target, type, key) {
if (!shouldTrack || activeEffect === void 0) {
return;
}
let depsMap = targetMap.get(target);
if (!depsMap) {
targetMap.set(target, depsMap = /* @__PURE__ */ new Map());
}
let dep = depsMap.get(key);
if (!dep) {
depsMap.set(key, dep = /* @__PURE__ */ new Set());
}
if (!dep.has(activeEffect)) {
dep.add(activeEffect);
activeEffect.deps.push(dep);
if (activeEffect.options.onTrack) {
activeEffect.options.onTrack({
effect: activeEffect,
target,
type,
key
});
}
}
}
function trigger2(target, type, key, newValue, oldValue, oldTarget) {
const depsMap = targetMap.get(target);
if (!depsMap) {
return;
}
const effects = /* @__PURE__ */ new Set();
const add2 = (effectsToAdd) => {
if (effectsToAdd) {
effectsToAdd.forEach((effect4) => {
if (effect4 !== activeEffect || effect4.allowRecurse) {
effects.add(effect4);
}
});
}
};
if (type === "clear") {
depsMap.forEach(add2);
} else if (key === "length" && shared.isArray(target)) {
depsMap.forEach((dep, key2) => {
if (key2 === "length" || key2 >= newValue) {
add2(dep);
}
});
} else {
if (key !== void 0) {
add2(depsMap.get(key));
}
switch (type) {
case "add":
if (!shared.isArray(target)) {
add2(depsMap.get(ITERATE_KEY));
if (shared.isMap(target)) {
add2(depsMap.get(MAP_KEY_ITERATE_KEY));
}
} else if (shared.isIntegerKey(key)) {
add2(depsMap.get("length"));
}
break;
case "delete":
if (!shared.isArray(target)) {
add2(depsMap.get(ITERATE_KEY));
if (shared.isMap(target)) {
add2(depsMap.get(MAP_KEY_ITERATE_KEY));
}
}
break;
case "set":
if (shared.isMap(target)) {
add2(depsMap.get(ITERATE_KEY));
}
break;
}
}
const run = (effect4) => {
if (effect4.options.onTrigger) {
effect4.options.onTrigger({
effect: effect4,
target,
key,
type,
newValue,
oldValue,
oldTarget
});
}
if (effect4.options.scheduler) {
effect4.options.scheduler(effect4);
} else {
effect4();
}
};
effects.forEach(run);
}
var isNonTrackableKeys = /* @__PURE__ */ shared.makeMap(`__proto__,__v_isRef,__isVue`);
var builtInSymbols = new Set(Object.getOwnPropertyNames(Symbol).map((key) => Symbol[key]).filter(shared.isSymbol));
var get2 = /* @__PURE__ */ createGetter();
var shallowGet = /* @__PURE__ */ createGetter(false, true);
var readonlyGet = /* @__PURE__ */ createGetter(true);
var shallowReadonlyGet = /* @__PURE__ */ createGetter(true, true);
var arrayInstrumentations = /* @__PURE__ */ createArrayInstrumentations();
function createArrayInstrumentations() {
const instrumentations = {};
["includes", "indexOf", "lastIndexOf"].forEach((key) => {
instrumentations[key] = function(...args) {
const arr = toRaw2(this);
for (let i = 0, l = this.length; i < l; i++) {
track2(arr, "get", i + "");
}
const res = arr[key](...args);
if (res === -1 || res === false) {
return arr[key](...args.map(toRaw2));
} else {
return res;
}
};
});
["push", "pop", "shift", "unshift", "splice"].forEach((key) => {
instrumentations[key] = function(...args) {
pauseTracking();
const res = toRaw2(this)[key].apply(this, args);
resetTracking();
return res;
};
});
return instrumentations;
}
function createGetter(isReadonly2 = false, shallow = false) {
return function get3(target, key, receiver) {
if (key === "__v_isReactive") {
return !isReadonly2;
} else if (key === "__v_isReadonly") {
return isReadonly2;
} else if (key === "__v_raw" && receiver === (isReadonly2 ? shallow ? shallowReadonlyMap : readonlyMap : shallow ? shallowReactiveMap : reactiveMap).get(target)) {
return target;
}
const targetIsArray = shared.isArray(target);
if (!isReadonly2 && targetIsArray && shared.hasOwn(arrayInstrumentations, key)) {
return Reflect.get(arrayInstrumentations, key, receiver);
}
const res = Reflect.get(target, key, receiver);
if (shared.isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {
return res;
}
if (!isReadonly2) {
track2(target, "get", key);
}
if (shallow) {
return res;
}
if (isRef(res)) {
const shouldUnwrap = !targetIsArray || !shared.isIntegerKey(key);
return shouldUnwrap ? res.value : res;
}
if (shared.isObject(res)) {
return isReadonly2 ? readonly(res) : reactive3(res);
}
return res;
};
}
var set2 = /* @__PURE__ */ createSetter();
var shallowSet = /* @__PURE__ */ createSetter(true);
function createSetter(shallow = false) {
return function set3(target, key, value, receiver) {
let oldValue = target[key];
if (!shallow) {
value = toRaw2(value);
oldValue = toRaw2(oldValue);
if (!shared.isArray(target) && isRef(oldValue) && !isRef(value)) {
oldValue.value = value;
return true;
}
}
const hadKey = shared.isArray(target) && shared.isIntegerKey(key) ? Number(key) < target.length : shared.hasOwn(target, key);
const result = Reflect.set(target, key, value, receiver);
if (target === toRaw2(receiver)) {
if (!hadKey) {
trigger2(target, "add", key, value);
} else if (shared.hasChanged(value, oldValue)) {
trigger2(target, "set", key, value, oldValue);
}
}
return result;
};
}
function deleteProperty(target, key) {
const hadKey = shared.hasOwn(target, key);
const oldValue = target[key];
const result = Reflect.deleteProperty(target, key);
if (result && hadKey) {
trigger2(target, "delete", key, void 0, oldValue);
}
return result;
}
function has(target, key) {
const result = Reflect.has(target, key);
if (!shared.isSymbol(key) || !builtInSymbols.has(key)) {
track2(target, "has", key);
}
return result;
}
function ownKeys(target) {
track2(target, "iterate", shared.isArray(target) ? "length" : ITERATE_KEY);
return Reflect.ownKeys(target);
}
var mutableHandlers = {
get: get2,
set: set2,
deleteProperty,
has,
ownKeys
};
var readonlyHandlers = {
get: readonlyGet,
set(target, key) {
{
console.warn(`Set operation on key "${String(key)}" failed: target is readonly.`, target);
}
return true;
},
deleteProperty(target, key) {
{
console.warn(`Delete operation on key "${String(key)}" failed: target is readonly.`, target);
}
return true;
}
};
var shallowReactiveHandlers = /* @__PURE__ */ shared.extend({}, mutableHandlers, {
get: shallowGet,
set: shallowSet
});
var shallowReadonlyHandlers = /* @__PURE__ */ shared.extend({}, readonlyHandlers, {
get: shallowReadonlyGet
});
var toReactive = (value) => shared.isObject(value) ? reactive3(value) : value;
var toReadonly = (value) => shared.isObject(value) ? readonly(value) : value;
var toShallow = (value) => value;
var getProto = (v) => Reflect.getPrototypeOf(v);
function get$1(target, key, isReadonly2 = false, isShallow = false) {
target = target["__v_raw"];
const rawTarget = toRaw2(target);
const rawKey = toRaw2(key);
if (key !== rawKey) {
!isReadonly2 && track2(rawTarget, "get", key);
}
!isReadonly2 && track2(rawTarget, "get", rawKey);
const { has: has2 } = getProto(rawTarget);
const wrap = isShallow ? toShallow : isReadonly2 ? toReadonly : toReactive;
if (has2.call(rawTarget, key)) {
return wrap(target.get(key));
} else if (has2.call(rawTarget, rawKey)) {
return wrap(target.get(rawKey));
} else if (target !== rawTarget) {
target.get(key);
}
}
function has$1(key, isReadonly2 = false) {
const target = this["__v_raw"];
const rawTarget = toRaw2(target);
const rawKey = toRaw2(key);
if (key !== rawKey) {
!isReadonly2 && track2(rawTarget, "has", key);
}
!isReadonly2 && track2(rawTarget, "has", rawKey);
return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);
}
function size(target, isReadonly2 = false) {
target = target["__v_raw"];
!isReadonly2 && track2(toRaw2(target), "iterate", ITERATE_KEY);
return Reflect.get(target, "size", target);
}
function add(value) {
value = toRaw2(value);
const target = toRaw2(this);
const proto = getProto(target);
const hadKey = proto.has.call(target, value);
if (!hadKey) {
target.add(value);
trigger2(target, "add", value, value);
}
return this;
}
function set$1(key, value) {
value = toRaw2(value);
const target = toRaw2(this);
const { has: has2, get: get3 } = getProto(target);
let hadKey = has2.call(target, key);
if (!hadKey) {
key = toRaw2(key);
hadKey = has2.call(target, key);
} else {
checkIdentityKeys(target, has2, key);
}
const oldValue = get3.call(target, key);
target.set(key, value);
if (!hadKey) {
trigger2(target, "add", key, value);
} else if (shared.hasChanged(value, oldValue)) {
trigger2(target, "set", key, value, oldValue);
}
return this;
}
function deleteEntry(key) {
const target = toRaw2(this);
const { has: has2, get: get3 } = getProto(target);
let hadKey = has2.call(target, key);
if (!hadKey) {
key = toRaw2(key);
hadKey = has2.call(target, key);
} else {
checkIdentityKeys(target, has2, key);
}
const oldValue = get3 ? get3.call(target, key) : void 0;
const result = target.delete(key);
if (hadKey) {
trigger2(target, "delete", key, void 0, oldValue);
}
return result;
}
function clear() {
const target = toRaw2(this);
const hadItems = target.size !== 0;
const oldTarget = shared.isMap(target) ? new Map(target) : new Set(target);
const result = target.clear();
if (hadItems) {
trigger2(target, "clear", void 0, void 0, oldTarget);
}
return result;
}
function createForEach(isReadonly2, isShallow) {
return function forEach(callback, thisArg) {
const observed = this;
const target = observed["__v_raw"];
const rawTarget = toRaw2(target);
const wrap = isShallow ? toShallow : isReadonly2 ? toReadonly : toReactive;
!isReadonly2 && track2(rawTarget, "iterate", ITERATE_KEY);
return target.forEach((value, key) => {
return callback.call(thisArg, wrap(value), wrap(key), observed);
});
};
}
function createIterableMethod(method, isReadonly2, isShallow) {
return function(...args) {
const target = this["__v_raw"];
const rawTarget = toRaw2(target);
const targetIsMap = shared.isMap(rawTarget);
const isPair = method === "entries" || method === Symbol.iterator && targetIsMap;
const isKeyOnly = method === "keys" && targetIsMap;
const innerIterator = target[method](...args);
const wrap = isShallow ? toShallow : isReadonly2 ? toReadonly : toReactive;
!isReadonly2 && track2(rawTarget, "iterate", isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);
return {
next() {
const { value, done } = innerIterator.next();
return done ? { value, done } : {
value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),
done
};
},
[Symbol.iterator]() {
return this;
}
};
};
}
function createReadonlyMethod(type) {
return function(...args) {
{
const key = args[0] ? `on key "${args[0]}" ` : ``;
console.warn(`${shared.capitalize(type)} operation ${key}failed: target is readonly.`, toRaw2(this));
}
return type === "delete" ? false : this;
};
}
function createInstrumentations() {
const mutableInstrumentations2 = {
get(key) {
return get$1(this, key);
},
get size() {
return size(this);
},
has: has$1,
add,
set: set$1,
delete: deleteEntry,
clear,
forEach: createForEach(false, false)
};
const shallowInstrumentations2 = {
get(key) {
return get$1(this, key, false, true);
},
get size() {
return size(this);
},
has: has$1,
add,
set: set$1,
delete: deleteEntry,
clear,
forEach: createForEach(false, true)
};
const readonlyInstrumentations2 = {
get(key) {
return get$1(this, key, true);
},
get size() {
return size(this, true);
},
has(key) {
return has$1.call(this, key, true);
},
add: createReadonlyMethod("add"),
set: createReadonlyMethod("set"),
delete: createReadonlyMethod("delete"),
clear: createReadonlyMethod("clear"),
forEach: createForEach(true, false)
};
const shallowReadonlyInstrumentations2 = {
get(key) {
return get$1(this, key, true, true);
},
get size() {
return size(this, true);
},
has(key) {
return has$1.call(this, key, true);
},
add: createReadonlyMethod("add"),
set: createReadonlyMethod("set"),
delete: createReadonlyMethod("delete"),
clear: createReadonlyMethod("clear"),
forEach: createForEach(true, true)
};
const iteratorMethods = ["keys", "values", "entries", Symbol.iterator];
iteratorMethods.forEach((method) => {
mutableInstrumentations2[method] = createIterableMethod(method, false, false);
readonlyInstrumentations2[method] = createIterableMethod(method, true, false);
shallowInstrumentations2[method] = createIterableMethod(method, false, true);
shallowReadonlyInstrumentations2[method] = createIterableMethod(method, true, true);
});
return [
mutableInstrumentations2,
readonlyInstrumentations2,
shallowInstrumentations2,
shallowReadonlyInstrumentations2
];
}
var [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* @__PURE__ */ createInstrumentations();
function createInstrumentationGetter(isReadonly2, shallow) {
const instrumentations = shallow ? isReadonly2 ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly2 ? readonlyInstrumentations : mutableInstrumentations;
return (target, key, receiver) => {
if (key === "__v_isReactive") {
return !isReadonly2;
} else if (key === "__v_isReadonly") {
return isReadonly2;
} else if (key === "__v_raw") {
return target;
}
return Reflect.get(shared.hasOwn(instrumentations, key) && key in target ? instrumentations : target, key, receiver);
};
}
var mutableCollectionHandlers = {
get: /* @__PURE__ */ createInstrumentationGetter(false, false)
};
var shallowCollectionHandlers = {
get: /* @__PURE__ */ createInstrumentationGetter(false, true)
};
var readonlyCollectionHandlers = {
get: /* @__PURE__ */ createInstrumentationGetter(true, false)
};
var shallowReadonlyCollectionHandlers = {
get: /* @__PURE__ */ createInstrumentationGetter(true, true)
};
function checkIdentityKeys(target, has2, key) {
const rawKey = toRaw2(key);
if (rawKey !== key && has2.call(target, rawKey)) {
const type = shared.toRawType(target);
console.warn(`Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`);
}
}
var reactiveMap = /* @__PURE__ */ new WeakMap();
var shallowReactiveMap = /* @__PURE__ */ new WeakMap();
var readonlyMap = /* @__PURE__ */ new WeakMap();
var shallowReadonlyMap = /* @__PURE__ */ new WeakMap();
function targetTypeMap(rawType) {
switch (rawType) {
case "Object":
case "Array":
return 1;
case "Map":
case "Set":
case "WeakMap":
case "WeakSet":
return 2;
default:
return 0;
}
}
function getTargetType(value) {
return value["__v_skip"] || !Object.isExtensible(value) ? 0 : targetTypeMap(shared.toRawType(value));
}
function reactive3(target) {
if (target && target["__v_isReadonly"]) {
return target;
}
return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);
}
function shallowReactive(target) {
return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap);
}
function readonly(target) {
return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);
}
function shallowReadonly(target) {
return createReactiveObject(target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap);
}
function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {
if (!shared.isObject(target)) {
{
console.warn(`value cannot be made reactive: ${String(target)}`);
}
return target;
}
if (target["__v_raw"] && !(isReadonly2 && target["__v_isReactive"])) {
return target;
}
const existingProxy = proxyMap.get(target);
if (existingProxy) {
return existingProxy;
}
const targetType = getTargetType(target);
if (targetType === 0) {
return target;
}
const proxy = new Proxy(target, targetType === 2 ? collectionHandlers : baseHandlers);
proxyMap.set(target, proxy);
return proxy;
}
function isReactive2(value) {
if (isReadonly(value)) {
return isReactive2(value["__v_raw"]);
}
return !!(value && value["__v_isReactive"]);
}
function isReadonly(value) {
return !!(value && value["__v_isReadonly"]);
}
function isProxy(value) {
return isReactive2(value) || isReadonly(value);
}
function toRaw2(observed) {
return observed && toRaw2(observed["__v_raw"]) || observed;
}
function markRaw(value) {
shared.def(value, "__v_skip", true);
return value;
}
var convert = (val) => shared.isObject(val) ? reactive3(val) : val;
function isRef(r) {
return Boolean(r && r.__v_isRef === true);
}
function ref(value) {
return createRef(value);
}
function shallowRef(value) {
return createRef(value, true);
}
var RefImpl = class {
constructor(value, _shallow = false) {
this._shallow = _shallow;
this.__v_isRef = true;
this._rawValue = _shallow ? value : toRaw2(value);
this._value = _shallow ? value : convert(value);
}
get value() {
track2(toRaw2(this), "get", "value");
return this._value;
}
set value(newVal) {
newVal = this._shallow ? newVal : toRaw2(newVal);
if (shared.hasChanged(newVal, this._rawValue)) {
this._rawValue = newVal;
this._value = this._shallow ? newVal : convert(newVal);
trigger2(toRaw2(this), "set", "value", newVal);
}
}
};
function createRef(rawValue, shallow = false) {
if (isRef(rawValue)) {
return rawValue;
}
return new RefImpl(rawValue, shallow);
}
function triggerRef(ref2) {
trigger2(toRaw2(ref2), "set", "value", ref2.value);
}
function unref(ref2) {
return isRef(ref2) ? ref2.value : ref2;
}
var shallowUnwrapHandlers = {
get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),
set: (target, key, value, receiver) => {
const oldValue = target[key];
if (isRef(oldValue) && !isRef(value)) {
oldValue.value = value;
return true;
} else {
return Reflect.set(target, key, value, receiver);
}
}
};
function proxyRefs(objectWithRefs) {
return isReactive2(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);
}
var CustomRefImpl = class {
constructor(factory) {
this.__v_isRef = true;
const { get: get3, set: set3 } = factory(() => track2(this, "get", "value"), () => trigger2(this, "set", "value"));
this._get = get3;
this._set = set3;
}
get value() {
return this._get();
}
set value(newVal) {
this._set(newVal);
}
};
function customRef(factory) {
return new CustomRefImpl(factory);
}
function toRefs(object) {
if (!isProxy(object)) {
console.warn(`toRefs() expects a reactive object but received a plain one.`);
}
const ret = shared.isArray(object) ? new Array(object.length) : {};
for (const key in object) {
ret[key] = toRef(object, key);
}
return ret;
}
var ObjectRefImpl = class {
constructor(_object, _key) {
this._object = _object;
this._key = _key;
this.__v_isRef = true;
}
get value() {
return this._object[this._key];
}
set value(newVal) {
this._object[this._key] = newVal;
}
};
function toRef(object, key) {
return isRef(object[key]) ? object[key] : new ObjectRefImpl(object, key);
}
var ComputedRefImpl = class {
constructor(getter, _setter, isReadonly2) {
this._setter = _setter;
this._dirty = true;
this.__v_isRef = true;
this.effect = effect3(getter, {
lazy: true,
scheduler: () => {
if (!this._dirty) {
this._dirty = true;
trigger2(toRaw2(this), "set", "value");
}
}
});
this["__v_isReadonly"] = isReadonly2;
}
get value() {
const self2 = toRaw2(this);
if (self2._dirty) {
self2._value = this.effect();
self2._dirty = false;
}
track2(self2, "get", "value");
return self2._value;
}
set value(newValue) {
this._setter(newValue);
}
};
function computed(getterOrOptions) {
let getter;
let setter;
if (shared.isFunction(getterOrOptions)) {
getter = getterOrOptions;
setter = () => {
console.warn("Write operation failed: computed value is readonly");
};
} else {
getter = getterOrOptions.get;
setter = getterOrOptions.set;
}
return new ComputedRefImpl(getter, setter, shared.isFunction(getterOrOptions) || !getterOrOptions.set);
}
exports2.ITERATE_KEY = ITERATE_KEY;
exports2.computed = computed;
exports2.customRef = customRef;
exports2.effect = effect3;
exports2.enableTracking = enableTracking;
exports2.isProxy = isProxy;
exports2.isReactive = isReactive2;
exports2.isReadonly = isReadonly;
exports2.isRef = isRef;
exports2.markRaw = markRaw;
exports2.pauseTracking = pauseTracking;
exports2.proxyRefs = proxyRefs;
exports2.reactive = reactive3;
exports2.readonly = readonly;
exports2.ref = ref;
exports2.resetTracking = resetTracking;
exports2.shallowReactive = shallowReactive;
exports2.shallowReadonly = shallowReadonly;
exports2.shallowRef = shallowRef;
exports2.stop = stop2;
exports2.toRaw = toRaw2;
exports2.toRef = toRef;
exports2.toRefs = toRefs;
exports2.track = track2;
exports2.trigger = trigger2;
exports2.triggerRef = triggerRef;
exports2.unref = unref;
}
});
var require_reactivity = __commonJS2({
"node_modules/@vue/reactivity/index.js"(exports2, module2) {
"use strict";
if (false) {
module2.exports = null;
} else {
module2.exports = require_reactivity_cjs();
}
}
});
var module_exports = {};
__export(module_exports, {
Alpine: () => src_default,
default: () => module_default
});
module.exports = __toCommonJS(module_exports);
var flushPending = false;
var flushing = false;
var queue = [];
var lastFlushedIndex = -1;
function scheduler(callback) {
queueJob(callback);
}
function queueJob(job) {
if (!queue.includes(job))
queue.push(job);
queueFlush();
}
function dequeueJob(job) {
let index = queue.indexOf(job);
if (index !== -1 && index > lastFlushedIndex)
queue.splice(index, 1);
}
function queueFlush() {
if (!flushing && !flushPending) {
flushPending = true;
queueMicrotask(flushJobs);
}
}
function flushJobs() {
flushPending = false;
flushing = true;
for (let i = 0; i < queue.length; i++) {
queue[i]();
lastFlushedIndex = i;
}
queue.length = 0;
lastFlushedIndex = -1;
flushing = false;
}
var reactive;
var effect;
var release;
var raw;
var shouldSchedule = true;
function disableEffectScheduling(callback) {
shouldSchedule = false;
callback();
shouldSchedule = true;
}
function setReactivityEngine(engine) {
reactive = engine.reactive;
release = engine.release;
effect = (callback) => engine.effect(callback, { scheduler: (task) => {
if (shouldSchedule) {
scheduler(task);
} else {
task();
}
} });
raw = engine.raw;
}
function overrideEffect(override) {
effect = override;
}
function elementBoundEffect(el) {
let cleanup = () => {
};
let wrappedEffect = (callback) => {
let effectReference = effect(callback);
if (!el._x_effects) {
el._x_effects = /* @__PURE__ */ new Set();
el._x_runEffects = () => {
el._x_effects.forEach((i) => i());
};
}
el._x_effects.add(effectReference);
cleanup = () => {
if (effectReference === void 0)
return;
el._x_effects.delete(effectReference);
release(effectReference);
};
return effectReference;
};
return [wrappedEffect, () => {
cleanup();
}];
}
function watch(getter, callback) {
let firstTime = true;
let oldValue;
let effectReference = effect(() => {
let value = getter();
JSON.stringify(value);
if (!firstTime) {
queueMicrotask(() => {
callback(value, oldValue);
oldValue = value;
});
} else {
oldValue = value;
}
firstTime = false;
});
return () => release(effectReference);
}
var onAttributeAddeds = [];
var onElRemoveds = [];
var onElAddeds = [];
function onElAdded(callback) {
onElAddeds.push(callback);
}
function onElRemoved(el, callback) {
if (typeof callback === "function") {
if (!el._x_cleanups)
el._x_cleanups = [];
el._x_cleanups.push(callback);
} else {
callback = el;
onElRemoveds.push(callback);
}
}
function onAttributesAdded(callback) {
onAttributeAddeds.push(callback);
}
function onAttributeRemoved(el, name, callback) {
if (!el._x_attributeCleanups)
el._x_attributeCleanups = {};
if (!el._x_attributeCleanups[name])
el._x_attributeCleanups[name] = [];
el._x_attributeCleanups[name].push(callback);
}
function cleanupAttributes(el, names) {
if (!el._x_attributeCleanups)
return;
Object.entries(el._x_attributeCleanups).forEach(([name, value]) => {
if (names === void 0 || names.includes(name)) {
value.forEach((i) => i());
delete el._x_attributeCleanups[name];
}
});
}
function cleanupElement(el) {
var _a, _b;
(_a = el._x_effects) == null ? void 0 : _a.forEach(dequeueJob);
while ((_b = el._x_cleanups) == null ? void 0 : _b.length)
el._x_cleanups.pop()();
}
var observer = new MutationObserver(onMutate);
var currentlyObserving = false;
function startObservingMutations() {
observer.observe(document, { subtree: true, childList: true, attributes: true, attributeOldValue: true });
currentlyObserving = true;
}
function stopObservingMutations() {
flushObserver();
observer.disconnect();
currentlyObserving = false;
}
var queuedMutations = [];
function flushObserver() {
let records = observer.takeRecords();
queuedMutations.push(() => records.length > 0 && onMutate(records));
let queueLengthWhenTriggered = queuedMutations.length;
queueMicrotask(() => {
if (queuedMutations.length === queueLengthWhenTriggered) {
while (queuedMutations.length > 0)
queuedMutations.shift()();
}
});
}
function mutateDom(callback) {
if (!currentlyObserving)
return callback();
stopObservingMutations();
let result = callback();
startObservingMutations();
return result;
}
var isCollecting = false;
var deferredMutations = [];
function deferMutations() {
isCollecting = true;
}
function flushAndStopDeferringMutations() {
isCollecting = false;
onMutate(deferredMutations);
deferredMutations = [];
}
function onMutate(mutations) {
if (isCollecting) {
deferredMutations = deferredMutations.concat(mutations);
return;
}
let addedNodes = /* @__PURE__ */ new Set();
let removedNodes = /* @__PURE__ */ new Set();
let addedAttributes = /* @__PURE__ */ new Map();
let removedAttributes = /* @__PURE__ */ new Map();
for (let i = 0; i < mutations.length; i++) {
if (mutations[i].target._x_ignoreMutationObserver)
continue;
if (mutations[i].type === "childList") {
mutations[i].addedNodes.forEach((node) => node.nodeType === 1 && addedNodes.add(node));
mutations[i].removedNodes.forEach((node) => node.nodeType === 1 && removedNodes.add(node));
}
if (mutations[i].type === "attributes") {
let el = mutations[i].target;
let name = mutations[i].attributeName;
let oldValue = mutations[i].oldValue;
let add = () => {
if (!addedAttributes.has(el))
addedAttributes.set(el, []);
addedAttributes.get(el).push({ name, value: el.getAttribute(name) });
};
let remove = () => {
if (!removedAttributes.has(el))
removedAttributes.set(el, []);
removedAttributes.get(el).push(name);
};
if (el.hasAttribute(name) && oldValue === null) {
add();
} else if (el.hasAttribute(name)) {
remove();
add();
} else {
remove();
}
}
}
removedAttributes.forEach((attrs, el) => {
cleanupAttributes(el, attrs);
});
addedAttributes.forEach((attrs, el) => {
onAttributeAddeds.forEach((i) => i(el, attrs));
});
for (let node of removedNodes) {
if (addedNodes.has(node))
continue;
onElRemoveds.forEach((i) => i(node));
}
addedNodes.forEach((node) => {
node._x_ignoreSelf = true;
node._x_ignore = true;
});
for (let node of addedNodes) {
if (removedNodes.has(node))
continue;
if (!node.isConnected)
continue;
delete node._x_ignoreSelf;
delete node._x_ignore;
onElAddeds.forEach((i) => i(node));
node._x_ignore = true;
node._x_ignoreSelf = true;
}
addedNodes.forEach((node) => {
delete node._x_ignoreSelf;
delete node._x_ignore;
});
addedNodes = null;
removedNodes = null;
addedAttributes = null;
removedAttributes = null;
}
function scope(node) {
return mergeProxies(closestDataStack(node));
}
function addScopeToNode(node, data2, referenceNode) {
node._x_dataStack = [data2, ...closestDataStack(referenceNode || node)];
return () => {
node._x_dataStack = node._x_dataStack.filter((i) => i !== data2);
};
}
function closestDataStack(node) {
if (node._x_dataStack)
return node._x_dataStack;
if (typeof ShadowRoot === "function" && node instanceof ShadowRoot) {
return closestDataStack(node.host);
}
if (!node.parentNode) {
return [];
}
return closestDataStack(node.parentNode);
}
function mergeProxies(objects) {
return new Proxy({ objects }, mergeProxyTrap);
}
var mergeProxyTrap = {
ownKeys({ objects }) {
return Array.from(new Set(objects.flatMap((i) => Object.keys(i))));
},
has({ objects }, name) {
if (name == Symbol.unscopables)
return false;
return objects.some((obj) => Object.prototype.hasOwnProperty.call(obj, name) || Reflect.has(obj, name));
},
get({ objects }, name, thisProxy) {
if (name == "toJSON")
return collapseProxies;
return Reflect.get(objects.find((obj) => Reflect.has(obj, name)) || {}, name, thisProxy);
},
set({ objects }, name, value, thisProxy) {
const target = objects.find((obj) => Object.prototype.hasOwnProperty.call(obj, name)) || objects[objects.length - 1];
const descriptor = Object.getOwnPropertyDescriptor(target, name);
if ((descriptor == null ? void 0 : descriptor.set) && (descriptor == null ? void 0 : descriptor.get))
return descriptor.set.call(thisProxy, value) || true;
return Reflect.set(target, name, value);
}
};
function collapseProxies() {
let keys = Reflect.ownKeys(this);
return keys.reduce((acc, key) => {
acc[key] = Reflect.get(this, key);
return acc;
}, {});
}
function initInterceptors(data2) {
let isObject2 = (val) => typeof val === "object" && !Array.isArray(val) && val !== null;
let recurse = (obj, basePath = "") => {
Object.entries(Object.getOwnPropertyDescriptors(obj)).forEach(([key, { value, enumerable }]) => {
if (enumerable === false || value === void 0)
return;
if (typeof value === "object" && value !== null && value.__v_skip)
return;
let path = basePath === "" ? key : `${basePath}.${key}`;
if (typeof value === "object" && value !== null && value._x_interceptor) {
obj[key] = value.initialize(data2, path, key);
} else {
if (isObject2(value) && value !== obj && !(value instanceof Element)) {
recurse(value, path);
}
}
});
};
return recurse(data2);
}
function interceptor(callback, mutateObj = () => {
}) {
let obj = {
initialValue: void 0,
_x_interceptor: true,
initialize(data2, path, key) {
return callback(this.initialValue, () => get(data2, path), (value) => set(data2, path, value), path, key);
}
};
mutateObj(obj);
return (initialValue) => {
if (typeof initialValue === "object" && initialValue !== null && initialValue._x_interceptor) {
let initialize = obj.initialize.bind(obj);
obj.initialize = (data2, path, key) => {
let innerValue = initialValue.initialize(data2, path, key);
obj.initialValue = innerValue;
return initialize(data2, path, key);
};
} else {
obj.initialValue = initialValue;
}
return obj;
};
}
function get(obj, path) {
return path.split(".").reduce((carry, segment) => carry[segment], obj);
}
function set(obj, path, value) {
if (typeof path === "string")
path = path.split(".");
if (path.length === 1)
obj[path[0]] = value;
else if (path.length === 0)
throw error;
else {
if (obj[path[0]])
return set(obj[path[0]], path.slice(1), value);
else {
obj[path[0]] = {};
return set(obj[path[0]], path.slice(1), value);
}
}
}
var magics = {};
function magic(name, callback) {
magics[name] = callback;
}
function injectMagics(obj, el) {
let memoizedUtilities = getUtilities(el);
Object.entries(magics).forEach(([name, callback]) => {
Object.defineProperty(obj, `$${name}`, {
get() {
return callback(el, memoizedUtilities);
},
enumerable: false
});
});
return obj;
}
function getUtilities(el) {
let [utilities, cleanup] = getElementBoundUtilities(el);
let utils = { interceptor, ...utilities };
onElRemoved(el, cleanup);
return utils;
}
function tryCatch(el, expression, callback, ...args) {
try {
return callback(...args);
} catch (e) {
handleError(e, el, expression);
}
}
function handleError(error2, el, expression = void 0) {
error2 = Object.assign(error2 != null ? error2 : { message: "No error message given." }, { el, expression });
console.warn(`Alpine Expression Error: ${error2.message}
${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
setTimeout(() => {
throw error2;
}, 0);
}
var shouldAutoEvaluateFunctions = true;
function dontAutoEvaluateFunctions(callback) {
let cache = shouldAutoEvaluateFunctions;
shouldAutoEvaluateFunctions = false;
let result = callback();
shouldAutoEvaluateFunctions = cache;
return result;
}
function evaluate(el, expression, extras = {}) {
let result;
evaluateLater(el, expression)((value) => result = value, extras);
return result;
}
function evaluateLater(...args) {
return theEvaluatorFunction(...args);
}
var theEvaluatorFunction = normalEvaluator;
function setEvaluator(newEvaluator) {
theEvaluatorFunction = newEvaluator;
}
function normalEvaluator(el, expression) {
let overriddenMagics = {};
injectMagics(overriddenMagics, el);
let dataStack = [overriddenMagics, ...closestDataStack(el)];
let evaluator = typeof expression === "function" ? generateEvaluatorFromFunction(dataStack, expression) : generateEvaluatorFromString(dataStack, expression, el);
return tryCatch.bind(null, el, expression, evaluator);
}
function generateEvaluatorFromFunction(dataStack, func) {
return (receiver = () => {
}, { scope: scope2 = {}, params = [] } = {}) => {
let result = func.apply(mergeProxies([scope2, ...dataStack]), params);
runIfTypeOfFunction(receiver, result);
};
}
var evaluatorMemo = {};
function generateFunctionFromString(expression, el) {
if (evaluatorMemo[expression]) {
return evaluatorMemo[expression];
}
let AsyncFunction = Object.getPrototypeOf(async function() {
}).constructor;
let rightSideSafeExpression = /^[\n\s]*if.*\(.*\)/.test(expression.trim()) || /^(let|const)\s/.test(expression.trim()) ? `(async()=>{ ${expression} })()` : expression;
const safeAsyncFunction = () => {
try {
let func2 = new AsyncFunction(["__self", "scope"], `with (scope) { __self.result = ${rightSideSafeExpression} }; __self.finished = true; return __self.result;`);
Object.defineProperty(func2, "name", {
value: `[Alpine] ${expression}`
});
return func2;
} catch (error2) {
handleError(error2, el, expression);
return Promise.resolve();
}
};
let func = safeAsyncFunction();
evaluatorMemo[expression] = func;
return func;
}
function generateEvaluatorFromString(dataStack, expression, el) {
let func = generateFunctionFromString(expression, el);
return (receiver = () => {
}, { scope: scope2 = {}, params = [] } = {}) => {
func.result = void 0;
func.finished = false;
let completeScope = mergeProxies([scope2, ...dataStack]);
if (typeof func === "function") {
let promise = func(func, completeScope).catch((error2) => handleError(error2, el, expression));
if (func.finished) {
runIfTypeOfFunction(receiver, func.result, completeScope, params, el);
func.result = void 0;
} else {
promise.then((result) => {
runIfTypeOfFunction(receiver, result, completeScope, params, el);
}).catch((error2) => handleError(error2, el, expression)).finally(() => func.result = void 0);
}
}
};
}
function runIfTypeOfFunction(receiver, value, scope2, params, el) {
if (shouldAutoEvaluateFunctions && typeof value === "function") {
let result = value.apply(scope2, params);
if (result instanceof Promise) {
result.then((i) => runIfTypeOfFunction(receiver, i, scope2, params)).catch((error2) => handleError(error2, el, value));
} else {
receiver(result);
}
} else if (typeof value === "object" && value instanceof Promise) {
value.then((i) => receiver(i));
} else {
receiver(value);
}
}
var prefixAsString = "x-";
function prefix(subject = "") {
return prefixAsString + subject;
}
function setPrefix(newPrefix) {
prefixAsString = newPrefix;
}
var directiveHandlers = {};
function directive2(name, callback) {
directiveHandlers[name] = callback;
return {
before(directive22) {
if (!directiveHandlers[directive22]) {
console.warn(String.raw`Cannot find directive \`${directive22}\`. \`${name}\` will use the default order of execution`);
return;
}
const pos = directiveOrder.indexOf(directive22);
directiveOrder.splice(pos >= 0 ? pos : directiveOrder.indexOf("DEFAULT"), 0, name);
}
};
}
function directiveExists(name) {
return Object.keys(directiveHandlers).includes(name);
}
function directives(el, attributes, originalAttributeOverride) {
attributes = Array.from(attributes);
if (el._x_virtualDirectives) {
let vAttributes = Object.entries(el._x_virtualDirectives).map(([name, value]) => ({ name, value }));
let staticAttributes = attributesOnly(vAttributes);
vAttributes = vAttributes.map((attribute) => {
if (staticAttributes.find((attr) => attr.name === attribute.name)) {
return {
name: `x-bind:${attribute.name}`,
value: `"${attribute.value}"`
};
}
return attribute;
});
attributes = attributes.concat(vAttributes);
}
let transformedAttributeMap = {};
let directives2 = attributes.map(toTransformedAttributes((newName, oldName) => transformedAttributeMap[newName] = oldName)).filter(outNonAlpineAttributes).map(toParsedDirectives(transformedAttributeMap, originalAttributeOverride)).sort(byPriority);
return directives2.map((directive22) => {
return getDirectiveHandler(el, directive22);
});
}
function attributesOnly(attributes) {
return Array.from(attributes).map(toTransformedAttributes()).filter((attr) => !outNonAlpineAttributes(attr));
}
var isDeferringHandlers = false;
var directiveHandlerStacks = /* @__PURE__ */ new Map();
var currentHandlerStackKey = Symbol();
function deferHandlingDirectives(callback) {
isDeferringHandlers = true;
let key = Symbol();
currentHandlerStackKey = key;
directiveHandlerStacks.set(key, []);
let flushHandlers = () => {
while (directiveHandlerStacks.get(key).length)
directiveHandlerStacks.get(key).shift()();
directiveHandlerStacks.delete(key);
};
let stopDeferring = () => {
isDeferringHandlers = false;
flushHandlers();
};
callback(flushHandlers);
stopDeferring();
}
function getElementBoundUtilities(el) {
let cleanups2 = [];
let cleanup = (callback) => cleanups2.push(callback);
let [effect3, cleanupEffect] = elementBoundEffect(el);
cleanups2.push(cleanupEffect);
let utilities = {
Alpine: alpine_default,
effect: effect3,
cleanup,
evaluateLater: evaluateLater.bind(evaluateLater, el),
evaluate: evaluate.bind(evaluate, el)
};
let doCleanup = () => cleanups2.forEach((i) => i());
return [utilities, doCleanup];
}
function getDirectiveHandler(el, directive22) {
let noop = () => {
};
let handler4 = directiveHandlers[directive22.type] || noop;
let [utilities, cleanup] = getElementBoundUtilities(el);
onAttributeRemoved(el, directive22.original, cleanup);
let fullHandler = () => {
if (el._x_ignore || el._x_ignoreSelf)
return;
handler4.inline && handler4.inline(el, directive22, utilities);
handler4 = handler4.bind(handler4, el, directive22, utilities);
isDeferringHandlers ? directiveHandlerStacks.get(currentHandlerStackKey).push(handler4) : handler4();
};
fullHandler.runCleanups = cleanup;
return fullHandler;
}
var startingWith = (subject, replacement) => ({ name, value }) => {
if (name.startsWith(subject))
name = name.replace(subject, replacement);
return { name, value };
};
var into = (i) => i;
function toTransformedAttributes(callback = () => {
}) {
return ({ name, value }) => {
let { name: newName, value: newValue } = attributeTransformers.reduce((carry, transform) => {
return transform(carry);
}, { name, value });
if (newName !== name)
callback(newName, name);
return { name: newName, value: newValue };
};
}
var attributeTransformers = [];
function mapAttributes(callback) {
attributeTransformers.push(callback);
}
function outNonAlpineAttributes({ name }) {
return alpineAttributeRegex().test(name);
}
var alpineAttributeRegex = () => new RegExp(`^${prefixAsString}([^:^.]+)\\b`);
function toParsedDirectives(transformedAttributeMap, originalAttributeOverride) {
return ({ name, value }) => {
let typeMatch = name.match(alpineAttributeRegex());
let valueMatch = name.match(/:([a-zA-Z0-9\-_:]+)/);
let modifiers = name.match(/\.[^.\]]+(?=[^\]]*$)/g) || [];
let original = originalAttributeOverride || transformedAttributeMap[name] || name;
return {
type: typeMatch ? typeMatch[1] : null,
value: valueMatch ? valueMatch[1] : null,
modifiers: modifiers.map((i) => i.replace(".", "")),
expression: value,
original
};
};
}
var DEFAULT = "DEFAULT";
var directiveOrder = [
"ignore",
"ref",
"data",
"id",
"anchor",
"bind",
"init",
"for",
"model",
"modelable",
"transition",
"show",
"if",
DEFAULT,
"teleport"
];
function byPriority(a, b) {
let typeA = directiveOrder.indexOf(a.type) === -1 ? DEFAULT : a.type;
let typeB = directiveOrder.indexOf(b.type) === -1 ? DEFAULT : b.type;
return directiveOrder.indexOf(typeA) - directiveOrder.indexOf(typeB);
}
function dispatch3(el, name, detail = {}) {
el.dispatchEvent(new CustomEvent(name, {
detail,
bubbles: true,
composed: true,
cancelable: true
}));
}
function walk(el, callback) {
if (typeof ShadowRoot === "function" && el instanceof ShadowRoot) {
Array.from(el.children).forEach((el2) => walk(el2, callback));
return;
}
let skip = false;
callback(el, () => skip = true);
if (skip)
return;
let node = el.firstElementChild;
while (node) {
walk(node, callback, false);
node = node.nextElementSibling;
}
}
function warn(message, ...args) {
console.warn(`Alpine Warning: ${message}`, ...args);
}
var started = false;
function start2() {
if (started)
warn("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems.");
started = true;
if (!document.body)
warn("Unable to initialize. Trying to load Alpine before `<body>` is available. Did you forget to add `defer` in Alpine's `<script>` tag?");
dispatch3(document, "alpine:init");
dispatch3(document, "alpine:initializing");
startObservingMutations();
onElAdded((el) => initTree(el, walk));
onElRemoved((el) => destroyTree(el));
onAttributesAdded((el, attrs) => {
directives(el, attrs).forEach((handle) => handle());
});
let outNestedComponents = (el) => !closestRoot(el.parentElement, true);
Array.from(document.querySelectorAll(allSelectors().join(","))).filter(outNestedComponents).forEach((el) => {
initTree(el);
});
dispatch3(document, "alpine:initialized");
setTimeout(() => {
warnAboutMissingPlugins();
});
}
var rootSelectorCallbacks = [];
var initSelectorCallbacks = [];
function rootSelectors() {
return rootSelectorCallbacks.map((fn) => fn());
}
function allSelectors() {
return rootSelectorCallbacks.concat(initSelectorCallbacks).map((fn) => fn());
}
function addRootSelector(selectorCallback) {
rootSelectorCallbacks.push(selectorCallback);
}
function addInitSelector(selectorCallback) {
initSelectorCallbacks.push(selectorCallback);
}
function closestRoot(el, includeInitSelectors = false) {
return findClosest(el, (element) => {
const selectors = includeInitSelectors ? allSelectors() : rootSelectors();
if (selectors.some((selector) => element.matches(selector)))
return true;
});
}
function findClosest(el, callback) {
if (!el)
return;
if (callback(el))
return el;
if (el._x_teleportBack)
el = el._x_teleportBack;
if (!el.parentElement)
return;
return findClosest(el.parentElement, callback);
}
function isRoot(el) {
return rootSelectors().some((selector) => el.matches(selector));
}
var initInterceptors2 = [];
function interceptInit(callback) {
initInterceptors2.push(callback);
}
function initTree(el, walker = walk, intercept = () => {
}) {
deferHandlingDirectives(() => {
walker(el, (el2, skip) => {
intercept(el2, skip);
initInterceptors2.forEach((i) => i(el2, skip));
directives(el2, el2.attributes).forEach((handle) => handle());
el2._x_ignore && skip();
});
});
}
function destroyTree(root, walker = walk) {
walker(root, (el) => {
cleanupElement(el);
cleanupAttributes(el);
});
}
function warnAboutMissingPlugins() {
let pluginDirectives = [
["ui", "dialog", ["[x-dialog], [x-popover]"]],
["anchor", "anchor", ["[x-anchor]"]],
["sort", "sort", ["[x-sort]"]]
];
pluginDirectives.forEach(([plugin2, directive22, selectors]) => {
if (directiveExists(directive22))
return;
selectors.some((selector) => {
if (document.querySelector(selector)) {
warn(`found "${selector}", but missing ${plugin2} plugin`);
return true;
}
});
});
}
var tickStack = [];
var isHolding = false;
function nextTick(callback = () => {
}) {
queueMicrotask(() => {
isHolding || setTimeout(() => {
releaseNextTicks();
});
});
return new Promise((res) => {
tickStack.push(() => {
callback();
res();
});
});
}
function releaseNextTicks() {
isHolding = false;
while (tickStack.length)
tickStack.shift()();
}
function holdNextTicks() {
isHolding = true;
}
function setClasses(el, value) {
if (Array.isArray(value)) {
return setClassesFromString(el, value.join(" "));
} else if (typeof value === "object" && value !== null) {
return setClassesFromObject(el, value);
} else if (typeof value === "function") {
return setClasses(el, value());
}
return setClassesFromString(el, value);
}
function setClassesFromString(el, classString) {
let split = (classString2) => classString2.split(" ").filter(Boolean);
let missingClasses = (classString2) => classString2.split(" ").filter((i) => !el.classList.contains(i)).filter(Boolean);
let addClassesAndReturnUndo = (classes) => {
el.classList.add(...classes);
return () => {
el.classList.remove(...classes);
};
};
classString = classString === true ? classString = "" : classString || "";
return addClassesAndReturnUndo(missingClasses(classString));
}
function setClassesFromObject(el, classObject) {
let split = (classString) => classString.split(" ").filter(Boolean);
let forAdd = Object.entries(classObject).flatMap(([classString, bool]) => bool ? split(classString) : false).filter(Boolean);
let forRemove = Object.entries(classObject).flatMap(([classString, bool]) => !bool ? split(classString) : false).filter(Boolean);
let added = [];
let removed = [];
forRemove.forEach((i) => {
if (el.classList.contains(i)) {
el.classList.remove(i);
removed.push(i);
}
});
forAdd.forEach((i) => {
if (!el.classList.contains(i)) {
el.classList.add(i);
added.push(i);
}
});
return () => {
removed.forEach((i) => el.classList.add(i));
added.forEach((i) => el.classList.remove(i));
};
}
function setStyles(el, value) {
if (typeof value === "object" && value !== null) {
return setStylesFromObject(el, value);
}
return setStylesFromString(el, value);
}
function setStylesFromObject(el, value) {
let previousStyles = {};
Object.entries(value).forEach(([key, value2]) => {
previousStyles[key] = el.style[key];
if (!key.startsWith("--")) {
key = kebabCase(key);
}
el.style.setProperty(key, value2);
});
setTimeout(() => {
if (el.style.length === 0) {
el.removeAttribute("style");
}
});
return () => {
setStyles(el, previousStyles);
};
}
function setStylesFromString(el, value) {
let cache = el.getAttribute("style", value);
el.setAttribute("style", value);
return () => {
el.setAttribute("style", cache || "");
};
}
function kebabCase(subject) {
return subject.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
}
function once(callback, fallback2 = () => {
}) {
let called = false;
return function() {
if (!called) {
called = true;
callback.apply(this, arguments);
} else {
fallback2.apply(this, arguments);
}
};
}
directive2("transition", (el, { value, modifiers, expression }, { evaluate: evaluate2 }) => {
if (typeof expression === "function")
expression = evaluate2(expression);
if (expression === false)
return;
if (!expression || typeof expression === "boolean") {
registerTransitionsFromHelper(el, modifiers, value);
} else {
registerTransitionsFromClassString(el, expression, value);
}
});
function registerTransitionsFromClassString(el, classString, stage) {
registerTransitionObject(el, setClasses, "");
let directiveStorageMap = {
"enter": (classes) => {
el._x_transition.enter.during = classes;
},
"enter-start": (classes) => {
el._x_transition.enter.start = classes;
},
"enter-end": (classes) => {
el._x_transition.enter.end = classes;
},
"leave": (classes) => {
el._x_transition.leave.during = classes;
},
"leave-start": (classes) => {
el._x_transition.leave.start = classes;
},
"leave-end": (classes) => {
el._x_transition.leave.end = classes;
}
};
directiveStorageMap[stage](classString);
}
function registerTransitionsFromHelper(el, modifiers, stage) {
registerTransitionObject(el, setStyles);
let doesntSpecify = !modifiers.includes("in") && !modifiers.includes("out") && !stage;
let transitioningIn = doesntSpecify || modifiers.includes("in") || ["enter"].includes(stage);
let transitioningOut = doesntSpecify || modifiers.includes("out") || ["leave"].includes(stage);
if (modifiers.includes("in") && !doesntSpecify) {
modifiers = modifiers.filter((i, index) => index < modifiers.indexOf("out"));
}
if (modifiers.includes("out") && !doesntSpecify) {
modifiers = modifiers.filter((i, index) => index > modifiers.indexOf("out"));
}
let wantsAll = !modifiers.includes("opacity") && !modifiers.includes("scale");
let wantsOpacity = wantsAll || modifiers.includes("opacity");
let wantsScale = wantsAll || modifiers.includes("scale");
let opacityValue = wantsOpacity ? 0 : 1;
let scaleValue = wantsScale ? modifierValue(modifiers, "scale", 95) / 100 : 1;
let delay = modifierValue(modifiers, "delay", 0) / 1e3;
let origin = modifierValue(modifiers, "origin", "center");
let property = "opacity, transform";
let durationIn = modifierValue(modifiers, "duration", 150) / 1e3;
let durationOut = modifierValue(modifiers, "duration", 75) / 1e3;
let easing = `cubic-bezier(0.4, 0.0, 0.2, 1)`;
if (transitioningIn) {
el._x_transition.enter.during = {
transformOrigin: origin,
transitionDelay: `${delay}s`,
transitionProperty: property,
transitionDuration: `${durationIn}s`,
transitionTimingFunction: easing
};
el._x_transition.enter.start = {
opacity: opacityValue,
transform: `scale(${scaleValue})`
};
el._x_transition.enter.end = {
opacity: 1,
transform: `scale(1)`
};
}
if (transitioningOut) {
el._x_transition.leave.during = {
transformOrigin: origin,
transitionDelay: `${delay}s`,
transitionProperty: property,
transitionDuration: `${durationOut}s`,
transitionTimingFunction: easing
};
el._x_transition.leave.start = {
opacity: 1,
transform: `scale(1)`
};
el._x_transition.leave.end = {
opacity: opacityValue,
transform: `scale(${scaleValue})`
};
}
}
function registerTransitionObject(el, setFunction, defaultValue = {}) {
if (!el._x_transition)
el._x_transition = {
enter: { during: defaultValue, start: defaultValue, end: defaultValue },
leave: { during: defaultValue, start: defaultValue, end: defaultValue },
in(before = () => {
}, after = () => {
}) {
transition(el, setFunction, {
during: this.enter.during,
start: this.enter.start,
end: this.enter.end
}, before, after);
},
out(before = () => {
}, after = () => {
}) {
transition(el, setFunction, {
during: this.leave.during,
start: this.leave.start,
end: this.leave.end
}, before, after);
}
};
}
window.Element.prototype._x_toggleAndCascadeWithTransitions = function(el, value, show, hide) {
const nextTick2 = document.visibilityState === "visible" ? requestAnimationFrame : setTimeout;
let clickAwayCompatibleShow = () => nextTick2(show);
if (value) {
if (el._x_transition && (el._x_transition.enter || el._x_transition.leave)) {
el._x_transition.enter && (Object.entries(el._x_transition.enter.during).length || Object.entries(el._x_transition.enter.start).length || Object.entries(el._x_transition.enter.end).length) ? el._x_transition.in(show) : clickAwayCompatibleShow();
} else {
el._x_transition ? el._x_transition.in(show) : clickAwayCompatibleShow();
}
return;
}
el._x_hidePromise = el._x_transition ? new Promise((resolve, reject) => {
el._x_transition.out(() => {
}, () => resolve(hide));
el._x_transitioning && el._x_transitioning.beforeCancel(() => reject({ isFromCancelledTransition: true }));
}) : Promise.resolve(hide);
queueMicrotask(() => {
let closest = closestHide(el);
if (closest) {
if (!closest._x_hideChildren)
closest._x_hideChildren = [];
closest._x_hideChildren.push(el);
} else {
nextTick2(() => {
let hideAfterChildren = (el2) => {
let carry = Promise.all([
el2._x_hidePromise,
...(el2._x_hideChildren || []).map(hideAfterChildren)
]).then(([i]) => i == null ? void 0 : i());
delete el2._x_hidePromise;
delete el2._x_hideChildren;
return carry;
};
hideAfterChildren(el).catch((e) => {
if (!e.isFromCancelledTransition)
throw e;
});
});
}
});
};
function closestHide(el) {
let parent = el.parentNode;
if (!parent)
return;
return parent._x_hidePromise ? parent : closestHide(parent);
}
function transition(el, setFunction, { during, start: start22, end } = {}, before = () => {
}, after = () => {
}) {
if (el._x_transitioning)
el._x_transitioning.cancel();
if (Object.keys(during).length === 0 && Object.keys(start22).length === 0 && Object.keys(end).length === 0) {
before();
after();
return;
}
let undoStart, undoDuring, undoEnd;
performTransition(el, {
start() {
undoStart = setFunction(el, start22);
},
during() {
undoDuring = setFunction(el, during);
},
before,
end() {
undoStart();
undoEnd = setFunction(el, end);
},
after,
cleanup() {
undoDuring();
undoEnd();
}
});
}
function performTransition(el, stages) {
let interrupted, reachedBefore, reachedEnd;
let finish = once(() => {
mutateDom(() => {
interrupted = true;
if (!reachedBefore)
stages.before();
if (!reachedEnd) {
stages.end();
releaseNextTicks();
}
stages.after();
if (el.isConnected)
stages.cleanup();
delete el._x_transitioning;
});
});
el._x_transitioning = {
beforeCancels: [],
beforeCancel(callback) {
this.beforeCancels.push(callback);
},
cancel: once(function() {
while (this.beforeCancels.length) {
this.beforeCancels.shift()();
}
;
finish();
}),
finish
};
mutateDom(() => {
stages.start();
stages.during();
});
holdNextTicks();
requestAnimationFrame(() => {
if (interrupted)
return;
let duration = Number(getComputedStyle(el).transitionDuration.replace(/,.*/, "").replace("s", "")) * 1e3;
let delay = Number(getComputedStyle(el).transitionDelay.replace(/,.*/, "").replace("s", "")) * 1e3;
if (duration === 0)
duration = Number(getComputedStyle(el).animationDuration.replace("s", "")) * 1e3;
mutateDom(() => {
stages.before();
});
reachedBefore = true;
requestAnimationFrame(() => {
if (interrupted)
return;
mutateDom(() => {
stages.end();
});
releaseNextTicks();
setTimeout(el._x_transitioning.finish, duration + delay);
reachedEnd = true;
});
});
}
function modifierValue(modifiers, key, fallback2) {
if (modifiers.indexOf(key) === -1)
return fallback2;
const rawValue = modifiers[modifiers.indexOf(key) + 1];
if (!rawValue)
return fallback2;
if (key === "scale") {
if (isNaN(rawValue))
return fallback2;
}
if (key === "duration" || key === "delay") {
let match = rawValue.match(/([0-9]+)ms/);
if (match)
return match[1];
}
if (key === "origin") {
if (["top", "right", "left", "center", "bottom"].includes(modifiers[modifiers.indexOf(key) + 2])) {
return [rawValue, modifiers[modifiers.indexOf(key) + 2]].join(" ");
}
}
return rawValue;
}
var isCloning = false;
function skipDuringClone(callback, fallback2 = () => {
}) {
return (...args) => isCloning ? fallback2(...args) : callback(...args);
}
function onlyDuringClone(callback) {
return (...args) => isCloning && callback(...args);
}
var interceptors = [];
function interceptClone(callback) {
interceptors.push(callback);
}
function cloneNode(from, to) {
interceptors.forEach((i) => i(from, to));
isCloning = true;
dontRegisterReactiveSideEffects(() => {
initTree(to, (el, callback) => {
callback(el, () => {
});
});
});
isCloning = false;
}
var isCloningLegacy = false;
function clone(oldEl, newEl) {
if (!newEl._x_dataStack)
newEl._x_dataStack = oldEl._x_dataStack;
isCloning = true;
isCloningLegacy = true;
dontRegisterReactiveSideEffects(() => {
cloneTree(newEl);
});
isCloning = false;
isCloningLegacy = false;
}
function cloneTree(el) {
let hasRunThroughFirstEl = false;
let shallowWalker = (el2, callback) => {
walk(el2, (el3, skip) => {
if (hasRunThroughFirstEl && isRoot(el3))
return skip();
hasRunThroughFirstEl = true;
callback(el3, skip);
});
};
initTree(el, shallowWalker);
}
function dontRegisterReactiveSideEffects(callback) {
let cache = effect;
overrideEffect((callback2, el) => {
let storedEffect = cache(callback2);
release(storedEffect);
return () => {
};
});
callback();
overrideEffect(cache);
}
function bind(el, name, value, modifiers = []) {
if (!el._x_bindings)
el._x_bindings = reactive({});
el._x_bindings[name] = value;
name = modifiers.includes("camel") ? camelCase(name) : name;
switch (name) {
case "value":
bindInputValue(el, value);
break;
case "style":
bindStyles(el, value);
break;
case "class":
bindClasses(el, value);
break;
case "selected":
case "checked":
bindAttributeAndProperty(el, name, value);
break;
default:
bindAttribute(el, name, value);
break;
}
}
function bindInputValue(el, value) {
if (isRadio(el)) {
if (el.attributes.value === void 0) {
el.value = value;
}
if (window.fromModel) {
if (typeof value === "boolean") {
el.checked = safeParseBoolean(el.value) === value;
} else {
el.checked = checkedAttrLooseCompare(el.value, value);
}
}
} else if (isCheckbox(el)) {
if (Number.isInteger(value)) {
el.value = value;
} else if (!Array.isArray(value) && typeof value !== "boolean" && ![null, void 0].includes(value)) {
el.value = String(value);
} else {
if (Array.isArray(value)) {
el.checked = value.some((val) => checkedAttrLooseCompare(val, el.value));
} else {
el.checked = !!value;
}
}
} else if (el.tagName === "SELECT") {
updateSelect(el, value);
} else {
if (el.value === value)
return;
el.value = value === void 0 ? "" : value;
}
}
function bindClasses(el, value) {
if (el._x_undoAddedClasses)
el._x_undoAddedClasses();
el._x_undoAddedClasses = setClasses(el, value);
}
function bindStyles(el, value) {
if (el._x_undoAddedStyles)
el._x_undoAddedStyles();
el._x_undoAddedStyles = setStyles(el, value);
}
function bindAttributeAndProperty(el, name, value) {
bindAttribute(el, name, value);
setPropertyIfChanged(el, name, value);
}
function bindAttribute(el, name, value) {
if ([null, void 0, false].includes(value) && attributeShouldntBePreservedIfFalsy(name)) {
el.removeAttribute(name);
} else {
if (isBooleanAttr(name))
value = name;
setIfChanged(el, name, value);
}
}
function setIfChanged(el, attrName, value) {
if (el.getAttribute(attrName) != value) {
el.setAttribute(attrName, value);
}
}
function setPropertyIfChanged(el, propName, value) {
if (el[propName] !== value) {
el[propName] = value;
}
}
function updateSelect(el, value) {
const arrayWrappedValue = [].concat(value).map((value2) => {
return value2 + "";
});
Array.from(el.options).forEach((option) => {
option.selected = arrayWrappedValue.includes(option.value);
});
}
function camelCase(subject) {
return subject.toLowerCase().replace(/-(\w)/g, (match, char) => char.toUpperCase());
}
function checkedAttrLooseCompare(valueA, valueB) {
return valueA == valueB;
}
function safeParseBoolean(rawValue) {
if ([1, "1", "true", "on", "yes", true].includes(rawValue)) {
return true;
}
if ([0, "0", "false", "off", "no", false].includes(rawValue)) {
return false;
}
return rawValue ? Boolean(rawValue) : null;
}
var booleanAttributes = /* @__PURE__ */ new Set([
"allowfullscreen",
"async",
"autofocus",
"autoplay",
"checked",
"controls",
"default",
"defer",
"disabled",
"formnovalidate",
"inert",
"ismap",
"itemscope",
"loop",
"multiple",
"muted",
"nomodule",
"novalidate",
"open",
"playsinline",
"readonly",
"required",
"reversed",
"selected",
"shadowrootclonable",
"shadowrootdelegatesfocus",
"shadowrootserializable"
]);
function isBooleanAttr(attrName) {
return booleanAttributes.has(attrName);
}
function attributeShouldntBePreservedIfFalsy(name) {
return !["aria-pressed", "aria-checked", "aria-expanded", "aria-selected"].includes(name);
}
function getBinding(el, name, fallback2) {
if (el._x_bindings && el._x_bindings[name] !== void 0)
return el._x_bindings[name];
return getAttributeBinding(el, name, fallback2);
}
function extractProp(el, name, fallback2, extract = true) {
if (el._x_bindings && el._x_bindings[name] !== void 0)
return el._x_bindings[name];
if (el._x_inlineBindings && el._x_inlineBindings[name] !== void 0) {
let binding = el._x_inlineBindings[name];
binding.extract = extract;
return dontAutoEvaluateFunctions(() => {
return evaluate(el, binding.expression);
});
}
return getAttributeBinding(el, name, fallback2);
}
function getAttributeBinding(el, name, fallback2) {
let attr = el.getAttribute(name);
if (attr === null)
return typeof fallback2 === "function" ? fallback2() : fallback2;
if (attr === "")
return true;
if (isBooleanAttr(name)) {
return !![name, "true"].includes(attr);
}
return attr;
}
function isCheckbox(el) {
return el.type === "checkbox" || el.localName === "ui-checkbox" || el.localName === "ui-switch";
}
function isRadio(el) {
return el.type === "radio" || el.localName === "ui-radio";
}
function debounce2(func, wait) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
func.apply(context, args);
};
clearTimeout(timeout);
timeout = setTimeout(later, wait);
};
}
function throttle(func, limit) {
let inThrottle;
return function() {
let context = this, args = arguments;
if (!inThrottle) {
func.apply(context, args);
inThrottle = true;
setTimeout(() => inThrottle = false, limit);
}
};
}
function entangle({ get: outerGet, set: outerSet }, { get: innerGet, set: innerSet }) {
let firstRun = true;
let outerHash;
let innerHash;
let reference = effect(() => {
let outer = outerGet();
let inner = innerGet();
if (firstRun) {
innerSet(cloneIfObject2(outer));
firstRun = false;
} else {
let outerHashLatest = JSON.stringify(outer);
let innerHashLatest = JSON.stringify(inner);
if (outerHashLatest !== outerHash) {
innerSet(cloneIfObject2(outer));
} else if (outerHashLatest !== innerHashLatest) {
outerSet(cloneIfObject2(inner));
} else {
}
}
outerHash = JSON.stringify(outerGet());
innerHash = JSON.stringify(innerGet());
});
return () => {
release(reference);
};
}
function cloneIfObject2(value) {
return typeof value === "object" ? JSON.parse(JSON.stringify(value)) : value;
}
function plugin(callback) {
let callbacks = Array.isArray(callback) ? callback : [callback];
callbacks.forEach((i) => i(alpine_default));
}
var stores = {};
var isReactive = false;
function store(name, value) {
if (!isReactive) {
stores = reactive(stores);
isReactive = true;
}
if (value === void 0) {
return stores[name];
}
stores[name] = value;
initInterceptors(stores[name]);
if (typeof value === "object" && value !== null && value.hasOwnProperty("init") && typeof value.init === "function") {
stores[name].init();
}
}
function getStores() {
return stores;
}
var binds = {};
function bind2(name, bindings) {
let getBindings = typeof bindings !== "function" ? () => bindings : bindings;
if (name instanceof Element) {
return applyBindingsObject(name, getBindings());
} else {
binds[name] = getBindings;
}
return () => {
};
}
function injectBindingProviders(obj) {
Object.entries(binds).forEach(([name, callback]) => {
Object.defineProperty(obj, name, {
get() {
return (...args) => {
return callback(...args);
};
}
});
});
return obj;
}
function applyBindingsObject(el, obj, original) {
let cleanupRunners = [];
while (cleanupRunners.length)
cleanupRunners.pop()();
let attributes = Object.entries(obj).map(([name, value]) => ({ name, value }));
let staticAttributes = attributesOnly(attributes);
attributes = attributes.map((attribute) => {
if (staticAttributes.find((attr) => attr.name === attribute.name)) {
return {
name: `x-bind:${attribute.name}`,
value: `"${attribute.value}"`
};
}
return attribute;
});
directives(el, attributes, original).map((handle) => {
cleanupRunners.push(handle.runCleanups);
handle();
});
return () => {
while (cleanupRunners.length)
cleanupRunners.pop()();
};
}
var datas = {};
function data(name, callback) {
datas[name] = callback;
}
function injectDataProviders(obj, context) {
Object.entries(datas).forEach(([name, callback]) => {
Object.defineProperty(obj, name, {
get() {
return (...args) => {
return callback.bind(context)(...args);
};
},
enumerable: false
});
});
return obj;
}
var Alpine19 = {
get reactive() {
return reactive;
},
get release() {
return release;
},
get effect() {
return effect;
},
get raw() {
return raw;
},
version: "3.14.3",
flushAndStopDeferringMutations,
dontAutoEvaluateFunctions,
disableEffectScheduling,
startObservingMutations,
stopObservingMutations,
setReactivityEngine,
onAttributeRemoved,
onAttributesAdded,
closestDataStack,
skipDuringClone,
onlyDuringClone,
addRootSelector,
addInitSelector,
interceptClone,
addScopeToNode,
deferMutations,
mapAttributes,
evaluateLater,
interceptInit,
setEvaluator,
mergeProxies,
extractProp,
findClosest,
onElRemoved,
closestRoot,
destroyTree,
interceptor,
transition,
setStyles,
mutateDom,
directive: directive2,
entangle,
throttle,
debounce: debounce2,
evaluate,
initTree,
nextTick,
prefixed: prefix,
prefix: setPrefix,
plugin,
magic,
store,
start: start2,
clone,
cloneNode,
bound: getBinding,
$data: scope,
watch,
walk,
data,
bind: bind2
};
var alpine_default = Alpine19;
var import_reactivity10 = __toESM2(require_reactivity());
magic("nextTick", () => nextTick);
magic("dispatch", (el) => dispatch3.bind(dispatch3, el));
magic("watch", (el, { evaluateLater: evaluateLater2, cleanup }) => (key, callback) => {
let evaluate2 = evaluateLater2(key);
let getter = () => {
let value;
evaluate2((i) => value = i);
return value;
};
let unwatch = watch(getter, callback);
cleanup(unwatch);
});
magic("store", getStores);
magic("data", (el) => scope(el));
magic("root", (el) => closestRoot(el));
magic("refs", (el) => {
if (el._x_refs_proxy)
return el._x_refs_proxy;
el._x_refs_proxy = mergeProxies(getArrayOfRefObject(el));
return el._x_refs_proxy;
});
function getArrayOfRefObject(el) {
let refObjects = [];
findClosest(el, (i) => {
if (i._x_refs)
refObjects.push(i._x_refs);
});
return refObjects;
}
var globalIdMemo = {};
function findAndIncrementId(name) {
if (!globalIdMemo[name])
globalIdMemo[name] = 0;
return ++globalIdMemo[name];
}
function closestIdRoot(el, name) {
return findClosest(el, (element) => {
if (element._x_ids && element._x_ids[name])
return true;
});
}
function setIdRoot(el, name) {
if (!el._x_ids)
el._x_ids = {};
if (!el._x_ids[name])
el._x_ids[name] = findAndIncrementId(name);
}
magic("id", (el, { cleanup }) => (name, key = null) => {
let cacheKey = `${name}${key ? `-${key}` : ""}`;
return cacheIdByNameOnElement(el, cacheKey, cleanup, () => {
let root = closestIdRoot(el, name);
let id = root ? root._x_ids[name] : findAndIncrementId(name);
return key ? `${name}-${id}-${key}` : `${name}-${id}`;
});
});
interceptClone((from, to) => {
if (from._x_id) {
to._x_id = from._x_id;
}
});
function cacheIdByNameOnElement(el, cacheKey, cleanup, callback) {
if (!el._x_id)
el._x_id = {};
if (el._x_id[cacheKey])
return el._x_id[cacheKey];
let output = callback();
el._x_id[cacheKey] = output;
cleanup(() => {
delete el._x_id[cacheKey];
});
return output;
}
magic("el", (el) => el);
warnMissingPluginMagic("Focus", "focus", "focus");
warnMissingPluginMagic("Persist", "persist", "persist");
function warnMissingPluginMagic(name, magicName, slug) {
magic(magicName, (el) => warn(`You can't use [$${magicName}] without first installing the "${name}" plugin here: https://alpinejs.dev/plugins/${slug}`, el));
}
directive2("modelable", (el, { expression }, { effect: effect3, evaluateLater: evaluateLater2, cleanup }) => {
let func = evaluateLater2(expression);
let innerGet = () => {
let result;
func((i) => result = i);
return result;
};
let evaluateInnerSet = evaluateLater2(`${expression} = __placeholder`);
let innerSet = (val) => evaluateInnerSet(() => {
}, { scope: { "__placeholder": val } });
let initialValue = innerGet();
innerSet(initialValue);
queueMicrotask(() => {
if (!el._x_model)
return;
el._x_removeModelListeners["default"]();
let outerGet = el._x_model.get;
let outerSet = el._x_model.set;
let releaseEntanglement = entangle({
get() {
return outerGet();
},
set(value) {
outerSet(value);
}
}, {
get() {
return innerGet();
},
set(value) {
innerSet(value);
}
});
cleanup(releaseEntanglement);
});
});
directive2("teleport", (el, { modifiers, expression }, { cleanup }) => {
if (el.tagName.toLowerCase() !== "template")
warn("x-teleport can only be used on a <template> tag", el);
let target = getTarget(expression);
let clone2 = el.content.cloneNode(true).firstElementChild;
el._x_teleport = clone2;
clone2._x_teleportBack = el;
el.setAttribute("data-teleport-template", true);
clone2.setAttribute("data-teleport-target", true);
if (el._x_forwardEvents) {
el._x_forwardEvents.forEach((eventName) => {
clone2.addEventListener(eventName, (e) => {
e.stopPropagation();
el.dispatchEvent(new e.constructor(e.type, e));
});
});
}
addScopeToNode(clone2, {}, el);
let placeInDom = (clone3, target2, modifiers2) => {
if (modifiers2.includes("prepend")) {
target2.parentNode.insertBefore(clone3, target2);
} else if (modifiers2.includes("append")) {
target2.parentNode.insertBefore(clone3, target2.nextSibling);
} else {
target2.appendChild(clone3);
}
};
mutateDom(() => {
placeInDom(clone2, target, modifiers);
skipDuringClone(() => {
initTree(clone2);
clone2._x_ignore = true;
})();
});
el._x_teleportPutBack = () => {
let target2 = getTarget(expression);
mutateDom(() => {
placeInDom(el._x_teleport, target2, modifiers);
});
};
cleanup(() => mutateDom(() => {
clone2.remove();
destroyTree(clone2);
}));
});
var teleportContainerDuringClone = document.createElement("div");
function getTarget(expression) {
let target = skipDuringClone(() => {
return document.querySelector(expression);
}, () => {
return teleportContainerDuringClone;
})();
if (!target)
warn(`Cannot find x-teleport element for selector: "${expression}"`);
return target;
}
var handler = () => {
};
handler.inline = (el, { modifiers }, { cleanup }) => {
modifiers.includes("self") ? el._x_ignoreSelf = true : el._x_ignore = true;
cleanup(() => {
modifiers.includes("self") ? delete el._x_ignoreSelf : delete el._x_ignore;
});
};
directive2("ignore", handler);
directive2("effect", skipDuringClone((el, { expression }, { effect: effect3 }) => {
effect3(evaluateLater(el, expression));
}));
function on3(el, event, modifiers, callback) {
let listenerTarget = el;
let handler4 = (e) => callback(e);
let options = {};
let wrapHandler = (callback2, wrapper) => (e) => wrapper(callback2, e);
if (modifiers.includes("dot"))
event = dotSyntax(event);
if (modifiers.includes("camel"))
event = camelCase2(event);
if (modifiers.includes("passive"))
options.passive = true;
if (modifiers.includes("capture"))
options.capture = true;
if (modifiers.includes("window"))
listenerTarget = window;
if (modifiers.includes("document"))
listenerTarget = document;
if (modifiers.includes("debounce")) {
let nextModifier = modifiers[modifiers.indexOf("debounce") + 1] || "invalid-wait";
let wait = isNumeric(nextModifier.split("ms")[0]) ? Number(nextModifier.split("ms")[0]) : 250;
handler4 = debounce2(handler4, wait);
}
if (modifiers.includes("throttle")) {
let nextModifier = modifiers[modifiers.indexOf("throttle") + 1] || "invalid-wait";
let wait = isNumeric(nextModifier.split("ms")[0]) ? Number(nextModifier.split("ms")[0]) : 250;
handler4 = throttle(handler4, wait);
}
if (modifiers.includes("prevent"))
handler4 = wrapHandler(handler4, (next, e) => {
e.preventDefault();
next(e);
});
if (modifiers.includes("stop"))
handler4 = wrapHandler(handler4, (next, e) => {
e.stopPropagation();
next(e);
});
if (modifiers.includes("once")) {
handler4 = wrapHandler(handler4, (next, e) => {
next(e);
listenerTarget.removeEventListener(event, handler4, options);
});
}
if (modifiers.includes("away") || modifiers.includes("outside")) {
listenerTarget = document;
handler4 = wrapHandler(handler4, (next, e) => {
if (el.contains(e.target))
return;
if (e.target.isConnected === false)
return;
if (el.offsetWidth < 1 && el.offsetHeight < 1)
return;
if (el._x_isShown === false)
return;
next(e);
});
}
if (modifiers.includes("self"))
handler4 = wrapHandler(handler4, (next, e) => {
e.target === el && next(e);
});
if (isKeyEvent(event) || isClickEvent(event)) {
handler4 = wrapHandler(handler4, (next, e) => {
if (isListeningForASpecificKeyThatHasntBeenPressed(e, modifiers)) {
return;
}
next(e);
});
}
listenerTarget.addEventListener(event, handler4, options);
return () => {
listenerTarget.removeEventListener(event, handler4, options);
};
}
function dotSyntax(subject) {
return subject.replace(/-/g, ".");
}
function camelCase2(subject) {
return subject.toLowerCase().replace(/-(\w)/g, (match, char) => char.toUpperCase());
}
function isNumeric(subject) {
return !Array.isArray(subject) && !isNaN(subject);
}
function kebabCase2(subject) {
if ([" ", "_"].includes(subject))
return subject;
return subject.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[_\s]/, "-").toLowerCase();
}
function isKeyEvent(event) {
return ["keydown", "keyup"].includes(event);
}
function isClickEvent(event) {
return ["contextmenu", "click", "mouse"].some((i) => event.includes(i));
}
function isListeningForASpecificKeyThatHasntBeenPressed(e, modifiers) {
let keyModifiers = modifiers.filter((i) => {
return !["window", "document", "prevent", "stop", "once", "capture", "self", "away", "outside", "passive"].includes(i);
});
if (keyModifiers.includes("debounce")) {
let debounceIndex = keyModifiers.indexOf("debounce");
keyModifiers.splice(debounceIndex, isNumeric((keyModifiers[debounceIndex + 1] || "invalid-wait").split("ms")[0]) ? 2 : 1);
}
if (keyModifiers.includes("throttle")) {
let debounceIndex = keyModifiers.indexOf("throttle");
keyModifiers.splice(debounceIndex, isNumeric((keyModifiers[debounceIndex + 1] || "invalid-wait").split("ms")[0]) ? 2 : 1);
}
if (keyModifiers.length === 0)
return false;
if (keyModifiers.length === 1 && keyToModifiers(e.key).includes(keyModifiers[0]))
return false;
const systemKeyModifiers = ["ctrl", "shift", "alt", "meta", "cmd", "super"];
const selectedSystemKeyModifiers = systemKeyModifiers.filter((modifier) => keyModifiers.includes(modifier));
keyModifiers = keyModifiers.filter((i) => !selectedSystemKeyModifiers.includes(i));
if (selectedSystemKeyModifiers.length > 0) {
const activelyPressedKeyModifiers = selectedSystemKeyModifiers.filter((modifier) => {
if (modifier === "cmd" || modifier === "super")
modifier = "meta";
return e[`${modifier}Key`];
});
if (activelyPressedKeyModifiers.length === selectedSystemKeyModifiers.length) {
if (isClickEvent(e.type))
return false;
if (keyToModifiers(e.key).includes(keyModifiers[0]))
return false;
}
}
return true;
}
function keyToModifiers(key) {
if (!key)
return [];
key = kebabCase2(key);
let modifierToKeyMap = {
"ctrl": "control",
"slash": "/",
"space": " ",
"spacebar": " ",
"cmd": "meta",
"esc": "escape",
"up": "arrow-up",
"down": "arrow-down",
"left": "arrow-left",
"right": "arrow-right",
"period": ".",
"comma": ",",
"equal": "=",
"minus": "-",
"underscore": "_"
};
modifierToKeyMap[key] = key;
return Object.keys(modifierToKeyMap).map((modifier) => {
if (modifierToKeyMap[modifier] === key)
return modifier;
}).filter((modifier) => modifier);
}
directive2("model", (el, { modifiers, expression }, { effect: effect3, cleanup }) => {
let scopeTarget = el;
if (modifiers.includes("parent")) {
scopeTarget = el.parentNode;
}
let evaluateGet = evaluateLater(scopeTarget, expression);
let evaluateSet;
if (typeof expression === "string") {
evaluateSet = evaluateLater(scopeTarget, `${expression} = __placeholder`);
} else if (typeof expression === "function" && typeof expression() === "string") {
evaluateSet = evaluateLater(scopeTarget, `${expression()} = __placeholder`);
} else {
evaluateSet = () => {
};
}
let getValue = () => {
let result;
evaluateGet((value) => result = value);
return isGetterSetter(result) ? result.get() : result;
};
let setValue = (value) => {
let result;
evaluateGet((value2) => result = value2);
if (isGetterSetter(result)) {
result.set(value);
} else {
evaluateSet(() => {
}, {
scope: { "__placeholder": value }
});
}
};
if (typeof expression === "string" && el.type === "radio") {
mutateDom(() => {
if (!el.hasAttribute("name"))
el.setAttribute("name", expression);
});
}
var event = el.tagName.toLowerCase() === "select" || ["checkbox", "radio"].includes(el.type) || modifiers.includes("lazy") ? "change" : "input";
let removeListener = isCloning ? () => {
} : on3(el, event, modifiers, (e) => {
setValue(getInputValue(el, modifiers, e, getValue()));
});
if (modifiers.includes("fill")) {
if ([void 0, null, ""].includes(getValue()) || isCheckbox(el) && Array.isArray(getValue()) || el.tagName.toLowerCase() === "select" && el.multiple) {
setValue(getInputValue(el, modifiers, { target: el }, getValue()));
}
}
if (!el._x_removeModelListeners)
el._x_removeModelListeners = {};
el._x_removeModelListeners["default"] = removeListener;
cleanup(() => el._x_removeModelListeners["default"]());
if (el.form) {
let removeResetListener = on3(el.form, "reset", [], (e) => {
nextTick(() => el._x_model && el._x_model.set(getInputValue(el, modifiers, { target: el }, getValue())));
});
cleanup(() => removeResetListener());
}
el._x_model = {
get() {
return getValue();
},
set(value) {
setValue(value);
}
};
el._x_forceModelUpdate = (value) => {
if (value === void 0 && typeof expression === "string" && expression.match(/\./))
value = "";
window.fromModel = true;
mutateDom(() => bind(el, "value", value));
delete window.fromModel;
};
effect3(() => {
let value = getValue();
if (modifiers.includes("unintrusive") && document.activeElement.isSameNode(el))
return;
el._x_forceModelUpdate(value);
});
});
function getInputValue(el, modifiers, event, currentValue) {
return mutateDom(() => {
if (event instanceof CustomEvent && event.detail !== void 0)
return event.detail !== null && event.detail !== void 0 ? event.detail : event.target.value;
else if (isCheckbox(el)) {
if (Array.isArray(currentValue)) {
let newValue = null;
if (modifiers.includes("number")) {
newValue = safeParseNumber(event.target.value);
} else if (modifiers.includes("boolean")) {
newValue = safeParseBoolean(event.target.value);
} else {
newValue = event.target.value;
}
return event.target.checked ? currentValue.includes(newValue) ? currentValue : currentValue.concat([newValue]) : currentValue.filter((el2) => !checkedAttrLooseCompare2(el2, newValue));
} else {
return event.target.checked;
}
} else if (el.tagName.toLowerCase() === "select" && el.multiple) {
if (modifiers.includes("number")) {
return Array.from(event.target.selectedOptions).map((option) => {
let rawValue = option.value || option.text;
return safeParseNumber(rawValue);
});
} else if (modifiers.includes("boolean")) {
return Array.from(event.target.selectedOptions).map((option) => {
let rawValue = option.value || option.text;
return safeParseBoolean(rawValue);
});
}
return Array.from(event.target.selectedOptions).map((option) => {
return option.value || option.text;
});
} else {
let newValue;
if (isRadio(el)) {
if (event.target.checked) {
newValue = event.target.value;
} else {
newValue = currentValue;
}
} else {
newValue = event.target.value;
}
if (modifiers.includes("number")) {
return safeParseNumber(newValue);
} else if (modifiers.includes("boolean")) {
return safeParseBoolean(newValue);
} else if (modifiers.includes("trim")) {
return newValue.trim();
} else {
return newValue;
}
}
});
}
function safeParseNumber(rawValue) {
let number = rawValue ? parseFloat(rawValue) : null;
return isNumeric2(number) ? number : rawValue;
}
function checkedAttrLooseCompare2(valueA, valueB) {
return valueA == valueB;
}
function isNumeric2(subject) {
return !Array.isArray(subject) && !isNaN(subject);
}
function isGetterSetter(value) {
return value !== null && typeof value === "object" && typeof value.get === "function" && typeof value.set === "function";
}
directive2("cloak", (el) => queueMicrotask(() => mutateDom(() => el.removeAttribute(prefix("cloak")))));
addInitSelector(() => `[${prefix("init")}]`);
directive2("init", skipDuringClone((el, { expression }, { evaluate: evaluate2 }) => {
if (typeof expression === "string") {
return !!expression.trim() && evaluate2(expression, {}, false);
}
return evaluate2(expression, {}, false);
}));
directive2("text", (el, { expression }, { effect: effect3, evaluateLater: evaluateLater2 }) => {
let evaluate2 = evaluateLater2(expression);
effect3(() => {
evaluate2((value) => {
mutateDom(() => {
el.textContent = value;
});
});
});
});
directive2("html", (el, { expression }, { effect: effect3, evaluateLater: evaluateLater2 }) => {
let evaluate2 = evaluateLater2(expression);
effect3(() => {
evaluate2((value) => {
mutateDom(() => {
el.innerHTML = value;
el._x_ignoreSelf = true;
initTree(el);
delete el._x_ignoreSelf;
});
});
});
});
mapAttributes(startingWith(":", into(prefix("bind:"))));
var handler2 = (el, { value, modifiers, expression, original }, { effect: effect3, cleanup }) => {
if (!value) {
let bindingProviders = {};
injectBindingProviders(bindingProviders);
let getBindings = evaluateLater(el, expression);
getBindings((bindings) => {
applyBindingsObject(el, bindings, original);
}, { scope: bindingProviders });
return;
}
if (value === "key")
return storeKeyForXFor(el, expression);
if (el._x_inlineBindings && el._x_inlineBindings[value] && el._x_inlineBindings[value].extract) {
return;
}
let evaluate2 = evaluateLater(el, expression);
effect3(() => evaluate2((result) => {
if (result === void 0 && typeof expression === "string" && expression.match(/\./)) {
result = "";
}
mutateDom(() => bind(el, value, result, modifiers));
}));
cleanup(() => {
el._x_undoAddedClasses && el._x_undoAddedClasses();
el._x_undoAddedStyles && el._x_undoAddedStyles();
});
};
handler2.inline = (el, { value, modifiers, expression }) => {
if (!value)
return;
if (!el._x_inlineBindings)
el._x_inlineBindings = {};
el._x_inlineBindings[value] = { expression, extract: false };
};
directive2("bind", handler2);
function storeKeyForXFor(el, expression) {
el._x_keyExpression = expression;
}
addRootSelector(() => `[${prefix("data")}]`);
directive2("data", (el, { expression }, { cleanup }) => {
if (shouldSkipRegisteringDataDuringClone(el))
return;
expression = expression === "" ? "{}" : expression;
let magicContext = {};
injectMagics(magicContext, el);
let dataProviderContext = {};
injectDataProviders(dataProviderContext, magicContext);
let data2 = evaluate(el, expression, { scope: dataProviderContext });
if (data2 === void 0 || data2 === true)
data2 = {};
injectMagics(data2, el);
let reactiveData = reactive(data2);
initInterceptors(reactiveData);
let undo = addScopeToNode(el, reactiveData);
reactiveData["init"] && evaluate(el, reactiveData["init"]);
cleanup(() => {
reactiveData["destroy"] && evaluate(el, reactiveData["destroy"]);
undo();
});
});
interceptClone((from, to) => {
if (from._x_dataStack) {
to._x_dataStack = from._x_dataStack;
to.setAttribute("data-has-alpine-state", true);
}
});
function shouldSkipRegisteringDataDuringClone(el) {
if (!isCloning)
return false;
if (isCloningLegacy)
return true;
return el.hasAttribute("data-has-alpine-state");
}
directive2("show", (el, { modifiers, expression }, { effect: effect3 }) => {
let evaluate2 = evaluateLater(el, expression);
if (!el._x_doHide)
el._x_doHide = () => {
mutateDom(() => {
el.style.setProperty("display", "none", modifiers.includes("important") ? "important" : void 0);
});
};
if (!el._x_doShow)
el._x_doShow = () => {
mutateDom(() => {
if (el.style.length === 1 && el.style.display === "none") {
el.removeAttribute("style");
} else {
el.style.removeProperty("display");
}
});
};
let hide = () => {
el._x_doHide();
el._x_isShown = false;
};
let show = () => {
el._x_doShow();
el._x_isShown = true;
};
let clickAwayCompatibleShow = () => setTimeout(show);
let toggle = once((value) => value ? show() : hide(), (value) => {
if (typeof el._x_toggleAndCascadeWithTransitions === "function") {
el._x_toggleAndCascadeWithTransitions(el, value, show, hide);
} else {
value ? clickAwayCompatibleShow() : hide();
}
});
let oldValue;
let firstTime = true;
effect3(() => evaluate2((value) => {
if (!firstTime && value === oldValue)
return;
if (modifiers.includes("immediate"))
value ? clickAwayCompatibleShow() : hide();
toggle(value);
oldValue = value;
firstTime = false;
}));
});
directive2("for", (el, { expression }, { effect: effect3, cleanup }) => {
let iteratorNames = parseForExpression(expression);
let evaluateItems = evaluateLater(el, iteratorNames.items);
let evaluateKey = evaluateLater(el, el._x_keyExpression || "index");
el._x_prevKeys = [];
el._x_lookup = {};
effect3(() => loop(el, iteratorNames, evaluateItems, evaluateKey));
cleanup(() => {
Object.values(el._x_lookup).forEach((el2) => mutateDom(() => {
destroyTree(el2);
el2.remove();
}));
delete el._x_prevKeys;
delete el._x_lookup;
});
});
function loop(el, iteratorNames, evaluateItems, evaluateKey) {
let isObject2 = (i) => typeof i === "object" && !Array.isArray(i);
let templateEl = el;
evaluateItems((items) => {
if (isNumeric3(items) && items >= 0) {
items = Array.from(Array(items).keys(), (i) => i + 1);
}
if (items === void 0)
items = [];
let lookup = el._x_lookup;
let prevKeys = el._x_prevKeys;
let scopes = [];
let keys = [];
if (isObject2(items)) {
items = Object.entries(items).map(([key, value]) => {
let scope2 = getIterationScopeVariables(iteratorNames, value, key, items);
evaluateKey((value2) => {
if (keys.includes(value2))
warn("Duplicate key on x-for", el);
keys.push(value2);
}, { scope: { index: key, ...scope2 } });
scopes.push(scope2);
});
} else {
for (let i = 0; i < items.length; i++) {
let scope2 = getIterationScopeVariables(iteratorNames, items[i], i, items);
evaluateKey((value) => {
if (keys.includes(value))
warn("Duplicate key on x-for", el);
keys.push(value);
}, { scope: { index: i, ...scope2 } });
scopes.push(scope2);
}
}
let adds = [];
let moves = [];
let removes = [];
let sames = [];
for (let i = 0; i < prevKeys.length; i++) {
let key = prevKeys[i];
if (keys.indexOf(key) === -1)
removes.push(key);
}
prevKeys = prevKeys.filter((key) => !removes.includes(key));
let lastKey = "template";
for (let i = 0; i < keys.length; i++) {
let key = keys[i];
let prevIndex = prevKeys.indexOf(key);
if (prevIndex === -1) {
prevKeys.splice(i, 0, key);
adds.push([lastKey, i]);
} else if (prevIndex !== i) {
let keyInSpot = prevKeys.splice(i, 1)[0];
let keyForSpot = prevKeys.splice(prevIndex - 1, 1)[0];
prevKeys.splice(i, 0, keyForSpot);
prevKeys.splice(prevIndex, 0, keyInSpot);
moves.push([keyInSpot, keyForSpot]);
} else {
sames.push(key);
}
lastKey = key;
}
for (let i = 0; i < removes.length; i++) {
let key = removes[i];
if (!(key in lookup))
continue;
mutateDom(() => {
destroyTree(lookup[key]);
lookup[key].remove();
});
delete lookup[key];
}
for (let i = 0; i < moves.length; i++) {
let [keyInSpot, keyForSpot] = moves[i];
let elInSpot = lookup[keyInSpot];
let elForSpot = lookup[keyForSpot];
let marker = document.createElement("div");
mutateDom(() => {
if (!elForSpot)
warn(`x-for ":key" is undefined or invalid`, templateEl, keyForSpot, lookup);
elForSpot.after(marker);
elInSpot.after(elForSpot);
elForSpot._x_currentIfEl && elForSpot.after(elForSpot._x_currentIfEl);
marker.before(elInSpot);
elInSpot._x_currentIfEl && elInSpot.after(elInSpot._x_currentIfEl);
marker.remove();
});
elForSpot._x_refreshXForScope(scopes[keys.indexOf(keyForSpot)]);
}
for (let i = 0; i < adds.length; i++) {
let [lastKey2, index] = adds[i];
let lastEl = lastKey2 === "template" ? templateEl : lookup[lastKey2];
if (lastEl._x_currentIfEl)
lastEl = lastEl._x_currentIfEl;
let scope2 = scopes[index];
let key = keys[index];
let clone2 = document.importNode(templateEl.content, true).firstElementChild;
let reactiveScope = reactive(scope2);
addScopeToNode(clone2, reactiveScope, templateEl);
clone2._x_refreshXForScope = (newScope) => {
Object.entries(newScope).forEach(([key2, value]) => {
reactiveScope[key2] = value;
});
};
mutateDom(() => {
lastEl.after(clone2);
skipDuringClone(() => initTree(clone2))();
});
if (typeof key === "object") {
warn("x-for key cannot be an object, it must be a string or an integer", templateEl);
}
lookup[key] = clone2;
}
for (let i = 0; i < sames.length; i++) {
lookup[sames[i]]._x_refreshXForScope(scopes[keys.indexOf(sames[i])]);
}
templateEl._x_prevKeys = keys;
});
}
function parseForExpression(expression) {
let forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/;
let stripParensRE = /^\s*\(|\)\s*$/g;
let forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/;
let inMatch = expression.match(forAliasRE);
if (!inMatch)
return;
let res = {};
res.items = inMatch[2].trim();
let item = inMatch[1].replace(stripParensRE, "").trim();
let iteratorMatch = item.match(forIteratorRE);
if (iteratorMatch) {
res.item = item.replace(forIteratorRE, "").trim();
res.index = iteratorMatch[1].trim();
if (iteratorMatch[2]) {
res.collection = iteratorMatch[2].trim();
}
} else {
res.item = item;
}
return res;
}
function getIterationScopeVariables(iteratorNames, item, index, items) {
let scopeVariables = {};
if (/^\[.*\]$/.test(iteratorNames.item) && Array.isArray(item)) {
let names = iteratorNames.item.replace("[", "").replace("]", "").split(",").map((i) => i.trim());
names.forEach((name, i) => {
scopeVariables[name] = item[i];
});
} else if (/^\{.*\}$/.test(iteratorNames.item) && !Array.isArray(item) && typeof item === "object") {
let names = iteratorNames.item.replace("{", "").replace("}", "").split(",").map((i) => i.trim());
names.forEach((name) => {
scopeVariables[name] = item[name];
});
} else {
scopeVariables[iteratorNames.item] = item;
}
if (iteratorNames.index)
scopeVariables[iteratorNames.index] = index;
if (iteratorNames.collection)
scopeVariables[iteratorNames.collection] = items;
return scopeVariables;
}
function isNumeric3(subject) {
return !Array.isArray(subject) && !isNaN(subject);
}
function handler3() {
}
handler3.inline = (el, { expression }, { cleanup }) => {
let root = closestRoot(el);
if (!root._x_refs)
root._x_refs = {};
root._x_refs[expression] = el;
cleanup(() => delete root._x_refs[expression]);
};
directive2("ref", handler3);
directive2("if", (el, { expression }, { effect: effect3, cleanup }) => {
if (el.tagName.toLowerCase() !== "template")
warn("x-if can only be used on a <template> tag", el);
let evaluate2 = evaluateLater(el, expression);
let show = () => {
if (el._x_currentIfEl)
return el._x_currentIfEl;
let clone2 = el.content.cloneNode(true).firstElementChild;
addScopeToNode(clone2, {}, el);
mutateDom(() => {
el.after(clone2);
skipDuringClone(() => initTree(clone2))();
});
el._x_currentIfEl = clone2;
el._x_undoIf = () => {
mutateDom(() => {
destroyTree(clone2);
clone2.remove();
});
delete el._x_currentIfEl;
};
return clone2;
};
let hide = () => {
if (!el._x_undoIf)
return;
el._x_undoIf();
delete el._x_undoIf;
};
effect3(() => evaluate2((value) => {
value ? show() : hide();
}));
cleanup(() => el._x_undoIf && el._x_undoIf());
});
directive2("id", (el, { expression }, { evaluate: evaluate2 }) => {
let names = evaluate2(expression);
names.forEach((name) => setIdRoot(el, name));
});
interceptClone((from, to) => {
if (from._x_ids) {
to._x_ids = from._x_ids;
}
});
mapAttributes(startingWith("@", into(prefix("on:"))));
directive2("on", skipDuringClone((el, { value, modifiers, expression }, { cleanup }) => {
let evaluate2 = expression ? evaluateLater(el, expression) : () => {
};
if (el.tagName.toLowerCase() === "template") {
if (!el._x_forwardEvents)
el._x_forwardEvents = [];
if (!el._x_forwardEvents.includes(value))
el._x_forwardEvents.push(value);
}
let removeListener = on3(el, value, modifiers, (e) => {
evaluate2(() => {
}, { scope: { "$event": e }, params: [e] });
});
cleanup(() => removeListener());
}));
warnMissingPluginDirective("Collapse", "collapse", "collapse");
warnMissingPluginDirective("Intersect", "intersect", "intersect");
warnMissingPluginDirective("Focus", "trap", "focus");
warnMissingPluginDirective("Mask", "mask", "mask");
function warnMissingPluginDirective(name, directiveName, slug) {
directive2(directiveName, (el) => warn(`You can't use [x-${directiveName}] without first installing the "${name}" plugin here: https://alpinejs.dev/plugins/${slug}`, el));
}
alpine_default.setEvaluator(normalEvaluator);
alpine_default.setReactivityEngine({ reactive: import_reactivity10.reactive, effect: import_reactivity10.effect, release: import_reactivity10.stop, raw: import_reactivity10.toRaw });
var src_default = alpine_default;
var module_default = src_default;
}
});
// ../../../../usr/local/lib/node_modules/@alpinejs/collapse/dist/module.cjs.js
var require_module_cjs2 = __commonJS({
"../../../../usr/local/lib/node_modules/@alpinejs/collapse/dist/module.cjs.js"(exports, module) {
var __defProp2 = Object.defineProperty;
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
var __getOwnPropNames2 = Object.getOwnPropertyNames;
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
var __export = (target, all2) => {
for (var name in all2)
__defProp2(target, name, { get: all2[name], enumerable: true });
};
var __copyProps2 = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames2(from))
if (!__hasOwnProp2.call(to, key) && key !== except)
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
var module_exports = {};
__export(module_exports, {
collapse: () => src_default,
default: () => module_default
});
module.exports = __toCommonJS(module_exports);
function src_default(Alpine19) {
Alpine19.directive("collapse", collapse3);
collapse3.inline = (el, { modifiers }) => {
if (!modifiers.includes("min"))
return;
el._x_doShow = () => {
};
el._x_doHide = () => {
};
};
function collapse3(el, { modifiers }) {
let duration = modifierValue(modifiers, "duration", 250) / 1e3;
let floor = modifierValue(modifiers, "min", 0);
let fullyHide = !modifiers.includes("min");
if (!el._x_isShown)
el.style.height = `${floor}px`;
if (!el._x_isShown && fullyHide)
el.hidden = true;
if (!el._x_isShown)
el.style.overflow = "hidden";
let setFunction = (el2, styles) => {
let revertFunction = Alpine19.setStyles(el2, styles);
return styles.height ? () => {
} : revertFunction;
};
let transitionStyles = {
transitionProperty: "height",
transitionDuration: `${duration}s`,
transitionTimingFunction: "cubic-bezier(0.4, 0.0, 0.2, 1)"
};
el._x_transition = {
in(before = () => {
}, after = () => {
}) {
if (fullyHide)
el.hidden = false;
if (fullyHide)
el.style.display = null;
let current = el.getBoundingClientRect().height;
el.style.height = "auto";
let full = el.getBoundingClientRect().height;
if (current === full) {
current = floor;
}
Alpine19.transition(el, Alpine19.setStyles, {
during: transitionStyles,
start: { height: current + "px" },
end: { height: full + "px" }
}, () => el._x_isShown = true, () => {
if (el.getBoundingClientRect().height == full) {
el.style.overflow = null;
}
});
},
out(before = () => {
}, after = () => {
}) {
let full = el.getBoundingClientRect().height;
Alpine19.transition(el, setFunction, {
during: transitionStyles,
start: { height: full + "px" },
end: { height: floor + "px" }
}, () => el.style.overflow = "hidden", () => {
el._x_isShown = false;
if (el.style.height == `${floor}px` && fullyHide) {
el.style.display = "none";
el.hidden = true;
}
});
}
};
}
}
function modifierValue(modifiers, key, fallback2) {
if (modifiers.indexOf(key) === -1)
return fallback2;
const rawValue = modifiers[modifiers.indexOf(key) + 1];
if (!rawValue)
return fallback2;
if (key === "duration") {
let match = rawValue.match(/([0-9]+)ms/);
if (match)
return match[1];
}
if (key === "min") {
let match = rawValue.match(/([0-9]+)px/);
if (match)
return match[1];
}
return rawValue;
}
var module_default = src_default;
}
});
// ../../../../usr/local/lib/node_modules/@alpinejs/focus/dist/module.cjs.js
var require_module_cjs3 = __commonJS({
"../../../../usr/local/lib/node_modules/@alpinejs/focus/dist/module.cjs.js"(exports, module) {
var __create2 = Object.create;
var __defProp2 = Object.defineProperty;
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
var __getOwnPropNames2 = Object.getOwnPropertyNames;
var __getProtoOf2 = Object.getPrototypeOf;
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
var __commonJS2 = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __export = (target, all2) => {
for (var name in all2)
__defProp2(target, name, { get: all2[name], enumerable: true });
};
var __copyProps2 = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames2(from))
if (!__hasOwnProp2.call(to, key) && key !== except)
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
}
return to;
};
var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2(isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target, mod));
var __toCommonJS = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
var require_dist = __commonJS2({
"node_modules/tabbable/dist/index.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
var candidateSelectors = ["input", "select", "textarea", "a[href]", "button", "[tabindex]:not(slot)", "audio[controls]", "video[controls]", '[contenteditable]:not([contenteditable="false"])', "details>summary:first-of-type", "details"];
var candidateSelector = /* @__PURE__ */ candidateSelectors.join(",");
var NoElement = typeof Element === "undefined";
var matches = NoElement ? function() {
} : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;
var getRootNode = !NoElement && Element.prototype.getRootNode ? function(element) {
return element.getRootNode();
} : function(element) {
return element.ownerDocument;
};
var getCandidates = function getCandidates2(el, includeContainer, filter) {
var candidates = Array.prototype.slice.apply(el.querySelectorAll(candidateSelector));
if (includeContainer && matches.call(el, candidateSelector)) {
candidates.unshift(el);
}
candidates = candidates.filter(filter);
return candidates;
};
var getCandidatesIteratively = function getCandidatesIteratively2(elements, includeContainer, options) {
var candidates = [];
var elementsToCheck = Array.from(elements);
while (elementsToCheck.length) {
var element = elementsToCheck.shift();
if (element.tagName === "SLOT") {
var assigned = element.assignedElements();
var content = assigned.length ? assigned : element.children;
var nestedCandidates = getCandidatesIteratively2(content, true, options);
if (options.flatten) {
candidates.push.apply(candidates, nestedCandidates);
} else {
candidates.push({
scope: element,
candidates: nestedCandidates
});
}
} else {
var validCandidate = matches.call(element, candidateSelector);
if (validCandidate && options.filter(element) && (includeContainer || !elements.includes(element))) {
candidates.push(element);
}
var shadowRoot = element.shadowRoot || typeof options.getShadowRoot === "function" && options.getShadowRoot(element);
var validShadowRoot = !options.shadowRootFilter || options.shadowRootFilter(element);
if (shadowRoot && validShadowRoot) {
var _nestedCandidates = getCandidatesIteratively2(shadowRoot === true ? element.children : shadowRoot.children, true, options);
if (options.flatten) {
candidates.push.apply(candidates, _nestedCandidates);
} else {
candidates.push({
scope: element,
candidates: _nestedCandidates
});
}
} else {
elementsToCheck.unshift.apply(elementsToCheck, element.children);
}
}
}
return candidates;
};
var getTabindex = function getTabindex2(node, isScope) {
if (node.tabIndex < 0) {
if ((isScope || /^(AUDIO|VIDEO|DETAILS)$/.test(node.tagName) || node.isContentEditable) && isNaN(parseInt(node.getAttribute("tabindex"), 10))) {
return 0;
}
}
return node.tabIndex;
};
var sortOrderedTabbables = function sortOrderedTabbables2(a, b) {
return a.tabIndex === b.tabIndex ? a.documentOrder - b.documentOrder : a.tabIndex - b.tabIndex;
};
var isInput = function isInput2(node) {
return node.tagName === "INPUT";
};
var isHiddenInput = function isHiddenInput2(node) {
return isInput(node) && node.type === "hidden";
};
var isDetailsWithSummary = function isDetailsWithSummary2(node) {
var r = node.tagName === "DETAILS" && Array.prototype.slice.apply(node.children).some(function(child) {
return child.tagName === "SUMMARY";
});
return r;
};
var getCheckedRadio = function getCheckedRadio2(nodes, form) {
for (var i = 0; i < nodes.length; i++) {
if (nodes[i].checked && nodes[i].form === form) {
return nodes[i];
}
}
};
var isTabbableRadio = function isTabbableRadio2(node) {
if (!node.name) {
return true;
}
var radioScope = node.form || getRootNode(node);
var queryRadios = function queryRadios2(name) {
return radioScope.querySelectorAll('input[type="radio"][name="' + name + '"]');
};
var radioSet;
if (typeof window !== "undefined" && typeof window.CSS !== "undefined" && typeof window.CSS.escape === "function") {
radioSet = queryRadios(window.CSS.escape(node.name));
} else {
try {
radioSet = queryRadios(node.name);
} catch (err) {
console.error("Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s", err.message);
return false;
}
}
var checked = getCheckedRadio(radioSet, node.form);
return !checked || checked === node;
};
var isRadio = function isRadio2(node) {
return isInput(node) && node.type === "radio";
};
var isNonTabbableRadio = function isNonTabbableRadio2(node) {
return isRadio(node) && !isTabbableRadio(node);
};
var isZeroArea = function isZeroArea2(node) {
var _node$getBoundingClie = node.getBoundingClientRect(), width = _node$getBoundingClie.width, height = _node$getBoundingClie.height;
return width === 0 && height === 0;
};
var isHidden = function isHidden2(node, _ref) {
var displayCheck = _ref.displayCheck, getShadowRoot = _ref.getShadowRoot;
if (getComputedStyle(node).visibility === "hidden") {
return true;
}
var isDirectSummary = matches.call(node, "details>summary:first-of-type");
var nodeUnderDetails = isDirectSummary ? node.parentElement : node;
if (matches.call(nodeUnderDetails, "details:not([open]) *")) {
return true;
}
var nodeRootHost = getRootNode(node).host;
var nodeIsAttached = (nodeRootHost === null || nodeRootHost === void 0 ? void 0 : nodeRootHost.ownerDocument.contains(nodeRootHost)) || node.ownerDocument.contains(node);
if (!displayCheck || displayCheck === "full") {
if (typeof getShadowRoot === "function") {
var originalNode = node;
while (node) {
var parentElement = node.parentElement;
var rootNode = getRootNode(node);
if (parentElement && !parentElement.shadowRoot && getShadowRoot(parentElement) === true) {
return isZeroArea(node);
} else if (node.assignedSlot) {
node = node.assignedSlot;
} else if (!parentElement && rootNode !== node.ownerDocument) {
node = rootNode.host;
} else {
node = parentElement;
}
}
node = originalNode;
}
if (nodeIsAttached) {
return !node.getClientRects().length;
}
} else if (displayCheck === "non-zero-area") {
return isZeroArea(node);
}
return false;
};
var isDisabledFromFieldset = function isDisabledFromFieldset2(node) {
if (/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(node.tagName)) {
var parentNode = node.parentElement;
while (parentNode) {
if (parentNode.tagName === "FIELDSET" && parentNode.disabled) {
for (var i = 0; i < parentNode.children.length; i++) {
var child = parentNode.children.item(i);
if (child.tagName === "LEGEND") {
return matches.call(parentNode, "fieldset[disabled] *") ? true : !child.contains(node);
}
}
return true;
}
parentNode = parentNode.parentElement;
}
}
return false;
};
var isNodeMatchingSelectorFocusable = function isNodeMatchingSelectorFocusable2(options, node) {
if (node.disabled || isHiddenInput(node) || isHidden(node, options) || isDetailsWithSummary(node) || isDisabledFromFieldset(node)) {
return false;
}
return true;
};
var isNodeMatchingSelectorTabbable = function isNodeMatchingSelectorTabbable2(options, node) {
if (isNonTabbableRadio(node) || getTabindex(node) < 0 || !isNodeMatchingSelectorFocusable(options, node)) {
return false;
}
return true;
};
var isValidShadowRootTabbable = function isValidShadowRootTabbable2(shadowHostNode) {
var tabIndex = parseInt(shadowHostNode.getAttribute("tabindex"), 10);
if (isNaN(tabIndex) || tabIndex >= 0) {
return true;
}
return false;
};
var sortByOrder = function sortByOrder2(candidates) {
var regularTabbables = [];
var orderedTabbables = [];
candidates.forEach(function(item, i) {
var isScope = !!item.scope;
var element = isScope ? item.scope : item;
var candidateTabindex = getTabindex(element, isScope);
var elements = isScope ? sortByOrder2(item.candidates) : element;
if (candidateTabindex === 0) {
isScope ? regularTabbables.push.apply(regularTabbables, elements) : regularTabbables.push(element);
} else {
orderedTabbables.push({
documentOrder: i,
tabIndex: candidateTabindex,
item,
isScope,
content: elements
});
}
});
return orderedTabbables.sort(sortOrderedTabbables).reduce(function(acc, sortable) {
sortable.isScope ? acc.push.apply(acc, sortable.content) : acc.push(sortable.content);
return acc;
}, []).concat(regularTabbables);
};
var tabbable = function tabbable2(el, options) {
options = options || {};
var candidates;
if (options.getShadowRoot) {
candidates = getCandidatesIteratively([el], options.includeContainer, {
filter: isNodeMatchingSelectorTabbable.bind(null, options),
flatten: false,
getShadowRoot: options.getShadowRoot,
shadowRootFilter: isValidShadowRootTabbable
});
} else {
candidates = getCandidates(el, options.includeContainer, isNodeMatchingSelectorTabbable.bind(null, options));
}
return sortByOrder(candidates);
};
var focusable2 = function focusable3(el, options) {
options = options || {};
var candidates;
if (options.getShadowRoot) {
candidates = getCandidatesIteratively([el], options.includeContainer, {
filter: isNodeMatchingSelectorFocusable.bind(null, options),
flatten: true,
getShadowRoot: options.getShadowRoot
});
} else {
candidates = getCandidates(el, options.includeContainer, isNodeMatchingSelectorFocusable.bind(null, options));
}
return candidates;
};
var isTabbable = function isTabbable2(node, options) {
options = options || {};
if (!node) {
throw new Error("No node provided");
}
if (matches.call(node, candidateSelector) === false) {
return false;
}
return isNodeMatchingSelectorTabbable(options, node);
};
var focusableCandidateSelector = /* @__PURE__ */ candidateSelectors.concat("iframe").join(",");
var isFocusable2 = function isFocusable3(node, options) {
options = options || {};
if (!node) {
throw new Error("No node provided");
}
if (matches.call(node, focusableCandidateSelector) === false) {
return false;
}
return isNodeMatchingSelectorFocusable(options, node);
};
exports2.focusable = focusable2;
exports2.isFocusable = isFocusable2;
exports2.isTabbable = isTabbable;
exports2.tabbable = tabbable;
}
});
var require_focus_trap = __commonJS2({
"node_modules/focus-trap/dist/focus-trap.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
var tabbable = require_dist();
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
enumerableOnly && (symbols = symbols.filter(function(sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
})), keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread2(target) {
for (var i = 1; i < arguments.length; i++) {
var source = null != arguments[i] ? arguments[i] : {};
i % 2 ? ownKeys(Object(source), true).forEach(function(key) {
_defineProperty(target, key, source[key]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function(key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
return target;
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
var activeFocusTraps = function() {
var trapQueue = [];
return {
activateTrap: function activateTrap(trap) {
if (trapQueue.length > 0) {
var activeTrap = trapQueue[trapQueue.length - 1];
if (activeTrap !== trap) {
activeTrap.pause();
}
}
var trapIndex = trapQueue.indexOf(trap);
if (trapIndex === -1) {
trapQueue.push(trap);
} else {
trapQueue.splice(trapIndex, 1);
trapQueue.push(trap);
}
},
deactivateTrap: function deactivateTrap(trap) {
var trapIndex = trapQueue.indexOf(trap);
if (trapIndex !== -1) {
trapQueue.splice(trapIndex, 1);
}
if (trapQueue.length > 0) {
trapQueue[trapQueue.length - 1].unpause();
}
}
};
}();
var isSelectableInput = function isSelectableInput2(node) {
return node.tagName && node.tagName.toLowerCase() === "input" && typeof node.select === "function";
};
var isEscapeEvent = function isEscapeEvent2(e) {
return e.key === "Escape" || e.key === "Esc" || e.keyCode === 27;
};
var isTabEvent = function isTabEvent2(e) {
return e.key === "Tab" || e.keyCode === 9;
};
var delay = function delay2(fn) {
return setTimeout(fn, 0);
};
var findIndex = function findIndex2(arr, fn) {
var idx = -1;
arr.every(function(value, i) {
if (fn(value)) {
idx = i;
return false;
}
return true;
});
return idx;
};
var valueOrHandler = function valueOrHandler2(value) {
for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
params[_key - 1] = arguments[_key];
}
return typeof value === "function" ? value.apply(void 0, params) : value;
};
var getActualTarget = function getActualTarget2(event) {
return event.target.shadowRoot && typeof event.composedPath === "function" ? event.composedPath()[0] : event.target;
};
var createFocusTrap2 = function createFocusTrap3(elements, userOptions) {
var doc = (userOptions === null || userOptions === void 0 ? void 0 : userOptions.document) || document;
var config = _objectSpread2({
returnFocusOnDeactivate: true,
escapeDeactivates: true,
delayInitialFocus: true
}, userOptions);
var state = {
containers: [],
containerGroups: [],
tabbableGroups: [],
nodeFocusedBeforeActivation: null,
mostRecentlyFocusedNode: null,
active: false,
paused: false,
delayInitialFocusTimer: void 0
};
var trap;
var getOption = function getOption2(configOverrideOptions, optionName, configOptionName) {
return configOverrideOptions && configOverrideOptions[optionName] !== void 0 ? configOverrideOptions[optionName] : config[configOptionName || optionName];
};
var findContainerIndex = function findContainerIndex2(element) {
return state.containerGroups.findIndex(function(_ref) {
var container = _ref.container, tabbableNodes = _ref.tabbableNodes;
return container.contains(element) || tabbableNodes.find(function(node) {
return node === element;
});
});
};
var getNodeForOption = function getNodeForOption2(optionName) {
var optionValue = config[optionName];
if (typeof optionValue === "function") {
for (var _len2 = arguments.length, params = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
params[_key2 - 1] = arguments[_key2];
}
optionValue = optionValue.apply(void 0, params);
}
if (optionValue === true) {
optionValue = void 0;
}
if (!optionValue) {
if (optionValue === void 0 || optionValue === false) {
return optionValue;
}
throw new Error("`".concat(optionName, "` was specified but was not a node, or did not return a node"));
}
var node = optionValue;
if (typeof optionValue === "string") {
node = doc.querySelector(optionValue);
if (!node) {
throw new Error("`".concat(optionName, "` as selector refers to no known node"));
}
}
return node;
};
var getInitialFocusNode = function getInitialFocusNode2() {
var node = getNodeForOption("initialFocus");
if (node === false) {
return false;
}
if (node === void 0) {
if (findContainerIndex(doc.activeElement) >= 0) {
node = doc.activeElement;
} else {
var firstTabbableGroup = state.tabbableGroups[0];
var firstTabbableNode = firstTabbableGroup && firstTabbableGroup.firstTabbableNode;
node = firstTabbableNode || getNodeForOption("fallbackFocus");
}
}
if (!node) {
throw new Error("Your focus-trap needs to have at least one focusable element");
}
return node;
};
var updateTabbableNodes = function updateTabbableNodes2() {
state.containerGroups = state.containers.map(function(container) {
var tabbableNodes = tabbable.tabbable(container, config.tabbableOptions);
var focusableNodes = tabbable.focusable(container, config.tabbableOptions);
return {
container,
tabbableNodes,
focusableNodes,
firstTabbableNode: tabbableNodes.length > 0 ? tabbableNodes[0] : null,
lastTabbableNode: tabbableNodes.length > 0 ? tabbableNodes[tabbableNodes.length - 1] : null,
nextTabbableNode: function nextTabbableNode(node) {
var forward = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
var nodeIdx = focusableNodes.findIndex(function(n) {
return n === node;
});
if (nodeIdx < 0) {
return void 0;
}
if (forward) {
return focusableNodes.slice(nodeIdx + 1).find(function(n) {
return tabbable.isTabbable(n, config.tabbableOptions);
});
}
return focusableNodes.slice(0, nodeIdx).reverse().find(function(n) {
return tabbable.isTabbable(n, config.tabbableOptions);
});
}
};
});
state.tabbableGroups = state.containerGroups.filter(function(group) {
return group.tabbableNodes.length > 0;
});
if (state.tabbableGroups.length <= 0 && !getNodeForOption("fallbackFocus")) {
throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times");
}
};
var tryFocus = function tryFocus2(node) {
if (node === false) {
return;
}
if (node === doc.activeElement) {
return;
}
if (!node || !node.focus) {
tryFocus2(getInitialFocusNode());
return;
}
node.focus({
preventScroll: !!config.preventScroll
});
state.mostRecentlyFocusedNode = node;
if (isSelectableInput(node)) {
node.select();
}
};
var getReturnFocusNode = function getReturnFocusNode2(previousActiveElement) {
var node = getNodeForOption("setReturnFocus", previousActiveElement);
return node ? node : node === false ? false : previousActiveElement;
};
var checkPointerDown = function checkPointerDown2(e) {
var target = getActualTarget(e);
if (findContainerIndex(target) >= 0) {
return;
}
if (valueOrHandler(config.clickOutsideDeactivates, e)) {
trap.deactivate({
returnFocus: config.returnFocusOnDeactivate && !tabbable.isFocusable(target, config.tabbableOptions)
});
return;
}
if (valueOrHandler(config.allowOutsideClick, e)) {
return;
}
e.preventDefault();
};
var checkFocusIn = function checkFocusIn2(e) {
var target = getActualTarget(e);
var targetContained = findContainerIndex(target) >= 0;
if (targetContained || target instanceof Document) {
if (targetContained) {
state.mostRecentlyFocusedNode = target;
}
} else {
e.stopImmediatePropagation();
tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode());
}
};
var checkTab = function checkTab2(e) {
var target = getActualTarget(e);
updateTabbableNodes();
var destinationNode = null;
if (state.tabbableGroups.length > 0) {
var containerIndex = findContainerIndex(target);
var containerGroup = containerIndex >= 0 ? state.containerGroups[containerIndex] : void 0;
if (containerIndex < 0) {
if (e.shiftKey) {
destinationNode = state.tabbableGroups[state.tabbableGroups.length - 1].lastTabbableNode;
} else {
destinationNode = state.tabbableGroups[0].firstTabbableNode;
}
} else if (e.shiftKey) {
var startOfGroupIndex = findIndex(state.tabbableGroups, function(_ref2) {
var firstTabbableNode = _ref2.firstTabbableNode;
return target === firstTabbableNode;
});
if (startOfGroupIndex < 0 && (containerGroup.container === target || tabbable.isFocusable(target, config.tabbableOptions) && !tabbable.isTabbable(target, config.tabbableOptions) && !containerGroup.nextTabbableNode(target, false))) {
startOfGroupIndex = containerIndex;
}
if (startOfGroupIndex >= 0) {
var destinationGroupIndex = startOfGroupIndex === 0 ? state.tabbableGroups.length - 1 : startOfGroupIndex - 1;
var destinationGroup = state.tabbableGroups[destinationGroupIndex];
destinationNode = destinationGroup.lastTabbableNode;
}
} else {
var lastOfGroupIndex = findIndex(state.tabbableGroups, function(_ref3) {
var lastTabbableNode = _ref3.lastTabbableNode;
return target === lastTabbableNode;
});
if (lastOfGroupIndex < 0 && (containerGroup.container === target || tabbable.isFocusable(target, config.tabbableOptions) && !tabbable.isTabbable(target, config.tabbableOptions) && !containerGroup.nextTabbableNode(target))) {
lastOfGroupIndex = containerIndex;
}
if (lastOfGroupIndex >= 0) {
var _destinationGroupIndex = lastOfGroupIndex === state.tabbableGroups.length - 1 ? 0 : lastOfGroupIndex + 1;
var _destinationGroup = state.tabbableGroups[_destinationGroupIndex];
destinationNode = _destinationGroup.firstTabbableNode;
}
}
} else {
destinationNode = getNodeForOption("fallbackFocus");
}
if (destinationNode) {
e.preventDefault();
tryFocus(destinationNode);
}
};
var checkKey = function checkKey2(e) {
if (isEscapeEvent(e) && valueOrHandler(config.escapeDeactivates, e) !== false) {
e.preventDefault();
trap.deactivate();
return;
}
if (isTabEvent(e)) {
checkTab(e);
return;
}
};
var checkClick = function checkClick2(e) {
var target = getActualTarget(e);
if (findContainerIndex(target) >= 0) {
return;
}
if (valueOrHandler(config.clickOutsideDeactivates, e)) {
return;
}
if (valueOrHandler(config.allowOutsideClick, e)) {
return;
}
e.preventDefault();
e.stopImmediatePropagation();
};
var addListeners = function addListeners2() {
if (!state.active) {
return;
}
activeFocusTraps.activateTrap(trap);
state.delayInitialFocusTimer = config.delayInitialFocus ? delay(function() {
tryFocus(getInitialFocusNode());
}) : tryFocus(getInitialFocusNode());
doc.addEventListener("focusin", checkFocusIn, true);
doc.addEventListener("mousedown", checkPointerDown, {
capture: true,
passive: false
});
doc.addEventListener("touchstart", checkPointerDown, {
capture: true,
passive: false
});
doc.addEventListener("click", checkClick, {
capture: true,
passive: false
});
doc.addEventListener("keydown", checkKey, {
capture: true,
passive: false
});
return trap;
};
var removeListeners = function removeListeners2() {
if (!state.active) {
return;
}
doc.removeEventListener("focusin", checkFocusIn, true);
doc.removeEventListener("mousedown", checkPointerDown, true);
doc.removeEventListener("touchstart", checkPointerDown, true);
doc.removeEventListener("click", checkClick, true);
doc.removeEventListener("keydown", checkKey, true);
return trap;
};
trap = {
get active() {
return state.active;
},
get paused() {
return state.paused;
},
activate: function activate(activateOptions) {
if (state.active) {
return this;
}
var onActivate = getOption(activateOptions, "onActivate");
var onPostActivate = getOption(activateOptions, "onPostActivate");
var checkCanFocusTrap = getOption(activateOptions, "checkCanFocusTrap");
if (!checkCanFocusTrap) {
updateTabbableNodes();
}
state.active = true;
state.paused = false;
state.nodeFocusedBeforeActivation = doc.activeElement;
if (onActivate) {
onActivate();
}
var finishActivation = function finishActivation2() {
if (checkCanFocusTrap) {
updateTabbableNodes();
}
addListeners();
if (onPostActivate) {
onPostActivate();
}
};
if (checkCanFocusTrap) {
checkCanFocusTrap(state.containers.concat()).then(finishActivation, finishActivation);
return this;
}
finishActivation();
return this;
},
deactivate: function deactivate(deactivateOptions) {
if (!state.active) {
return this;
}
var options = _objectSpread2({
onDeactivate: config.onDeactivate,
onPostDeactivate: config.onPostDeactivate,
checkCanReturnFocus: config.checkCanReturnFocus
}, deactivateOptions);
clearTimeout(state.delayInitialFocusTimer);
state.delayInitialFocusTimer = void 0;
removeListeners();
state.active = false;
state.paused = false;
activeFocusTraps.deactivateTrap(trap);
var onDeactivate = getOption(options, "onDeactivate");
var onPostDeactivate = getOption(options, "onPostDeactivate");
var checkCanReturnFocus = getOption(options, "checkCanReturnFocus");
var returnFocus = getOption(options, "returnFocus", "returnFocusOnDeactivate");
if (onDeactivate) {
onDeactivate();
}
var finishDeactivation = function finishDeactivation2() {
delay(function() {
if (returnFocus) {
tryFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation));
}
if (onPostDeactivate) {
onPostDeactivate();
}
});
};
if (returnFocus && checkCanReturnFocus) {
checkCanReturnFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation)).then(finishDeactivation, finishDeactivation);
return this;
}
finishDeactivation();
return this;
},
pause: function pause() {
if (state.paused || !state.active) {
return this;
}
state.paused = true;
removeListeners();
return this;
},
unpause: function unpause() {
if (!state.paused || !state.active) {
return this;
}
state.paused = false;
updateTabbableNodes();
addListeners();
return this;
},
updateContainerElements: function updateContainerElements(containerElements) {
var elementsAsArray = [].concat(containerElements).filter(Boolean);
state.containers = elementsAsArray.map(function(element) {
return typeof element === "string" ? doc.querySelector(element) : element;
});
if (state.active) {
updateTabbableNodes();
}
return this;
}
};
trap.updateContainerElements(elements);
return trap;
};
exports2.createFocusTrap = createFocusTrap2;
}
});
var module_exports = {};
__export(module_exports, {
default: () => module_default,
focus: () => src_default
});
module.exports = __toCommonJS(module_exports);
var import_focus_trap = __toESM2(require_focus_trap());
var import_tabbable = __toESM2(require_dist());
function src_default(Alpine19) {
let lastFocused;
let currentFocused;
window.addEventListener("focusin", () => {
lastFocused = currentFocused;
currentFocused = document.activeElement;
});
Alpine19.magic("focus", (el) => {
let within = el;
return {
__noscroll: false,
__wrapAround: false,
within(el2) {
within = el2;
return this;
},
withoutScrolling() {
this.__noscroll = true;
return this;
},
noscroll() {
this.__noscroll = true;
return this;
},
withWrapAround() {
this.__wrapAround = true;
return this;
},
wrap() {
return this.withWrapAround();
},
focusable(el2) {
return (0, import_tabbable.isFocusable)(el2);
},
previouslyFocused() {
return lastFocused;
},
lastFocused() {
return lastFocused;
},
focused() {
return currentFocused;
},
focusables() {
if (Array.isArray(within))
return within;
return (0, import_tabbable.focusable)(within, { displayCheck: "none" });
},
all() {
return this.focusables();
},
isFirst(el2) {
let els2 = this.all();
return els2[0] && els2[0].isSameNode(el2);
},
isLast(el2) {
let els2 = this.all();
return els2.length && els2.slice(-1)[0].isSameNode(el2);
},
getFirst() {
return this.all()[0];
},
getLast() {
return this.all().slice(-1)[0];
},
getNext() {
let list = this.all();
let current = document.activeElement;
if (list.indexOf(current) === -1)
return;
if (this.__wrapAround && list.indexOf(current) === list.length - 1) {
return list[0];
}
return list[list.indexOf(current) + 1];
},
getPrevious() {
let list = this.all();
let current = document.activeElement;
if (list.indexOf(current) === -1)
return;
if (this.__wrapAround && list.indexOf(current) === 0) {
return list.slice(-1)[0];
}
return list[list.indexOf(current) - 1];
},
first() {
this.focus(this.getFirst());
},
last() {
this.focus(this.getLast());
},
next() {
this.focus(this.getNext());
},
previous() {
this.focus(this.getPrevious());
},
prev() {
return this.previous();
},
focus(el2) {
if (!el2)
return;
setTimeout(() => {
if (!el2.hasAttribute("tabindex"))
el2.setAttribute("tabindex", "0");
el2.focus({ preventScroll: this.__noscroll });
});
}
};
});
Alpine19.directive("trap", Alpine19.skipDuringClone((el, { expression, modifiers }, { effect, evaluateLater, cleanup }) => {
let evaluator = evaluateLater(expression);
let oldValue = false;
let options = {
escapeDeactivates: false,
allowOutsideClick: true,
fallbackFocus: () => el
};
if (modifiers.includes("noautofocus")) {
options.initialFocus = false;
} else {
let autofocusEl = el.querySelector("[autofocus]");
if (autofocusEl)
options.initialFocus = autofocusEl;
}
let trap = (0, import_focus_trap.createFocusTrap)(el, options);
let undoInert = () => {
};
let undoDisableScrolling = () => {
};
const releaseFocus = () => {
undoInert();
undoInert = () => {
};
undoDisableScrolling();
undoDisableScrolling = () => {
};
trap.deactivate({
returnFocus: !modifiers.includes("noreturn")
});
};
effect(() => evaluator((value) => {
if (oldValue === value)
return;
if (value && !oldValue) {
if (modifiers.includes("noscroll"))
undoDisableScrolling = disableScrolling();
if (modifiers.includes("inert"))
undoInert = setInert(el);
setTimeout(() => {
trap.activate();
}, 15);
}
if (!value && oldValue) {
releaseFocus();
}
oldValue = !!value;
}));
cleanup(releaseFocus);
}, (el, { expression, modifiers }, { evaluate }) => {
if (modifiers.includes("inert") && evaluate(expression))
setInert(el);
}));
}
function setInert(el) {
let undos = [];
crawlSiblingsUp(el, (sibling) => {
let cache = sibling.hasAttribute("aria-hidden");
sibling.setAttribute("aria-hidden", "true");
undos.push(() => cache || sibling.removeAttribute("aria-hidden"));
});
return () => {
while (undos.length)
undos.pop()();
};
}
function crawlSiblingsUp(el, callback) {
if (el.isSameNode(document.body) || !el.parentNode)
return;
Array.from(el.parentNode.children).forEach((sibling) => {
if (sibling.isSameNode(el)) {
crawlSiblingsUp(el.parentNode, callback);
} else {
callback(sibling);
}
});
}
function disableScrolling() {
let overflow = document.documentElement.style.overflow;
let paddingRight = document.documentElement.style.paddingRight;
let scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;
document.documentElement.style.overflow = "hidden";
document.documentElement.style.paddingRight = `${scrollbarWidth}px`;
return () => {
document.documentElement.style.overflow = overflow;
document.documentElement.style.paddingRight = paddingRight;
};
}
var module_default = src_default;
}
});
// ../../../../usr/local/lib/node_modules/@alpinejs/persist/dist/module.cjs.js
var require_module_cjs4 = __commonJS({
"../../../../usr/local/lib/node_modules/@alpinejs/persist/dist/module.cjs.js"(exports, module) {
var __defProp2 = Object.defineProperty;
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
var __getOwnPropNames2 = Object.getOwnPropertyNames;
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
var __export = (target, all2) => {
for (var name in all2)
__defProp2(target, name, { get: all2[name], enumerable: true });
};
var __copyProps2 = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames2(from))
if (!__hasOwnProp2.call(to, key) && key !== except)
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
var module_exports = {};
__export(module_exports, {
default: () => module_default,
persist: () => src_default
});
module.exports = __toCommonJS(module_exports);
function src_default(Alpine19) {
let persist3 = () => {
let alias;
let storage;
try {
storage = localStorage;
} catch (e) {
console.error(e);
console.warn("Alpine: $persist is using temporary storage since localStorage is unavailable.");
let dummy = /* @__PURE__ */ new Map();
storage = {
getItem: dummy.get.bind(dummy),
setItem: dummy.set.bind(dummy)
};
}
return Alpine19.interceptor((initialValue, getter, setter, path, key) => {
let lookup = alias || `_x_${path}`;
let initial = storageHas(lookup, storage) ? storageGet(lookup, storage) : initialValue;
setter(initial);
Alpine19.effect(() => {
let value = getter();
storageSet(lookup, value, storage);
setter(value);
});
return initial;
}, (func) => {
func.as = (key) => {
alias = key;
return func;
}, func.using = (target) => {
storage = target;
return func;
};
});
};
Object.defineProperty(Alpine19, "$persist", { get: () => persist3() });
Alpine19.magic("persist", persist3);
Alpine19.persist = (key, { get, set }, storage = localStorage) => {
let initial = storageHas(key, storage) ? storageGet(key, storage) : get();
set(initial);
Alpine19.effect(() => {
let value = get();
storageSet(key, value, storage);
set(value);
});
};
}
function storageHas(key, storage) {
return storage.getItem(key) !== null;
}
function storageGet(key, storage) {
let value = storage.getItem(key, storage);
if (value === void 0)
return;
return JSON.parse(value);
}
function storageSet(key, value, storage) {
storage.setItem(key, JSON.stringify(value));
}
var module_default = src_default;
}
});
// ../../../../usr/local/lib/node_modules/@alpinejs/intersect/dist/module.cjs.js
var require_module_cjs5 = __commonJS({
"../../../../usr/local/lib/node_modules/@alpinejs/intersect/dist/module.cjs.js"(exports, module) {
var __defProp2 = Object.defineProperty;
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
var __getOwnPropNames2 = Object.getOwnPropertyNames;
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
var __export = (target, all2) => {
for (var name in all2)
__defProp2(target, name, { get: all2[name], enumerable: true });
};
var __copyProps2 = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames2(from))
if (!__hasOwnProp2.call(to, key) && key !== except)
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
var module_exports = {};
__export(module_exports, {
default: () => module_default,
intersect: () => src_default
});
module.exports = __toCommonJS(module_exports);
function src_default(Alpine19) {
Alpine19.directive("intersect", Alpine19.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater, cleanup }) => {
let evaluate = evaluateLater(expression);
let options = {
rootMargin: getRootMargin(modifiers),
threshold: getThreshold(modifiers)
};
let observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting === (value === "leave"))
return;
evaluate();
modifiers.includes("once") && observer.disconnect();
});
}, options);
observer.observe(el);
cleanup(() => {
observer.disconnect();
});
}));
}
function getThreshold(modifiers) {
if (modifiers.includes("full"))
return 0.99;
if (modifiers.includes("half"))
return 0.5;
if (!modifiers.includes("threshold"))
return 0;
let threshold = modifiers[modifiers.indexOf("threshold") + 1];
if (threshold === "100")
return 1;
if (threshold === "0")
return 0;
return Number(`.${threshold}`);
}
function getLengthValue(rawValue) {
let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/);
return match ? match[1] + (match[2] || "px") : void 0;
}
function getRootMargin(modifiers) {
const key = "margin";
const fallback2 = "0px 0px 0px 0px";
const index = modifiers.indexOf(key);
if (index === -1)
return fallback2;
let values = [];
for (let i = 1; i < 5; i++) {
values.push(getLengthValue(modifiers[index + i] || ""));
}
values = values.filter((v) => v !== void 0);
return values.length ? values.join(" ").trim() : fallback2;
}
var module_default = src_default;
}
});
// node_modules/@alpinejs/resize/dist/module.cjs.js
var require_module_cjs6 = __commonJS({
"node_modules/@alpinejs/resize/dist/module.cjs.js"(exports, module) {
var __defProp2 = Object.defineProperty;
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
var __getOwnPropNames2 = Object.getOwnPropertyNames;
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
var __export = (target, all2) => {
for (var name in all2)
__defProp2(target, name, { get: all2[name], enumerable: true });
};
var __copyProps2 = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames2(from))
if (!__hasOwnProp2.call(to, key) && key !== except)
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
var module_exports = {};
__export(module_exports, {
default: () => module_default,
resize: () => src_default
});
module.exports = __toCommonJS(module_exports);
function src_default(Alpine19) {
Alpine19.directive("resize", Alpine19.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater, cleanup }) => {
let evaluator = evaluateLater(expression);
let evaluate = (width, height) => {
evaluator(() => {
}, { scope: { "$width": width, "$height": height } });
};
let off = modifiers.includes("document") ? onDocumentResize(evaluate) : onElResize(el, evaluate);
cleanup(() => off());
}));
}
function onElResize(el, callback) {
let observer = new ResizeObserver((entries) => {
let [width, height] = dimensions(entries);
callback(width, height);
});
observer.observe(el);
return () => observer.disconnect();
}
var documentResizeObserver;
var documentResizeObserverCallbacks = /* @__PURE__ */ new Set();
function onDocumentResize(callback) {
documentResizeObserverCallbacks.add(callback);
if (!documentResizeObserver) {
documentResizeObserver = new ResizeObserver((entries) => {
let [width, height] = dimensions(entries);
documentResizeObserverCallbacks.forEach((i) => i(width, height));
});
documentResizeObserver.observe(document.documentElement);
}
return () => {
documentResizeObserverCallbacks.delete(callback);
};
}
function dimensions(entries) {
let width, height;
for (let entry of entries) {
width = entry.borderBoxSize[0].inlineSize;
height = entry.borderBoxSize[0].blockSize;
}
return [width, height];
}
var module_default = src_default;
}
});
// ../alpine/packages/anchor/dist/module.cjs.js
var require_module_cjs7 = __commonJS({
"../alpine/packages/anchor/dist/module.cjs.js"(exports, module) {
var __defProp2 = Object.defineProperty;
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
var __getOwnPropNames2 = Object.getOwnPropertyNames;
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
var __export = (target, all2) => {
for (var name in all2)
__defProp2(target, name, { get: all2[name], enumerable: true });
};
var __copyProps2 = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames2(from))
if (!__hasOwnProp2.call(to, key) && key !== except)
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
var module_exports = {};
__export(module_exports, {
anchor: () => src_default,
default: () => module_default
});
module.exports = __toCommonJS(module_exports);
var min = Math.min;
var max = Math.max;
var round = Math.round;
var floor = Math.floor;
var createCoords = (v) => ({
x: v,
y: v
});
var oppositeSideMap = {
left: "right",
right: "left",
bottom: "top",
top: "bottom"
};
var oppositeAlignmentMap = {
start: "end",
end: "start"
};
function clamp(start2, value, end) {
return max(start2, min(value, end));
}
function evaluate(value, param) {
return typeof value === "function" ? value(param) : value;
}
function getSide(placement) {
return placement.split("-")[0];
}
function getAlignment(placement) {
return placement.split("-")[1];
}
function getOppositeAxis(axis) {
return axis === "x" ? "y" : "x";
}
function getAxisLength(axis) {
return axis === "y" ? "height" : "width";
}
function getSideAxis(placement) {
return ["top", "bottom"].includes(getSide(placement)) ? "y" : "x";
}
function getAlignmentAxis(placement) {
return getOppositeAxis(getSideAxis(placement));
}
function getAlignmentSides(placement, rects, rtl) {
if (rtl === void 0) {
rtl = false;
}
const alignment = getAlignment(placement);
const alignmentAxis = getAlignmentAxis(placement);
const length = getAxisLength(alignmentAxis);
let mainAlignmentSide = alignmentAxis === "x" ? alignment === (rtl ? "end" : "start") ? "right" : "left" : alignment === "start" ? "bottom" : "top";
if (rects.reference[length] > rects.floating[length]) {
mainAlignmentSide = getOppositePlacement(mainAlignmentSide);
}
return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];
}
function getExpandedPlacements(placement) {
const oppositePlacement = getOppositePlacement(placement);
return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];
}
function getOppositeAlignmentPlacement(placement) {
return placement.replace(/start|end/g, (alignment) => oppositeAlignmentMap[alignment]);
}
function getSideList(side, isStart, rtl) {
const lr = ["left", "right"];
const rl = ["right", "left"];
const tb = ["top", "bottom"];
const bt = ["bottom", "top"];
switch (side) {
case "top":
case "bottom":
if (rtl)
return isStart ? rl : lr;
return isStart ? lr : rl;
case "left":
case "right":
return isStart ? tb : bt;
default:
return [];
}
}
function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {
const alignment = getAlignment(placement);
let list = getSideList(getSide(placement), direction === "start", rtl);
if (alignment) {
list = list.map((side) => side + "-" + alignment);
if (flipAlignment) {
list = list.concat(list.map(getOppositeAlignmentPlacement));
}
}
return list;
}
function getOppositePlacement(placement) {
return placement.replace(/left|right|bottom|top/g, (side) => oppositeSideMap[side]);
}
function expandPaddingObject(padding) {
return {
top: 0,
right: 0,
bottom: 0,
left: 0,
...padding
};
}
function getPaddingObject(padding) {
return typeof padding !== "number" ? expandPaddingObject(padding) : {
top: padding,
right: padding,
bottom: padding,
left: padding
};
}
function rectToClientRect(rect) {
return {
...rect,
top: rect.y,
left: rect.x,
right: rect.x + rect.width,
bottom: rect.y + rect.height
};
}
function computeCoordsFromPlacement(_ref, placement, rtl) {
let {
reference,
floating
} = _ref;
const sideAxis = getSideAxis(placement);
const alignmentAxis = getAlignmentAxis(placement);
const alignLength = getAxisLength(alignmentAxis);
const side = getSide(placement);
const isVertical = sideAxis === "y";
const commonX = reference.x + reference.width / 2 - floating.width / 2;
const commonY = reference.y + reference.height / 2 - floating.height / 2;
const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;
let coords;
switch (side) {
case "top":
coords = {
x: commonX,
y: reference.y - floating.height
};
break;
case "bottom":
coords = {
x: commonX,
y: reference.y + reference.height
};
break;
case "right":
coords = {
x: reference.x + reference.width,
y: commonY
};
break;
case "left":
coords = {
x: reference.x - floating.width,
y: commonY
};
break;
default:
coords = {
x: reference.x,
y: reference.y
};
}
switch (getAlignment(placement)) {
case "start":
coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);
break;
case "end":
coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);
break;
}
return coords;
}
var computePosition = async (reference, floating, config) => {
const {
placement = "bottom",
strategy = "absolute",
middleware = [],
platform: platform2
} = config;
const validMiddleware = middleware.filter(Boolean);
const rtl = await (platform2.isRTL == null ? void 0 : platform2.isRTL(floating));
let rects = await platform2.getElementRects({
reference,
floating,
strategy
});
let {
x,
y
} = computeCoordsFromPlacement(rects, placement, rtl);
let statefulPlacement = placement;
let middlewareData = {};
let resetCount = 0;
for (let i = 0; i < validMiddleware.length; i++) {
const {
name,
fn
} = validMiddleware[i];
const {
x: nextX,
y: nextY,
data,
reset
} = await fn({
x,
y,
initialPlacement: placement,
placement: statefulPlacement,
strategy,
middlewareData,
rects,
platform: platform2,
elements: {
reference,
floating
}
});
x = nextX != null ? nextX : x;
y = nextY != null ? nextY : y;
middlewareData = {
...middlewareData,
[name]: {
...middlewareData[name],
...data
}
};
if (reset && resetCount <= 50) {
resetCount++;
if (typeof reset === "object") {
if (reset.placement) {
statefulPlacement = reset.placement;
}
if (reset.rects) {
rects = reset.rects === true ? await platform2.getElementRects({
reference,
floating,
strategy
}) : reset.rects;
}
({
x,
y
} = computeCoordsFromPlacement(rects, statefulPlacement, rtl));
}
i = -1;
continue;
}
}
return {
x,
y,
placement: statefulPlacement,
strategy,
middlewareData
};
};
async function detectOverflow(state, options) {
var _await$platform$isEle;
if (options === void 0) {
options = {};
}
const {
x,
y,
platform: platform2,
rects,
elements,
strategy
} = state;
const {
boundary = "clippingAncestors",
rootBoundary = "viewport",
elementContext = "floating",
altBoundary = false,
padding = 0
} = evaluate(options, state);
const paddingObject = getPaddingObject(padding);
const altContext = elementContext === "floating" ? "reference" : "floating";
const element = elements[altBoundary ? altContext : elementContext];
const clippingClientRect = rectToClientRect(await platform2.getClippingRect({
element: ((_await$platform$isEle = await (platform2.isElement == null ? void 0 : platform2.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || await (platform2.getDocumentElement == null ? void 0 : platform2.getDocumentElement(elements.floating)),
boundary,
rootBoundary,
strategy
}));
const rect = elementContext === "floating" ? {
...rects.floating,
x,
y
} : rects.reference;
const offsetParent = await (platform2.getOffsetParent == null ? void 0 : platform2.getOffsetParent(elements.floating));
const offsetScale = await (platform2.isElement == null ? void 0 : platform2.isElement(offsetParent)) ? await (platform2.getScale == null ? void 0 : platform2.getScale(offsetParent)) || {
x: 1,
y: 1
} : {
x: 1,
y: 1
};
const elementClientRect = rectToClientRect(platform2.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform2.convertOffsetParentRelativeRectToViewportRelativeRect({
rect,
offsetParent,
strategy
}) : rect);
return {
top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,
bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,
left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,
right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x
};
}
var flip = function(options) {
if (options === void 0) {
options = {};
}
return {
name: "flip",
options,
async fn(state) {
var _middlewareData$arrow, _middlewareData$flip;
const {
placement,
middlewareData,
rects,
initialPlacement,
platform: platform2,
elements
} = state;
const {
mainAxis: checkMainAxis = true,
crossAxis: checkCrossAxis = true,
fallbackPlacements: specifiedFallbackPlacements,
fallbackStrategy = "bestFit",
fallbackAxisSideDirection = "none",
flipAlignment = true,
...detectOverflowOptions
} = evaluate(options, state);
if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {
return {};
}
const side = getSide(placement);
const isBasePlacement = getSide(initialPlacement) === initialPlacement;
const rtl = await (platform2.isRTL == null ? void 0 : platform2.isRTL(elements.floating));
const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));
if (!specifiedFallbackPlacements && fallbackAxisSideDirection !== "none") {
fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));
}
const placements2 = [initialPlacement, ...fallbackPlacements];
const overflow = await detectOverflow(state, detectOverflowOptions);
const overflows = [];
let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];
if (checkMainAxis) {
overflows.push(overflow[side]);
}
if (checkCrossAxis) {
const sides2 = getAlignmentSides(placement, rects, rtl);
overflows.push(overflow[sides2[0]], overflow[sides2[1]]);
}
overflowsData = [...overflowsData, {
placement,
overflows
}];
if (!overflows.every((side2) => side2 <= 0)) {
var _middlewareData$flip2, _overflowsData$filter;
const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;
const nextPlacement = placements2[nextIndex];
if (nextPlacement) {
return {
data: {
index: nextIndex,
overflows: overflowsData
},
reset: {
placement: nextPlacement
}
};
}
let resetPlacement = (_overflowsData$filter = overflowsData.filter((d) => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;
if (!resetPlacement) {
switch (fallbackStrategy) {
case "bestFit": {
var _overflowsData$map$so;
const placement2 = (_overflowsData$map$so = overflowsData.map((d) => [d.placement, d.overflows.filter((overflow2) => overflow2 > 0).reduce((acc, overflow2) => acc + overflow2, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$map$so[0];
if (placement2) {
resetPlacement = placement2;
}
break;
}
case "initialPlacement":
resetPlacement = initialPlacement;
break;
}
}
if (placement !== resetPlacement) {
return {
reset: {
placement: resetPlacement
}
};
}
}
return {};
}
};
};
async function convertValueToCoords(state, options) {
const {
placement,
platform: platform2,
elements
} = state;
const rtl = await (platform2.isRTL == null ? void 0 : platform2.isRTL(elements.floating));
const side = getSide(placement);
const alignment = getAlignment(placement);
const isVertical = getSideAxis(placement) === "y";
const mainAxisMulti = ["left", "top"].includes(side) ? -1 : 1;
const crossAxisMulti = rtl && isVertical ? -1 : 1;
const rawValue = evaluate(options, state);
let {
mainAxis,
crossAxis,
alignmentAxis
} = typeof rawValue === "number" ? {
mainAxis: rawValue,
crossAxis: 0,
alignmentAxis: null
} : {
mainAxis: 0,
crossAxis: 0,
alignmentAxis: null,
...rawValue
};
if (alignment && typeof alignmentAxis === "number") {
crossAxis = alignment === "end" ? alignmentAxis * -1 : alignmentAxis;
}
return isVertical ? {
x: crossAxis * crossAxisMulti,
y: mainAxis * mainAxisMulti
} : {
x: mainAxis * mainAxisMulti,
y: crossAxis * crossAxisMulti
};
}
var offset = function(options) {
if (options === void 0) {
options = 0;
}
return {
name: "offset",
options,
async fn(state) {
const {
x,
y
} = state;
const diffCoords = await convertValueToCoords(state, options);
return {
x: x + diffCoords.x,
y: y + diffCoords.y,
data: diffCoords
};
}
};
};
var shift = function(options) {
if (options === void 0) {
options = {};
}
return {
name: "shift",
options,
async fn(state) {
const {
x,
y,
placement
} = state;
const {
mainAxis: checkMainAxis = true,
crossAxis: checkCrossAxis = false,
limiter = {
fn: (_ref) => {
let {
x: x2,
y: y2
} = _ref;
return {
x: x2,
y: y2
};
}
},
...detectOverflowOptions
} = evaluate(options, state);
const coords = {
x,
y
};
const overflow = await detectOverflow(state, detectOverflowOptions);
const crossAxis = getSideAxis(getSide(placement));
const mainAxis = getOppositeAxis(crossAxis);
let mainAxisCoord = coords[mainAxis];
let crossAxisCoord = coords[crossAxis];
if (checkMainAxis) {
const minSide = mainAxis === "y" ? "top" : "left";
const maxSide = mainAxis === "y" ? "bottom" : "right";
const min2 = mainAxisCoord + overflow[minSide];
const max2 = mainAxisCoord - overflow[maxSide];
mainAxisCoord = clamp(min2, mainAxisCoord, max2);
}
if (checkCrossAxis) {
const minSide = crossAxis === "y" ? "top" : "left";
const maxSide = crossAxis === "y" ? "bottom" : "right";
const min2 = crossAxisCoord + overflow[minSide];
const max2 = crossAxisCoord - overflow[maxSide];
crossAxisCoord = clamp(min2, crossAxisCoord, max2);
}
const limitedCoords = limiter.fn({
...state,
[mainAxis]: mainAxisCoord,
[crossAxis]: crossAxisCoord
});
return {
...limitedCoords,
data: {
x: limitedCoords.x - x,
y: limitedCoords.y - y
}
};
}
};
};
function getNodeName(node) {
if (isNode(node)) {
return (node.nodeName || "").toLowerCase();
}
return "#document";
}
function getWindow(node) {
var _node$ownerDocument;
return (node == null ? void 0 : (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;
}
function getDocumentElement(node) {
var _ref;
return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;
}
function isNode(value) {
return value instanceof Node || value instanceof getWindow(value).Node;
}
function isElement(value) {
return value instanceof Element || value instanceof getWindow(value).Element;
}
function isHTMLElement(value) {
return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;
}
function isShadowRoot(value) {
if (typeof ShadowRoot === "undefined") {
return false;
}
return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;
}
function isOverflowElement(element) {
const {
overflow,
overflowX,
overflowY,
display
} = getComputedStyle2(element);
return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !["inline", "contents"].includes(display);
}
function isTableElement(element) {
return ["table", "td", "th"].includes(getNodeName(element));
}
function isContainingBlock(element) {
const webkit = isWebKit();
const css = getComputedStyle2(element);
return css.transform !== "none" || css.perspective !== "none" || (css.containerType ? css.containerType !== "normal" : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== "none" : false) || !webkit && (css.filter ? css.filter !== "none" : false) || ["transform", "perspective", "filter"].some((value) => (css.willChange || "").includes(value)) || ["paint", "layout", "strict", "content"].some((value) => (css.contain || "").includes(value));
}
function getContainingBlock(element) {
let currentNode = getParentNode(element);
while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {
if (isContainingBlock(currentNode)) {
return currentNode;
} else {
currentNode = getParentNode(currentNode);
}
}
return null;
}
function isWebKit() {
if (typeof CSS === "undefined" || !CSS.supports)
return false;
return CSS.supports("-webkit-backdrop-filter", "none");
}
function isLastTraversableNode(node) {
return ["html", "body", "#document"].includes(getNodeName(node));
}
function getComputedStyle2(element) {
return getWindow(element).getComputedStyle(element);
}
function getNodeScroll(element) {
if (isElement(element)) {
return {
scrollLeft: element.scrollLeft,
scrollTop: element.scrollTop
};
}
return {
scrollLeft: element.pageXOffset,
scrollTop: element.pageYOffset
};
}
function getParentNode(node) {
if (getNodeName(node) === "html") {
return node;
}
const result = node.assignedSlot || node.parentNode || isShadowRoot(node) && node.host || getDocumentElement(node);
return isShadowRoot(result) ? result.host : result;
}
function getNearestOverflowAncestor(node) {
const parentNode = getParentNode(node);
if (isLastTraversableNode(parentNode)) {
return node.ownerDocument ? node.ownerDocument.body : node.body;
}
if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {
return parentNode;
}
return getNearestOverflowAncestor(parentNode);
}
function getOverflowAncestors(node, list, traverseIframes) {
var _node$ownerDocument2;
if (list === void 0) {
list = [];
}
if (traverseIframes === void 0) {
traverseIframes = true;
}
const scrollableAncestor = getNearestOverflowAncestor(node);
const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);
const win = getWindow(scrollableAncestor);
if (isBody) {
return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], win.frameElement && traverseIframes ? getOverflowAncestors(win.frameElement) : []);
}
return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));
}
function getCssDimensions(element) {
const css = getComputedStyle2(element);
let width = parseFloat(css.width) || 0;
let height = parseFloat(css.height) || 0;
const hasOffset = isHTMLElement(element);
const offsetWidth = hasOffset ? element.offsetWidth : width;
const offsetHeight = hasOffset ? element.offsetHeight : height;
const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;
if (shouldFallback) {
width = offsetWidth;
height = offsetHeight;
}
return {
width,
height,
$: shouldFallback
};
}
function unwrapElement(element) {
return !isElement(element) ? element.contextElement : element;
}
function getScale(element) {
const domElement = unwrapElement(element);
if (!isHTMLElement(domElement)) {
return createCoords(1);
}
const rect = domElement.getBoundingClientRect();
const {
width,
height,
$
} = getCssDimensions(domElement);
let x = ($ ? round(rect.width) : rect.width) / width;
let y = ($ ? round(rect.height) : rect.height) / height;
if (!x || !Number.isFinite(x)) {
x = 1;
}
if (!y || !Number.isFinite(y)) {
y = 1;
}
return {
x,
y
};
}
var noOffsets = /* @__PURE__ */ createCoords(0);
function getVisualOffsets(element) {
const win = getWindow(element);
if (!isWebKit() || !win.visualViewport) {
return noOffsets;
}
return {
x: win.visualViewport.offsetLeft,
y: win.visualViewport.offsetTop
};
}
function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {
if (isFixed === void 0) {
isFixed = false;
}
if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {
return false;
}
return isFixed;
}
function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {
if (includeScale === void 0) {
includeScale = false;
}
if (isFixedStrategy === void 0) {
isFixedStrategy = false;
}
const clientRect = element.getBoundingClientRect();
const domElement = unwrapElement(element);
let scale = createCoords(1);
if (includeScale) {
if (offsetParent) {
if (isElement(offsetParent)) {
scale = getScale(offsetParent);
}
} else {
scale = getScale(element);
}
}
const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);
let x = (clientRect.left + visualOffsets.x) / scale.x;
let y = (clientRect.top + visualOffsets.y) / scale.y;
let width = clientRect.width / scale.x;
let height = clientRect.height / scale.y;
if (domElement) {
const win = getWindow(domElement);
const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;
let currentIFrame = win.frameElement;
while (currentIFrame && offsetParent && offsetWin !== win) {
const iframeScale = getScale(currentIFrame);
const iframeRect = currentIFrame.getBoundingClientRect();
const css = getComputedStyle2(currentIFrame);
const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;
const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;
x *= iframeScale.x;
y *= iframeScale.y;
width *= iframeScale.x;
height *= iframeScale.y;
x += left;
y += top;
currentIFrame = getWindow(currentIFrame).frameElement;
}
}
return rectToClientRect({
width,
height,
x,
y
});
}
function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
let {
rect,
offsetParent,
strategy
} = _ref;
const isOffsetParentAnElement = isHTMLElement(offsetParent);
const documentElement = getDocumentElement(offsetParent);
if (offsetParent === documentElement) {
return rect;
}
let scroll = {
scrollLeft: 0,
scrollTop: 0
};
let scale = createCoords(1);
const offsets = createCoords(0);
if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== "fixed") {
if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) {
scroll = getNodeScroll(offsetParent);
}
if (isHTMLElement(offsetParent)) {
const offsetRect = getBoundingClientRect(offsetParent);
scale = getScale(offsetParent);
offsets.x = offsetRect.x + offsetParent.clientLeft;
offsets.y = offsetRect.y + offsetParent.clientTop;
}
}
return {
width: rect.width * scale.x,
height: rect.height * scale.y,
x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x,
y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y
};
}
function getClientRects(element) {
return Array.from(element.getClientRects());
}
function getWindowScrollBarX(element) {
return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;
}
function getDocumentRect(element) {
const html = getDocumentElement(element);
const scroll = getNodeScroll(element);
const body = element.ownerDocument.body;
const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);
const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);
let x = -scroll.scrollLeft + getWindowScrollBarX(element);
const y = -scroll.scrollTop;
if (getComputedStyle2(body).direction === "rtl") {
x += max(html.clientWidth, body.clientWidth) - width;
}
return {
width,
height,
x,
y
};
}
function getViewportRect(element, strategy) {
const win = getWindow(element);
const html = getDocumentElement(element);
const visualViewport = win.visualViewport;
let width = html.clientWidth;
let height = html.clientHeight;
let x = 0;
let y = 0;
if (visualViewport) {
width = visualViewport.width;
height = visualViewport.height;
const visualViewportBased = isWebKit();
if (!visualViewportBased || visualViewportBased && strategy === "fixed") {
x = visualViewport.offsetLeft;
y = visualViewport.offsetTop;
}
}
return {
width,
height,
x,
y
};
}
function getInnerBoundingClientRect(element, strategy) {
const clientRect = getBoundingClientRect(element, true, strategy === "fixed");
const top = clientRect.top + element.clientTop;
const left = clientRect.left + element.clientLeft;
const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);
const width = element.clientWidth * scale.x;
const height = element.clientHeight * scale.y;
const x = left * scale.x;
const y = top * scale.y;
return {
width,
height,
x,
y
};
}
function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {
let rect;
if (clippingAncestor === "viewport") {
rect = getViewportRect(element, strategy);
} else if (clippingAncestor === "document") {
rect = getDocumentRect(getDocumentElement(element));
} else if (isElement(clippingAncestor)) {
rect = getInnerBoundingClientRect(clippingAncestor, strategy);
} else {
const visualOffsets = getVisualOffsets(element);
rect = {
...clippingAncestor,
x: clippingAncestor.x - visualOffsets.x,
y: clippingAncestor.y - visualOffsets.y
};
}
return rectToClientRect(rect);
}
function hasFixedPositionAncestor(element, stopNode) {
const parentNode = getParentNode(element);
if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {
return false;
}
return getComputedStyle2(parentNode).position === "fixed" || hasFixedPositionAncestor(parentNode, stopNode);
}
function getClippingElementAncestors(element, cache) {
const cachedResult = cache.get(element);
if (cachedResult) {
return cachedResult;
}
let result = getOverflowAncestors(element, [], false).filter((el) => isElement(el) && getNodeName(el) !== "body");
let currentContainingBlockComputedStyle = null;
const elementIsFixed = getComputedStyle2(element).position === "fixed";
let currentNode = elementIsFixed ? getParentNode(element) : element;
while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {
const computedStyle = getComputedStyle2(currentNode);
const currentNodeIsContaining = isContainingBlock(currentNode);
if (!currentNodeIsContaining && computedStyle.position === "fixed") {
currentContainingBlockComputedStyle = null;
}
const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === "static" && !!currentContainingBlockComputedStyle && ["absolute", "fixed"].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);
if (shouldDropCurrentNode) {
result = result.filter((ancestor) => ancestor !== currentNode);
} else {
currentContainingBlockComputedStyle = computedStyle;
}
currentNode = getParentNode(currentNode);
}
cache.set(element, result);
return result;
}
function getClippingRect(_ref) {
let {
element,
boundary,
rootBoundary,
strategy
} = _ref;
const elementClippingAncestors = boundary === "clippingAncestors" ? getClippingElementAncestors(element, this._c) : [].concat(boundary);
const clippingAncestors = [...elementClippingAncestors, rootBoundary];
const firstClippingAncestor = clippingAncestors[0];
const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {
const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);
accRect.top = max(rect.top, accRect.top);
accRect.right = min(rect.right, accRect.right);
accRect.bottom = min(rect.bottom, accRect.bottom);
accRect.left = max(rect.left, accRect.left);
return accRect;
}, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));
return {
width: clippingRect.right - clippingRect.left,
height: clippingRect.bottom - clippingRect.top,
x: clippingRect.left,
y: clippingRect.top
};
}
function getDimensions(element) {
return getCssDimensions(element);
}
function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
const isOffsetParentAnElement = isHTMLElement(offsetParent);
const documentElement = getDocumentElement(offsetParent);
const isFixed = strategy === "fixed";
const rect = getBoundingClientRect(element, true, isFixed, offsetParent);
let scroll = {
scrollLeft: 0,
scrollTop: 0
};
const offsets = createCoords(0);
if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) {
scroll = getNodeScroll(offsetParent);
}
if (isOffsetParentAnElement) {
const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);
offsets.x = offsetRect.x + offsetParent.clientLeft;
offsets.y = offsetRect.y + offsetParent.clientTop;
} else if (documentElement) {
offsets.x = getWindowScrollBarX(documentElement);
}
}
return {
x: rect.left + scroll.scrollLeft - offsets.x,
y: rect.top + scroll.scrollTop - offsets.y,
width: rect.width,
height: rect.height
};
}
function getTrueOffsetParent(element, polyfill) {
if (!isHTMLElement(element) || getComputedStyle2(element).position === "fixed") {
return null;
}
if (polyfill) {
return polyfill(element);
}
return element.offsetParent;
}
function getOffsetParent(element, polyfill) {
const window2 = getWindow(element);
if (!isHTMLElement(element)) {
return window2;
}
let offsetParent = getTrueOffsetParent(element, polyfill);
while (offsetParent && isTableElement(offsetParent) && getComputedStyle2(offsetParent).position === "static") {
offsetParent = getTrueOffsetParent(offsetParent, polyfill);
}
if (offsetParent && (getNodeName(offsetParent) === "html" || getNodeName(offsetParent) === "body" && getComputedStyle2(offsetParent).position === "static" && !isContainingBlock(offsetParent))) {
return window2;
}
return offsetParent || getContainingBlock(element) || window2;
}
var getElementRects = async function(_ref) {
let {
reference,
floating,
strategy
} = _ref;
const getOffsetParentFn = this.getOffsetParent || getOffsetParent;
const getDimensionsFn = this.getDimensions;
return {
reference: getRectRelativeToOffsetParent(reference, await getOffsetParentFn(floating), strategy),
floating: {
x: 0,
y: 0,
...await getDimensionsFn(floating)
}
};
};
function isRTL(element) {
return getComputedStyle2(element).direction === "rtl";
}
var platform = {
convertOffsetParentRelativeRectToViewportRelativeRect,
getDocumentElement,
getClippingRect,
getOffsetParent,
getElementRects,
getClientRects,
getDimensions,
getScale,
isElement,
isRTL
};
function observeMove(element, onMove) {
let io = null;
let timeoutId;
const root = getDocumentElement(element);
function cleanup() {
clearTimeout(timeoutId);
io && io.disconnect();
io = null;
}
function refresh(skip, threshold) {
if (skip === void 0) {
skip = false;
}
if (threshold === void 0) {
threshold = 1;
}
cleanup();
const {
left,
top,
width,
height
} = element.getBoundingClientRect();
if (!skip) {
onMove();
}
if (!width || !height) {
return;
}
const insetTop = floor(top);
const insetRight = floor(root.clientWidth - (left + width));
const insetBottom = floor(root.clientHeight - (top + height));
const insetLeft = floor(left);
const rootMargin = -insetTop + "px " + -insetRight + "px " + -insetBottom + "px " + -insetLeft + "px";
const options = {
rootMargin,
threshold: max(0, min(1, threshold)) || 1
};
let isFirstUpdate = true;
function handleObserve(entries) {
const ratio = entries[0].intersectionRatio;
if (ratio !== threshold) {
if (!isFirstUpdate) {
return refresh();
}
if (!ratio) {
timeoutId = setTimeout(() => {
refresh(false, 1e-7);
}, 100);
} else {
refresh(false, ratio);
}
}
isFirstUpdate = false;
}
try {
io = new IntersectionObserver(handleObserve, {
...options,
root: root.ownerDocument
});
} catch (e) {
io = new IntersectionObserver(handleObserve, options);
}
io.observe(element);
}
refresh(true);
return cleanup;
}
function autoUpdate(reference, floating, update, options) {
if (options === void 0) {
options = {};
}
const {
ancestorScroll = true,
ancestorResize = true,
elementResize = typeof ResizeObserver === "function",
layoutShift = typeof IntersectionObserver === "function",
animationFrame = false
} = options;
const referenceEl = unwrapElement(reference);
const ancestors = ancestorScroll || ancestorResize ? [...referenceEl ? getOverflowAncestors(referenceEl) : [], ...getOverflowAncestors(floating)] : [];
ancestors.forEach((ancestor) => {
ancestorScroll && ancestor.addEventListener("scroll", update, {
passive: true
});
ancestorResize && ancestor.addEventListener("resize", update);
});
const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;
let reobserveFrame = -1;
let resizeObserver = null;
if (elementResize) {
resizeObserver = new ResizeObserver((_ref) => {
let [firstEntry] = _ref;
if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {
resizeObserver.unobserve(floating);
cancelAnimationFrame(reobserveFrame);
reobserveFrame = requestAnimationFrame(() => {
resizeObserver && resizeObserver.observe(floating);
});
}
update();
});
if (referenceEl && !animationFrame) {
resizeObserver.observe(referenceEl);
}
resizeObserver.observe(floating);
}
let frameId;
let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;
if (animationFrame) {
frameLoop();
}
function frameLoop() {
const nextRefRect = getBoundingClientRect(reference);
if (prevRefRect && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) {
update();
}
prevRefRect = nextRefRect;
frameId = requestAnimationFrame(frameLoop);
}
update();
return () => {
ancestors.forEach((ancestor) => {
ancestorScroll && ancestor.removeEventListener("scroll", update);
ancestorResize && ancestor.removeEventListener("resize", update);
});
cleanupIo && cleanupIo();
resizeObserver && resizeObserver.disconnect();
resizeObserver = null;
if (animationFrame) {
cancelAnimationFrame(frameId);
}
};
}
var computePosition2 = (reference, floating, options) => {
const cache = /* @__PURE__ */ new Map();
const mergedOptions = {
platform,
...options
};
const platformWithCache = {
...mergedOptions.platform,
_c: cache
};
return computePosition(reference, floating, {
...mergedOptions,
platform: platformWithCache
});
};
function src_default(Alpine19) {
Alpine19.magic("anchor", (el) => {
if (!el._x_anchor)
throw "Alpine: No x-anchor directive found on element using $anchor...";
return el._x_anchor;
});
Alpine19.interceptClone((from, to) => {
if (from && from._x_anchor && !to._x_anchor) {
to._x_anchor = from._x_anchor;
}
});
Alpine19.directive("anchor", Alpine19.skipDuringClone((el, { expression, modifiers, value }, { cleanup, evaluate: evaluate2 }) => {
let { placement, offsetValue, unstyled } = getOptions(modifiers);
el._x_anchor = Alpine19.reactive({ x: 0, y: 0 });
let reference = evaluate2(expression);
if (!reference)
throw "Alpine: no element provided to x-anchor...";
let compute = () => {
let previousValue;
computePosition2(reference, el, {
placement,
middleware: [flip(), shift({ padding: 5 }), offset(offsetValue)]
}).then(({ x, y }) => {
unstyled || setStyles(el, x, y);
if (JSON.stringify({ x, y }) !== previousValue) {
el._x_anchor.x = x;
el._x_anchor.y = y;
}
previousValue = JSON.stringify({ x, y });
});
};
let release = autoUpdate(reference, el, () => compute());
cleanup(() => release());
}, (el, { expression, modifiers, value }, { cleanup, evaluate: evaluate2 }) => {
let { placement, offsetValue, unstyled } = getOptions(modifiers);
if (el._x_anchor) {
unstyled || setStyles(el, el._x_anchor.x, el._x_anchor.y);
}
}));
}
function setStyles(el, x, y) {
Object.assign(el.style, {
left: x + "px",
top: y + "px",
position: "absolute"
});
}
function getOptions(modifiers) {
let positions = ["top", "top-start", "top-end", "right", "right-start", "right-end", "bottom", "bottom-start", "bottom-end", "left", "left-start", "left-end"];
let placement = positions.find((i) => modifiers.includes(i));
let offsetValue = 0;
if (modifiers.includes("offset")) {
let idx = modifiers.findIndex((i) => i === "offset");
offsetValue = modifiers[idx + 1] !== void 0 ? Number(modifiers[idx + 1]) : offsetValue;
}
let unstyled = modifiers.includes("no-style");
return { placement, offsetValue, unstyled };
}
var module_default = src_default;
}
});
// node_modules/nprogress/nprogress.js
var require_nprogress = __commonJS({
"node_modules/nprogress/nprogress.js"(exports, module) {
(function(root, factory) {
if (typeof define === "function" && define.amd) {
define(factory);
} else if (typeof exports === "object") {
module.exports = factory();
} else {
root.NProgress = factory();
}
})(exports, function() {
var NProgress2 = {};
NProgress2.version = "0.2.0";
var Settings = NProgress2.settings = {
minimum: 0.08,
easing: "ease",
positionUsing: "",
speed: 200,
trickle: true,
trickleRate: 0.02,
trickleSpeed: 800,
showSpinner: true,
barSelector: '[role="bar"]',
spinnerSelector: '[role="spinner"]',
parent: "body",
template: '<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'
};
NProgress2.configure = function(options) {
var key, value;
for (key in options) {
value = options[key];
if (value !== void 0 && options.hasOwnProperty(key))
Settings[key] = value;
}
return this;
};
NProgress2.status = null;
NProgress2.set = function(n) {
var started = NProgress2.isStarted();
n = clamp(n, Settings.minimum, 1);
NProgress2.status = n === 1 ? null : n;
var progress = NProgress2.render(!started), bar = progress.querySelector(Settings.barSelector), speed = Settings.speed, ease = Settings.easing;
progress.offsetWidth;
queue(function(next) {
if (Settings.positionUsing === "")
Settings.positionUsing = NProgress2.getPositioningCSS();
css(bar, barPositionCSS(n, speed, ease));
if (n === 1) {
css(progress, {
transition: "none",
opacity: 1
});
progress.offsetWidth;
setTimeout(function() {
css(progress, {
transition: "all " + speed + "ms linear",
opacity: 0
});
setTimeout(function() {
NProgress2.remove();
next();
}, speed);
}, speed);
} else {
setTimeout(next, speed);
}
});
return this;
};
NProgress2.isStarted = function() {
return typeof NProgress2.status === "number";
};
NProgress2.start = function() {
if (!NProgress2.status)
NProgress2.set(0);
var work = function() {
setTimeout(function() {
if (!NProgress2.status)
return;
NProgress2.trickle();
work();
}, Settings.trickleSpeed);
};
if (Settings.trickle)
work();
return this;
};
NProgress2.done = function(force) {
if (!force && !NProgress2.status)
return this;
return NProgress2.inc(0.3 + 0.5 * Math.random()).set(1);
};
NProgress2.inc = function(amount) {
var n = NProgress2.status;
if (!n) {
return NProgress2.start();
} else {
if (typeof amount !== "number") {
amount = (1 - n) * clamp(Math.random() * n, 0.1, 0.95);
}
n = clamp(n + amount, 0, 0.994);
return NProgress2.set(n);
}
};
NProgress2.trickle = function() {
return NProgress2.inc(Math.random() * Settings.trickleRate);
};
(function() {
var initial = 0, current = 0;
NProgress2.promise = function($promise) {
if (!$promise || $promise.state() === "resolved") {
return this;
}
if (current === 0) {
NProgress2.start();
}
initial++;
current++;
$promise.always(function() {
current--;
if (current === 0) {
initial = 0;
NProgress2.done();
} else {
NProgress2.set((initial - current) / initial);
}
});
return this;
};
})();
NProgress2.render = function(fromStart) {
if (NProgress2.isRendered())
return document.getElementById("nprogress");
addClass(document.documentElement, "nprogress-busy");
var progress = document.createElement("div");
progress.id = "nprogress";
progress.innerHTML = Settings.template;
var bar = progress.querySelector(Settings.barSelector), perc = fromStart ? "-100" : toBarPerc(NProgress2.status || 0), parent = document.querySelector(Settings.parent), spinner;
css(bar, {
transition: "all 0 linear",
transform: "translate3d(" + perc + "%,0,0)"
});
if (!Settings.showSpinner) {
spinner = progress.querySelector(Settings.spinnerSelector);
spinner && removeElement(spinner);
}
if (parent != document.body) {
addClass(parent, "nprogress-custom-parent");
}
parent.appendChild(progress);
return progress;
};
NProgress2.remove = function() {
removeClass(document.documentElement, "nprogress-busy");
removeClass(document.querySelector(Settings.parent), "nprogress-custom-parent");
var progress = document.getElementById("nprogress");
progress && removeElement(progress);
};
NProgress2.isRendered = function() {
return !!document.getElementById("nprogress");
};
NProgress2.getPositioningCSS = function() {
var bodyStyle = document.body.style;
var vendorPrefix = "WebkitTransform" in bodyStyle ? "Webkit" : "MozTransform" in bodyStyle ? "Moz" : "msTransform" in bodyStyle ? "ms" : "OTransform" in bodyStyle ? "O" : "";
if (vendorPrefix + "Perspective" in bodyStyle) {
return "translate3d";
} else if (vendorPrefix + "Transform" in bodyStyle) {
return "translate";
} else {
return "margin";
}
};
function clamp(n, min, max) {
if (n < min)
return min;
if (n > max)
return max;
return n;
}
function toBarPerc(n) {
return (-1 + n) * 100;
}
function barPositionCSS(n, speed, ease) {
var barCSS;
if (Settings.positionUsing === "translate3d") {
barCSS = { transform: "translate3d(" + toBarPerc(n) + "%,0,0)" };
} else if (Settings.positionUsing === "translate") {
barCSS = { transform: "translate(" + toBarPerc(n) + "%,0)" };
} else {
barCSS = { "margin-left": toBarPerc(n) + "%" };
}
barCSS.transition = "all " + speed + "ms " + ease;
return barCSS;
}
var queue = function() {
var pending = [];
function next() {
var fn = pending.shift();
if (fn) {
fn(next);
}
}
return function(fn) {
pending.push(fn);
if (pending.length == 1)
next();
};
}();
var css = function() {
var cssPrefixes = ["Webkit", "O", "Moz", "ms"], cssProps = {};
function camelCase(string) {
return string.replace(/^-ms-/, "ms-").replace(/-([\da-z])/gi, function(match, letter) {
return letter.toUpperCase();
});
}
function getVendorProp(name) {
var style = document.body.style;
if (name in style)
return name;
var i = cssPrefixes.length, capName = name.charAt(0).toUpperCase() + name.slice(1), vendorName;
while (i--) {
vendorName = cssPrefixes[i] + capName;
if (vendorName in style)
return vendorName;
}
return name;
}
function getStyleProp(name) {
name = camelCase(name);
return cssProps[name] || (cssProps[name] = getVendorProp(name));
}
function applyCss(element, prop, value) {
prop = getStyleProp(prop);
element.style[prop] = value;
}
return function(element, properties2) {
var args = arguments, prop, value;
if (args.length == 2) {
for (prop in properties2) {
value = properties2[prop];
if (value !== void 0 && properties2.hasOwnProperty(prop))
applyCss(element, prop, value);
}
} else {
applyCss(element, args[1], args[2]);
}
};
}();
function hasClass(element, name) {
var list = typeof element == "string" ? element : classList(element);
return list.indexOf(" " + name + " ") >= 0;
}
function addClass(element, name) {
var oldList = classList(element), newList = oldList + name;
if (hasClass(oldList, name))
return;
element.className = newList.substring(1);
}
function removeClass(element, name) {
var oldList = classList(element), newList;
if (!hasClass(element, name))
return;
newList = oldList.replace(" " + name + " ", " ");
element.className = newList.substring(1, newList.length - 1);
}
function classList(element) {
return (" " + (element.className || "") + " ").replace(/\s+/gi, " ");
}
function removeElement(element) {
element && element.parentNode && element.parentNode.removeChild(element);
}
return NProgress2;
});
}
});
// ../alpine/packages/morph/dist/module.cjs.js
var require_module_cjs8 = __commonJS({
"../alpine/packages/morph/dist/module.cjs.js"(exports, module) {
var __defProp2 = Object.defineProperty;
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
var __getOwnPropNames2 = Object.getOwnPropertyNames;
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
var __export = (target, all2) => {
for (var name in all2)
__defProp2(target, name, { get: all2[name], enumerable: true });
};
var __copyProps2 = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames2(from))
if (!__hasOwnProp2.call(to, key) && key !== except)
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
var module_exports = {};
__export(module_exports, {
default: () => module_default,
morph: () => src_default
});
module.exports = __toCommonJS(module_exports);
function morph3(from, toHtml, options) {
monkeyPatchDomSetAttributeToAllowAtSymbols();
let fromEl;
let toEl;
let key, lookahead, updating, updated, removing, removed, adding, added;
function assignOptions(options2 = {}) {
let defaultGetKey = (el) => el.getAttribute("key");
let noop = () => {
};
updating = options2.updating || noop;
updated = options2.updated || noop;
removing = options2.removing || noop;
removed = options2.removed || noop;
adding = options2.adding || noop;
added = options2.added || noop;
key = options2.key || defaultGetKey;
lookahead = options2.lookahead || false;
}
function patch(from2, to) {
if (differentElementNamesTypesOrKeys(from2, to)) {
return swapElements(from2, to);
}
let updateChildrenOnly = false;
if (shouldSkip(updating, from2, to, () => updateChildrenOnly = true))
return;
if (from2.nodeType === 1 && window.Alpine) {
window.Alpine.cloneNode(from2, to);
if (from2._x_teleport && to._x_teleport) {
patch(from2._x_teleport, to._x_teleport);
}
}
if (textOrComment(to)) {
patchNodeValue(from2, to);
updated(from2, to);
return;
}
if (!updateChildrenOnly) {
patchAttributes(from2, to);
}
updated(from2, to);
patchChildren(from2, to);
}
function differentElementNamesTypesOrKeys(from2, to) {
return from2.nodeType != to.nodeType || from2.nodeName != to.nodeName || getKey(from2) != getKey(to);
}
function swapElements(from2, to) {
if (shouldSkip(removing, from2))
return;
let toCloned = to.cloneNode(true);
if (shouldSkip(adding, toCloned))
return;
from2.replaceWith(toCloned);
removed(from2);
added(toCloned);
}
function patchNodeValue(from2, to) {
let value = to.nodeValue;
if (from2.nodeValue !== value) {
from2.nodeValue = value;
}
}
function patchAttributes(from2, to) {
if (from2._x_transitioning)
return;
if (from2._x_isShown && !to._x_isShown) {
return;
}
if (!from2._x_isShown && to._x_isShown) {
return;
}
let domAttributes = Array.from(from2.attributes);
let toAttributes = Array.from(to.attributes);
for (let i = domAttributes.length - 1; i >= 0; i--) {
let name = domAttributes[i].name;
if (!to.hasAttribute(name)) {
from2.removeAttribute(name);
}
}
for (let i = toAttributes.length - 1; i >= 0; i--) {
let name = toAttributes[i].name;
let value = toAttributes[i].value;
if (from2.getAttribute(name) !== value) {
from2.setAttribute(name, value);
}
}
}
function patchChildren(from2, to) {
let fromKeys = keyToMap(from2.children);
let fromKeyHoldovers = {};
let currentTo = getFirstNode(to);
let currentFrom = getFirstNode(from2);
while (currentTo) {
seedingMatchingId(currentTo, currentFrom);
let toKey = getKey(currentTo);
let fromKey = getKey(currentFrom);
if (!currentFrom) {
if (toKey && fromKeyHoldovers[toKey]) {
let holdover = fromKeyHoldovers[toKey];
from2.appendChild(holdover);
currentFrom = holdover;
} else {
if (!shouldSkip(adding, currentTo)) {
let clone = currentTo.cloneNode(true);
from2.appendChild(clone);
added(clone);
}
currentTo = getNextSibling(to, currentTo);
continue;
}
}
let isIf = (node) => node && node.nodeType === 8 && node.textContent === "[if BLOCK]><![endif]";
let isEnd = (node) => node && node.nodeType === 8 && node.textContent === "[if ENDBLOCK]><![endif]";
if (isIf(currentTo) && isIf(currentFrom)) {
let nestedIfCount = 0;
let fromBlockStart = currentFrom;
while (currentFrom) {
let next = getNextSibling(from2, currentFrom);
if (isIf(next)) {
nestedIfCount++;
} else if (isEnd(next) && nestedIfCount > 0) {
nestedIfCount--;
} else if (isEnd(next) && nestedIfCount === 0) {
currentFrom = next;
break;
}
currentFrom = next;
}
let fromBlockEnd = currentFrom;
nestedIfCount = 0;
let toBlockStart = currentTo;
while (currentTo) {
let next = getNextSibling(to, currentTo);
if (isIf(next)) {
nestedIfCount++;
} else if (isEnd(next) && nestedIfCount > 0) {
nestedIfCount--;
} else if (isEnd(next) && nestedIfCount === 0) {
currentTo = next;
break;
}
currentTo = next;
}
let toBlockEnd = currentTo;
let fromBlock = new Block(fromBlockStart, fromBlockEnd);
let toBlock = new Block(toBlockStart, toBlockEnd);
patchChildren(fromBlock, toBlock);
continue;
}
if (currentFrom.nodeType === 1 && lookahead && !currentFrom.isEqualNode(currentTo)) {
let nextToElementSibling = getNextSibling(to, currentTo);
let found = false;
while (!found && nextToElementSibling) {
if (nextToElementSibling.nodeType === 1 && currentFrom.isEqualNode(nextToElementSibling)) {
found = true;
currentFrom = addNodeBefore(from2, currentTo, currentFrom);
fromKey = getKey(currentFrom);
}
nextToElementSibling = getNextSibling(to, nextToElementSibling);
}
}
if (toKey !== fromKey) {
if (!toKey && fromKey) {
fromKeyHoldovers[fromKey] = currentFrom;
currentFrom = addNodeBefore(from2, currentTo, currentFrom);
fromKeyHoldovers[fromKey].remove();
currentFrom = getNextSibling(from2, currentFrom);
currentTo = getNextSibling(to, currentTo);
continue;
}
if (toKey && !fromKey) {
if (fromKeys[toKey]) {
currentFrom.replaceWith(fromKeys[toKey]);
currentFrom = fromKeys[toKey];
}
}
if (toKey && fromKey) {
let fromKeyNode = fromKeys[toKey];
if (fromKeyNode) {
fromKeyHoldovers[fromKey] = currentFrom;
currentFrom.replaceWith(fromKeyNode);
currentFrom = fromKeyNode;
} else {
fromKeyHoldovers[fromKey] = currentFrom;
currentFrom = addNodeBefore(from2, currentTo, currentFrom);
fromKeyHoldovers[fromKey].remove();
currentFrom = getNextSibling(from2, currentFrom);
currentTo = getNextSibling(to, currentTo);
continue;
}
}
}
let currentFromNext = currentFrom && getNextSibling(from2, currentFrom);
patch(currentFrom, currentTo);
currentTo = currentTo && getNextSibling(to, currentTo);
currentFrom = currentFromNext;
}
let removals = [];
while (currentFrom) {
if (!shouldSkip(removing, currentFrom))
removals.push(currentFrom);
currentFrom = getNextSibling(from2, currentFrom);
}
while (removals.length) {
let domForRemoval = removals.shift();
domForRemoval.remove();
removed(domForRemoval);
}
}
function getKey(el) {
return el && el.nodeType === 1 && key(el);
}
function keyToMap(els2) {
let map = {};
for (let el of els2) {
let theKey = getKey(el);
if (theKey) {
map[theKey] = el;
}
}
return map;
}
function addNodeBefore(parent, node, beforeMe) {
if (!shouldSkip(adding, node)) {
let clone = node.cloneNode(true);
parent.insertBefore(clone, beforeMe);
added(clone);
return clone;
}
return node;
}
assignOptions(options);
fromEl = from;
toEl = typeof toHtml === "string" ? createElement(toHtml) : toHtml;
if (window.Alpine && window.Alpine.closestDataStack && !from._x_dataStack) {
toEl._x_dataStack = window.Alpine.closestDataStack(from);
toEl._x_dataStack && window.Alpine.cloneNode(from, toEl);
}
patch(from, toEl);
fromEl = void 0;
toEl = void 0;
return from;
}
morph3.step = () => {
};
morph3.log = () => {
};
function shouldSkip(hook, ...args) {
let skip = false;
hook(...args, () => skip = true);
return skip;
}
var patched = false;
function createElement(html) {
const template = document.createElement("template");
template.innerHTML = html;
return template.content.firstElementChild;
}
function textOrComment(el) {
return el.nodeType === 3 || el.nodeType === 8;
}
var Block = class {
constructor(start2, end) {
this.startComment = start2;
this.endComment = end;
}
get children() {
let children = [];
let currentNode = this.startComment.nextSibling;
while (currentNode && currentNode !== this.endComment) {
children.push(currentNode);
currentNode = currentNode.nextSibling;
}
return children;
}
appendChild(child) {
this.endComment.before(child);
}
get firstChild() {
let first2 = this.startComment.nextSibling;
if (first2 === this.endComment)
return;
return first2;
}
nextNode(reference) {
let next = reference.nextSibling;
if (next === this.endComment)
return;
return next;
}
insertBefore(newNode, reference) {
reference.before(newNode);
return newNode;
}
};
function getFirstNode(parent) {
return parent.firstChild;
}
function getNextSibling(parent, reference) {
let next;
if (parent instanceof Block) {
next = parent.nextNode(reference);
} else {
next = reference.nextSibling;
}
return next;
}
function monkeyPatchDomSetAttributeToAllowAtSymbols() {
if (patched)
return;
patched = true;
let original = Element.prototype.setAttribute;
let hostDiv = document.createElement("div");
Element.prototype.setAttribute = function newSetAttribute(name, value) {
if (!name.includes("@")) {
return original.call(this, name, value);
}
hostDiv.innerHTML = `<span ${name}="${value}"></span>`;
let attr = hostDiv.firstElementChild.getAttributeNode(name);
hostDiv.firstElementChild.removeAttributeNode(attr);
this.setAttributeNode(attr);
};
}
function seedingMatchingId(to, from) {
let fromId = from && from._x_bindings && from._x_bindings.id;
if (!fromId)
return;
to.setAttribute("id", fromId);
to.id = fromId;
}
function src_default(Alpine19) {
Alpine19.morph = morph3;
}
var module_default = src_default;
}
});
// ../../../../usr/local/lib/node_modules/@alpinejs/mask/dist/module.cjs.js
var require_module_cjs9 = __commonJS({
"../../../../usr/local/lib/node_modules/@alpinejs/mask/dist/module.cjs.js"(exports, module) {
var __defProp2 = Object.defineProperty;
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
var __getOwnPropNames2 = Object.getOwnPropertyNames;
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
var __export = (target, all2) => {
for (var name in all2)
__defProp2(target, name, { get: all2[name], enumerable: true });
};
var __copyProps2 = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames2(from))
if (!__hasOwnProp2.call(to, key) && key !== except)
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
var module_exports = {};
__export(module_exports, {
default: () => module_default,
mask: () => src_default,
stripDown: () => stripDown
});
module.exports = __toCommonJS(module_exports);
function src_default(Alpine19) {
Alpine19.directive("mask", (el, { value, expression }, { effect, evaluateLater, cleanup }) => {
let templateFn = () => expression;
let lastInputValue = "";
queueMicrotask(() => {
if (["function", "dynamic"].includes(value)) {
let evaluator = evaluateLater(expression);
effect(() => {
templateFn = (input) => {
let result;
Alpine19.dontAutoEvaluateFunctions(() => {
evaluator((value2) => {
result = typeof value2 === "function" ? value2(input) : value2;
}, { scope: {
"$input": input,
"$money": formatMoney.bind({ el })
} });
});
return result;
};
processInputValue(el, false);
});
} else {
processInputValue(el, false);
}
if (el._x_model)
el._x_model.set(el.value);
});
const controller = new AbortController();
cleanup(() => {
controller.abort();
});
el.addEventListener("input", () => processInputValue(el), {
signal: controller.signal,
capture: true
});
el.addEventListener("blur", () => processInputValue(el, false), { signal: controller.signal });
function processInputValue(el2, shouldRestoreCursor = true) {
let input = el2.value;
let template = templateFn(input);
if (!template || template === "false")
return false;
if (lastInputValue.length - el2.value.length === 1) {
return lastInputValue = el2.value;
}
let setInput = () => {
lastInputValue = el2.value = formatInput(input, template);
};
if (shouldRestoreCursor) {
restoreCursorPosition(el2, template, () => {
setInput();
});
} else {
setInput();
}
}
function formatInput(input, template) {
if (input === "")
return "";
let strippedDownInput = stripDown(template, input);
let rebuiltInput = buildUp(template, strippedDownInput);
return rebuiltInput;
}
}).before("model");
}
function restoreCursorPosition(el, template, callback) {
let cursorPosition = el.selectionStart;
let unformattedValue = el.value;
callback();
let beforeLeftOfCursorBeforeFormatting = unformattedValue.slice(0, cursorPosition);
let newPosition = buildUp(template, stripDown(template, beforeLeftOfCursorBeforeFormatting)).length;
el.setSelectionRange(newPosition, newPosition);
}
function stripDown(template, input) {
let inputToBeStripped = input;
let output = "";
let regexes = {
"9": /[0-9]/,
"a": /[a-zA-Z]/,
"*": /[a-zA-Z0-9]/
};
let wildcardTemplate = "";
for (let i = 0; i < template.length; i++) {
if (["9", "a", "*"].includes(template[i])) {
wildcardTemplate += template[i];
continue;
}
for (let j = 0; j < inputToBeStripped.length; j++) {
if (inputToBeStripped[j] === template[i]) {
inputToBeStripped = inputToBeStripped.slice(0, j) + inputToBeStripped.slice(j + 1);
break;
}
}
}
for (let i = 0; i < wildcardTemplate.length; i++) {
let found = false;
for (let j = 0; j < inputToBeStripped.length; j++) {
if (regexes[wildcardTemplate[i]].test(inputToBeStripped[j])) {
output += inputToBeStripped[j];
inputToBeStripped = inputToBeStripped.slice(0, j) + inputToBeStripped.slice(j + 1);
found = true;
break;
}
}
if (!found)
break;
}
return output;
}
function buildUp(template, input) {
let clean = Array.from(input);
let output = "";
for (let i = 0; i < template.length; i++) {
if (!["9", "a", "*"].includes(template[i])) {
output += template[i];
continue;
}
if (clean.length === 0)
break;
output += clean.shift();
}
return output;
}
function formatMoney(input, delimiter = ".", thousands, precision = 2) {
if (input === "-")
return "-";
if (/^\D+$/.test(input))
return "9";
if (thousands === null || thousands === void 0) {
thousands = delimiter === "," ? "." : ",";
}
let addThousands = (input2, thousands2) => {
let output = "";
let counter = 0;
for (let i = input2.length - 1; i >= 0; i--) {
if (input2[i] === thousands2)
continue;
if (counter === 3) {
output = input2[i] + thousands2 + output;
counter = 0;
} else {
output = input2[i] + output;
}
counter++;
}
return output;
};
let minus = input.startsWith("-") ? "-" : "";
let strippedInput = input.replaceAll(new RegExp(`[^0-9\\${delimiter}]`, "g"), "");
let template = Array.from({ length: strippedInput.split(delimiter)[0].length }).fill("9").join("");
template = `${minus}${addThousands(template, thousands)}`;
if (precision > 0 && input.includes(delimiter))
template += `${delimiter}` + "9".repeat(precision);
queueMicrotask(() => {
if (this.el.value.endsWith(delimiter))
return;
if (this.el.value[this.el.selectionStart - 1] === delimiter) {
this.el.setSelectionRange(this.el.selectionStart - 1, this.el.selectionStart - 1);
}
});
return template;
}
var module_default = src_default;
}
});
// js/utils.js
var Bag = class {
constructor() {
this.arrays = {};
}
add(key, value) {
if (!this.arrays[key])
this.arrays[key] = [];
this.arrays[key].push(value);
}
remove(key) {
if (this.arrays[key])
delete this.arrays[key];
}
get(key) {
return this.arrays[key] || [];
}
each(key, callback) {
return this.get(key).forEach(callback);
}
};
var WeakBag = class {
constructor() {
this.arrays = /* @__PURE__ */ new WeakMap();
}
add(key, value) {
if (!this.arrays.has(key))
this.arrays.set(key, []);
this.arrays.get(key).push(value);
}
remove(key) {
if (this.arrays.has(key))
this.arrays.delete(key, []);
}
get(key) {
return this.arrays.has(key) ? this.arrays.get(key) : [];
}
each(key, callback) {
return this.get(key).forEach(callback);
}
};
function dispatch(target, name, detail = {}, bubbles = true) {
target.dispatchEvent(new CustomEvent(name, {
detail,
bubbles,
composed: true,
cancelable: true
}));
}
function listen(target, name, handler) {
target.addEventListener(name, handler);
return () => target.removeEventListener(name, handler);
}
function isObjecty(subject) {
return typeof subject === "object" && subject !== null;
}
function isObject(subject) {
return isObjecty(subject) && !isArray(subject);
}
function isArray(subject) {
return Array.isArray(subject);
}
function isFunction(subject) {
return typeof subject === "function";
}
function isPrimitive(subject) {
return typeof subject !== "object" || subject === null;
}
function deepClone(obj) {
return JSON.parse(JSON.stringify(obj));
}
function dataGet(object, key) {
if (key === "")
return object;
return key.split(".").reduce((carry, i) => {
if (carry === void 0)
return void 0;
return carry[i];
}, object);
}
function dataSet(object, key, value) {
let segments = key.split(".");
if (segments.length === 1) {
return object[key] = value;
}
let firstSegment = segments.shift();
let restOfSegments = segments.join(".");
if (object[firstSegment] === void 0) {
object[firstSegment] = {};
}
dataSet(object[firstSegment], restOfSegments, value);
}
function diff(left, right, diffs = {}, path = "") {
if (left === right)
return diffs;
if (typeof left !== typeof right || isObject(left) && isArray(right) || isArray(left) && isObject(right)) {
diffs[path] = right;
return diffs;
}
if (isPrimitive(left) || isPrimitive(right)) {
diffs[path] = right;
return diffs;
}
let leftKeys = Object.keys(left);
Object.entries(right).forEach(([key, value]) => {
diffs = { ...diffs, ...diff(left[key], right[key], diffs, path === "" ? key : `${path}.${key}`) };
leftKeys = leftKeys.filter((i) => i !== key);
});
leftKeys.forEach((key) => {
diffs[`${path}.${key}`] = "__rm__";
});
return diffs;
}
function extractData(payload) {
let value = isSynthetic(payload) ? payload[0] : payload;
let meta = isSynthetic(payload) ? payload[1] : void 0;
if (isObjecty(value)) {
Object.entries(value).forEach(([key, iValue]) => {
value[key] = extractData(iValue);
});
}
return value;
}
function isSynthetic(subject) {
return Array.isArray(subject) && subject.length === 2 && typeof subject[1] === "object" && Object.keys(subject[1]).includes("s");
}
function getCsrfToken() {
if (document.querySelector('meta[name="csrf-token"]')) {
return document.querySelector('meta[name="csrf-token"]').getAttribute("content");
}
if (document.querySelector("[data-csrf]")) {
return document.querySelector("[data-csrf]").getAttribute("data-csrf");
}
if (window.livewireScriptConfig["csrf"] ?? false) {
return window.livewireScriptConfig["csrf"];
}
throw "Livewire: No CSRF token detected";
}
var nonce;
function getNonce() {
if (nonce)
return nonce;
if (window.livewireScriptConfig && (window.livewireScriptConfig["nonce"] ?? false)) {
nonce = window.livewireScriptConfig["nonce"];
return nonce;
}
const elWithNonce = document.querySelector("style[data-livewire-style][nonce]");
if (elWithNonce) {
nonce = elWithNonce.nonce;
return nonce;
}
return null;
}
function getUpdateUri() {
return document.querySelector("[data-update-uri]")?.getAttribute("data-update-uri") ?? window.livewireScriptConfig["uri"] ?? null;
}
function contentIsFromDump(content) {
return !!content.match(/<script>Sfdump\(".+"\)<\/script>/);
}
function splitDumpFromContent(content) {
let dump = content.match(/.*<script>Sfdump\(".+"\)<\/script>/s);
return [dump, content.replace(dump, "")];
}
// js/features/supportFileUploads.js
var uploadManagers = /* @__PURE__ */ new WeakMap();
function getUploadManager(component) {
if (!uploadManagers.has(component)) {
let manager = new UploadManager(component);
uploadManagers.set(component, manager);
manager.registerListeners();
}
return uploadManagers.get(component);
}
function handleFileUpload(el, property, component, cleanup) {
let manager = getUploadManager(component);
let start2 = () => el.dispatchEvent(new CustomEvent("livewire-upload-start", { bubbles: true, detail: { id: component.id, property } }));
let finish = () => el.dispatchEvent(new CustomEvent("livewire-upload-finish", { bubbles: true, detail: { id: component.id, property } }));
let error2 = () => el.dispatchEvent(new CustomEvent("livewire-upload-error", { bubbles: true, detail: { id: component.id, property } }));
let cancel = () => el.dispatchEvent(new CustomEvent("livewire-upload-cancel", { bubbles: true, detail: { id: component.id, property } }));
let progress = (progressEvent) => {
var percentCompleted = Math.round(progressEvent.loaded * 100 / progressEvent.total);
el.dispatchEvent(new CustomEvent("livewire-upload-progress", {
bubbles: true,
detail: { progress: percentCompleted }
}));
};
let eventHandler = (e) => {
if (e.target.files.length === 0)
return;
start2();
if (e.target.multiple) {
manager.uploadMultiple(property, e.target.files, finish, error2, progress, cancel);
} else {
manager.upload(property, e.target.files[0], finish, error2, progress, cancel);
}
};
el.addEventListener("change", eventHandler);
component.$wire.$watch(property, (value) => {
if (!el.isConnected)
return;
if (value === null || value === "") {
el.value = "";
}
});
let clearFileInputValue = () => {
el.value = null;
};
el.addEventListener("click", clearFileInputValue);
el.addEventListener("livewire-upload-cancel", clearFileInputValue);
cleanup(() => {
el.removeEventListener("change", eventHandler);
el.removeEventListener("click", clearFileInputValue);
});
}
var UploadManager = class {
constructor(component) {
this.component = component;
this.uploadBag = new MessageBag();
this.removeBag = new MessageBag();
}
registerListeners() {
this.component.$wire.$on("upload:generatedSignedUrl", ({ name, url }) => {
setUploadLoading(this.component, name);
this.handleSignedUrl(name, url);
});
this.component.$wire.$on("upload:generatedSignedUrlForS3", ({ name, payload }) => {
setUploadLoading(this.component, name);
this.handleS3PreSignedUrl(name, payload);
});
this.component.$wire.$on("upload:finished", ({ name, tmpFilenames }) => this.markUploadFinished(name, tmpFilenames));
this.component.$wire.$on("upload:errored", ({ name }) => this.markUploadErrored(name));
this.component.$wire.$on("upload:removed", ({ name, tmpFilename }) => this.removeBag.shift(name).finishCallback(tmpFilename));
}
upload(name, file, finishCallback, errorCallback, progressCallback, cancelledCallback) {
this.setUpload(name, {
files: [file],
multiple: false,
finishCallback,
errorCallback,
progressCallback,
cancelledCallback
});
}
uploadMultiple(name, files, finishCallback, errorCallback, progressCallback, cancelledCallback) {
this.setUpload(name, {
files: Array.from(files),
multiple: true,
finishCallback,
errorCallback,
progressCallback,
cancelledCallback
});
}
removeUpload(name, tmpFilename, finishCallback) {
this.removeBag.push(name, {
tmpFilename,
finishCallback
});
this.component.$wire.call("_removeUpload", name, tmpFilename);
}
setUpload(name, uploadObject) {
this.uploadBag.add(name, uploadObject);
if (this.uploadBag.get(name).length === 1) {
this.startUpload(name, uploadObject);
}
}
handleSignedUrl(name, url) {
let formData = new FormData();
Array.from(this.uploadBag.first(name).files).forEach((file) => formData.append("files[]", file, file.name));
let headers = {
"Accept": "application/json"
};
let csrfToken = getCsrfToken();
if (csrfToken)
headers["X-CSRF-TOKEN"] = csrfToken;
this.makeRequest(name, formData, "post", url, headers, (response) => {
return response.paths;
});
}
handleS3PreSignedUrl(name, payload) {
let formData = this.uploadBag.first(name).files[0];
let headers = payload.headers;
if ("Host" in headers)
delete headers.Host;
let url = payload.url;
this.makeRequest(name, formData, "put", url, headers, (response) => {
return [payload.path];
});
}
makeRequest(name, formData, method, url, headers, retrievePaths) {
let request = new XMLHttpRequest();
request.open(method, url);
Object.entries(headers).forEach(([key, value]) => {
request.setRequestHeader(key, value);
});
request.upload.addEventListener("progress", (e) => {
e.detail = {};
e.detail.progress = Math.floor(e.loaded * 100 / e.total);
this.uploadBag.first(name).progressCallback(e);
});
request.addEventListener("load", () => {
if ((request.status + "")[0] === "2") {
let paths = retrievePaths(request.response && JSON.parse(request.response));
this.component.$wire.call("_finishUpload", name, paths, this.uploadBag.first(name).multiple);
return;
}
let errors = null;
if (request.status === 422) {
errors = request.response;
}
this.component.$wire.call("_uploadErrored", name, errors, this.uploadBag.first(name).multiple);
});
this.uploadBag.first(name).request = request;
request.send(formData);
}
startUpload(name, uploadObject) {
let fileInfos = uploadObject.files.map((file) => {
return { name: file.name, size: file.size, type: file.type };
});
this.component.$wire.call("_startUpload", name, fileInfos, uploadObject.multiple);
setUploadLoading(this.component, name);
}
markUploadFinished(name, tmpFilenames) {
unsetUploadLoading(this.component);
let uploadObject = this.uploadBag.shift(name);
uploadObject.finishCallback(uploadObject.multiple ? tmpFilenames : tmpFilenames[0]);
if (this.uploadBag.get(name).length > 0)
this.startUpload(name, this.uploadBag.last(name));
}
markUploadErrored(name) {
unsetUploadLoading(this.component);
this.uploadBag.shift(name).errorCallback();
if (this.uploadBag.get(name).length > 0)
this.startUpload(name, this.uploadBag.last(name));
}
cancelUpload(name, cancelledCallback = null) {
unsetUploadLoading(this.component);
let uploadItem = this.uploadBag.first(name);
if (uploadItem) {
if (uploadItem.request) {
uploadItem.request.abort();
}
this.uploadBag.shift(name).cancelledCallback();
if (cancelledCallback)
cancelledCallback();
}
}
};
var MessageBag = class {
constructor() {
this.bag = {};
}
add(name, thing) {
if (!this.bag[name]) {
this.bag[name] = [];
}
this.bag[name].push(thing);
}
push(name, thing) {
this.add(name, thing);
}
first(name) {
if (!this.bag[name])
return null;
return this.bag[name][0];
}
last(name) {
return this.bag[name].slice(-1)[0];
}
get(name) {
return this.bag[name];
}
shift(name) {
return this.bag[name].shift();
}
call(name, ...params) {
(this.listeners[name] || []).forEach((callback) => {
callback(...params);
});
}
has(name) {
return Object.keys(this.listeners).includes(name);
}
};
function setUploadLoading() {
}
function unsetUploadLoading() {
}
function upload(component, name, file, finishCallback = () => {
}, errorCallback = () => {
}, progressCallback = () => {
}, cancelledCallback = () => {
}) {
let uploadManager = getUploadManager(component);
uploadManager.upload(name, file, finishCallback, errorCallback, progressCallback, cancelledCallback);
}
function uploadMultiple(component, name, files, finishCallback = () => {
}, errorCallback = () => {
}, progressCallback = () => {
}, cancelledCallback = () => {
}) {
let uploadManager = getUploadManager(component);
uploadManager.uploadMultiple(name, files, finishCallback, errorCallback, progressCallback, cancelledCallback);
}
function removeUpload(component, name, tmpFilename, finishCallback = () => {
}, errorCallback = () => {
}) {
let uploadManager = getUploadManager(component);
uploadManager.removeUpload(name, tmpFilename, finishCallback, errorCallback);
}
function cancelUpload(component, name, cancelledCallback = () => {
}) {
let uploadManager = getUploadManager(component);
uploadManager.cancelUpload(name, cancelledCallback);
}
// js/features/supportEntangle.js
var import_alpinejs = __toESM(require_module_cjs());
function generateEntangleFunction(component, cleanup) {
if (!cleanup)
cleanup = () => {
};
return (name, live = false) => {
let isLive = live;
let livewireProperty = name;
let livewireComponent = component.$wire;
let livewirePropertyValue = livewireComponent.get(livewireProperty);
let interceptor = import_alpinejs.default.interceptor((initialValue, getter, setter, path, key) => {
if (typeof livewirePropertyValue === "undefined") {
console.error(`Livewire Entangle Error: Livewire property ['${livewireProperty}'] cannot be found on component: ['${component.name}']`);
return;
}
let release = import_alpinejs.default.entangle({
get() {
return livewireComponent.get(name);
},
set(value) {
livewireComponent.set(name, value, isLive);
}
}, {
get() {
return getter();
},
set(value) {
setter(value);
}
});
cleanup(() => release());
return cloneIfObject(livewireComponent.get(name));
}, (obj) => {
Object.defineProperty(obj, "live", {
get() {
isLive = true;
return obj;
}
});
});
return interceptor(livewirePropertyValue);
};
}
function cloneIfObject(value) {
return typeof value === "object" ? JSON.parse(JSON.stringify(value)) : value;
}
// js/hooks.js
var listeners = [];
function on(name, callback) {
if (!listeners[name])
listeners[name] = [];
listeners[name].push(callback);
return () => {
listeners[name] = listeners[name].filter((i) => i !== callback);
};
}
function trigger(name, ...params) {
let callbacks = listeners[name] || [];
let finishers = [];
for (let i = 0; i < callbacks.length; i++) {
let finisher = callbacks[i](...params);
if (isFunction(finisher))
finishers.push(finisher);
}
return (result) => {
return runFinishers(finishers, result);
};
}
async function triggerAsync(name, ...params) {
let callbacks = listeners[name] || [];
let finishers = [];
for (let i = 0; i < callbacks.length; i++) {
let finisher = await callbacks[i](...params);
if (isFunction(finisher))
finishers.push(finisher);
}
return (result) => {
return runFinishers(finishers, result);
};
}
function runFinishers(finishers, result) {
let latest = result;
for (let i = 0; i < finishers.length; i++) {
let iResult = finishers[i](latest);
if (iResult !== void 0) {
latest = iResult;
}
}
return latest;
}
// js/request/modal.js
function showHtmlModal(html) {
let page = document.createElement("html");
page.innerHTML = html;
page.querySelectorAll("a").forEach((a) => a.setAttribute("target", "_top"));
let modal = document.getElementById("livewire-error");
if (typeof modal != "undefined" && modal != null) {
modal.innerHTML = "";
} else {
modal = document.createElement("div");
modal.id = "livewire-error";
modal.style.position = "fixed";
modal.style.width = "100vw";
modal.style.height = "100vh";
modal.style.padding = "50px";
modal.style.backgroundColor = "rgba(0, 0, 0, .6)";
modal.style.zIndex = 2e5;
}
let iframe = document.createElement("iframe");
iframe.style.backgroundColor = "#17161A";
iframe.style.borderRadius = "5px";
iframe.style.width = "100%";
iframe.style.height = "100%";
modal.appendChild(iframe);
document.body.prepend(modal);
document.body.style.overflow = "hidden";
iframe.contentWindow.document.open();
iframe.contentWindow.document.write(page.outerHTML);
iframe.contentWindow.document.close();
modal.addEventListener("click", () => hideHtmlModal(modal));
modal.setAttribute("tabindex", 0);
modal.addEventListener("keydown", (e) => {
if (e.key === "Escape")
hideHtmlModal(modal);
});
modal.focus();
}
function hideHtmlModal(modal) {
modal.outerHTML = "";
document.body.style.overflow = "visible";
}
// js/request/pool.js
var RequestPool = class {
constructor() {
this.commits = /* @__PURE__ */ new Set();
}
add(commit) {
this.commits.add(commit);
}
delete(commit) {
this.commits.delete(commit);
}
hasCommitFor(component) {
return !!this.findCommitByComponent(component);
}
findCommitByComponent(component) {
for (let [idx, commit] of this.commits.entries()) {
if (commit.component === component)
return commit;
}
}
shouldHoldCommit(commit) {
return !commit.isolate;
}
empty() {
return this.commits.size === 0;
}
async send() {
this.prepare();
await sendRequest(this);
}
prepare() {
this.commits.forEach((i) => i.prepare());
}
payload() {
let commitPayloads = [];
let successReceivers = [];
let failureReceivers = [];
this.commits.forEach((commit) => {
let [payload, succeed2, fail2] = commit.toRequestPayload();
commitPayloads.push(payload);
successReceivers.push(succeed2);
failureReceivers.push(fail2);
});
let succeed = (components2) => successReceivers.forEach((receiver) => receiver(components2.shift()));
let fail = () => failureReceivers.forEach((receiver) => receiver());
return [commitPayloads, succeed, fail];
}
};
// js/request/commit.js
var Commit = class {
constructor(component) {
this.component = component;
this.isolate = false;
this.calls = [];
this.receivers = [];
this.resolvers = [];
}
addResolver(resolver) {
this.resolvers.push(resolver);
}
addCall(method, params, receiver) {
this.calls.push({
path: "",
method,
params,
handleReturn(value) {
receiver(value);
}
});
}
prepare() {
trigger("commit.prepare", { component: this.component });
}
toRequestPayload() {
let propertiesDiff = diff(this.component.canonical, this.component.ephemeral);
let updates = this.component.mergeQueuedUpdates(propertiesDiff);
let payload = {
snapshot: this.component.snapshotEncoded,
updates,
calls: this.calls.map((i) => ({
path: i.path,
method: i.method,
params: i.params
}))
};
let succeedCallbacks = [];
let failCallbacks = [];
let respondCallbacks = [];
let succeed = (fwd) => succeedCallbacks.forEach((i) => i(fwd));
let fail = () => failCallbacks.forEach((i) => i());
let respond = () => respondCallbacks.forEach((i) => i());
let finishTarget = trigger("commit", {
component: this.component,
commit: payload,
succeed: (callback) => {
succeedCallbacks.push(callback);
},
fail: (callback) => {
failCallbacks.push(callback);
},
respond: (callback) => {
respondCallbacks.push(callback);
}
});
let handleResponse = (response) => {
let { snapshot, effects } = response;
respond();
this.component.mergeNewSnapshot(snapshot, effects, updates);
this.component.processEffects(this.component.effects);
if (effects["returns"]) {
let returns = effects["returns"];
let returnHandlerStack = this.calls.map(({ handleReturn }) => handleReturn);
returnHandlerStack.forEach((handleReturn, index) => {
handleReturn(returns[index]);
});
}
let parsedSnapshot = JSON.parse(snapshot);
finishTarget({ snapshot: parsedSnapshot, effects });
this.resolvers.forEach((i) => i());
succeed(response);
};
let handleFailure = () => {
respond();
fail();
};
return [payload, handleResponse, handleFailure];
}
};
// js/request/bus.js
var CommitBus = class {
constructor() {
this.commits = /* @__PURE__ */ new Set();
this.pools = /* @__PURE__ */ new Set();
}
add(component) {
let commit = this.findCommitOr(component, () => {
let newCommit = new Commit(component);
this.commits.add(newCommit);
return newCommit;
});
bufferPoolingForFiveMs(commit, () => {
let pool = this.findPoolWithComponent(commit.component);
if (!pool) {
this.createAndSendNewPool();
}
});
return commit;
}
findCommitOr(component, callback) {
for (let [idx, commit] of this.commits.entries()) {
if (commit.component === component) {
return commit;
}
}
return callback();
}
findPoolWithComponent(component) {
for (let [idx, pool] of this.pools.entries()) {
if (pool.hasCommitFor(component))
return pool;
}
}
createAndSendNewPool() {
trigger("commit.pooling", { commits: this.commits });
let pools = this.corraleCommitsIntoPools();
this.commits.clear();
trigger("commit.pooled", { pools });
pools.forEach((pool) => {
if (pool.empty())
return;
this.pools.add(pool);
pool.send().then(() => {
this.pools.delete(pool);
this.sendAnyQueuedCommits();
});
});
}
corraleCommitsIntoPools() {
let pools = /* @__PURE__ */ new Set();
for (let [idx, commit] of this.commits.entries()) {
let hasFoundPool = false;
pools.forEach((pool) => {
if (pool.shouldHoldCommit(commit)) {
pool.add(commit);
hasFoundPool = true;
}
});
if (!hasFoundPool) {
let newPool = new RequestPool();
newPool.add(commit);
pools.add(newPool);
}
}
return pools;
}
sendAnyQueuedCommits() {
if (this.commits.size > 0) {
this.createAndSendNewPool();
}
}
};
var buffersByCommit = /* @__PURE__ */ new WeakMap();
function bufferPoolingForFiveMs(commit, callback) {
if (buffersByCommit.has(commit))
return;
buffersByCommit.set(commit, setTimeout(() => {
callback();
buffersByCommit.delete(commit);
}, 5));
}
// js/request/index.js
var commitBus = new CommitBus();
async function requestCommit(component) {
let commit = commitBus.add(component);
let promise = new Promise((resolve) => {
commit.addResolver(resolve);
});
promise.commit = commit;
return promise;
}
async function requestCall(component, method, params) {
let commit = commitBus.add(component);
let promise = new Promise((resolve) => {
commit.addCall(method, params, (value) => resolve(value));
});
promise.commit = commit;
return promise;
}
async function sendRequest(pool) {
let [payload, handleSuccess, handleFailure] = pool.payload();
let options = {
method: "POST",
body: JSON.stringify({
_token: getCsrfToken(),
components: payload
}),
headers: {
"Content-type": "application/json",
"X-Livewire": ""
}
};
let succeedCallbacks = [];
let failCallbacks = [];
let respondCallbacks = [];
let succeed = (fwd) => succeedCallbacks.forEach((i) => i(fwd));
let fail = (fwd) => failCallbacks.forEach((i) => i(fwd));
let respond = (fwd) => respondCallbacks.forEach((i) => i(fwd));
let finishProfile = trigger("request.profile", options);
let updateUri = getUpdateUri();
trigger("request", {
url: updateUri,
options,
payload: options.body,
respond: (i) => respondCallbacks.push(i),
succeed: (i) => succeedCallbacks.push(i),
fail: (i) => failCallbacks.push(i)
});
let response;
try {
response = await fetch(updateUri, options);
} catch (e) {
finishProfile({ content: "{}", failed: true });
handleFailure();
fail({
status: 503,
content: null,
preventDefault: () => {
}
});
return;
}
let mutableObject = {
status: response.status,
response
};
respond(mutableObject);
response = mutableObject.response;
let content = await response.text();
if (!response.ok) {
finishProfile({ content: "{}", failed: true });
let preventDefault = false;
handleFailure();
fail({
status: response.status,
content,
preventDefault: () => preventDefault = true
});
if (preventDefault)
return;
if (response.status === 419) {
handlePageExpiry();
}
return showFailureModal(content);
}
if (response.redirected) {
window.location.href = response.url;
}
if (contentIsFromDump(content)) {
let dump;
[dump, content] = splitDumpFromContent(content);
showHtmlModal(dump);
finishProfile({ content: "{}", failed: true });
} else {
finishProfile({ content, failed: false });
}
let { components: components2, assets } = JSON.parse(content);
await triggerAsync("payload.intercept", { components: components2, assets });
await handleSuccess(components2);
succeed({ status: response.status, json: JSON.parse(content) });
}
function handlePageExpiry() {
confirm("This page has expired.\nWould you like to refresh the page?") && window.location.reload();
}
function showFailureModal(content) {
let html = content;
showHtmlModal(html);
}
// js/$wire.js
var import_alpinejs2 = __toESM(require_module_cjs());
var properties = {};
var fallback;
function wireProperty(name, callback, component = null) {
properties[name] = callback;
}
function wireFallback(callback) {
fallback = callback;
}
var aliases = {
"on": "$on",
"el": "$el",
"id": "$id",
"get": "$get",
"set": "$set",
"call": "$call",
"commit": "$commit",
"watch": "$watch",
"entangle": "$entangle",
"dispatch": "$dispatch",
"dispatchTo": "$dispatchTo",
"dispatchSelf": "$dispatchSelf",
"upload": "$upload",
"uploadMultiple": "$uploadMultiple",
"removeUpload": "$removeUpload",
"cancelUpload": "$cancelUpload"
};
function generateWireObject(component, state) {
return new Proxy({}, {
get(target, property) {
if (property === "__instance")
return component;
if (property in aliases) {
return getProperty(component, aliases[property]);
} else if (property in properties) {
return getProperty(component, property);
} else if (property in state) {
return state[property];
} else if (!["then"].includes(property)) {
return getFallback(component)(property);
}
},
set(target, property, value) {
if (property in state) {
state[property] = value;
}
return true;
}
});
}
function getProperty(component, name) {
return properties[name](component);
}
function getFallback(component) {
return fallback(component);
}
import_alpinejs2.default.magic("wire", (el, { cleanup }) => {
let component;
return new Proxy({}, {
get(target, property) {
if (!component)
component = closestComponent(el);
if (["$entangle", "entangle"].includes(property)) {
return generateEntangleFunction(component, cleanup);
}
return component.$wire[property];
},
set(target, property, value) {
if (!component)
component = closestComponent(el);
component.$wire[property] = value;
return true;
}
});
});
wireProperty("__instance", (component) => component);
wireProperty("$get", (component) => (property, reactive = true) => dataGet(reactive ? component.reactive : component.ephemeral, property));
wireProperty("$el", (component) => {
return component.el;
});
wireProperty("$id", (component) => {
return component.id;
});
wireProperty("$set", (component) => async (property, value, live = true) => {
dataSet(component.reactive, property, value);
if (live) {
component.queueUpdate(property, value);
return await requestCommit(component);
}
return Promise.resolve();
});
wireProperty("$call", (component) => async (method, ...params) => {
return await component.$wire[method](...params);
});
wireProperty("$entangle", (component) => (name, live = false) => {
return generateEntangleFunction(component)(name, live);
});
wireProperty("$toggle", (component) => (name, live = true) => {
return component.$wire.set(name, !component.$wire.get(name), live);
});
wireProperty("$watch", (component) => (path, callback) => {
let getter = () => {
return dataGet(component.reactive, path);
};
let unwatch = import_alpinejs2.default.watch(getter, callback);
component.addCleanup(unwatch);
});
wireProperty("$refresh", (component) => component.$wire.$commit);
wireProperty("$commit", (component) => async () => await requestCommit(component));
wireProperty("$on", (component) => (...params) => listen2(component, ...params));
wireProperty("$dispatch", (component) => (...params) => dispatch2(component, ...params));
wireProperty("$dispatchSelf", (component) => (...params) => dispatchSelf(component, ...params));
wireProperty("$dispatchTo", () => (...params) => dispatchTo(...params));
wireProperty("$upload", (component) => (...params) => upload(component, ...params));
wireProperty("$uploadMultiple", (component) => (...params) => uploadMultiple(component, ...params));
wireProperty("$removeUpload", (component) => (...params) => removeUpload(component, ...params));
wireProperty("$cancelUpload", (component) => (...params) => cancelUpload(component, ...params));
var parentMemo = /* @__PURE__ */ new WeakMap();
wireProperty("$parent", (component) => {
if (parentMemo.has(component))
return parentMemo.get(component).$wire;
let parent = component.parent;
parentMemo.set(component, parent);
return parent.$wire;
});
var overriddenMethods = /* @__PURE__ */ new WeakMap();
function overrideMethod(component, method, callback) {
if (!overriddenMethods.has(component)) {
overriddenMethods.set(component, {});
}
let obj = overriddenMethods.get(component);
obj[method] = callback;
overriddenMethods.set(component, obj);
}
wireFallback((component) => (property) => async (...params) => {
if (params.length === 1 && params[0] instanceof Event) {
params = [];
}
if (overriddenMethods.has(component)) {
let overrides = overriddenMethods.get(component);
if (typeof overrides[property] === "function") {
return overrides[property](params);
}
}
return await requestCall(component, property, params);
});
// js/component.js
var Component = class {
constructor(el) {
if (el.__livewire)
throw "Component already initialized";
el.__livewire = this;
this.el = el;
this.id = el.getAttribute("wire:id");
this.__livewireId = this.id;
this.snapshotEncoded = el.getAttribute("wire:snapshot");
this.snapshot = JSON.parse(this.snapshotEncoded);
if (!this.snapshot) {
throw `Snapshot missing on Livewire component with id: ` + this.id;
}
this.name = this.snapshot.memo.name;
this.effects = JSON.parse(el.getAttribute("wire:effects"));
this.originalEffects = deepClone(this.effects);
this.canonical = extractData(deepClone(this.snapshot.data));
this.ephemeral = extractData(deepClone(this.snapshot.data));
this.reactive = Alpine.reactive(this.ephemeral);
this.queuedUpdates = {};
this.$wire = generateWireObject(this, this.reactive);
this.cleanups = [];
this.processEffects(this.effects);
}
mergeNewSnapshot(snapshotEncoded, effects, updates = {}) {
let snapshot = JSON.parse(snapshotEncoded);
let oldCanonical = deepClone(this.canonical);
let updatedOldCanonical = this.applyUpdates(oldCanonical, updates);
let newCanonical = extractData(deepClone(snapshot.data));
let dirty = diff(updatedOldCanonical, newCanonical);
this.snapshotEncoded = snapshotEncoded;
this.snapshot = snapshot;
this.effects = effects;
this.canonical = extractData(deepClone(snapshot.data));
let newData = extractData(deepClone(snapshot.data));
Object.entries(dirty).forEach(([key, value]) => {
let rootKey = key.split(".")[0];
this.reactive[rootKey] = newData[rootKey];
});
return dirty;
}
queueUpdate(propertyName, value) {
this.queuedUpdates[propertyName] = value;
}
mergeQueuedUpdates(diff2) {
Object.entries(this.queuedUpdates).forEach(([updateKey, updateValue]) => {
Object.entries(diff2).forEach(([diffKey, diffValue]) => {
if (diffKey.startsWith(updateValue)) {
delete diff2[diffKey];
}
});
diff2[updateKey] = updateValue;
});
this.queuedUpdates = [];
return diff2;
}
applyUpdates(object, updates) {
for (let key in updates) {
dataSet(object, key, updates[key]);
}
return object;
}
replayUpdate(snapshot, html) {
let effects = { ...this.effects, html };
this.mergeNewSnapshot(JSON.stringify(snapshot), effects);
this.processEffects({ html });
}
processEffects(effects) {
trigger("effects", this, effects);
trigger("effect", {
component: this,
effects,
cleanup: (i) => this.addCleanup(i)
});
}
get children() {
let meta = this.snapshot.memo;
let childIds = Object.values(meta.children).map((i) => i[1]);
return childIds.map((id) => findComponent(id));
}
get parent() {
return closestComponent(this.el.parentElement);
}
inscribeSnapshotAndEffectsOnElement() {
let el = this.el;
el.setAttribute("wire:snapshot", this.snapshotEncoded);
let effects = this.originalEffects.listeners ? { listeners: this.originalEffects.listeners } : {};
if (this.originalEffects.url) {
effects.url = this.originalEffects.url;
}
if (this.originalEffects.scripts) {
effects.scripts = this.originalEffects.scripts;
}
el.setAttribute("wire:effects", JSON.stringify(effects));
}
addCleanup(cleanup) {
this.cleanups.push(cleanup);
}
cleanup() {
delete this.el.__livewire;
while (this.cleanups.length > 0) {
this.cleanups.pop()();
}
}
};
// js/store.js
var components = {};
function initComponent(el) {
let component = new Component(el);
if (components[component.id])
throw "Component already registered";
let cleanup = (i) => component.addCleanup(i);
trigger("component.init", { component, cleanup });
components[component.id] = component;
return component;
}
function destroyComponent(id) {
let component = components[id];
if (!component)
return;
component.cleanup();
delete components[id];
}
function findComponent(id) {
let component = components[id];
if (!component)
throw "Component not found: " + id;
return component;
}
function closestComponent(el, strict = true) {
let closestRoot = Alpine.findClosest(el, (i) => i.__livewire);
if (!closestRoot) {
if (strict)
throw "Could not find Livewire component in DOM tree";
return;
}
return closestRoot.__livewire;
}
function componentsByName(name) {
return Object.values(components).filter((component) => {
return name == component.name;
});
}
function getByName(name) {
return componentsByName(name).map((i) => i.$wire);
}
function find(id) {
let component = components[id];
return component && component.$wire;
}
function first() {
return Object.values(components)[0].$wire;
}
function all() {
return Object.values(components);
}
// js/events.js
function dispatch2(component, name, params) {
dispatchEvent(component.el, name, params);
}
function dispatchGlobal(name, params) {
dispatchEvent(window, name, params);
}
function dispatchSelf(component, name, params) {
dispatchEvent(component.el, name, params, false);
}
function dispatchTo(componentName, name, params) {
let targets = componentsByName(componentName);
targets.forEach((target) => {
dispatchEvent(target.el, name, params, false);
});
}
function listen2(component, name, callback) {
component.el.addEventListener(name, (e) => {
callback(e.detail);
});
}
function on2(eventName, callback) {
let handler = (e) => {
if (!e.__livewire)
return;
callback(e.detail);
};
window.addEventListener(eventName, handler);
return () => {
window.removeEventListener(eventName, handler);
};
}
function dispatchEvent(target, name, params, bubbles = true) {
let e = new CustomEvent(name, { bubbles, detail: params });
e.__livewire = { name, params, receivedBy: [] };
target.dispatchEvent(e);
}
// js/directives.js
var customDirectiveNames = /* @__PURE__ */ new Set();
function matchesForLivewireDirective(attributeName) {
return attributeName.match(new RegExp("wire:"));
}
function extractDirective(el, name) {
let [value, ...modifiers] = name.replace(new RegExp("wire:"), "").split(".");
return new Directive(value, modifiers, name, el);
}
function directive(name, callback) {
if (customDirectiveNames.has(name))
return;
customDirectiveNames.add(name);
on("directive.init", ({ el, component, directive: directive2, cleanup }) => {
if (directive2.value === name) {
callback({
el,
directive: directive2,
component,
$wire: component.$wire,
cleanup
});
}
});
}
function getDirectives(el) {
return new DirectiveManager(el);
}
function customDirectiveHasBeenRegistered(name) {
return customDirectiveNames.has(name);
}
var DirectiveManager = class {
constructor(el) {
this.el = el;
this.directives = this.extractTypeModifiersAndValue();
}
all() {
return this.directives;
}
has(value) {
return this.directives.map((directive2) => directive2.value).includes(value);
}
missing(value) {
return !this.has(value);
}
get(value) {
return this.directives.find((directive2) => directive2.value === value);
}
extractTypeModifiersAndValue() {
return Array.from(this.el.getAttributeNames().filter((name) => matchesForLivewireDirective(name)).map((name) => extractDirective(this.el, name)));
}
};
var Directive = class {
constructor(value, modifiers, rawName, el) {
this.rawName = this.raw = rawName;
this.el = el;
this.eventContext;
this.value = value;
this.modifiers = modifiers;
this.expression = this.el.getAttribute(this.rawName);
}
get method() {
const { method } = this.parseOutMethodAndParams(this.expression);
return method;
}
get params() {
const { params } = this.parseOutMethodAndParams(this.expression);
return params;
}
parseOutMethodAndParams(rawMethod) {
let method = rawMethod;
let params = [];
const methodAndParamString = method.match(/(.*?)\((.*)\)/s);
if (methodAndParamString) {
method = methodAndParamString[1];
let func = new Function("$event", `return (function () {
for (var l=arguments.length, p=new Array(l), k=0; k<l; k++) {
p[k] = arguments[k];
}
return [].concat(p);
})(${methodAndParamString[2]})`);
params = func(this.eventContext);
}
return { method, params };
}
};
// js/lifecycle.js
var import_collapse = __toESM(require_module_cjs2());
var import_focus = __toESM(require_module_cjs3());
var import_persist2 = __toESM(require_module_cjs4());
var import_intersect = __toESM(require_module_cjs5());
var import_resize = __toESM(require_module_cjs6());
var import_anchor = __toESM(require_module_cjs7());
// js/plugins/navigate/history.js
var Snapshot = class {
constructor(url, html) {
this.url = url;
this.html = html;
}
};
var snapshotCache = {
currentKey: null,
currentUrl: null,
keys: [],
lookup: {},
limit: 10,
has(location) {
return this.lookup[location] !== void 0;
},
retrieve(location) {
let snapshot = this.lookup[location];
if (snapshot === void 0)
throw "No back button cache found for current location: " + location;
return snapshot;
},
replace(key, snapshot) {
if (this.has(key)) {
this.lookup[key] = snapshot;
} else {
this.push(key, snapshot);
}
},
push(key, snapshot) {
this.lookup[key] = snapshot;
let index = this.keys.indexOf(key);
if (index > -1)
this.keys.splice(index, 1);
this.keys.unshift(key);
this.trim();
},
trim() {
for (let key of this.keys.splice(this.limit)) {
delete this.lookup[key];
}
}
};
function updateCurrentPageHtmlInHistoryStateForLaterBackButtonClicks() {
let url = new URL(window.location.href, document.baseURI);
replaceUrl(url, document.documentElement.outerHTML);
}
function updateCurrentPageHtmlInSnapshotCacheForLaterBackButtonClicks(key, url) {
let html = document.documentElement.outerHTML;
snapshotCache.replace(key, new Snapshot(url, html));
}
function whenTheBackOrForwardButtonIsClicked(registerFallback, handleHtml) {
let fallback2;
registerFallback((i) => fallback2 = i);
window.addEventListener("popstate", (e) => {
let state = e.state || {};
let alpine = state.alpine || {};
if (Object.keys(state).length === 0)
return;
if (!alpine.snapshotIdx)
return;
if (snapshotCache.has(alpine.snapshotIdx)) {
let snapshot = snapshotCache.retrieve(alpine.snapshotIdx);
handleHtml(snapshot.html, snapshot.url, snapshotCache.currentUrl, snapshotCache.currentKey);
} else {
fallback2(alpine.url);
}
});
}
function updateUrlAndStoreLatestHtmlForFutureBackButtons(html, destination) {
pushUrl(destination, html);
}
function pushUrl(url, html) {
updateUrl("pushState", url, html);
}
function replaceUrl(url, html) {
updateUrl("replaceState", url, html);
}
function updateUrl(method, url, html) {
let key = url.toString() + "-" + Math.random();
method === "pushState" ? snapshotCache.push(key, new Snapshot(url, html)) : snapshotCache.replace(key = snapshotCache.currentKey ?? key, new Snapshot(url, html));
let state = history.state || {};
if (!state.alpine)
state.alpine = {};
state.alpine.snapshotIdx = key;
state.alpine.url = url.toString();
try {
history[method](state, JSON.stringify(document.title), url);
snapshotCache.currentKey = key;
snapshotCache.currentUrl = url;
} catch (error2) {
if (error2 instanceof DOMException && error2.name === "SecurityError") {
console.error("Livewire: You can't use wire:navigate with a link to a different root domain: " + url);
}
console.error(error2);
}
}
// js/plugins/navigate/links.js
function whenThisLinkIsPressed(el, callback) {
let isProgrammaticClick = (e) => !e.isTrusted;
let isNotPlainLeftClick = (e) => e.which > 1 || e.altKey || e.ctrlKey || e.metaKey || e.shiftKey;
let isNotPlainEnterKey = (e) => e.which !== 13 || e.altKey || e.ctrlKey || e.metaKey || e.shiftKey;
el.addEventListener("click", (e) => {
if (isProgrammaticClick(e)) {
e.preventDefault();
callback((whenReleased) => whenReleased());
return;
}
if (isNotPlainLeftClick(e))
return;
e.preventDefault();
});
el.addEventListener("mousedown", (e) => {
if (isNotPlainLeftClick(e))
return;
e.preventDefault();
callback((whenReleased) => {
let handler = (e2) => {
e2.preventDefault();
whenReleased();
el.removeEventListener("mouseup", handler);
};
el.addEventListener("mouseup", handler);
});
});
el.addEventListener("keydown", (e) => {
if (isNotPlainEnterKey(e))
return;
e.preventDefault();
callback((whenReleased) => whenReleased());
});
}
function whenThisLinkIsHoveredFor(el, ms = 60, callback) {
el.addEventListener("mouseenter", (e) => {
let timeout = setTimeout(() => {
callback(e);
}, ms);
let handler = () => {
clearTimeout(timeout);
el.removeEventListener("mouseleave", handler);
};
el.addEventListener("mouseleave", handler);
});
}
function extractDestinationFromLink(linkEl) {
return createUrlObjectFromString(linkEl.getAttribute("href"));
}
function createUrlObjectFromString(urlString) {
return urlString !== null && new URL(urlString, document.baseURI);
}
function getUriStringFromUrlObject(urlObject) {
return urlObject.pathname + urlObject.search + urlObject.hash;
}
// js/plugins/navigate/fetch.js
function fetchHtml(destination, callback) {
let uri = getUriStringFromUrlObject(destination);
performFetch(uri, (html, finalDestination) => {
callback(html, finalDestination);
});
}
function performFetch(uri, callback) {
let options = {
headers: {
"X-Livewire-Navigate": ""
}
};
trigger("navigate.request", {
url: uri,
options
});
let finalDestination;
fetch(uri, options).then((response) => {
let destination = createUrlObjectFromString(uri);
finalDestination = createUrlObjectFromString(response.url);
if (destination.pathname + destination.search === finalDestination.pathname + finalDestination.search) {
finalDestination.hash = destination.hash;
}
return response.text();
}).then((html) => {
callback(html, finalDestination);
});
}
// js/plugins/navigate/prefetch.js
var prefetches = {};
function prefetchHtml(destination, callback) {
let uri = getUriStringFromUrlObject(destination);
if (prefetches[uri])
return;
prefetches[uri] = { finished: false, html: null, whenFinished: () => {
} };
performFetch(uri, (html, routedUri) => {
callback(html, routedUri);
});
}
function storeThePrefetchedHtmlForWhenALinkIsClicked(html, destination, finalDestination) {
let state = prefetches[getUriStringFromUrlObject(destination)];
state.html = html;
state.finished = true;
state.finalDestination = finalDestination;
state.whenFinished();
}
function getPretchedHtmlOr(destination, receive, ifNoPrefetchExists) {
let uri = getUriStringFromUrlObject(destination);
if (!prefetches[uri])
return ifNoPrefetchExists();
if (prefetches[uri].finished) {
let html = prefetches[uri].html;
let finalDestination = prefetches[uri].finalDestination;
delete prefetches[uri];
return receive(html, finalDestination);
} else {
prefetches[uri].whenFinished = () => {
let html = prefetches[uri].html;
let finalDestination = prefetches[uri].finalDestination;
delete prefetches[uri];
receive(html, finalDestination);
};
}
}
// js/plugins/navigate/teleport.js
var import_alpinejs3 = __toESM(require_module_cjs());
function packUpPersistedTeleports(persistedEl) {
import_alpinejs3.default.mutateDom(() => {
persistedEl.querySelectorAll("[data-teleport-template]").forEach((i) => i._x_teleport.remove());
});
}
function removeAnyLeftOverStaleTeleportTargets(body) {
import_alpinejs3.default.mutateDom(() => {
body.querySelectorAll("[data-teleport-target]").forEach((i) => i.remove());
});
}
function unPackPersistedTeleports(persistedEl) {
import_alpinejs3.default.walk(persistedEl, (el, skip) => {
if (!el._x_teleport)
return;
el._x_teleportPutBack();
skip();
});
}
function isTeleportTarget(el) {
return el.hasAttribute("data-teleport-target");
}
// js/plugins/navigate/scroll.js
function storeScrollInformationInHtmlBeforeNavigatingAway() {
document.body.setAttribute("data-scroll-x", document.body.scrollLeft);
document.body.setAttribute("data-scroll-y", document.body.scrollTop);
document.querySelectorAll(["[x-navigate\\:scroll]", "[wire\\:scroll]"]).forEach((el) => {
el.setAttribute("data-scroll-x", el.scrollLeft);
el.setAttribute("data-scroll-y", el.scrollTop);
});
}
function restoreScrollPositionOrScrollToTop() {
let scroll = (el) => {
if (!el.hasAttribute("data-scroll-x")) {
window.scrollTo({ top: 0, left: 0, behavior: "instant" });
} else {
el.scrollTo({
top: Number(el.getAttribute("data-scroll-y")),
left: Number(el.getAttribute("data-scroll-x")),
behavior: "instant"
});
el.removeAttribute("data-scroll-x");
el.removeAttribute("data-scroll-y");
}
};
queueMicrotask(() => {
queueMicrotask(() => {
scroll(document.body);
document.querySelectorAll(["[x-navigate\\:scroll]", "[wire\\:scroll]"]).forEach(scroll);
});
});
}
// js/plugins/navigate/persist.js
var import_alpinejs4 = __toESM(require_module_cjs());
var els = {};
function storePersistantElementsForLater(callback) {
els = {};
document.querySelectorAll("[x-persist]").forEach((i) => {
els[i.getAttribute("x-persist")] = i;
callback(i);
import_alpinejs4.default.mutateDom(() => {
i.remove();
});
});
}
function putPersistantElementsBack(callback) {
let usedPersists = [];
document.querySelectorAll("[x-persist]").forEach((i) => {
let old = els[i.getAttribute("x-persist")];
if (!old)
return;
usedPersists.push(i.getAttribute("x-persist"));
old._x_wasPersisted = true;
callback(old, i);
import_alpinejs4.default.mutateDom(() => {
i.replaceWith(old);
});
});
Object.entries(els).forEach(([key, el]) => {
if (usedPersists.includes(key))
return;
import_alpinejs4.default.destroyTree(el);
});
els = {};
}
function isPersistedElement(el) {
return el.hasAttribute("x-persist");
}
// js/plugins/navigate/bar.js
var import_nprogress = __toESM(require_nprogress());
import_nprogress.default.configure({
minimum: 0.1,
trickleSpeed: 200,
showSpinner: false,
parent: "body"
});
injectStyles();
var inProgress = false;
function showAndStartProgressBar() {
inProgress = true;
setTimeout(() => {
if (!inProgress)
return;
import_nprogress.default.start();
}, 150);
}
function finishAndHideProgressBar() {
inProgress = false;
import_nprogress.default.done();
}
function removeAnyLeftOverStaleProgressBars() {
import_nprogress.default.remove();
}
function injectStyles() {
let style = document.createElement("style");
style.innerHTML = `/* Make clicks pass-through */
#nprogress {
pointer-events: none;
}
#nprogress .bar {
background: var(--livewire-progress-bar-color, #29d);
position: fixed;
z-index: 1031;
top: 0;
left: 0;
width: 100%;
height: 2px;
}
/* Fancy blur effect */
#nprogress .peg {
display: block;
position: absolute;
right: 0px;
width: 100px;
height: 100%;
box-shadow: 0 0 10px var(--livewire-progress-bar-color, #29d), 0 0 5px var(--livewire-progress-bar-color, #29d);
opacity: 1.0;
-webkit-transform: rotate(3deg) translate(0px, -4px);
-ms-transform: rotate(3deg) translate(0px, -4px);
transform: rotate(3deg) translate(0px, -4px);
}
/* Remove these to get rid of the spinner */
#nprogress .spinner {
display: block;
position: fixed;
z-index: 1031;
top: 15px;
right: 15px;
}
#nprogress .spinner-icon {
width: 18px;
height: 18px;
box-sizing: border-box;
border: solid 2px transparent;
border-top-color: var(--livewire-progress-bar-color, #29d);
border-left-color: var(--livewire-progress-bar-color, #29d);
border-radius: 50%;
-webkit-animation: nprogress-spinner 400ms linear infinite;
animation: nprogress-spinner 400ms linear infinite;
}
.nprogress-custom-parent {
overflow: hidden;
position: relative;
}
.nprogress-custom-parent #nprogress .spinner,
.nprogress-custom-parent #nprogress .bar {
position: absolute;
}
@-webkit-keyframes nprogress-spinner {
0% { -webkit-transform: rotate(0deg); }
100% { -webkit-transform: rotate(360deg); }
}
@keyframes nprogress-spinner {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
`;
let nonce2 = getNonce();
if (nonce2)
style.nonce = nonce2;
document.head.appendChild(style);
}
// js/plugins/navigate/popover.js
function packUpPersistedPopovers(persistedEl) {
persistedEl.querySelectorAll(":popover-open").forEach((el) => {
el.setAttribute("data-navigate-popover-open", "");
let animations = el.getAnimations();
el._pausedAnimations = animations.map((animation) => ({
keyframes: animation.effect.getKeyframes(),
options: {
duration: animation.effect.getTiming().duration,
easing: animation.effect.getTiming().easing,
fill: animation.effect.getTiming().fill,
iterations: animation.effect.getTiming().iterations
},
currentTime: animation.currentTime,
playState: animation.playState
}));
animations.forEach((i) => i.pause());
});
}
function unPackPersistedPopovers(persistedEl) {
persistedEl.querySelectorAll("[data-navigate-popover-open]").forEach((el) => {
el.removeAttribute("data-navigate-popover-open");
queueMicrotask(() => {
if (!el.isConnected)
return;
el.showPopover();
el.getAnimations().forEach((i) => i.finish());
if (el._pausedAnimations) {
el._pausedAnimations.forEach(({ keyframes, options, currentTime, now, playState }) => {
let animation = el.animate(keyframes, options);
animation.currentTime = currentTime;
});
delete el._pausedAnimations;
}
});
});
}
// js/plugins/navigate/page.js
var oldBodyScriptTagHashes = [];
var attributesExemptFromScriptTagHashing = [
"data-csrf",
"aria-hidden"
];
function swapCurrentPageWithNewHtml(html, andThen) {
let newDocument = new DOMParser().parseFromString(html, "text/html");
let newBody = document.adoptNode(newDocument.body);
let newHead = document.adoptNode(newDocument.head);
oldBodyScriptTagHashes = oldBodyScriptTagHashes.concat(Array.from(document.body.querySelectorAll("script")).map((i) => {
return simpleHash(ignoreAttributes(i.outerHTML, attributesExemptFromScriptTagHashing));
}));
let afterRemoteScriptsHaveLoaded = () => {
};
mergeNewHead(newHead).finally(() => {
afterRemoteScriptsHaveLoaded();
});
prepNewBodyScriptTagsToRun(newBody, oldBodyScriptTagHashes);
let oldBody = document.body;
document.body.replaceWith(newBody);
Alpine.destroyTree(oldBody);
andThen((i) => afterRemoteScriptsHaveLoaded = i);
}
function prepNewBodyScriptTagsToRun(newBody, oldBodyScriptTagHashes2) {
newBody.querySelectorAll("script").forEach((i) => {
if (i.hasAttribute("data-navigate-once")) {
let hash = simpleHash(ignoreAttributes(i.outerHTML, attributesExemptFromScriptTagHashing));
if (oldBodyScriptTagHashes2.includes(hash))
return;
}
i.replaceWith(cloneScriptTag(i));
});
}
function mergeNewHead(newHead) {
let children = Array.from(document.head.children);
let headChildrenHtmlLookup = children.map((i) => i.outerHTML);
let garbageCollector = document.createDocumentFragment();
let touchedHeadElements = [];
let remoteScriptsPromises = [];
for (let child of Array.from(newHead.children)) {
if (isAsset(child)) {
if (!headChildrenHtmlLookup.includes(child.outerHTML)) {
if (isTracked(child)) {
if (ifTheQueryStringChangedSinceLastRequest(child, children)) {
setTimeout(() => window.location.reload());
}
}
if (isScript(child)) {
try {
remoteScriptsPromises.push(injectScriptTagAndWaitForItToFullyLoad(cloneScriptTag(child)));
} catch (error2) {
}
} else {
document.head.appendChild(child);
}
} else {
garbageCollector.appendChild(child);
}
touchedHeadElements.push(child);
}
}
for (let child of Array.from(document.head.children)) {
if (!isAsset(child))
child.remove();
}
for (let child of Array.from(newHead.children)) {
document.head.appendChild(child);
}
return Promise.all(remoteScriptsPromises);
}
async function injectScriptTagAndWaitForItToFullyLoad(script) {
return new Promise((resolve, reject) => {
if (script.src) {
script.onload = () => resolve();
script.onerror = () => reject();
} else {
resolve();
}
document.head.appendChild(script);
});
}
function cloneScriptTag(el) {
let script = document.createElement("script");
script.textContent = el.textContent;
script.async = el.async;
for (let attr of el.attributes) {
script.setAttribute(attr.name, attr.value);
}
return script;
}
function isTracked(el) {
return el.hasAttribute("data-navigate-track");
}
function ifTheQueryStringChangedSinceLastRequest(el, currentHeadChildren) {
let [uri, queryString] = extractUriAndQueryString(el);
return currentHeadChildren.some((child) => {
if (!isTracked(child))
return false;
let [currentUri, currentQueryString] = extractUriAndQueryString(child);
if (currentUri === uri && queryString !== currentQueryString)
return true;
});
}
function extractUriAndQueryString(el) {
let url = isScript(el) ? el.src : el.href;
return url.split("?");
}
function isAsset(el) {
return el.tagName.toLowerCase() === "link" && el.getAttribute("rel").toLowerCase() === "stylesheet" || el.tagName.toLowerCase() === "style" || el.tagName.toLowerCase() === "script";
}
function isScript(el) {
return el.tagName.toLowerCase() === "script";
}
function simpleHash(str) {
return str.split("").reduce((a, b) => {
a = (a << 5) - a + b.charCodeAt(0);
return a & a;
}, 0);
}
function ignoreAttributes(subject, attributesToRemove) {
let result = subject;
attributesToRemove.forEach((attr) => {
const regex = new RegExp(`${attr}="[^"]*"|${attr}='[^']*'`, "g");
result = result.replace(regex, "");
});
result = result.replaceAll(" ", "");
return result.trim();
}
// js/plugins/navigate/index.js
var enablePersist = true;
var showProgressBar = true;
var restoreScroll = true;
var autofocus = false;
function navigate_default(Alpine19) {
Alpine19.navigate = (url) => {
let destination = createUrlObjectFromString(url);
let prevented = fireEventForOtherLibrariesToHookInto("alpine:navigate", {
url: destination,
history: false,
cached: false
});
if (prevented)
return;
navigateTo(destination);
};
Alpine19.navigate.disableProgressBar = () => {
showProgressBar = false;
};
Alpine19.addInitSelector(() => `[${Alpine19.prefixed("navigate")}]`);
Alpine19.directive("navigate", (el, { modifiers }) => {
let shouldPrefetchOnHover = modifiers.includes("hover");
shouldPrefetchOnHover && whenThisLinkIsHoveredFor(el, 60, () => {
let destination = extractDestinationFromLink(el);
if (!destination)
return;
prefetchHtml(destination, (html, finalDestination) => {
storeThePrefetchedHtmlForWhenALinkIsClicked(html, destination, finalDestination);
});
});
whenThisLinkIsPressed(el, (whenItIsReleased) => {
let destination = extractDestinationFromLink(el);
if (!destination)
return;
prefetchHtml(destination, (html, finalDestination) => {
storeThePrefetchedHtmlForWhenALinkIsClicked(html, destination, finalDestination);
});
whenItIsReleased(() => {
let prevented = fireEventForOtherLibrariesToHookInto("alpine:navigate", {
url: destination,
history: false,
cached: false
});
if (prevented)
return;
navigateTo(destination);
});
});
});
function navigateTo(destination, shouldPushToHistoryState = true) {
showProgressBar && showAndStartProgressBar();
fetchHtmlOrUsePrefetchedHtml(destination, (html, finalDestination) => {
fireEventForOtherLibrariesToHookInto("alpine:navigating");
restoreScroll && storeScrollInformationInHtmlBeforeNavigatingAway();
showProgressBar && finishAndHideProgressBar();
cleanupAlpineElementsOnThePageThatArentInsideAPersistedElement();
updateCurrentPageHtmlInHistoryStateForLaterBackButtonClicks();
preventAlpineFromPickingUpDomChanges(Alpine19, (andAfterAllThis) => {
enablePersist && storePersistantElementsForLater((persistedEl) => {
packUpPersistedTeleports(persistedEl);
packUpPersistedPopovers(persistedEl);
});
if (shouldPushToHistoryState) {
updateUrlAndStoreLatestHtmlForFutureBackButtons(html, finalDestination);
} else {
replaceUrl(finalDestination, html);
}
swapCurrentPageWithNewHtml(html, (afterNewScriptsAreDoneLoading) => {
removeAnyLeftOverStaleTeleportTargets(document.body);
enablePersist && putPersistantElementsBack((persistedEl, newStub) => {
unPackPersistedTeleports(persistedEl);
unPackPersistedPopovers(persistedEl);
});
restoreScrollPositionOrScrollToTop();
afterNewScriptsAreDoneLoading(() => {
andAfterAllThis(() => {
setTimeout(() => {
autofocus && autofocusElementsWithTheAutofocusAttribute();
});
nowInitializeAlpineOnTheNewPage(Alpine19);
fireEventForOtherLibrariesToHookInto("alpine:navigated");
});
});
});
});
});
}
whenTheBackOrForwardButtonIsClicked((ifThePageBeingVisitedHasntBeenCached) => {
ifThePageBeingVisitedHasntBeenCached((url) => {
let destination = createUrlObjectFromString(url);
let prevented = fireEventForOtherLibrariesToHookInto("alpine:navigate", {
url: destination,
history: true,
cached: false
});
if (prevented)
return;
let shouldPushToHistoryState = false;
navigateTo(destination, shouldPushToHistoryState);
});
}, (html, url, currentPageUrl, currentPageKey) => {
let destination = createUrlObjectFromString(url);
let prevented = fireEventForOtherLibrariesToHookInto("alpine:navigate", {
url: destination,
history: true,
cached: true
});
if (prevented)
return;
storeScrollInformationInHtmlBeforeNavigatingAway();
fireEventForOtherLibrariesToHookInto("alpine:navigating");
updateCurrentPageHtmlInSnapshotCacheForLaterBackButtonClicks(currentPageUrl, currentPageKey);
preventAlpineFromPickingUpDomChanges(Alpine19, (andAfterAllThis) => {
enablePersist && storePersistantElementsForLater((persistedEl) => {
packUpPersistedTeleports(persistedEl);
packUpPersistedPopovers(persistedEl);
});
swapCurrentPageWithNewHtml(html, () => {
removeAnyLeftOverStaleProgressBars();
removeAnyLeftOverStaleTeleportTargets(document.body);
enablePersist && putPersistantElementsBack((persistedEl, newStub) => {
unPackPersistedTeleports(persistedEl);
unPackPersistedPopovers(persistedEl);
});
restoreScrollPositionOrScrollToTop();
andAfterAllThis(() => {
autofocus && autofocusElementsWithTheAutofocusAttribute();
nowInitializeAlpineOnTheNewPage(Alpine19);
fireEventForOtherLibrariesToHookInto("alpine:navigated");
});
});
});
});
setTimeout(() => {
fireEventForOtherLibrariesToHookInto("alpine:navigated");
});
}
function fetchHtmlOrUsePrefetchedHtml(fromDestination, callback) {
getPretchedHtmlOr(fromDestination, callback, () => {
fetchHtml(fromDestination, callback);
});
}
function preventAlpineFromPickingUpDomChanges(Alpine19, callback) {
Alpine19.stopObservingMutations();
callback((afterAllThis) => {
Alpine19.startObservingMutations();
queueMicrotask(() => {
afterAllThis();
});
});
}
function fireEventForOtherLibrariesToHookInto(name, detail) {
let event = new CustomEvent(name, {
cancelable: true,
bubbles: true,
detail
});
document.dispatchEvent(event);
return event.defaultPrevented;
}
function nowInitializeAlpineOnTheNewPage(Alpine19) {
Alpine19.initTree(document.body, void 0, (el, skip) => {
if (el._x_wasPersisted)
skip();
});
}
function autofocusElementsWithTheAutofocusAttribute() {
document.querySelector("[autofocus]") && document.querySelector("[autofocus]").focus();
}
function cleanupAlpineElementsOnThePageThatArentInsideAPersistedElement() {
let walker = function(root, callback) {
Alpine.walk(root, (el, skip) => {
if (isPersistedElement(el))
skip();
if (isTeleportTarget(el))
skip();
else
callback(el, skip);
});
};
Alpine.destroyTree(document.body, walker);
}
// js/plugins/history/index.js
function history2(Alpine19) {
Alpine19.magic("queryString", (el, { interceptor }) => {
let alias;
let alwaysShow = false;
let usePush = false;
return interceptor((initialSeedValue, getter, setter, path, key) => {
let queryKey = alias || path;
let { initial, replace: replace2, push: push2, pop } = track(queryKey, initialSeedValue, alwaysShow);
setter(initial);
if (!usePush) {
Alpine19.effect(() => replace2(getter()));
} else {
Alpine19.effect(() => push2(getter()));
pop(async (newValue) => {
setter(newValue);
let tillTheEndOfTheMicrotaskQueue = () => Promise.resolve();
await tillTheEndOfTheMicrotaskQueue();
});
}
return initial;
}, (func) => {
func.alwaysShow = () => {
alwaysShow = true;
return func;
};
func.usePush = () => {
usePush = true;
return func;
};
func.as = (key) => {
alias = key;
return func;
};
});
});
Alpine19.history = { track };
}
function track(name, initialSeedValue, alwaysShow = false, except = null) {
let { has, get, set, remove } = queryStringUtils();
let url = new URL(window.location.href);
let isInitiallyPresentInUrl = has(url, name);
let initialValue = isInitiallyPresentInUrl ? get(url, name) : initialSeedValue;
let initialValueMemo = JSON.stringify(initialValue);
let exceptValueMemo = [false, null, void 0].includes(except) ? initialSeedValue : JSON.stringify(except);
let hasReturnedToInitialValue = (newValue) => JSON.stringify(newValue) === initialValueMemo;
let hasReturnedToExceptValue = (newValue) => JSON.stringify(newValue) === exceptValueMemo;
if (alwaysShow)
url = set(url, name, initialValue);
replace(url, name, { value: initialValue });
let lock = false;
let update = (strategy, newValue) => {
if (lock)
return;
let url2 = new URL(window.location.href);
if (!alwaysShow && !isInitiallyPresentInUrl && hasReturnedToInitialValue(newValue)) {
url2 = remove(url2, name);
} else if (newValue === void 0) {
url2 = remove(url2, name);
} else if (!alwaysShow && hasReturnedToExceptValue(newValue)) {
url2 = remove(url2, name);
} else {
url2 = set(url2, name, newValue);
}
strategy(url2, name, { value: newValue });
};
return {
initial: initialValue,
replace(newValue) {
update(replace, newValue);
},
push(newValue) {
update(push, newValue);
},
pop(receiver) {
let handler = (e) => {
if (!e.state || !e.state.alpine)
return;
Object.entries(e.state.alpine).forEach(([iName, { value: newValue }]) => {
if (iName !== name)
return;
lock = true;
let result = receiver(newValue);
if (result instanceof Promise) {
result.finally(() => lock = false);
} else {
lock = false;
}
});
};
window.addEventListener("popstate", handler);
return () => window.removeEventListener("popstate", handler);
}
};
}
function replace(url, key, object) {
let state = window.history.state || {};
if (!state.alpine)
state.alpine = {};
state.alpine[key] = unwrap(object);
window.history.replaceState(state, "", url.toString());
}
function push(url, key, object) {
let state = window.history.state || {};
if (!state.alpine)
state.alpine = {};
state = { alpine: { ...state.alpine, ...{ [key]: unwrap(object) } } };
window.history.pushState(state, "", url.toString());
}
function unwrap(object) {
if (object === void 0)
return void 0;
return JSON.parse(JSON.stringify(object));
}
function queryStringUtils() {
return {
has(url, key) {
let search = url.search;
if (!search)
return false;
let data = fromQueryString(search);
return Object.keys(data).includes(key);
},
get(url, key) {
let search = url.search;
if (!search)
return false;
let data = fromQueryString(search);
return data[key];
},
set(url, key, value) {
let data = fromQueryString(url.search);
data[key] = stripNulls(unwrap(value));
url.search = toQueryString(data);
return url;
},
remove(url, key) {
let data = fromQueryString(url.search);
delete data[key];
url.search = toQueryString(data);
return url;
}
};
}
function stripNulls(value) {
if (!isObjecty(value))
return value;
for (let key in value) {
if (value[key] === null)
delete value[key];
else
value[key] = stripNulls(value[key]);
}
return value;
}
function toQueryString(data) {
let isObjecty2 = (subject) => typeof subject === "object" && subject !== null;
let buildQueryStringEntries = (data2, entries2 = {}, baseKey = "") => {
Object.entries(data2).forEach(([iKey, iValue]) => {
let key = baseKey === "" ? iKey : `${baseKey}[${iKey}]`;
if (iValue === null) {
entries2[key] = "";
} else if (!isObjecty2(iValue)) {
entries2[key] = encodeURIComponent(iValue).replaceAll("%20", "+").replaceAll("%2C", ",");
} else {
entries2 = { ...entries2, ...buildQueryStringEntries(iValue, entries2, key) };
}
});
return entries2;
};
let entries = buildQueryStringEntries(data);
return Object.entries(entries).map(([key, value]) => `${key}=${value}`).join("&");
}
function fromQueryString(search) {
search = search.replace("?", "");
if (search === "")
return {};
let insertDotNotatedValueIntoData = (key, value, data2) => {
let [first2, second, ...rest] = key.split(".");
if (!second)
return data2[key] = value;
if (data2[first2] === void 0) {
data2[first2] = isNaN(second) ? {} : [];
}
insertDotNotatedValueIntoData([second, ...rest].join("."), value, data2[first2]);
};
let entries = search.split("&").map((i) => i.split("="));
let data = /* @__PURE__ */ Object.create(null);
entries.forEach(([key, value]) => {
if (typeof value == "undefined")
return;
value = decodeURIComponent(value.replaceAll("+", "%20"));
if (!key.includes("[")) {
data[key] = value;
} else {
let dotNotatedKey = key.replaceAll("[", ".").replaceAll("]", "");
insertDotNotatedValueIntoData(dotNotatedKey, value, data);
}
});
return data;
}
// js/lifecycle.js
var import_morph = __toESM(require_module_cjs8());
var import_mask = __toESM(require_module_cjs9());
var import_alpinejs5 = __toESM(require_module_cjs());
function start() {
setTimeout(() => ensureLivewireScriptIsntMisplaced());
dispatch(document, "livewire:init");
dispatch(document, "livewire:initializing");
import_alpinejs5.default.plugin(import_morph.default);
import_alpinejs5.default.plugin(history2);
import_alpinejs5.default.plugin(import_intersect.default);
import_alpinejs5.default.plugin(import_resize.default);
import_alpinejs5.default.plugin(import_collapse.default);
import_alpinejs5.default.plugin(import_anchor.default);
import_alpinejs5.default.plugin(import_focus.default);
import_alpinejs5.default.plugin(import_persist2.default);
import_alpinejs5.default.plugin(navigate_default);
import_alpinejs5.default.plugin(import_mask.default);
import_alpinejs5.default.addRootSelector(() => "[wire\\:id]");
import_alpinejs5.default.onAttributesAdded((el, attributes) => {
if (!Array.from(attributes).some((attribute) => matchesForLivewireDirective(attribute.name)))
return;
let component = closestComponent(el, false);
if (!component)
return;
attributes.forEach((attribute) => {
if (!matchesForLivewireDirective(attribute.name))
return;
let directive2 = extractDirective(el, attribute.name);
trigger("directive.init", { el, component, directive: directive2, cleanup: (callback) => {
import_alpinejs5.default.onAttributeRemoved(el, directive2.raw, callback);
} });
});
});
import_alpinejs5.default.interceptInit(import_alpinejs5.default.skipDuringClone((el) => {
if (!Array.from(el.attributes).some((attribute) => matchesForLivewireDirective(attribute.name)))
return;
if (el.hasAttribute("wire:id")) {
let component2 = initComponent(el);
import_alpinejs5.default.onAttributeRemoved(el, "wire:id", () => {
destroyComponent(component2.id);
});
}
let component = closestComponent(el, false);
if (component) {
trigger("element.init", { el, component });
let directives = Array.from(el.getAttributeNames()).filter((name) => matchesForLivewireDirective(name)).map((name) => extractDirective(el, name));
directives.forEach((directive2) => {
trigger("directive.init", { el, component, directive: directive2, cleanup: (callback) => {
import_alpinejs5.default.onAttributeRemoved(el, directive2.raw, callback);
} });
});
}
}));
import_alpinejs5.default.start();
setTimeout(() => window.Livewire.initialRenderIsFinished = true);
dispatch(document, "livewire:initialized");
}
function ensureLivewireScriptIsntMisplaced() {
let el = document.querySelector("script[data-update-uri][data-csrf]");
if (!el)
return;
let livewireEl = el.closest("[wire\\:id]");
if (livewireEl) {
console.warn("Livewire: missing closing tags found. Ensure your template elements contain matching closing tags.", livewireEl);
}
}
// js/index.js
var import_alpinejs17 = __toESM(require_module_cjs());
// js/features/supportListeners.js
on("effect", ({ component, effects }) => {
registerListeners(component, effects.listeners || []);
});
function registerListeners(component, listeners2) {
listeners2.forEach((name) => {
let handler = (e) => {
if (e.__livewire)
e.__livewire.receivedBy.push(component);
component.$wire.call("__dispatch", name, e.detail || {});
};
window.addEventListener(name, handler);
component.addCleanup(() => window.removeEventListener(name, handler));
component.el.addEventListener(name, (e) => {
if (!e.__livewire)
return;
if (e.bubbles)
return;
if (e.__livewire)
e.__livewire.receivedBy.push(component.id);
component.$wire.call("__dispatch", name, e.detail || {});
});
});
}
// js/features/supportScriptsAndAssets.js
var import_alpinejs6 = __toESM(require_module_cjs());
var executedScripts = /* @__PURE__ */ new WeakMap();
var executedAssets = /* @__PURE__ */ new Set();
on("payload.intercept", async ({ assets }) => {
if (!assets)
return;
for (let [key, asset] of Object.entries(assets)) {
await onlyIfAssetsHaventBeenLoadedAlreadyOnThisPage(key, async () => {
await addAssetsToHeadTagOfPage(asset);
});
}
});
on("component.init", ({ component }) => {
let assets = component.snapshot.memo.assets;
if (assets) {
assets.forEach((key) => {
if (executedAssets.has(key))
return;
executedAssets.add(key);
});
}
});
on("effect", ({ component, effects }) => {
let scripts = effects.scripts;
if (scripts) {
Object.entries(scripts).forEach(([key, content]) => {
onlyIfScriptHasntBeenRunAlreadyForThisComponent(component, key, () => {
let scriptContent = extractScriptTagContent(content);
import_alpinejs6.default.dontAutoEvaluateFunctions(() => {
import_alpinejs6.default.evaluate(component.el, scriptContent, { "$wire": component.$wire });
});
});
});
}
});
function onlyIfScriptHasntBeenRunAlreadyForThisComponent(component, key, callback) {
if (executedScripts.has(component)) {
let alreadyRunKeys2 = executedScripts.get(component);
if (alreadyRunKeys2.includes(key))
return;
}
callback();
if (!executedScripts.has(component))
executedScripts.set(component, []);
let alreadyRunKeys = executedScripts.get(component);
alreadyRunKeys.push(key);
executedScripts.set(component, alreadyRunKeys);
}
function extractScriptTagContent(rawHtml) {
let scriptRegex = /<script\b[^>]*>([\s\S]*?)<\/script>/gm;
let matches = scriptRegex.exec(rawHtml);
let innards = matches && matches[1] ? matches[1].trim() : "";
return innards;
}
async function onlyIfAssetsHaventBeenLoadedAlreadyOnThisPage(key, callback) {
if (executedAssets.has(key))
return;
await callback();
executedAssets.add(key);
}
async function addAssetsToHeadTagOfPage(rawHtml) {
let newDocument = new DOMParser().parseFromString(rawHtml, "text/html");
let newHead = document.adoptNode(newDocument.head);
for (let child of newHead.children) {
try {
await runAssetSynchronously(child);
} catch (error2) {
}
}
}
async function runAssetSynchronously(child) {
return new Promise((resolve, reject) => {
if (isScript2(child)) {
let script = cloneScriptTag2(child);
if (script.src) {
script.onload = () => resolve();
script.onerror = () => reject();
} else {
resolve();
}
document.head.appendChild(script);
} else {
document.head.appendChild(child);
resolve();
}
});
}
function isScript2(el) {
return el.tagName.toLowerCase() === "script";
}
function cloneScriptTag2(el) {
let script = document.createElement("script");
script.textContent = el.textContent;
script.async = el.async;
for (let attr of el.attributes) {
script.setAttribute(attr.name, attr.value);
}
return script;
}
// js/features/supportJsEvaluation.js
var import_alpinejs7 = __toESM(require_module_cjs());
on("effect", ({ component, effects }) => {
let js = effects.js;
let xjs = effects.xjs;
if (js) {
Object.entries(js).forEach(([method, body]) => {
overrideMethod(component, method, () => {
import_alpinejs7.default.evaluate(component.el, body);
});
});
}
if (xjs) {
xjs.forEach((expression) => {
import_alpinejs7.default.evaluate(component.el, expression);
});
}
});
// js/morph.js
var import_alpinejs8 = __toESM(require_module_cjs());
function morph2(component, el, html) {
let wrapperTag = el.parentElement ? el.parentElement.tagName.toLowerCase() : "div";
let wrapper = document.createElement(wrapperTag);
wrapper.innerHTML = html;
let parentComponent;
try {
parentComponent = closestComponent(el.parentElement);
} catch (e) {
}
parentComponent && (wrapper.__livewire = parentComponent);
let to = wrapper.firstElementChild;
to.__livewire = component;
trigger("morph", { el, toEl: to, component });
import_alpinejs8.default.morph(el, to, {
updating: (el2, toEl, childrenOnly, skip) => {
if (isntElement(el2))
return;
trigger("morph.updating", { el: el2, toEl, component, skip, childrenOnly });
if (el2.__livewire_replace === true)
el2.innerHTML = toEl.innerHTML;
if (el2.__livewire_replace_self === true) {
el2.outerHTML = toEl.outerHTML;
return skip();
}
if (el2.__livewire_ignore === true)
return skip();
if (el2.__livewire_ignore_self === true)
childrenOnly();
if (isComponentRootEl(el2) && el2.getAttribute("wire:id") !== component.id)
return skip();
if (isComponentRootEl(el2))
toEl.__livewire = component;
},
updated: (el2) => {
if (isntElement(el2))
return;
trigger("morph.updated", { el: el2, component });
},
removing: (el2, skip) => {
if (isntElement(el2))
return;
trigger("morph.removing", { el: el2, component, skip });
},
removed: (el2) => {
if (isntElement(el2))
return;
trigger("morph.removed", { el: el2, component });
},
adding: (el2) => {
trigger("morph.adding", { el: el2, component });
},
added: (el2) => {
if (isntElement(el2))
return;
const closestComponentId = closestComponent(el2).id;
trigger("morph.added", { el: el2 });
},
key: (el2) => {
if (isntElement(el2))
return;
return el2.hasAttribute(`wire:key`) ? el2.getAttribute(`wire:key`) : el2.hasAttribute(`wire:id`) ? el2.getAttribute(`wire:id`) : el2.id;
},
lookahead: false
});
trigger("morphed", { el, component });
}
function isntElement(el) {
return typeof el.hasAttribute !== "function";
}
function isComponentRootEl(el) {
return el.hasAttribute("wire:id");
}
// js/features/supportMorphDom.js
on("effect", ({ component, effects }) => {
let html = effects.html;
if (!html)
return;
queueMicrotask(() => {
queueMicrotask(() => {
morph2(component, component.el, html);
});
});
});
// js/features/supportDispatches.js
on("effect", ({ component, effects }) => {
dispatchEvents(component, effects.dispatches || []);
});
function dispatchEvents(component, dispatches) {
dispatches.forEach(({ name, params = {}, self: self2 = false, to }) => {
if (self2)
dispatchSelf(component, name, params);
else if (to)
dispatchTo(to, name, params);
else
dispatch2(component, name, params);
});
}
// js/features/supportDisablingFormsDuringRequest.js
var import_alpinejs9 = __toESM(require_module_cjs());
var cleanups = new Bag();
on("directive.init", ({ el, directive: directive2, cleanup, component }) => setTimeout(() => {
if (directive2.value !== "submit")
return;
el.addEventListener("submit", () => {
let componentId = directive2.expression.startsWith("$parent") ? component.parent.id : component.id;
let cleanup2 = disableForm(el);
cleanups.add(componentId, cleanup2);
});
}));
on("commit", ({ component, respond }) => {
respond(() => {
cleanups.each(component.id, (i) => i());
cleanups.remove(component.id);
});
});
function disableForm(formEl) {
let undos = [];
import_alpinejs9.default.walk(formEl, (el, skip) => {
if (!formEl.contains(el))
return;
if (el.hasAttribute("wire:ignore"))
return skip();
if (shouldMarkDisabled(el)) {
undos.push(markDisabled(el));
} else if (shouldMarkReadOnly(el)) {
undos.push(markReadOnly(el));
}
});
return () => {
while (undos.length > 0)
undos.shift()();
};
}
function shouldMarkDisabled(el) {
let tag = el.tagName.toLowerCase();
if (tag === "select")
return true;
if (tag === "button" && el.type === "submit")
return true;
if (tag === "input" && (el.type === "checkbox" || el.type === "radio"))
return true;
return false;
}
function shouldMarkReadOnly(el) {
return ["input", "textarea"].includes(el.tagName.toLowerCase());
}
function markDisabled(el) {
let undo = el.disabled ? () => {
} : () => el.disabled = false;
el.disabled = true;
return undo;
}
function markReadOnly(el) {
let undo = el.readOnly ? () => {
} : () => el.readOnly = false;
el.readOnly = true;
return undo;
}
// js/features/supportPropsAndModelables.js
on("commit.pooling", ({ commits }) => {
commits.forEach((commit) => {
let component = commit.component;
getDeepChildrenWithBindings(component, (child) => {
child.$wire.$commit();
});
});
});
on("commit.pooled", ({ pools }) => {
let commits = getPooledCommits(pools);
commits.forEach((commit) => {
let component = commit.component;
getDeepChildrenWithBindings(component, (child) => {
colocateCommitsByComponent(pools, component, child);
});
});
});
function getPooledCommits(pools) {
let commits = [];
pools.forEach((pool) => {
pool.commits.forEach((commit) => {
commits.push(commit);
});
});
return commits;
}
function colocateCommitsByComponent(pools, component, foreignComponent) {
let pool = findPoolWithComponent(pools, component);
let foreignPool = findPoolWithComponent(pools, foreignComponent);
let foreignCommit = foreignPool.findCommitByComponent(foreignComponent);
foreignPool.delete(foreignCommit);
pool.add(foreignCommit);
pools.forEach((pool2) => {
if (pool2.empty())
pools.delete(pool2);
});
}
function findPoolWithComponent(pools, component) {
for (let [idx, pool] of pools.entries()) {
if (pool.hasCommitFor(component))
return pool;
}
}
function getDeepChildrenWithBindings(component, callback) {
getDeepChildren(component, (child) => {
if (hasReactiveProps(child) || hasWireModelableBindings(child)) {
callback(child);
}
});
}
function hasReactiveProps(component) {
let meta = component.snapshot.memo;
let props = meta.props;
return !!props;
}
function hasWireModelableBindings(component) {
let meta = component.snapshot.memo;
let bindings = meta.bindings;
return !!bindings;
}
function getDeepChildren(component, callback) {
component.children.forEach((child) => {
callback(child);
getDeepChildren(child, callback);
});
}
// js/features/supportFileDownloads.js
on("commit", ({ succeed }) => {
succeed(({ effects }) => {
let download = effects.download;
if (!download)
return;
let urlObject = window.webkitURL || window.URL;
let url = urlObject.createObjectURL(base64toBlob(download.content, download.contentType));
let invisibleLink = document.createElement("a");
invisibleLink.style.display = "none";
invisibleLink.href = url;
invisibleLink.download = download.name;
document.body.appendChild(invisibleLink);
invisibleLink.click();
setTimeout(function() {
urlObject.revokeObjectURL(url);
}, 0);
});
});
function base64toBlob(b64Data, contentType = "", sliceSize = 512) {
const byteCharacters = atob(b64Data);
const byteArrays = [];
if (contentType === null)
contentType = "";
for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
let slice = byteCharacters.slice(offset, offset + sliceSize);
let byteNumbers = new Array(slice.length);
for (let i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
let byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
return new Blob(byteArrays, { type: contentType });
}
// js/features/supportLazyLoading.js
var componentsThatWantToBeBundled = /* @__PURE__ */ new WeakSet();
var componentsThatAreLazy = /* @__PURE__ */ new WeakSet();
on("component.init", ({ component }) => {
let memo = component.snapshot.memo;
if (memo.lazyLoaded === void 0)
return;
componentsThatAreLazy.add(component);
if (memo.lazyIsolated !== void 0 && memo.lazyIsolated === false) {
componentsThatWantToBeBundled.add(component);
}
});
on("commit.pooling", ({ commits }) => {
commits.forEach((commit) => {
if (!componentsThatAreLazy.has(commit.component))
return;
if (componentsThatWantToBeBundled.has(commit.component)) {
commit.isolate = false;
componentsThatWantToBeBundled.delete(commit.component);
} else {
commit.isolate = true;
}
componentsThatAreLazy.delete(commit.component);
});
});
// js/features/supportQueryString.js
var import_alpinejs10 = __toESM(require_module_cjs());
on("effect", ({ component, effects, cleanup }) => {
let queryString = effects["url"];
if (!queryString)
return;
Object.entries(queryString).forEach(([key, value]) => {
let { name, as, use, alwaysShow, except } = normalizeQueryStringEntry(key, value);
if (!as)
as = name;
let initialValue = [false, null, void 0].includes(except) ? dataGet(component.ephemeral, name) : except;
let { replace: replace2, push: push2, pop } = track(as, initialValue, alwaysShow, except);
if (use === "replace") {
let effectReference = import_alpinejs10.default.effect(() => {
replace2(dataGet(component.reactive, name));
});
cleanup(() => import_alpinejs10.default.release(effectReference));
} else if (use === "push") {
let forgetCommitHandler = on("commit", ({ component: commitComponent, succeed }) => {
if (component !== commitComponent)
return;
let beforeValue = dataGet(component.canonical, name);
succeed(() => {
let afterValue = dataGet(component.canonical, name);
if (JSON.stringify(beforeValue) === JSON.stringify(afterValue))
return;
push2(afterValue);
});
});
let forgetPopHandler = pop(async (newValue) => {
await component.$wire.set(name, newValue);
document.querySelectorAll("input").forEach((el) => {
el._x_forceModelUpdate && el._x_forceModelUpdate(el._x_model.get());
});
});
cleanup(() => {
forgetCommitHandler();
forgetPopHandler();
});
}
});
});
function normalizeQueryStringEntry(key, value) {
let defaults = { use: "replace", alwaysShow: false };
if (typeof value === "string") {
return { ...defaults, name: value, as: value };
} else {
let fullerDefaults = { ...defaults, name: key, as: key };
return { ...fullerDefaults, ...value };
}
}
// js/features/supportLaravelEcho.js
on("request", ({ options }) => {
if (window.Echo) {
options.headers["X-Socket-ID"] = window.Echo.socketId();
}
});
on("effect", ({ component, effects }) => {
let listeners2 = effects.listeners || [];
listeners2.forEach((event) => {
if (event.startsWith("echo")) {
if (typeof window.Echo === "undefined") {
console.warn("Laravel Echo cannot be found");
return;
}
let event_parts = event.split(/(echo:|echo-)|:|,/);
if (event_parts[1] == "echo:") {
event_parts.splice(2, 0, "channel", void 0);
}
if (event_parts[2] == "notification") {
event_parts.push(void 0, void 0);
}
let [
s1,
signature,
channel_type,
s2,
channel,
s3,
event_name
] = event_parts;
if (["channel", "private", "encryptedPrivate"].includes(channel_type)) {
let handler = (e) => dispatchSelf(component, event, [e]);
window.Echo[channel_type](channel).listen(event_name, handler);
component.addCleanup(() => {
window.Echo[channel_type](channel).stopListening(event_name, handler);
});
} else if (channel_type == "presence") {
if (["here", "joining", "leaving"].includes(event_name)) {
window.Echo.join(channel)[event_name]((e) => {
dispatchSelf(component, event, [e]);
});
} else {
let handler = (e) => dispatchSelf(component, event, [e]);
window.Echo.join(channel).listen(event_name, handler);
component.addCleanup(() => {
window.Echo.leaveChannel(channel);
});
}
} else if (channel_type == "notification") {
window.Echo.private(channel).notification((notification) => {
dispatchSelf(component, event, [notification]);
});
} else {
console.warn("Echo channel type not yet supported");
}
}
});
});
// js/features/supportIsolating.js
var componentsThatAreIsolated = /* @__PURE__ */ new WeakSet();
on("component.init", ({ component }) => {
let memo = component.snapshot.memo;
if (memo.isolate !== true)
return;
componentsThatAreIsolated.add(component);
});
on("commit.pooling", ({ commits }) => {
commits.forEach((commit) => {
if (!componentsThatAreIsolated.has(commit.component))
return;
commit.isolate = true;
});
});
// js/features/supportNavigate.js
shouldHideProgressBar() && Alpine.navigate.disableProgressBar();
document.addEventListener("alpine:navigate", (e) => forwardEvent("livewire:navigate", e));
document.addEventListener("alpine:navigating", (e) => forwardEvent("livewire:navigating", e));
document.addEventListener("alpine:navigated", (e) => forwardEvent("livewire:navigated", e));
function forwardEvent(name, original) {
let event = new CustomEvent(name, { cancelable: true, bubbles: true, detail: original.detail });
document.dispatchEvent(event);
if (event.defaultPrevented) {
original.preventDefault();
}
}
function shouldRedirectUsingNavigateOr(effects, url, or) {
let forceNavigate = effects.redirectUsingNavigate;
if (forceNavigate) {
Alpine.navigate(url);
} else {
or();
}
}
function shouldHideProgressBar() {
if (!!document.querySelector("[data-no-progress-bar]"))
return true;
if (window.livewireScriptConfig && window.livewireScriptConfig.progressBar === false)
return true;
return false;
}
// js/features/supportRedirects.js
on("effect", ({ effects }) => {
if (!effects["redirect"])
return;
let url = effects["redirect"];
shouldRedirectUsingNavigateOr(effects, url, () => {
window.location.href = url;
});
});
// js/directives/wire-transition.js
var import_alpinejs11 = __toESM(require_module_cjs());
on("morph.added", ({ el }) => {
el.__addedByMorph = true;
});
directive("transition", ({ el, directive: directive2, component, cleanup }) => {
let visibility = import_alpinejs11.default.reactive({ state: el.__addedByMorph ? false : true });
import_alpinejs11.default.bind(el, {
[directive2.rawName.replace("wire:", "x-")]: "",
"x-show"() {
return visibility.state;
}
});
el.__addedByMorph && setTimeout(() => visibility.state = true);
let cleanups2 = [];
cleanups2.push(on("morph.removing", ({ el: el2, skip }) => {
skip();
el2.addEventListener("transitionend", () => {
el2.remove();
});
visibility.state = false;
cleanups2.push(on("morph", ({ component: morphComponent }) => {
if (morphComponent !== component)
return;
el2.remove();
cleanups2.forEach((i) => i());
}));
}));
cleanup(() => cleanups2.forEach((i) => i()));
});
// js/debounce.js
var callbacksByComponent = new WeakBag();
function callAndClearComponentDebounces(component, callback) {
callbacksByComponent.each(component, (callbackRegister) => {
callbackRegister.callback();
callbackRegister.callback = () => {
};
});
callback();
}
// js/directives/wire-wildcard.js
var import_alpinejs12 = __toESM(require_module_cjs());
on("directive.init", ({ el, directive: directive2, cleanup, component }) => {
if (["snapshot", "effects", "model", "init", "loading", "poll", "ignore", "id", "data", "key", "target", "dirty"].includes(directive2.value))
return;
if (customDirectiveHasBeenRegistered(directive2.value))
return;
let attribute = directive2.rawName.replace("wire:", "x-on:");
if (directive2.value === "submit" && !directive2.modifiers.includes("prevent")) {
attribute = attribute + ".prevent";
}
let cleanupBinding = import_alpinejs12.default.bind(el, {
[attribute](e) {
let execute = () => {
callAndClearComponentDebounces(component, () => {
import_alpinejs12.default.evaluate(el, "$wire." + directive2.expression, { scope: { $event: e } });
});
};
if (el.__livewire_confirm) {
el.__livewire_confirm(() => {
execute();
}, () => {
e.stopImmediatePropagation();
});
} else {
execute();
}
}
});
cleanup(cleanupBinding);
});
// js/directives/wire-navigate.js
var import_alpinejs13 = __toESM(require_module_cjs());
import_alpinejs13.default.addInitSelector(() => `[wire\\:navigate]`);
import_alpinejs13.default.addInitSelector(() => `[wire\\:navigate\\.hover]`);
import_alpinejs13.default.interceptInit(import_alpinejs13.default.skipDuringClone((el) => {
if (el.hasAttribute("wire:navigate")) {
import_alpinejs13.default.bind(el, { ["x-navigate"]: true });
} else if (el.hasAttribute("wire:navigate.hover")) {
import_alpinejs13.default.bind(el, { ["x-navigate.hover"]: true });
}
}));
document.addEventListener("alpine:navigating", () => {
Livewire.all().forEach((component) => {
component.inscribeSnapshotAndEffectsOnElement();
});
});
// js/directives/wire-confirm.js
directive("confirm", ({ el, directive: directive2 }) => {
let message = directive2.expression;
let shouldPrompt = directive2.modifiers.includes("prompt");
message = message.replaceAll("\\n", "\n");
if (message === "")
message = "Are you sure?";
el.__livewire_confirm = (action, instead) => {
if (shouldPrompt) {
let [question, expected] = message.split("|");
if (!expected) {
console.warn("Livewire: Must provide expectation with wire:confirm.prompt");
} else {
let input = prompt(question);
if (input === expected) {
action();
} else {
instead();
}
}
} else {
if (confirm(message))
action();
else
instead();
}
};
});
// js/directives/shared.js
function toggleBooleanStateDirective(el, directive2, isTruthy, cachedDisplay = null) {
isTruthy = directive2.modifiers.includes("remove") ? !isTruthy : isTruthy;
if (directive2.modifiers.includes("class")) {
let classes = directive2.expression.split(" ").filter(String);
if (isTruthy) {
el.classList.add(...classes);
} else {
el.classList.remove(...classes);
}
} else if (directive2.modifiers.includes("attr")) {
if (isTruthy) {
el.setAttribute(directive2.expression, true);
} else {
el.removeAttribute(directive2.expression);
}
} else {
let cache = cachedDisplay ?? window.getComputedStyle(el, null).getPropertyValue("display");
let display = ["inline", "block", "table", "flex", "grid", "inline-flex"].filter((i) => directive2.modifiers.includes(i))[0] || "inline-block";
display = directive2.modifiers.includes("remove") && !isTruthy ? cache : display;
el.style.display = isTruthy ? display : "none";
}
}
// js/directives/wire-offline.js
var offlineHandlers = /* @__PURE__ */ new Set();
var onlineHandlers = /* @__PURE__ */ new Set();
window.addEventListener("offline", () => offlineHandlers.forEach((i) => i()));
window.addEventListener("online", () => onlineHandlers.forEach((i) => i()));
directive("offline", ({ el, directive: directive2, cleanup }) => {
let setOffline = () => toggleBooleanStateDirective(el, directive2, true);
let setOnline = () => toggleBooleanStateDirective(el, directive2, false);
offlineHandlers.add(setOffline);
onlineHandlers.add(setOnline);
cleanup(() => {
offlineHandlers.delete(setOffline);
onlineHandlers.delete(setOnline);
});
});
// js/directives/wire-loading.js
directive("loading", ({ el, directive: directive2, component, cleanup }) => {
let { targets, inverted } = getTargets(el);
let [delay, abortDelay] = applyDelay(directive2);
let cleanupA = whenTargetsArePartOfRequest(component, targets, inverted, [
() => delay(() => toggleBooleanStateDirective(el, directive2, true)),
() => abortDelay(() => toggleBooleanStateDirective(el, directive2, false))
]);
let cleanupB = whenTargetsArePartOfFileUpload(component, targets, [
() => delay(() => toggleBooleanStateDirective(el, directive2, true)),
() => abortDelay(() => toggleBooleanStateDirective(el, directive2, false))
]);
cleanup(() => {
cleanupA();
cleanupB();
});
});
function applyDelay(directive2) {
if (!directive2.modifiers.includes("delay") || directive2.modifiers.includes("none"))
return [(i) => i(), (i) => i()];
let duration = 200;
let delayModifiers = {
"shortest": 50,
"shorter": 100,
"short": 150,
"default": 200,
"long": 300,
"longer": 500,
"longest": 1e3
};
Object.keys(delayModifiers).some((key) => {
if (directive2.modifiers.includes(key)) {
duration = delayModifiers[key];
return true;
}
});
let timeout;
let started = false;
return [
(callback) => {
timeout = setTimeout(() => {
callback();
started = true;
}, duration);
},
async (callback) => {
if (started) {
await callback();
started = false;
} else {
clearTimeout(timeout);
}
}
];
}
function whenTargetsArePartOfRequest(component, targets, inverted, [startLoading, endLoading]) {
return on("commit", ({ component: iComponent, commit: payload, respond }) => {
if (iComponent !== component)
return;
if (targets.length > 0 && containsTargets(payload, targets) === inverted)
return;
startLoading();
respond(() => {
endLoading();
});
});
}
function whenTargetsArePartOfFileUpload(component, targets, [startLoading, endLoading]) {
let eventMismatch = (e) => {
let { id, property } = e.detail;
if (id !== component.id)
return true;
if (targets.length > 0 && !targets.map((i) => i.target).includes(property))
return true;
return false;
};
let cleanupA = listen(window, "livewire-upload-start", (e) => {
if (eventMismatch(e))
return;
startLoading();
});
let cleanupB = listen(window, "livewire-upload-finish", (e) => {
if (eventMismatch(e))
return;
endLoading();
});
let cleanupC = listen(window, "livewire-upload-error", (e) => {
if (eventMismatch(e))
return;
endLoading();
});
return () => {
cleanupA();
cleanupB();
cleanupC();
};
}
function containsTargets(payload, targets) {
let { updates, calls } = payload;
return targets.some(({ target, params }) => {
if (params) {
return calls.some(({ method, params: methodParams }) => {
return target === method && params === quickHash(JSON.stringify(methodParams));
});
}
let hasMatchingUpdate = Object.keys(updates).some((property) => {
if (property.includes(".")) {
let propertyRoot = property.split(".")[0];
if (propertyRoot === target)
return true;
}
return property === target;
});
if (hasMatchingUpdate)
return true;
if (calls.map((i) => i.method).includes(target))
return true;
});
}
function getTargets(el) {
let directives = getDirectives(el);
let targets = [];
let inverted = false;
if (directives.has("target")) {
let directive2 = directives.get("target");
let raw = directive2.expression;
if (directive2.modifiers.includes("except"))
inverted = true;
if (raw.includes("(") && raw.includes(")")) {
targets.push({ target: directive2.method, params: quickHash(JSON.stringify(directive2.params)) });
} else if (raw.includes(",")) {
raw.split(",").map((i) => i.trim()).forEach((target) => {
targets.push({ target });
});
} else {
targets.push({ target: raw });
}
} else {
let nonActionOrModelLivewireDirectives = ["init", "dirty", "offline", "target", "loading", "poll", "ignore", "key", "id"];
directives.all().filter((i) => !nonActionOrModelLivewireDirectives.includes(i.value)).map((i) => i.expression.split("(")[0]).forEach((target) => targets.push({ target }));
}
return { targets, inverted };
}
function quickHash(subject) {
return btoa(encodeURIComponent(subject));
}
// js/directives/wire-stream.js
directive("stream", ({ el, directive: directive2, cleanup }) => {
let { expression, modifiers } = directive2;
let off = on("stream", ({ name, content, replace: replace2 }) => {
if (name !== expression)
return;
if (modifiers.includes("replace") || replace2) {
el.innerHTML = content;
} else {
el.innerHTML = el.innerHTML + content;
}
});
cleanup(off);
});
on("request", ({ respond }) => {
respond((mutableObject) => {
let response = mutableObject.response;
if (!response.headers.has("X-Livewire-Stream"))
return;
mutableObject.response = {
ok: true,
redirected: false,
status: 200,
async text() {
let finalResponse = await interceptStreamAndReturnFinalResponse(response, (streamed) => {
trigger("stream", streamed);
});
if (contentIsFromDump(finalResponse)) {
this.ok = false;
}
return finalResponse;
}
};
});
});
async function interceptStreamAndReturnFinalResponse(response, callback) {
let reader = response.body.getReader();
let remainingResponse = "";
while (true) {
let { done, value: chunk } = await reader.read();
let decoder = new TextDecoder();
let output = decoder.decode(chunk);
let [streams, remaining] = extractStreamObjects(remainingResponse + output);
streams.forEach((stream) => {
callback(stream);
});
remainingResponse = remaining;
if (done)
return remainingResponse;
}
}
function extractStreamObjects(raw) {
let regex = /({"stream":true.*?"endStream":true})/g;
let matches = raw.match(regex);
let parsed = [];
if (matches) {
for (let i = 0; i < matches.length; i++) {
parsed.push(JSON.parse(matches[i]).body);
}
}
let remaining = raw.replace(regex, "");
return [parsed, remaining];
}
// js/directives/wire-replace.js
directive("replace", ({ el, directive: directive2 }) => {
if (directive2.modifiers.includes("self")) {
el.__livewire_replace_self = true;
} else {
el.__livewire_replace = true;
}
});
// js/directives/wire-ignore.js
directive("ignore", ({ el, directive: directive2 }) => {
if (directive2.modifiers.includes("self")) {
el.__livewire_ignore_self = true;
} else {
el.__livewire_ignore = true;
}
});
// js/directives/wire-dirty.js
var refreshDirtyStatesByComponent = new WeakBag();
on("commit", ({ component, respond }) => {
respond(() => {
setTimeout(() => {
refreshDirtyStatesByComponent.each(component, (i) => i(false));
});
});
});
directive("dirty", ({ el, directive: directive2, component }) => {
let targets = dirtyTargets(el);
let dirty = Alpine.reactive({ state: false });
let oldIsDirty = false;
let initialDisplay = el.style.display;
let refreshDirtyState = (isDirty) => {
toggleBooleanStateDirective(el, directive2, isDirty, initialDisplay);
oldIsDirty = isDirty;
};
refreshDirtyStatesByComponent.add(component, refreshDirtyState);
Alpine.effect(() => {
let isDirty = false;
if (targets.length === 0) {
isDirty = JSON.stringify(component.canonical) !== JSON.stringify(component.reactive);
} else {
for (let i = 0; i < targets.length; i++) {
if (isDirty)
break;
let target = targets[i];
isDirty = JSON.stringify(dataGet(component.canonical, target)) !== JSON.stringify(dataGet(component.reactive, target));
}
}
if (oldIsDirty !== isDirty) {
refreshDirtyState(isDirty);
}
oldIsDirty = isDirty;
});
});
function dirtyTargets(el) {
let directives = getDirectives(el);
let targets = [];
if (directives.has("model")) {
targets.push(directives.get("model").expression);
}
if (directives.has("target")) {
targets = targets.concat(directives.get("target").expression.split(",").map((s) => s.trim()));
}
return targets;
}
// js/directives/wire-model.js
var import_alpinejs14 = __toESM(require_module_cjs());
directive("model", ({ el, directive: directive2, component, cleanup }) => {
let { expression, modifiers } = directive2;
if (!expression) {
return console.warn("Livewire: [wire:model] is missing a value.", el);
}
if (componentIsMissingProperty(component, expression)) {
return console.warn('Livewire: [wire:model="' + expression + '"] property does not exist on component: [' + component.name + "]", el);
}
if (el.type && el.type.toLowerCase() === "file") {
return handleFileUpload(el, expression, component, cleanup);
}
let isLive = modifiers.includes("live");
let isLazy = modifiers.includes("lazy") || modifiers.includes("change");
let onBlur = modifiers.includes("blur");
let isDebounced = modifiers.includes("debounce");
let update = expression.startsWith("$parent") ? () => component.$wire.$parent.$commit() : () => component.$wire.$commit();
let debouncedUpdate = isTextInput(el) && !isDebounced && isLive ? debounce(update, 150) : update;
import_alpinejs14.default.bind(el, {
["@change"]() {
isLazy && update();
},
["@blur"]() {
onBlur && update();
},
["x-model" + getModifierTail(modifiers)]() {
return {
get() {
return dataGet(component.$wire, expression);
},
set(value) {
dataSet(component.$wire, expression, value);
isLive && !isLazy && !onBlur && debouncedUpdate();
}
};
}
});
});
function getModifierTail(modifiers) {
modifiers = modifiers.filter((i) => ![
"lazy",
"defer"
].includes(i));
if (modifiers.length === 0)
return "";
return "." + modifiers.join(".");
}
function isTextInput(el) {
return ["INPUT", "TEXTAREA"].includes(el.tagName.toUpperCase()) && !["checkbox", "radio"].includes(el.type);
}
function componentIsMissingProperty(component, property) {
if (property.startsWith("$parent")) {
let parent = closestComponent(component.el.parentElement, false);
if (!parent)
return true;
return componentIsMissingProperty(parent, property.split("$parent.")[1]);
}
let baseProperty = property.split(".")[0];
return !Object.keys(component.canonical).includes(baseProperty);
}
function debounce(func, wait) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
func.apply(context, args);
};
clearTimeout(timeout);
timeout = setTimeout(later, wait);
};
}
// js/directives/wire-init.js
var import_alpinejs15 = __toESM(require_module_cjs());
directive("init", ({ el, directive: directive2 }) => {
let fullMethod = directive2.expression ?? "$refresh";
import_alpinejs15.default.evaluate(el, `$wire.${fullMethod}`);
});
// js/directives/wire-poll.js
var import_alpinejs16 = __toESM(require_module_cjs());
directive("poll", ({ el, directive: directive2 }) => {
let interval = extractDurationFrom(directive2.modifiers, 2e3);
let { start: start2, pauseWhile, throttleWhile, stopWhen } = poll(() => {
triggerComponentRequest(el, directive2);
}, interval);
start2();
throttleWhile(() => theTabIsInTheBackground() && theDirectiveIsMissingKeepAlive(directive2));
pauseWhile(() => theDirectiveHasVisible(directive2) && theElementIsNotInTheViewport(el));
pauseWhile(() => theDirectiveIsOffTheElement(el));
pauseWhile(() => livewireIsOffline());
stopWhen(() => theElementIsDisconnected(el));
});
function triggerComponentRequest(el, directive2) {
import_alpinejs16.default.evaluate(el, directive2.expression ? "$wire." + directive2.expression : "$wire.$commit()");
}
function poll(callback, interval = 2e3) {
let pauseConditions = [];
let throttleConditions = [];
let stopConditions = [];
return {
start() {
let clear = syncronizedInterval(interval, () => {
if (stopConditions.some((i) => i()))
return clear();
if (pauseConditions.some((i) => i()))
return;
if (throttleConditions.some((i) => i()) && Math.random() < 0.95)
return;
callback();
});
},
pauseWhile(condition) {
pauseConditions.push(condition);
},
throttleWhile(condition) {
throttleConditions.push(condition);
},
stopWhen(condition) {
stopConditions.push(condition);
}
};
}
var clocks = [];
function syncronizedInterval(ms, callback) {
if (!clocks[ms]) {
let clock = {
timer: setInterval(() => clock.callbacks.forEach((i) => i()), ms),
callbacks: /* @__PURE__ */ new Set()
};
clocks[ms] = clock;
}
clocks[ms].callbacks.add(callback);
return () => {
clocks[ms].callbacks.delete(callback);
if (clocks[ms].callbacks.size === 0) {
clearInterval(clocks[ms].timer);
delete clocks[ms];
}
};
}
var isOffline = false;
window.addEventListener("offline", () => isOffline = true);
window.addEventListener("online", () => isOffline = false);
function livewireIsOffline() {
return isOffline;
}
var inBackground = false;
document.addEventListener("visibilitychange", () => {
inBackground = document.hidden;
}, false);
function theTabIsInTheBackground() {
return inBackground;
}
function theDirectiveIsOffTheElement(el) {
return !getDirectives(el).has("poll");
}
function theDirectiveIsMissingKeepAlive(directive2) {
return !directive2.modifiers.includes("keep-alive");
}
function theDirectiveHasVisible(directive2) {
return directive2.modifiers.includes("visible");
}
function theElementIsNotInTheViewport(el) {
let bounding = el.getBoundingClientRect();
return !(bounding.top < (window.innerHeight || document.documentElement.clientHeight) && bounding.left < (window.innerWidth || document.documentElement.clientWidth) && bounding.bottom > 0 && bounding.right > 0);
}
function theElementIsDisconnected(el) {
return el.isConnected === false;
}
function extractDurationFrom(modifiers, defaultDuration) {
let durationInMilliSeconds;
let durationInMilliSecondsString = modifiers.find((mod) => mod.match(/([0-9]+)ms/));
let durationInSecondsString = modifiers.find((mod) => mod.match(/([0-9]+)s/));
if (durationInMilliSecondsString) {
durationInMilliSeconds = Number(durationInMilliSecondsString.replace("ms", ""));
} else if (durationInSecondsString) {
durationInMilliSeconds = Number(durationInSecondsString.replace("s", "")) * 1e3;
}
return durationInMilliSeconds || defaultDuration;
}
// js/index.js
var Livewire2 = {
directive,
dispatchTo,
start,
first,
find,
getByName,
all,
hook: on,
trigger,
triggerAsync,
dispatch: dispatchGlobal,
on: on2,
get navigate() {
return import_alpinejs17.default.navigate;
}
};
var warnAboutMultipleInstancesOf = (entity) => console.warn(`Detected multiple instances of ${entity} running`);
if (window.Livewire)
warnAboutMultipleInstancesOf("Livewire");
if (window.Alpine)
warnAboutMultipleInstancesOf("Alpine");
window.Livewire = Livewire2;
window.Alpine = import_alpinejs17.default;
if (window.livewireScriptConfig === void 0) {
window.Alpine.__fromLivewire = true;
document.addEventListener("DOMContentLoaded", () => {
if (window.Alpine.__fromLivewire === void 0) {
warnAboutMultipleInstancesOf("Alpine");
}
Livewire2.start();
});
}
var export_Alpine = import_alpinejs17.default;
export {
export_Alpine as Alpine,
Livewire2 as Livewire
};
/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress
* @license MIT */
/*! Bundled license information:
tabbable/dist/index.js:
(*!
* tabbable 5.3.3
* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE
*)
focus-trap/dist/focus-trap.js:
(*!
* focus-trap 6.9.4
* @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE
*)
*/
//# sourceMappingURL=livewire.esm.js.map