mirror of
https://github.com/snipe/snipe-it.git
synced 2025-01-08 04:17:32 -08:00
22c79d8e1b
commit6bec573956
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 commit1fc5bb54e1
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]> commitb6ad69fac2
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 commit47b2cdb846
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]> commit357ef7e375
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 commit6928b1b273
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]> commit000f3171e3
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]> commit5ef3183a52
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… commit050831868e
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 commita41529dbc4
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 commit4fcf5ac7da
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 commitaa168fcb5b
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]> commit9c1c93ad52
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 commitad99b8b456
Author: Marcus Moore <[email protected]> Date: Wed Nov 6 10:37:31 2024 -0800 Use generic ID translation commitb96a312539
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 commitbab1e58ea4
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 commit654f67b6ac
Author: snipe <[email protected]> Date: Wed Nov 6 14:05:42 2024 +0000 Updated webpack Signed-off-by: snipe <[email protected]> commit3965bcd7c1
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 commit2362cb5e52
Author: Godfrey M <[email protected]> Date: Mon Nov 4 16:32:46 2024 -0800 refactor to getNotifiables commite7cb4a75eb
Author: Marcus Moore <[email protected]> Date: Mon Nov 4 15:56:53 2024 -0800 Show accessory checkout id in user accessory table commit93494ac554
Author: Godfrey M <[email protected]> Date: Mon Nov 4 15:17:58 2024 -0800 put dataprovider back in for tests commit0d707a1851
Author: Godfrey M <[email protected]> Date: Mon Nov 4 15:13:10 2024 -0800 fixes notifications for licenses and asset to asset checkouables commit287f4addf0
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" commit2e96d478f1
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" commitf32ebdc7ac
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 commitd6c7dc8e1c
Author: Marcus Moore <[email protected]> Date: Thu Oct 31 15:37:01 2024 -0700 Add missing livewire file commit5897d37fcf
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. commit21a27dcac1
Merge:379138076
49de07045
Author: Godfrey M <[email protected]> Date: Thu Oct 31 12:55:46 2024 -0700 fixed conflicts commit3791380764
Author: Godfrey M <[email protected]> Date: Thu Oct 31 12:52:47 2024 -0700 remove unused uses commit7a0f79ecd2
Author: Godfrey M <[email protected]> Date: Thu Oct 31 12:51:22 2024 -0700 remove test route commit97a449e80e
Author: Godfrey M <[email protected]> Date: Thu Oct 31 12:50:13 2024 -0700 removes instanceof User check commite65942064e
Author: Godfrey M <[email protected]> Date: Thu Oct 31 12:45:29 2024 -0700 send emails even if target has no email commit49de07045a
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 commit7e996c40f5
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 commit69e74bbdd3
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. commit73e8f160cf
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 commitbd23772fe9
Author: Godfrey M <[email protected]> Date: Wed Oct 30 11:42:15 2024 -0700 changes cc_email validation to allow array commit73772a0138
Author: Godfrey M <[email protected]> Date: Wed Oct 30 11:12:31 2024 -0700 change button text commitb26cae372c
Author: Godfrey M <[email protected]> Date: Wed Oct 30 10:40:23 2024 -0700 merged in develop commitd6ba303f39
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 commitf68df1fa06
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]> commitf0813e03bf
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 commit05875ebd1f
Author: snipe <[email protected]> Date: Mon Oct 28 22:04:35 2024 +0000 Updated translations Signed-off-by: snipe <[email protected]> commit9a0eee8f03
Author: Godfrey M <[email protected]> Date: Mon Oct 28 15:03:43 2024 -0700 revert testing variables commit6128765d1f
Author: Godfrey M <[email protected]> Date: Mon Oct 28 15:03:03 2024 -0700 change wording on notification button commitc24f79c025
Author: Godfrey M <[email protected]> Date: Mon Oct 28 14:58:43 2024 -0700 update method comment commite7c4343c90
Author: Godfrey M <[email protected]> Date: Mon Oct 28 14:56:48 2024 -0700 readd checkin accessory format commitc0620c27ff
Author: Godfrey M <[email protected]> Date: Mon Oct 28 14:30:34 2024 -0700 adds back laravels channel formats commited81973fe6
Author: Godfrey M <[email protected]> Date: Mon Oct 28 13:57:42 2024 -0700 adds notifications for deprecation commit2d318b394c
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 commitb987b3dc00
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 commit5c49716129
Author: Marcus Moore <[email protected]> Date: Mon Oct 28 10:24:35 2024 -0700 Dump logs on test failure commit86d784bd59
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]> commit589f9cccdf
Author: snipe <[email protected]> Date: Mon Oct 28 12:04:10 2024 +0000 Fixed #15732 Signed-off-by: snipe <[email protected]> commit4d848e45e6
Author: snipe <[email protected]> Date: Mon Oct 28 11:55:24 2024 +0000 Fixed #15736 Signed-off-by: snipe <[email protected]> commit58ff641f82
Author: Godfrey M <[email protected]> Date: Thu Oct 24 22:53:53 2024 -0700 removed unused variables commitce68f550d8
Author: Godfrey M <[email protected]> Date: Thu Oct 24 16:01:17 2024 -0700 remove alert emails from cc commit6f0c1b12b1
Author: Godfrey M <[email protected]> Date: Thu Oct 24 15:04:54 2024 -0700 this adds check out message for consumables commit278bc5e52a
Author: Godfrey M <[email protected]> Date: Thu Oct 24 14:59:10 2024 -0700 ads check in and checkout message for license seats commitcce75a8185
Author: Godfrey M <[email protected]> Date: Thu Oct 24 14:48:23 2024 -0700 adds check in and checkout messag for accessories commite27ff13377
Author: Godfrey M <[email protected]> Date: Thu Oct 24 14:39:40 2024 -0700 adds check in and checkout message for assets commit56365495a1
Author: Godfrey M <[email protected]> Date: Thu Oct 24 14:26:42 2024 -0700 remove unnecessary fields in accessory checkout mail commit18da80e6de
Author: Godfrey M <[email protected]> Date: Thu Oct 24 14:24:00 2024 -0700 fix checkoutable listener for microsoft teams commit18760e3fa1
Author: Godfrey M <[email protected]> Date: Thu Oct 24 12:21:51 2024 -0700 replaces teams notification package, passes integration test commit57107c487c
Author: Godfrey M <[email protected]> Date: Thu Oct 24 09:40:10 2024 -0700 fixed last test, definetly the last test commitdfc63641dc
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]) commit07a51ec8b1
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` commit6329f5b87e
Author: Godfrey M <[email protected]> Date: Wed Oct 23 17:33:23 2024 -0700 removed unused variable from test commite0ec6795b5
Author: snipe <[email protected]> Date: Thu Oct 24 01:27:50 2024 +0100 Use crucial for seeded data Signed-off-by: snipe <[email protected]> commit15073a0d38
Author: Godfrey M <[email protected]> Date: Wed Oct 23 17:27:37 2024 -0700 last test to fix commita80c09c16d
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 commit5509d756b7
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` commitb16a978f1b
Author: Godfrey M <[email protected]> Date: Wed Oct 23 16:25:51 2024 -0700 uses manufacturer factory for manufactuer_id commitab3b9c4510
Author: Godfrey M <[email protected]> Date: Wed Oct 23 16:24:01 2024 -0700 remove unnecessary code from checkinasset notification commit2cc2b2b1df
Author: Godfrey M <[email protected]> Date: Wed Oct 23 16:06:27 2024 -0700 apply array_filter to cc emails to prevent errors commit62d06b44d6
Author: Godfrey M <[email protected]> Date: Wed Oct 23 15:43:42 2024 -0700 set fallback from email address to service.snipe-it.io commitf29a383179
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 commitfd74c35102
Author: Godfrey M <[email protected]> Date: Wed Oct 23 15:08:29 2024 -0700 remove old notify by mail from consumable notification commitc681946b1d
Author: Godfrey M <[email protected]> Date: Wed Oct 23 15:05:39 2024 -0700 added component markdown changes commit257d25bd9e
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 commit6c34a5c52c
Author: Godfrey M <[email protected]> Date: Wed Oct 23 14:54:21 2024 -0700 conditionally check cc emails, initiate variables commit1b5f4415ae
Author: Godfrey M <[email protected]> Date: Wed Oct 23 14:44:45 2024 -0700 corrected cc email behavior commit55ba6279a4
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]> commita9eea830e3
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]> commitaf564935d5
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 commit3ee76be7e3
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]> commitd58f87862c
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 commit0b6859c491
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]> commit1e9922a0b0
Author: Godfrey M <[email protected]> Date: Tue Oct 22 16:14:36 2024 -0700 fix moar tests commitead27accac
Author: Godfrey M <[email protected]> Date: Tue Oct 22 15:45:52 2024 -0700 fixed accessory tests and notifiable target commit727c0e458c
Author: Godfrey M <[email protected]> Date: Tue Oct 22 14:34:39 2024 -0700 remove translation commit870dc747db
Author: Godfrey M <[email protected]> Date: Tue Oct 22 14:27:32 2024 -0700 oops commit0fb3d83fac
Author: Godfrey M <[email protected]> Date: Tue Oct 22 14:26:54 2024 -0700 revert controller change commit0d59ccd6a6
Author: Godfrey M <[email protected]> Date: Tue Oct 22 14:23:26 2024 -0700 upgraded livewire v3.5.9 => v3.5.12 commit5da3ce3564
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 commitc3bbca30ad
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 commit37f14fff3b
Author: snipe <[email protected]> Date: Tue Oct 22 22:07:28 2024 +0100 Fixed typo Signed-off-by: snipe <[email protected]> commiteb6c51fabd
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]> commit5ecd2b6293
Author: Marcus Moore <[email protected]> Date: Tue Oct 22 14:04:05 2024 -0700 Default checkbox elements to an empty array commit1e31592c55
Author: Godfrey M <[email protected]> Date: Tue Oct 22 11:49:06 2024 -0700 messing with the tests commitdccb788a88
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 commitd10fe77ee7
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 commit5e1d792bba
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() commit9cf71976f6
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]> commit15745d9737
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 commitbd97955b9e
Author: snipe <[email protected]> Date: Tue Oct 22 16:38:46 2024 +0100 Bumped hash Signed-off-by: snipe <[email protected]> commit252d99421c
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 commit5767a98ad8
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 commit0c820cbc0d
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 commitdb81701621
Merge:a05c33feb
147fcfb8e
Author: snipe <[email protected]> Date: Tue Oct 22 15:44:24 2024 +0100 Merge branch 'develop' into better_handle_inline_files commita05c33febf
Author: snipe <[email protected]> Date: Tue Oct 22 15:43:19 2024 +0100 Squashed commit of the following: commit147fcfb8eb
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 commit58a3d09b5f
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 commit30a06a5942
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 commit6c6af78e08
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 commit3f79fd7ea7
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 commit9b06bbb6c3
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 commitce30863177
Author: Marcus Moore <[email protected]> Date: Mon Oct 21 13:57:04 2024 -0700 Remove brianium/paratest dependency commitd7f70146f4
Author: Marcus Moore <[email protected]> Date: Mon Oct 21 13:48:25 2024 -0700 Remove extra icon in accessory file upload list commit867fa2f36e
Author: Marcus Moore <[email protected]> Date: Mon Oct 21 12:40:24 2024 -0700 Display file in activity report for accessories commit0933a2d4ea
Author: Marcus Moore <[email protected]> Date: Thu Oct 17 18:01:48 2024 -0700 Remove --parallel flag commit46ad1d072f
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 commitbcb4bd9eb4
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 commitf50ccbcc49
Author: Tobias Regnery <[email protected]> Date: Thu Oct 17 11:07:28 2024 +0200 Fix outdated comment in CompanyableTrait As of commit5800e8d
the user model uses CompanyableTrait so remove this clearly outdated comment commit3cf746d7df
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 commit6b7af802af
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 commitfdcc17ca2c
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]> commit147fcfb8eb
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 commit58a3d09b5f
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 commit30a06a5942
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 commit6c6af78e08
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 commit3f79fd7ea7
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 commit9b06bbb6c3
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 commitce30863177
Author: Marcus Moore <[email protected]> Date: Mon Oct 21 13:57:04 2024 -0700 Remove brianium/paratest dependency commitd7f70146f4
Author: Marcus Moore <[email protected]> Date: Mon Oct 21 13:48:25 2024 -0700 Remove extra icon in accessory file upload list commit867fa2f36e
Author: Marcus Moore <[email protected]> Date: Mon Oct 21 12:40:24 2024 -0700 Display file in activity report for accessories commite1882ee6d2
Author: Marcus Moore <[email protected]> Date: Mon Oct 21 12:21:45 2024 -0700 Add comment commit7eee239378
Author: Marcus Moore <[email protected]> Date: Mon Oct 21 12:20:28 2024 -0700 use is_numeric instead of is_int commit4188849ae1
Author: Marcus Moore <[email protected]> Date: Mon Oct 21 12:19:48 2024 -0700 Add failing test case commit787e651778
Author: snipe <[email protected]> Date: Mon Oct 21 16:52:21 2024 +0100 Fixed todos with log message Signed-off-by: snipe <[email protected]> commitef9b6e3b07
Author: snipe <[email protected]> Date: Mon Oct 21 16:34:54 2024 +0100 Code cleanup Signed-off-by: snipe <[email protected]> commit06c599cc17
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]> commit6105323877
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]> commit0933a2d4ea
Author: Marcus Moore <[email protected]> Date: Thu Oct 17 18:01:48 2024 -0700 Remove --parallel flag commita8d853c44a
Author: Marcus Moore <[email protected]> Date: Thu Oct 17 15:26:27 2024 -0700 Remove focus group tags commit7e1b47708e
Author: Marcus Moore <[email protected]> Date: Thu Oct 17 15:18:41 2024 -0700 Fix failing test ensuring company id is an integer commit979e4502ff
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 commitff113ef523
Author: Godfrey M <[email protected]> Date: Thu Oct 17 14:56:58 2024 -0700 typo fix commit99dd51a965
Author: Marcus Moore <[email protected]> Date: Thu Oct 17 14:53:18 2024 -0700 Improve name commit15c2169477
Author: Marcus Moore <[email protected]> Date: Thu Oct 17 14:31:05 2024 -0700 Scaffold additional tests commit50fa6ce335
Author: Marcus Moore <[email protected]> Date: Thu Oct 17 14:12:22 2024 -0700 Scaffold tests commit7ae76e7db9
Author: Godfrey M <[email protected]> Date: Thu Oct 17 13:55:03 2024 -0700 remove viewdata array from 3 tests commitb98058ca98
Author: Godfrey M <[email protected]> Date: Thu Oct 17 13:48:26 2024 -0700 fix tests pt 3 commit83e8186d9e
Author: Godfrey M <[email protected]> Date: Thu Oct 17 13:39:56 2024 -0700 fix assertSent to AssertNotSent on some test commitcdd4fef7df
Author: Godfrey M <[email protected]> Date: Thu Oct 17 13:34:55 2024 -0700 attempt to fix tests p2 commitdceb8e305f
Author: Godfrey M <[email protected]> Date: Thu Oct 17 13:11:39 2024 -0700 attempt to fix tests commit123cdeb858
Author: Godfrey M <[email protected]> Date: Thu Oct 17 12:39:48 2024 -0700 add email check to listener commit496b44e887
Author: Godfrey M <[email protected]> Date: Thu Oct 17 12:28:57 2024 -0700 merged composer lock from dev commita690cc3582
Author: Godfrey M <[email protected]> Date: Thu Oct 17 12:26:55 2024 -0700 removing my composer stuff again..for the last time commitceb3f5cea6
Author: Godfrey M <[email protected]> Date: Thu Oct 17 12:19:50 2024 -0700 added mail-gun and http-client to 8.1 commit65735a31f1
Author: Godfrey M <[email protected]> Date: Thu Oct 17 12:18:34 2024 -0700 removed symfony/mailgun-mailer symfony/http-client commit285d6897cf
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 commit159a1d3f43
Author: Marcus Moore <[email protected]> Date: Thu Oct 17 11:48:55 2024 -0700 Be more explicit commitd1149730be
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]> commit46ad1d072f
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 commit780ed91a10
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. commitbcb4bd9eb4
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 commitf50ccbcc49
Author: Tobias Regnery <[email protected]> Date: Thu Oct 17 11:07:28 2024 +0200 Fix outdated comment in CompanyableTrait As of commit5800e8d
the user model uses CompanyableTrait so remove this clearly outdated comment commit9a79483375
Author: Godfrey M <[email protected]> Date: Wed Oct 16 16:59:18 2024 -0700 removed namespaces from routing commited6034065b
Author: Godfrey M <[email protected]> Date: Wed Oct 16 16:47:36 2024 -0700 removed test route commita7754c1a7f
Author: Godfrey M <[email protected]> Date: Wed Oct 16 16:46:52 2024 -0700 fixed asset checkout markdown, and notifiable variable commit0e9b3c9119
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]> commit4933aa5784
Author: snipe <[email protected]> Date: Thu Oct 17 00:27:04 2024 +0100 Add StorageHelper to app config Signed-off-by: snipe <[email protected]> commitd67addc69e
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]> commit02c80ff18a
Author: snipe <[email protected]> Date: Thu Oct 17 00:18:40 2024 +0100 Added comment Signed-off-by: snipe <[email protected]> commitc01190fac2
Author: snipe <[email protected]> Date: Thu Oct 17 00:18:34 2024 +0100 Conditionally add content-type Signed-off-by: snipe <[email protected]> commit017884f843
Author: snipe <[email protected]> Date: Thu Oct 17 00:09:09 2024 +0100 Added checks and filetype display Signed-off-by: snipe <[email protected]> commitc49921f50f
Author: snipe <[email protected]> Date: Thu Oct 17 00:08:54 2024 +0100 Removed unused (maybe?) API endpoint Signed-off-by: snipe <[email protected]> commitc49abb6aea
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]> commitccd2019448
Author: snipe <[email protected]> Date: Thu Oct 17 00:08:04 2024 +0100 Removed unusded use statements Signed-off-by: snipe <[email protected]> commit96191a5e93
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]> commitc56affd663
Author: snipe <[email protected]> Date: Thu Oct 17 00:07:37 2024 +0100 Added SVG icon Signed-off-by: snipe <[email protected]> commit02bda3cd95
Author: Godfrey M <[email protected]> Date: Wed Oct 16 15:53:05 2024 -0700 adds Checkout Consumable mailable and slackwebhook channel to notifs commit02ff646da4
Author: Godfrey M <[email protected]> Date: Wed Oct 16 15:44:45 2024 -0700 adds checkin license mailable commit4becdca8aa
Author: Godfrey M <[email protected]> Date: Wed Oct 16 15:39:20 2024 -0700 removes toMail from license notificaqtion commit2584d60344
Author: Godfrey M <[email protected]> Date: Wed Oct 16 15:38:49 2024 -0700 adds Licenses seat checkout Mailable commitf1d83a3f28
Author: Godfrey M <[email protected]> Date: Wed Oct 16 15:30:53 2024 -0700 forgot to add asset checkout markdown to projet commitc39df34bdf
Author: Godfrey M <[email protected]> Date: Wed Oct 16 15:29:50 2024 -0700 forgot to add accessory mail to project commitdcdf600b78
Author: Godfrey M <[email protected]> Date: Wed Oct 16 15:27:34 2024 -0700 adds Checkin and Checkout mailables and listner logic commit3cf746d7df
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 commit6b7af802af
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 commit9710436d54
Author: Godfrey M <[email protected]> Date: Wed Oct 16 13:12:07 2024 -0700 adds Mailables for asset checkin and out commit16cffe9a9d
Author: Godfrey M <[email protected]> Date: Wed Oct 16 12:53:35 2024 -0700 simplified checkout webhook call commit9e1b86f586
Author: Godfrey M <[email protected]> Date: Wed Oct 16 12:51:19 2024 -0700 sends checkout notification via webhook commit3ab2521cb0
Author: Godfrey M <[email protected]> Date: Wed Oct 16 12:21:33 2024 -0700 email comes through, no picture and html markup appear though. commit604a964462
Author: Marcus Moore <[email protected]> Date: Wed Oct 16 11:52:24 2024 -0700 Improve scenario descriptions commit2f72c66614
Author: Marcus Moore <[email protected]> Date: Wed Oct 16 11:30:06 2024 -0700 Add additional case commitfdcc17ca2c
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. commitcba1a56040
Author: Marcus Moore <[email protected]> Date: Tue Oct 15 17:38:11 2024 -0700 Improve readability? commitd9afde4610
Author: Marcus Moore <[email protected]> Date: Tue Oct 15 17:00:22 2024 -0700 Write failing test commit9f06a0e441
Author: Godfrey M <[email protected]> Date: Tue Oct 15 14:01:28 2024 -0700 handle some edge cases, null values clean up variable names commit42095c0167
Author: Marcus Moore <[email protected]> Date: Tue Oct 15 13:02:22 2024 -0700 Add reference link commitf8476f7133
Author: Godfrey M <[email protected]> Date: Tue Oct 15 12:49:52 2024 -0700 finished the construct and mail call in the listner commitb29d032bf0
Author: Godfrey M <[email protected]> Date: Tue Oct 15 11:28:27 2024 -0700 adds checkoutAssetMail class, and content method commit2500375400
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 commite4e1d0d50a
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 commit16c8264e76
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 commit0ae9ce0aa9
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]> commit50b8f180b3
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]> commit914a647204
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 commite9225ff3ea
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]> commitd0d4159088
Author: snipe <[email protected]> Date: Tue Oct 15 12:42:09 2024 +0100 Fixed typo Signed-off-by: snipe <[email protected]> commit69b6080bd8
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 commitb997d728fb
Author: snipe <[email protected]> Date: Tue Oct 15 10:30:34 2024 +0100 Added LLM note Signed-off-by: snipe <[email protected]> commitddead359d0
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 commitf3c4e55667
Author: Tobias Regnery <[email protected]> Date: Mon Oct 14 15:14:41 2024 +0200 Refactor asset creation with API Commitfb4fe3004
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. commit0d35335da7
Author: snipe <[email protected]> Date: Fri Oct 11 16:06:17 2024 +0100 Removed debugging Signed-off-by: snipe <[email protected]> commitfeaa714304
Author: snipe <[email protected]> Date: Fri Oct 11 14:23:57 2024 +0100 Nicer disabled button Signed-off-by: snipe <[email protected]> commite1a70023b1
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 commitde62359c67
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 commit12bda8fc7b
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 commitfb4fe30049
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 to75ac7f80b9
which is part of version 6.3.0. Fix this by restoring the previous behaviour to check the company_id with getIdForCurrentUser(). commitb054017c9f
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]> commit524a442724
Author: bryanlopezinc <[email protected]> Date: Thu Oct 10 23:32:07 2024 +0100 Improved import performance commit8aa298f6b0
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 commit1f34657734
Author: snipe <[email protected]> Date: Thu Oct 10 12:30:35 2024 +0100 Fixed test Signed-off-by: snipe <[email protected]> commit0856ee648e
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 commit1dafc970df
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]> commit94a074a193
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 commit2d49e1eff2
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 commit705bc6f0c0
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 commitb5b93fdd3a
Author: snipe <[email protected]> Date: Thu Oct 10 00:27:00 2024 +0100 Make ldap username required Signed-off-by: snipe <[email protected]> commitd9432baf7a
Author: snipe <[email protected]> Date: Wed Oct 9 23:51:20 2024 +0100 Mlore ldap style improvements Signed-off-by: snipe <[email protected]> commit90be2a4498
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]> commit3886da8941
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]> commit130e0c6242
Author: snipe <[email protected]> Date: Wed Oct 9 22:15:37 2024 +0100 More validation Signed-off-by: snipe <[email protected]> commit4361a10818
Author: snipe <[email protected]> Date: Wed Oct 9 22:15:30 2024 +0100 Added string Signed-off-by: snipe <[email protected]> commitaa8048ac15
Author: snipe <[email protected]> Date: Wed Oct 9 22:15:25 2024 +0100 Blade changes for ldap Signed-off-by: snipe <[email protected]> commit710e738e8e
Author: snipe <[email protected]> Date: Wed Oct 9 22:15:16 2024 +0100 Fixed tests Signed-off-by: snipe <[email protected]> commit3705b91439
Author: snipe <[email protected]> Date: Wed Oct 9 20:51:34 2024 +0100 Added more validation Signed-off-by: snipe <[email protected]> commit707bdad192
Author: snipe <[email protected]> Date: Wed Oct 9 20:33:56 2024 +0100 Updated test Signed-off-by: snipe <[email protected]> commit242fe33f97
Author: snipe <[email protected]> Date: Wed Oct 9 20:33:42 2024 +0100 Switch to regular HTML input Signed-off-by: snipe <[email protected]> commitded79469c1
Author: snipe <[email protected]> Date: Wed Oct 9 20:33:29 2024 +0100 Remove unused controller method Signed-off-by: snipe <[email protected]> commitd9fbf330e5
Author: snipe <[email protected]> Date: Wed Oct 9 20:33:15 2024 +0100 Fixed translations Signed-off-by: snipe <[email protected]> commit2cb9ac26cd
Author: snipe <[email protected]> Date: Wed Oct 9 19:57:04 2024 +0100 Renamed test Signed-off-by: snipe <[email protected]> commit185bc966e6
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]> commita7f7e4938f
Author: snipe <[email protected]> Date: Wed Oct 9 19:31:56 2024 +0100 Added form action Signed-off-by: snipe <[email protected]> commit2883e79193
Author: snipe <[email protected]> Date: Wed Oct 9 19:30:55 2024 +0100 Removed unecessary assets creation Signed-off-by: snipe <[email protected]> commit9c4191ae0a
Author: snipe <[email protected]> Date: Wed Oct 9 19:30:42 2024 +0100 Basic tests Signed-off-by: snipe <[email protected]> commit3a77b83e9c
Author: snipe <[email protected]> Date: Wed Oct 9 19:30:34 2024 +0100 Added space Signed-off-by: snipe <[email protected]> commitd9be2b5a5e
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]> commit69c43c610c
Author: snipe <[email protected]> Date: Wed Oct 9 19:30:00 2024 +0100 Fixed typo Signed-off-by: snipe <[email protected]> commit4f957bcf71
Author: snipe <[email protected]> Date: Wed Oct 9 18:34:53 2024 +0100 Required flag Signed-off-by: snipe <[email protected]> commit5cda7cce48
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]> commit41b94e7128
Author: snipe <[email protected]> Date: Wed Oct 9 18:19:26 2024 +0100 Fixed form input group Signed-off-by: snipe <[email protected]> commitaa55fa6ff4
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]> commit67a605c9a5
Author: Brady Wetherington <[email protected]> Date: Wed Oct 9 17:01:26 2024 +0100 Fix bulk checkout to users, assets, and locations commitc2663ea1e0
Author: akemidx <[email protected]> Date: Tue Oct 8 16:38:33 2024 -0400 withouttrashed commit3ee5713740
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 commitab8a22f77e
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 commit56e7ea6677
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 commit26d7572bcc
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 commit8c9132aff9
Author: Marcus Moore <[email protected]> Date: Mon Oct 7 14:22:49 2024 -0700 Hide EULA text and button when nothing will be displayed commit382ebef8ca
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 commit2be88cb955
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 commit3f36d5f9b3
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]> commitf76da48448
Author: Lewis Foster <[email protected]> Date: Sat Oct 5 18:27:42 2024 +0100 Docker Env: Change trusted proxies to RFC1918 commit8035326675
Author: Marcus Moore <[email protected]> Date: Thu Oct 3 16:53:19 2024 -0700 Add test commitdfdd85abb1
Author: Marcus Moore <[email protected]> Date: Thu Oct 3 15:14:07 2024 -0700 Remove unused imports commit063ea1892b
Author: Marcus Moore <[email protected]> Date: Thu Oct 3 15:02:03 2024 -0700 Add trait to clean up files after test runs commite213053775
Author: Marcus Moore <[email protected]> Date: Thu Oct 3 13:59:58 2024 -0700 Swap factory syntax commit88d549e7c5
Author: Marcus Moore <[email protected]> Date: Thu Oct 3 13:40:37 2024 -0700 Remove unused data provider method commit983a25aa5f
Author: Marcus Moore <[email protected]> Date: Thu Oct 3 13:39:54 2024 -0700 Simplify permission tests commitbde05d6ed9
Author: Marcus Moore <[email protected]> Date: Thu Oct 3 13:15:49 2024 -0700 Use new() instead of times() commitb5ffe54bd0
Author: Marcus Moore <[email protected]> Date: Thu Oct 3 13:15:02 2024 -0700 Swap assertEquals parameter order commit863c0a8b60
Author: Marcus Moore <[email protected]> Date: Thu Oct 3 11:43:02 2024 -0700 Fix import_type for accessory state commit32551d55d7
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 commit7fc498a597
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 commitcb281c6408
Author: snipe <[email protected]> Date: Thu Oct 3 17:33:46 2024 +0100 Tweaked line height Signed-off-by: snipe <[email protected]> commitf483cd448f
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]> commit78ca1026fd
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 commit722d5a58e7
Author: snipe <[email protected]> Date: Thu Oct 3 16:19:38 2024 +0100 Added isset on users Signed-off-by: snipe <[email protected]> commit7461c3e0ca
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]> commit3c0f4181ae
Author: snipe <[email protected]> Date: Thu Oct 3 16:19:06 2024 +0100 Use the newer button style Signed-off-by: snipe <[email protected]> commit3699d79363
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 commit350b627ce1
Author: Brady Wetherington <[email protected]> Date: Thu Oct 3 14:23:40 2024 +0100 Fix numeric sort 'ambiguous order clause' error commitee046a8688
Author: Marcus Moore <[email protected]> Date: Wed Oct 2 10:50:40 2024 -0700 Add matching Model::reguard() commitb34a7c8aad
Author: snipe <[email protected]> Date: Wed Oct 2 15:48:35 2024 +0100 Removed die() Signed-off-by: snipe <[email protected]> commitf92bf5dc20
Author: snipe <[email protected]> Date: Wed Oct 2 15:39:27 2024 +0100 Updated language for failure Signed-off-by: snipe <[email protected]> commit4d9e85026a
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]> commit54fbd0540d
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 commitb483bb1633
Author: snipe <[email protected]> Date: Wed Oct 2 12:40:45 2024 +0100 Bumped version Signed-off-by: snipe <[email protected]> commit4db7358086
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 commit0dd6f41f66
Author: snipe <[email protected]> Date: Wed Oct 2 11:04:55 2024 +0100 Simplified 2fa if/else Signed-off-by: snipe <[email protected]> commit684c20ae39
Author: snipe <[email protected]> Date: Wed Oct 2 11:00:49 2024 +0100 Fixed parenthasis Signed-off-by: snipe <[email protected]> commit3153bbb13f
Author: spencerrlongg <[email protected]> Date: Tue Oct 1 17:04:18 2024 -0500 dumb fix commit3dc64cc5e0
Author: Marcus Moore <[email protected]> Date: Tue Oct 1 13:35:39 2024 -0700 Reference accessory checkout and not the accessory commitc32f4e34b4
Author: snipe <[email protected]> Date: Tue Oct 1 20:35:49 2024 +0100 Minor formatting fix Signed-off-by: snipe <[email protected]> commitca1886cebc
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 commita79dfea40a
Author: snipe <[email protected]> Date: Tue Oct 1 20:30:58 2024 +0100 Updated strings Signed-off-by: snipe <[email protected]> commit45ab49eeab
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 commit8232618a9f
Author: spencerrlongg <[email protected]> Date: Tue Oct 1 14:26:32 2024 -0500 change the other one too commit9a651b567d
Author: spencerrlongg <[email protected]> Date: Tue Oct 1 14:24:03 2024 -0500 change error to warning commit97d00e5aa8
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]> commit5b90d79494
Author: Marcus Moore <[email protected]> Date: Tue Oct 1 11:50:48 2024 -0700 Use created_by commitb9cfdf2e54
Author: Godfrey M <[email protected]> Date: Tue Oct 1 11:41:59 2024 -0700 reworked monthly depreciation variable value commit1139acd9f3
Author: spencerrlongg <[email protected]> Date: Tue Oct 1 13:36:47 2024 -0500 catch errors around request notifications commitb7ad80bd31
Author: Godfrey M <[email protected]> Date: Tue Oct 1 11:24:24 2024 -0700 fix monthly depreciation value commit5ffd1b8daa
Author: Godfrey M <[email protected]> Date: Tue Oct 1 11:02:39 2024 -0700 fixes if statement in transformer commit9a2117466e
Author: snipe <[email protected]> Date: Tue Oct 1 18:23:40 2024 +0100 Removed placeholder Signed-off-by: snipe <[email protected]> commit7e3a062984
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]> commitd274fb6963
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 commit27ba641aa5
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]> commit5823197e6f
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]> commitcfc04a1d12
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 commitcae8aa7840
Author: snipe <[email protected]> Date: Tue Oct 1 14:02:54 2024 +0100 Added maxlengths to additional fields Signed-off-by: snipe <[email protected]> commit12da43303f
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]> commitfdfea390fb
Merge:d609ed50a
5689e940b
Author: Marcus Moore <[email protected]> Date: Mon Sep 30 12:59:27 2024 -0700 Merge branch 'develop' into testing/fmcs-accessories commitb04afbbc85
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 commitb964ce1025
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 commit6217cba201
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. commit68e3f375fc
Author: Godfrey M <[email protected]> Date: Mon Sep 30 11:15:49 2024 -0700 removes sortablity from current value column commit5689e940b8
Author: snipe <[email protected]> Date: Mon Sep 30 18:23:12 2024 +0100 Fixed #15581 - missing bracker Signed-off-by: snipe <[email protected]> commite807cfab86
Merge:0b3f45856
001348c63
Author: bryanlopezinc <[email protected]> Date: Mon Sep 30 12:47:52 2024 +0100 Merge branch 'develop' into importTests commit0b3f458561
Author: bryanlopezinc <[email protected]> Date: Mon Sep 30 12:42:41 2024 +0100 Added tests for Import feature commit001348c638
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]> commit1b041af862
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 commit260b153689
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 commit05d74f7a92
Author: snipe <[email protected]> Date: Sat Sep 28 15:42:03 2024 +0100 Covered setup pages too Signed-off-by: snipe <[email protected]> commitdc85588d7f
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]> commit585f998cae
Author: snipe <[email protected]> Date: Sat Sep 28 15:28:06 2024 +0100 Fixes for requiredness display Signed-off-by: snipe <[email protected]> commitd120585f94
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]> commit166a700342
Merge:6c85ba349
36b27fcda
Author: snipe <[email protected]> Date: Fri Sep 27 13:37:28 2024 +0100 Merge remote-tracking branch 'origin/develop' commit36b27fcda3
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]> commita44490e448
Author: snipe <[email protected]> Date: Fri Sep 27 13:07:24 2024 +0100 Nowrap on files column Signed-off-by: snipe <[email protected]> commit9aada2ec70
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 commit3f74ff25d2
Author: Godfrey M <[email protected]> Date: Wed Sep 25 16:19:09 2024 -0700 fixed error message commitef82f954e5
Author: Godfrey M <[email protected]> Date: Wed Sep 25 15:47:57 2024 -0700 fixed required css, and user input lengths commit3f311ba2fb
Author: Brady Wetherington <[email protected]> Date: Wed Sep 25 21:27:45 2024 +0100 Get us better debugging output for new Github Stale Action commit96953aa2ed
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 commitb797c37acb
Author: Godfrey M <[email protected]> Date: Wed Sep 25 12:48:05 2024 -0700 replace duplicate code with partials commit6c85ba3495
Merge:9f8473e25
ac6411743
Author: snipe <[email protected]> Date: Wed Sep 25 20:45:02 2024 +0100 Merge remote-tracking branch 'origin/develop' commitac6411743b
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 commit3f0245f88f
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]> commitc02647a0fa
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]> commitedca3f432c
Author: snipe <[email protected]> Date: Wed Sep 25 20:30:58 2024 +0100 Removed gate for delete Signed-off-by: snipe <[email protected]> commit2218c94aa3
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]> commite609b39760
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 commit12522a3791
Author: Godfrey M <[email protected]> Date: Wed Sep 25 12:07:15 2024 -0700 fix spacing issues commitf6d7ea19e4
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]> commit18ddffe8f9
Author: Godfrey M <[email protected]> Date: Wed Sep 25 11:42:16 2024 -0700 fix partial variable intialization, fix width of input fields commit9b03f46490
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 commit926a319552
Merge:0bc98e971
cb6e5042d
Author: Godfrey M <[email protected]> Date: Wed Sep 25 11:10:24 2024 -0700 Merge branch 'develop' into Modal_fix_p2 commit9f8473e254
Merge:0e61d0b19
cb6e5042d
Author: snipe <[email protected]> Date: Wed Sep 25 18:36:40 2024 +0100 Merge remote-tracking branch 'origin/develop' commitcb6e5042d9
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 commitc1a887b48b
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 commit658c94ad8b
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]> commit0e61d0b195
Merge:abdddbec4
ba1220484
Author: snipe <[email protected]> Date: Wed Sep 25 15:51:38 2024 +0100 Merge remote-tracking branch 'origin/develop' commitba12204842
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 commit1c3babacaf
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]> commitabdddbec44
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 commiteeabc8dc9d
Author: snipe <[email protected]> Date: Wed Sep 25 11:33:45 2024 +0100 Dev assets Signed-off-by: snipe <[email protected]> commit21f8ac8e52
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 commita425c2b765
Merge:34eb10ff7
c38222e95
Author: snipe <[email protected]> Date: Wed Sep 25 10:52:19 2024 +0100 Merge remote-tracking branch 'origin/develop' commit2a2666be0b
Author: Godfrey M <[email protected]> Date: Tue Sep 24 13:24:50 2024 -0700 makes required a pseudo field commitc38222e956
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 commit0ce5832b6c
Author: snipe <[email protected]> Date: Tue Sep 24 17:29:40 2024 +0100 Removed debugging Signed-off-by: snipe <[email protected]> commitb6340532d7
Author: Brady Wetherington <[email protected]> Date: Tue Sep 24 17:15:39 2024 +0100 Improve the error and success messages and linking commit5fb43dd159
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]> commitde57d71bf1
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]> commitba69259f2d
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]> commitc71411465a
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 commit8cf1e4dceb
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 commit66249a37ed
Author: snipe <[email protected]> Date: Tue Sep 24 11:08:31 2024 +0100 Tweaked styles Signed-off-by: snipe <[email protected]> commit96712cb398
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]> commitfac4833b58
Author: Marcus Moore <[email protected]> Date: Mon Sep 23 17:15:16 2024 -0700 Remove unused import commita12c9d053f
Author: Marcus Moore <[email protected]> Date: Mon Sep 23 16:44:25 2024 -0700 Hide label when printing commit8b3b68b308
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 commit4b02db5031
Author: Marcus Moore <[email protected]> Date: Mon Sep 23 16:26:22 2024 -0700 Add authorization check in bulk users controller commitab90c0cf05
Author: Marcus Moore <[email protected]> Date: Mon Sep 23 16:10:40 2024 -0700 Add missing eager load in bulk users controller commitcef7ddc719
Author: Marcus Moore <[email protected]> Date: Mon Sep 23 16:10:21 2024 -0700 Add eager loads to userscontroller commit3870095a28
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 commita02e250b22
Author: Marcus Moore <[email protected]> Date: Mon Sep 23 15:26:15 2024 -0700 Add page breaks for each user commit8ac5c0e471
Author: Marcus Moore <[email protected]> Date: Mon Sep 23 14:05:47 2024 -0700 Re-combine layout and view commita2d4dcf6e8
Author: Marcus Moore <[email protected]> Date: Mon Sep 23 12:49:36 2024 -0700 Use bulk actions menu commit54044bfa5e
Author: Marcus Moore <[email protected]> Date: Mon Sep 23 10:57:57 2024 -0700 Add eager loads commite493cc964d
Author: Marcus Moore <[email protected]> Date: Mon Sep 23 10:48:07 2024 -0700 Remove AssetCountForSidebar middleware from print view commit29af210f4f
Merge:5128fd49e
ab0c009c0
Author: Marcus Moore <[email protected]> Date: Mon Sep 23 10:26:20 2024 -0700 Merge branch 'develop' into bulk-print-users commit34eb10ff73
Merge:7d7d58769
ab0c009c0
Author: snipe <[email protected]> Date: Fri Sep 20 19:45:20 2024 +0100 Merge remote-tracking branch 'origin/develop' commitab0c009c0d
Author: snipe <[email protected]> Date: Fri Sep 20 19:45:10 2024 +0100 Fixed seeder Signed-off-by: snipe <[email protected]> commit7d7d58769c
Merge:245d5dc46
b68805cf8
Author: snipe <[email protected]> Date: Fri Sep 20 19:13:00 2024 +0100 Merge remote-tracking branch 'origin/develop' commitb68805cf83
Author: snipe <[email protected]> Date: Fri Sep 20 19:11:52 2024 +0100 Small fix for notifications checkout Signed-off-by: snipe <[email protected]> commit245d5dc469
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 commit7d858129d9
Author: snipe <[email protected]> Date: Fri Sep 20 14:44:19 2024 +0100 Bumped hash Signed-off-by: snipe <[email protected]> commit65ce63bc9b
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 commit54fba2f547
Author: snipe <[email protected]> Date: Fri Sep 20 14:40:41 2024 +0100 Update jspdf autotable Signed-off-by: snipe <[email protected]> commit5eea9d1950
Author: snipe <[email protected]> Date: Fri Sep 20 14:33:56 2024 +0100 Corrected text warning translation Signed-off-by: snipe <[email protected]> commitb84a634ec7
Author: snipe <[email protected]> Date: Fri Sep 20 14:33:35 2024 +0100 Corrected comment Signed-off-by: snipe <[email protected]> commit2fc88a0e08
Author: snipe <[email protected]> Date: Fri Sep 20 14:33:26 2024 +0100 Eager load adminuser Signed-off-by: snipe <[email protected]> commitbc540b6564
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]> commitf53b852dff
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]> commitb83d1a043f
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` commit4ab478bb97
Merge:d96c5e1ba
cdb7ccb8f
Author: snipe <[email protected]> Date: Fri Sep 20 13:44:45 2024 +0100 Merge remote-tracking branch 'origin/develop' commitb21c303e56
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 commit5128fd49e6
Author: Marcus Moore <[email protected]> Date: Thu Sep 19 17:27:25 2024 -0700 Allow printing all users commit2d2d5bdc7e
Author: Marcus Moore <[email protected]> Date: Thu Sep 19 17:23:47 2024 -0700 Pass user in array commit8364d26c9b
Author: Marcus Moore <[email protected]> Date: Thu Sep 19 17:18:26 2024 -0700 Extract parent layout commitefd6d7625f
Author: Marcus Moore <[email protected]> Date: Thu Sep 19 17:16:05 2024 -0700 Remove bad closing tag commitbdf5708bfc
Author: Marcus Moore <[email protected]> Date: Thu Sep 19 17:10:43 2024 -0700 Remove accidental line commite95703cb18
Author: Marcus Moore <[email protected]> Date: Thu Sep 19 17:10:07 2024 -0700 Use eager load commit7ad4a29970
Author: Marcus Moore <[email protected]> Date: Thu Sep 19 16:54:39 2024 -0700 Add eager loading commitcdb7ccb8f3
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 commit8270947ed2
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 commit4f7c8e0c3d
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 commitd609ed50a4
Merge:d639d6fbc
d7bde3784
Author: Marcus Moore <[email protected]> Date: Thu Sep 19 13:20:55 2024 -0700 Merge branch 'develop' into testing/fmcs-accessories commitb88f2054dd
Author: snipe <[email protected]> Date: Thu Sep 19 20:38:34 2024 +0100 Refactor isDeletable on companies Signed-off-by: snipe <[email protected]> commitd7914e238d
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]> commitd7bde37842
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 commit454796e52a
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 commiteef487d61b
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 commit71dbc7abb0
Author: Godfrey M <[email protected]> Date: Thu Sep 19 12:23:07 2024 -0700 refreshed the assetstatus relationship commitd639d6fbc1
Author: Marcus Moore <[email protected]> Date: Thu Sep 19 12:21:54 2024 -0700 Add tests for accessory select list endpoint commit74088ea581
Author: snipe <[email protected]> Date: Thu Sep 19 20:13:38 2024 +0100 Optimize isDeletable counts Signed-off-by: snipe <[email protected]> commitfff069824b
Author: Marcus Moore <[email protected]> Date: Thu Sep 19 12:11:03 2024 -0700 Add tests for update accessory endpoint commitd446773fdd
Author: spencerrlongg <[email protected]> Date: Thu Sep 19 14:05:48 2024 -0500 catch exceptions on notification commitf283b5fbe8
Author: snipe <[email protected]> Date: Thu Sep 19 19:56:39 2024 +0100 Eager load adminuser Signed-off-by: snipe <[email protected]> commita5be18bb14
Author: Marcus Moore <[email protected]> Date: Thu Sep 19 11:55:15 2024 -0700 Add test for limit and offset commiteb6f05faf7
Author: snipe <[email protected]> Date: Thu Sep 19 19:41:46 2024 +0100 Eager load adminuser Signed-off-by: snipe <[email protected]> commit118183ff58
Author: snipe <[email protected]> Date: Thu Sep 19 19:41:39 2024 +0100 Removed footer Signed-off-by: snipe <[email protected]> commit2137890496
Author: Marcus Moore <[email protected]> Date: Thu Sep 19 11:33:20 2024 -0700 Remove dead code commitebf6ce6980
Author: snipe <[email protected]> Date: Thu Sep 19 19:27:10 2024 +0100 Refactor for fewer queries Signed-off-by: snipe <[email protected]> commit9b22d6d493
Author: Marcus Moore <[email protected]> Date: Thu Sep 19 11:24:01 2024 -0700 Add tests for accessory checkouts endpoint commit5ebf0ed2b2
Author: snipe <[email protected]> Date: Thu Sep 19 19:19:14 2024 +0100 Updated variable Signed-off-by: snipe <[email protected]> commit836893cba5
Author: snipe <[email protected]> Date: Thu Sep 19 18:35:00 2024 +0100 Added id to report Signed-off-by: snipe <[email protected]> commitcd98b3817d
Author: snipe <[email protected]> Date: Thu Sep 19 18:26:08 2024 +0100 Removed duplicate line Signed-off-by: snipe <[email protected]> commit727806372c
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]> commit5e1c736d49
Author: snipe <[email protected]> Date: Thu Sep 19 18:04:50 2024 +0100 Added created_by for manufacturers Signed-off-by: snipe <[email protected]> commit6579fa72da
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]> commit82d6e1510f
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]> commit822ea96dfd
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]> commitb247fc33b9
Author: snipe <[email protected]> Date: Thu Sep 19 17:28:01 2024 +0100 Added legacy comment Signed-off-by: snipe <[email protected]> commit2dcae780c0
Author: snipe <[email protected]> Date: Thu Sep 19 17:26:21 2024 +0100 Reapply deleted code Signed-off-by: snipe <[email protected]> commit5c3180ffa0
Author: snipe <[email protected]> Date: Thu Sep 19 17:25:09 2024 +0100 Removed duplicate code Signed-off-by: snipe <[email protected]> commit65eba30038
Author: snipe <[email protected]> Date: Thu Sep 19 17:23:34 2024 +0100 Fixed markdown in acceptance reminder Signed-off-by: snipe <[email protected]> commitbbce7b40ca
Author: snipe <[email protected]> Date: Thu Sep 19 17:20:56 2024 +0100 Additional consistencies Signed-off-by: snipe <[email protected]> commit02a29c71ef
Author: snipe <[email protected]> Date: Thu Sep 19 17:01:48 2024 +0100 Added created_by Signed-off-by: snipe <[email protected]> commit6699995972
Author: snipe <[email protected]> Date: Thu Sep 19 17:01:36 2024 +0100 Added created_by to components Signed-off-by: snipe <[email protected]> commit951f03094a
Author: snipe <[email protected]> Date: Thu Sep 19 17:01:17 2024 +0100 Added created_by to kits Signed-off-by: snipe <[email protected]> commit354b00ef15
Author: snipe <[email protected]> Date: Thu Sep 19 16:45:51 2024 +0100 Made method name consistent Signed-off-by: snipe <[email protected]> commitc93229179b
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]> commita77a7065d7
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]> commit4363e8b34c
Author: snipe <[email protected]> Date: Thu Sep 19 16:20:42 2024 +0100 Updated importer Signed-off-by: snipe <[email protected]> commit9adb2c24f3
Author: snipe <[email protected]> Date: Thu Sep 19 16:06:36 2024 +0100 Squashed commit of the following: commitdddbf27d78
Author: snipe <[email protected]> Date: Wed Sep 18 14:18:52 2024 +0100 Updated language strings Signed-off-by: snipe <[email protected]> commitfcefcc8184
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 commit04bb3eec83
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] commitf963b9a19f
Author: Brady Wetherington <[email protected]> Date: Wed Sep 18 13:24:26 2024 +0100 Fix selected-index of Countries drop-down commit154d5d8d91
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 commit3519a82ddd
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 16:55:20 2024 -0700 Fix name: TestsFullMultipleCompaniesSupport commita629df07bf
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 14:49:08 2024 -0700 Implement interfaces on existing test classes commit9a13fcab23
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 14:38:38 2024 -0700 Pluralize commitf5705a1dde
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 14:34:55 2024 -0700 More unification commitf325c4afdb
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 14:32:38 2024 -0700 Unify assertion method commit1fddacd7d0
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 14:25:11 2024 -0700 Re-order test methods commit4af893df61
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 14:20:24 2024 -0700 Improve assertions commitb8b3f91ce4
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 13:55:18 2024 -0700 Formatting commit7f40f55343
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 13:52:02 2024 -0700 Add tests for delete supplier endpoint commitb06e8d442d
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 13:37:08 2024 -0700 Add tests for delete status label endpoint commitc269184c60
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 13:29:41 2024 -0700 Add tests for delete predefined kit endpoint commit53c673dee2
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 13:13:12 2024 -0700 Add tests for delete manufacturer endpoint commit50730fc4fb
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 12:37:18 2024 -0700 Add tests for delete location endpoint commit60a54cee79
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 12:33:30 2024 -0700 Add tests for delete license endpoint commit446e962a50
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 10:38:51 2024 -0700 Add tests for delete group endpoint commit79a4bb7316
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 10:35:44 2024 -0700 Add tests for delete depreciation endpoint commit2f76c1bc5b
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 10:33:21 2024 -0700 Add assertion commit38b9f4a438
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 10:29:20 2024 -0700 Add tests for delete departments endpoint commit3105f53aff
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 16:54:29 2024 -0700 Add tests for delete custom fieldsets endpoint commit2047cfed09
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 16:20:32 2024 -0700 Add tests for delete custom fields endpoint commite3268d32df
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 16:00:02 2024 -0700 Add tests for delete consumable endpoint commit6df8b0ac0e
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 15:52:07 2024 -0700 Add tests for delete component endpoint commit910f13c1f7
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 15:38:30 2024 -0700 Add tests for delete companies endpoint commit8ce2512f55
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 13:54:44 2024 -0700 Add tests for delete category endpoint commit0ec415d4d0
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 13:46:22 2024 -0700 Clean up commit2044570e95
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 13:39:36 2024 -0700 Add tests for delete asset model endpoint commitb336c6273d
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 13:32:42 2024 -0700 Pluralize test classes commit5299b3e9f0
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 13:29:44 2024 -0700 Remove code handled by CompanyableChildTrait commit872b76b45f
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 13:29:10 2024 -0700 Add tests for delete asset maintenance endpoint commit275cf4630e
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 13:16:37 2024 -0700 Add tests for delete asset endpoint commit5c2660bd34
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 13:02:32 2024 -0700 Introduce interface commitc7ae9d9dfa
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 12:58:47 2024 -0700 Add tests for delete accessory endpoint commit9e5f6d656a
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]> commit634a4afa75
Author: snipe <[email protected]> Date: Thu Sep 19 16:04:54 2024 +0100 Fixed 1001 query on license Signed-off-by: snipe <[email protected]> commit7650628d30
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]> commit7f690a6238
Author: snipe <[email protected]> Date: Thu Sep 19 15:58:32 2024 +0100 Fixed variable name Signed-off-by: snipe <[email protected]> commitb32ab6a06c
Author: Godfrey M <[email protected]> Date: Wed Sep 18 16:36:24 2024 -0700 import User model commit4ff5fc1ff9
Author: Godfrey M <[email protected]> Date: Wed Sep 18 16:19:35 2024 -0700 clean up variables commit86f13a9735
Author: Marcus Moore <[email protected]> Date: Wed Sep 18 16:13:34 2024 -0700 Add index test commitc40209f500
Author: Godfrey M <[email protected]> Date: Wed Sep 18 15:23:44 2024 -0700 seperates emails and webhook notifications commita071fff954
Author: Marcus Moore <[email protected]> Date: Wed Sep 18 12:32:14 2024 -0700 Implement tests commit8b50ef077d
Author: Marcus Moore <[email protected]> Date: Wed Sep 18 11:58:33 2024 -0700 Implement test commit607f29030f
Author: Marcus Moore <[email protected]> Date: Wed Sep 18 11:53:27 2024 -0700 Stub out test commita6bcd3c0c2
Author: Marcus Moore <[email protected]> Date: Wed Sep 18 11:47:59 2024 -0700 Add validation test commit9b293afaac
Author: Marcus Moore <[email protected]> Date: Wed Sep 18 11:28:29 2024 -0700 Remove more dead code commit636c776620
Author: Marcus Moore <[email protected]> Date: Wed Sep 18 11:27:37 2024 -0700 Remove dead code commitd5f659024c
Author: Marcus Moore <[email protected]> Date: Wed Sep 18 11:27:09 2024 -0700 Add test for logging commit832e50a71e
Author: Marcus Moore <[email protected]> Date: Wed Sep 18 11:19:41 2024 -0700 Implement test commitfa19686248
Author: Marcus Moore <[email protected]> Date: Wed Sep 18 11:18:21 2024 -0700 Implement test commitc021609c13
Merge:7b31df7c1
dddbf27d7
Author: Marcus Moore <[email protected]> Date: Wed Sep 18 10:42:58 2024 -0700 Merge branch 'develop' into testing/fmcs-accessories commit655abe8be5
Author: snipe <[email protected]> Date: Wed Sep 18 14:32:59 2024 +0100 Fixed requestable user_id Signed-off-by: snipe <[email protected]> commitd96c5e1ba4
Merge:a807646d3
dddbf27d7
Author: snipe <[email protected]> Date: Wed Sep 18 14:20:55 2024 +0100 Merge remote-tracking branch 'origin/develop' commitdddbf27d78
Author: snipe <[email protected]> Date: Wed Sep 18 14:18:52 2024 +0100 Updated language strings Signed-off-by: snipe <[email protected]> commitbae9982833
Author: snipe <[email protected]> Date: Wed Sep 18 14:18:14 2024 +0100 Updated request methods Signed-off-by: snipe <[email protected]> commita807646d39
Merge:83b4bf9cf
fcefcc818
Author: snipe <[email protected]> Date: Wed Sep 18 13:48:09 2024 +0100 Merge remote-tracking branch 'origin/develop' commitabe79df6dc
Author: snipe <[email protected]> Date: Wed Sep 18 13:47:30 2024 +0100 Added translation Signed-off-by: snipe <[email protected]> commitfcefcc8184
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 commit04bb3eec83
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] commitf963b9a19f
Author: Brady Wetherington <[email protected]> Date: Wed Sep 18 13:24:26 2024 +0100 Fix selected-index of Countries drop-down commit154d5d8d91
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 commit1582d81e5b
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]> commit7c85ad54eb
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]> commit7b31df7c14
Author: Marcus Moore <[email protected]> Date: Tue Sep 17 09:11:58 2024 -0700 Begin additional test case commit83b4bf9cf8
Merge:9ff211105
6c996b775
Author: snipe <[email protected]> Date: Tue Sep 17 15:54:53 2024 +0100 Merge remote-tracking branch 'origin/develop' commit6c996b7759
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 commit9e957baeb5
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]> commit12fd9cd97a
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 17:00:08 2024 -0700 Update interface name commit9e03c4ba6f
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 commit3519a82ddd
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 16:55:20 2024 -0700 Fix name: TestsFullMultipleCompaniesSupport commit8eb1c487bc
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 16:52:10 2024 -0700 implement FMCS test for accessory index commite835637ef0
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 16:40:10 2024 -0700 Add accessory checkin test commiteb35608bb5
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 16:35:33 2024 -0700 Remove call handled by form request commit3f07f682de
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 16:35:21 2024 -0700 Migrate existing tests to TestsPermissionsRequirement commita629df07bf
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 14:49:08 2024 -0700 Implement interfaces on existing test classes commit9a13fcab23
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 14:38:38 2024 -0700 Pluralize commitf5705a1dde
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 14:34:55 2024 -0700 More unification commitf325c4afdb
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 14:32:38 2024 -0700 Unify assertion method commit1fddacd7d0
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 14:25:11 2024 -0700 Re-order test methods commit4af893df61
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 14:20:24 2024 -0700 Improve assertions commitb8b3f91ce4
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 13:55:18 2024 -0700 Formatting commit7f40f55343
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 13:52:02 2024 -0700 Add tests for delete supplier endpoint commitb06e8d442d
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 13:37:08 2024 -0700 Add tests for delete status label endpoint commitc269184c60
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 13:29:41 2024 -0700 Add tests for delete predefined kit endpoint commit53c673dee2
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 13:13:12 2024 -0700 Add tests for delete manufacturer endpoint commit50730fc4fb
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 12:37:18 2024 -0700 Add tests for delete location endpoint commit60a54cee79
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 12:33:30 2024 -0700 Add tests for delete license endpoint commit446e962a50
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 10:38:51 2024 -0700 Add tests for delete group endpoint commit79a4bb7316
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 10:35:44 2024 -0700 Add tests for delete depreciation endpoint commit2f76c1bc5b
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 10:33:21 2024 -0700 Add assertion commit38b9f4a438
Author: Marcus Moore <[email protected]> Date: Mon Sep 16 10:29:20 2024 -0700 Add tests for delete departments endpoint commitfe5fc6e0ce
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 commit62747a0090
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 commit9ff2111055
Merge:1328366a4
b465cc98d
Author: snipe <[email protected]> Date: Mon Sep 16 14:52:48 2024 +0100 Merge remote-tracking branch 'origin/develop' commitb465cc98d8
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 commit4debaaea39
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]> commit1328366a48
Merge:7e14f8c6d
8774da392
Author: snipe <[email protected]> Date: Mon Sep 16 12:38:56 2024 +0100 Merge remote-tracking branch 'origin/develop' commit4facc4007e
Author: setpill <[email protected]> Date: Fri Sep 13 17:05:48 2024 +0200 feat: Explicitly request LDAP attributes during sync commit31da47e046
Author: setpill <[email protected]> Date: Fri Sep 13 17:05:28 2024 +0200 refactor: Put LDAP attribute mapping in array commit3105f53aff
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 16:54:29 2024 -0700 Add tests for delete custom fieldsets endpoint commit2047cfed09
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 16:20:32 2024 -0700 Add tests for delete custom fields endpoint commite3268d32df
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 16:00:02 2024 -0700 Add tests for delete consumable endpoint commit6df8b0ac0e
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 15:52:07 2024 -0700 Add tests for delete component endpoint commit910f13c1f7
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 15:38:30 2024 -0700 Add tests for delete companies endpoint commit8ce2512f55
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 13:54:44 2024 -0700 Add tests for delete category endpoint commit0ec415d4d0
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 13:46:22 2024 -0700 Clean up commit2044570e95
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 13:39:36 2024 -0700 Add tests for delete asset model endpoint commitb336c6273d
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 13:32:42 2024 -0700 Pluralize test classes commit5299b3e9f0
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 13:29:44 2024 -0700 Remove code handled by CompanyableChildTrait commit872b76b45f
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 13:29:10 2024 -0700 Add tests for delete asset maintenance endpoint commit275cf4630e
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 13:16:37 2024 -0700 Add tests for delete asset endpoint commit5c2660bd34
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 13:02:32 2024 -0700 Introduce interface commitc7ae9d9dfa
Author: Marcus Moore <[email protected]> Date: Thu Sep 12 12:58:47 2024 -0700 Add tests for delete accessory endpoint commit0bc98e971f
Author: Godfrey M <[email protected]> Date: Thu Sep 12 12:26:19 2024 -0700 refactoring modals with partials and fixing misalignments commit8774da3921
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 commitc6c5cb73cf
Author: Godfrey M <[email protected]> Date: Wed Sep 11 10:49:27 2024 -0700 fixes consumables positioning with smaller media commita97530367d
Author: snipe <[email protected]> Date: Wed Sep 11 17:29:22 2024 +0100 Fixed tests again Signed-off-by: snipe <[email protected]> commit43250ae881
Author: snipe <[email protected]> Date: Wed Sep 11 17:04:09 2024 +0100 Updated tests Signed-off-by: snipe <[email protected]> commit04e96b8f20
Author: snipe <[email protected]> Date: Wed Sep 11 16:43:41 2024 +0100 Added tests Signed-off-by: snipe <[email protected]> commit98323185de
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]> commit9e5f6d656a
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 commit7e14f8c6d6
Merge:fddbdafb9
ab3b65531
Author: snipe <[email protected]> Date: Wed Sep 11 12:25:28 2024 +0100 Merge remote-tracking branch 'origin/develop' commitab3b655312
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]> commit601d8d7e5f
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 commitca01261c1f
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 commit15183c4822
Author: Godfrey M <[email protected]> Date: Tue Sep 10 11:05:03 2024 -0700 rephrased the ternary <-correctly spelled commitfddbdafb99
Author: snipe <[email protected]> Date: Tue Sep 10 19:03:56 2024 +0100 Fixed conflict Signed-off-by: snipe <[email protected]> commita5dbece1a9
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 commit4f0f72b29e
Author: snipe <[email protected]> Date: Tue Sep 10 18:15:12 2024 +0100 Fixed version Signed-off-by: snipe <[email protected]> commit4183d1834f
Author: snipe <[email protected]> Date: Tue Sep 10 18:14:03 2024 +0100 Pre-release assets Signed-off-by: snipe <[email protected]> commit713bb104ec
Merge:7f2cae4f2
4998d60f3
Author: snipe <[email protected]> Date: Tue Sep 10 14:46:15 2024 +0100 Merge remote-tracking branch 'origin/develop' commit4998d60f39
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 commit7cf30003b6
Author: snipe <[email protected]> Date: Tue Sep 10 14:41:08 2024 +0100 Updated strings Signed-off-by: snipe <[email protected]> commitf6bf2d03c4
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 commit6f44441a8b
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 commite7e5dfbdfa
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 commitd62315fbe4
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 commit7f3f77dec8
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 commit82e56c6832
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 commit76c9015aa9
Author: Marcus Moore <[email protected]> Date: Mon Sep 9 16:51:40 2024 -0700 Add test case commit5d5f421294
Author: Marcus Moore <[email protected]> Date: Mon Sep 9 16:49:43 2024 -0700 Add test case commit367f02af86
Author: Godfrey M <[email protected]> Date: Mon Sep 9 16:34:04 2024 -0700 more partials and includes commit7a1c721eca
Author: Godfrey M <[email protected]> Date: Mon Sep 9 16:22:56 2024 -0700 making modal partials for reuse commit6423df2133
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 commitdc6a5bf998
Author: Marcus Moore <[email protected]> Date: Mon Sep 9 14:54:19 2024 -0700 Reflash session so login message is displayed commit0820dd9da4
Author: Marcus Moore <[email protected]> Date: Mon Sep 9 14:36:32 2024 -0700 Update test names commitaa6ab2df60
Author: Marcus Moore <[email protected]> Date: Mon Sep 9 14:35:38 2024 -0700 Add permission tests for some accessory api endpoints commit22a2cc0256
Author: Marcus Moore <[email protected]> Date: Mon Sep 9 13:21:10 2024 -0700 Add test for dashboard counts commit57fab0268b
Author: Godfrey M <[email protected]> Date: Mon Sep 9 13:02:25 2024 -0700 made it a terenary commitad5768d8b2
Author: Godfrey M <[email protected]> Date: Mon Sep 9 12:45:11 2024 -0700 fixes margin for the sidebar using rtl languages commit35533c39d5
Merge:d4426e468
549dec9f9
Author: Marcus Moore <[email protected]> Date: Mon Sep 9 12:18:02 2024 -0700 Merge branch 'develop' into company_tests commitde403f6e07
Merge:010f66f4c
549dec9f9
Author: Marcus Moore <[email protected]> Date: Mon Sep 9 12:17:53 2024 -0700 Merge branch 'develop' into accessory_tests commit549dec9f9e
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 commitd4426e4686
Author: Marcus Moore <[email protected]> Date: Mon Sep 9 11:03:00 2024 -0700 Add simple tests for company creation via UI commitb2a6349243
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 commitc5dbc5f6b8
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]> commit7f2cae4f26
Merge:e34f549e4
ce97e2a30
Author: snipe <[email protected]> Date: Mon Sep 9 03:56:05 2024 +0100 Merge remote-tracking branch 'origin/develop' commitce97e2a30f
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 commit7d9a0eba04
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]> commit010f66f4c9
Author: Marcus Moore <[email protected]> Date: Wed Sep 4 15:48:11 2024 -0700 Add validation test commit9c6718b459
Author: Marcus Moore <[email protected]> Date: Wed Sep 4 15:46:35 2024 -0700 Organize commit9f832a93c9
Author: Marcus Moore <[email protected]> Date: Wed Sep 4 15:44:52 2024 -0700 Ensure user is stored commit487d88c012
Author: Marcus Moore <[email protected]> Date: Wed Sep 4 15:43:01 2024 -0700 Add some ui tests for accessories commit0e9f7153c0
Author: Marcus Moore <[email protected]> Date: Wed Sep 4 15:13:45 2024 -0700 Add composer commands for generating coverage reports via Herd commit7c8955b126
Author: Godfrey M <[email protected]> Date: Wed Sep 4 12:38:35 2024 -0700 revert changes to label view commit20fa4c39f9
Author: Godfrey M <[email protected]> Date: Wed Sep 4 12:26:44 2024 -0700 adds setEula to support\settings commitf04a4a3cf5
Author: Godfrey M <[email protected]> Date: Wed Sep 4 12:21:49 2024 -0700 adds test commitcf07186ae8
Author: Godfrey M <[email protected]> Date: Tue Sep 3 12:23:23 2024 -0700 gives priority to default eula being checked vs catregory eula commit51d63d57c6
Author: Marcus Moore <[email protected]> Date: Tue Sep 3 12:22:43 2024 -0700 Hide the "Add default values" checkbox if no fieldset selected commite34f549e4c
Merge:a8813cca9
e1fcfc8dc
Author: snipe <[email protected]> Date: Mon Sep 2 19:16:23 2024 +0100 Merge remote-tracking branch 'origin/develop' commite1fcfc8dc1
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 commit9fe8a866e0
Author: snipe <[email protected]> Date: Mon Sep 2 19:07:21 2024 +0100 Updated test Signed-off-by: snipe <[email protected]> commite8e3060a75
Author: snipe <[email protected]> Date: Mon Sep 2 18:51:22 2024 +0100 Added tests Signed-off-by: snipe <[email protected]> commit6aaf2f623f
Author: snipe <[email protected]> Date: Mon Sep 2 18:49:55 2024 +0100 Removed extra route Signed-off-by: snipe <[email protected]> commitdfbccf50e8
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]> commita8813cca94
Merge:9fef27a44
13dbf9ee7
Author: snipe <[email protected]> Date: Sat Aug 31 13:48:59 2024 +0100 Merge remote-tracking branch 'origin/develop' commit13dbf9ee74
Author: snipe <[email protected]> Date: Sat Aug 31 13:48:42 2024 +0100 Added icon for dept Signed-off-by: snipe <[email protected]> commitf8bbb7ad9b
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 commit3c7d455ee3
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]> commit9fef27a448
Merge:d2b88a510
12fa50597
Author: snipe <[email protected]> Date: Thu Aug 29 21:07:56 2024 +0100 Merge remote-tracking branch 'origin/develop' commit12fa505972
Author: snipe <[email protected]> Date: Thu Aug 29 21:07:30 2024 +0100 Disabmiguate licenses company_id Signed-off-by: snipe <[email protected]> commitd2b88a5107
Merge:4e35f389d
4e4930ba6
Author: snipe <[email protected]> Date: Thu Aug 29 21:02:21 2024 +0100 Merge remote-tracking branch 'origin/develop' commit4e4930ba62
Author: snipe <[email protected]> Date: Thu Aug 29 21:01:48 2024 +0100 Check for array Signed-off-by: snipe <[email protected]> commit4e35f389df
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 commit76301bc30d
Author: snipe <[email protected]> Date: Thu Aug 29 20:05:03 2024 +0100 Fixed typo Signed-off-by: snipe <[email protected]> commit964e105cf9
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 commit6fd24c7e14
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 commit231bc1e2de
Author: snipe <[email protected]> Date: Thu Aug 29 18:31:34 2024 +0100 Updated blade selectors Signed-off-by: snipe <[email protected]> commit37d04b7176
Author: snipe <[email protected]> Date: Thu Aug 29 17:52:01 2024 +0100 Some CSS tweaks for select2 Signed-off-by: snipe <[email protected]> commite62a802926
Author: snipe <[email protected]> Date: Thu Aug 29 17:51:44 2024 +0100 Use whereIn instead of where = Signed-off-by: snipe <[email protected]> commit69e981364a
Author: snipe <[email protected]> Date: Thu Aug 29 17:51:20 2024 +0100 Made multiple select Signed-off-by: snipe <[email protected]> commite5b9d9a28b
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 commitabb4221539
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]> commite4ebabdaba
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 commitda1e383295
Author: Brady Wetherington <[email protected]> Date: Thu Aug 29 14:09:23 2024 +0100 Use the null-safe property accessor for new-user creation commitb64ed254e0
Author: snipe <[email protected]> Date: Thu Aug 29 13:49:09 2024 +0100 Fixed tests Signed-off-by: snipe <[email protected]> commitba291edc42
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 commitec2ea955d8
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 commitc197644ba7
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 commit29b30cc5d3
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 commit6af27516dc
Author: snipe <[email protected]> Date: Thu Aug 29 11:29:00 2024 +0100 Upgraded webpack Signed-off-by: snipe <[email protected]> commita89f17a145
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 commitde0565f5b3
Author: snipe <[email protected]> Date: Thu Aug 29 11:24:06 2024 +0100 Updated jquery UI Signed-off-by: snipe <[email protected]> commit4111ef0d78
Merge:cfa56e221
68c708bde
Author: snipe <[email protected]> Date: Thu Aug 29 11:20:21 2024 +0100 Merge remote-tracking branch 'origin/develop' commit68c708bdef
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 commit5581950fee
Author: snipe <[email protected]> Date: Thu Aug 29 11:17:17 2024 +0100 Corrected language string Signed-off-by: snipe <[email protected]> commitcfa56e2219
Merge:7f1dfcc93
58e366a06
Author: snipe <[email protected]> Date: Thu Aug 29 11:08:53 2024 +0100 Merge remote-tracking branch 'origin/develop' commit58e366a063
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 commitb06c527767
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]> commit7f1dfcc935
Merge:6f3fb21fe
26f28a862
Author: snipe <[email protected]> Date: Wed Aug 28 14:29:06 2024 +0100 Merge remote-tracking branch 'origin/develop' commit26f28a862a
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 commit94c981e22c
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]> commit6f3fb21fef
Merge:a48e79a1f
e8da7e2df
Author: snipe <[email protected]> Date: Wed Aug 28 12:50:19 2024 +0100 Merge remote-tracking branch 'origin/develop' commite8da7e2df2
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 commitd635c86e00
Author: snipe <[email protected]> Date: Wed Aug 28 12:46:30 2024 +0100 Added tests Signed-off-by: snipe <[email protected]> commit406ff6984b
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]> commitc6ddc501c5
Author: snipe <[email protected]> Date: Wed Aug 28 12:40:12 2024 +0100 Filter by depreciation_id Signed-off-by: snipe <[email protected]> commit4839181beb
Author: snipe <[email protected]> Date: Wed Aug 28 12:40:01 2024 +0100 Added counts to API Signed-off-by: snipe <[email protected]> commit63a05c89a7
Author: snipe <[email protected]> Date: Wed Aug 28 12:39:52 2024 +0100 Added counts to show method Signed-off-by: snipe <[email protected]> commit385c4f69f7
Author: snipe <[email protected]> Date: Wed Aug 28 12:39:43 2024 +0100 Added counts to depreciation transformer Signed-off-by: snipe <[email protected]> commit486cd8c8c9
Author: snipe <[email protected]> Date: Wed Aug 28 12:39:09 2024 +0100 Nicer formatting for searchableAttributes Signed-off-by: snipe <[email protected]> commiteb5d93b3c2
Author: snipe <[email protected]> Date: Wed Aug 28 12:38:55 2024 +0100 Added assets relationship Signed-off-by: snipe <[email protected]> commita5ff623484
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]> commitb5a4389815
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]> commit7b5b559baa
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 commit67a9929745
Author: snipe <[email protected]> Date: Wed Aug 28 11:56:54 2024 +0100 Opens label new window Signed-off-by: snipe <[email protected]> commita48e79a1fc
Merge:c207d4843
64c4433b9
Author: snipe <[email protected]> Date: Tue Aug 27 07:37:53 2024 +0100 Merge remote-tracking branch 'origin/develop' commit64c4433b98
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 commit22bc088f6f
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]> commitd3e8e06638
Author: snipe <[email protected]> Date: Mon Aug 26 14:07:06 2024 +0100 Add @swift2512 as a contributor commitc207d48430
Merge:991e48696
1b933f7ad
Author: snipe <[email protected]> Date: Mon Aug 26 14:01:38 2024 +0100 Merge remote-tracking branch 'origin/develop' commit1b933f7add
Author: snipe <[email protected]> Date: Mon Aug 26 13:47:17 2024 +0100 Added s to fa icons Signed-off-by: snipe <[email protected]> commit991e48696a
Merge:797488504
3fe891a05
Author: snipe <[email protected]> Date: Mon Aug 26 10:26:06 2024 +0100 Merge remote-tracking branch 'origin/develop' commit3fe891a05b
Author: snipe <[email protected]> Date: Mon Aug 26 10:25:27 2024 +0100 Removed a few more commas Signed-off-by: snipe <[email protected]> commit7974885041
Merge:4ef85bd52
f4c5b712f
Author: snipe <[email protected]> Date: Mon Aug 26 10:24:19 2024 +0100 Merge remote-tracking branch 'origin/develop' commitf4c5b712f4
Author: snipe <[email protected]> Date: Mon Aug 26 10:24:07 2024 +0100 Removed colons Signed-off-by: snipe <[email protected]> commit4ef85bd529
Merge:6eab83a85
4c8dc7818
Author: snipe <[email protected]> Date: Fri Aug 23 17:58:08 2024 +0100 Merge remote-tracking branch 'origin/develop' commit4c8dc7818d
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 commit5c43a1f87c
Author: snipe <[email protected]> Date: Fri Aug 23 17:54:49 2024 +0100 Use proper style for buttons Signed-off-by: snipe <[email protected]> commitd3b265de8e
Author: snipe <[email protected]> Date: Fri Aug 23 17:48:36 2024 +0100 Moved button on hardware Signed-off-by: snipe <[email protected]> commit263151658f
Author: snipe <[email protected]> Date: Fri Aug 23 17:44:09 2024 +0100 Moved general label button Signed-off-by: snipe <[email protected]> commit6eab83a85a
Merge:cce1f87da
aa86e07cd
Author: snipe <[email protected]> Date: Fri Aug 23 15:22:53 2024 +0100 Merge remote-tracking branch 'origin/develop' commitaa86e07cd2
Author: snipe <[email protected]> Date: Fri Aug 23 15:22:39 2024 +0100 Fixed #15385 - small icon tweaks Signed-off-by: snipe <[email protected]> commitcce1f87da6
Merge:b460e8dc8
d92fa5de6
Author: snipe <[email protected]> Date: Fri Aug 23 15:18:30 2024 +0100 Merge remote-tracking branch 'origin/develop' commitd92fa5de65
Author: snipe <[email protected]> Date: Fri Aug 23 15:17:25 2024 +0100 fa-fw on settings icon Signed-off-by: snipe <[email protected]> commitb460e8dc83
Merge:50cb7e65c
c589140ea
Author: snipe <[email protected]> Date: Fri Aug 23 08:42:32 2024 +0100 Merge remote-tracking branch 'origin/develop' commitc589140ea0
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 commit52894615ce
Author: snipe <[email protected]> Date: Fri Aug 23 08:40:41 2024 +0100 More specific gate for checkin Signed-off-by: snipe <[email protected]> commit8546bbdd65
Author: snipe <[email protected]> Date: Fri Aug 23 08:38:47 2024 +0100 Fixed gate for checkout button Signed-off-by: snipe <[email protected]> commit50cb7e65c9
Merge:821dd158d
cc2c8f76d
Author: snipe <[email protected]> Date: Fri Aug 23 07:32:39 2024 +0100 Merge remote-tracking branch 'origin/develop' commitcc2c8f76d0
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 commit1ffa69c43c
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 commitf85ebd7ffd
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]> commit78d355f136
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 commitec0346e4a8
Author: snipe <[email protected]> Date: Fri Aug 23 07:19:08 2024 +0100 Add @setpill as a contributor commitfc5eb37776
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 commit9a73311a99
Author: Marcus Moore <[email protected]> Date: Thu Aug 22 17:04:04 2024 -0700 Fix nested checkboxes being updated as a group commitaec781e7df
Author: Marcus Moore <[email protected]> Date: Thu Aug 22 16:03:30 2024 -0700 Be a little more explicit commit1d7853cbfe
Author: setpill <[email protected]> Date: Thu Aug 22 19:45:53 2024 +0200 fixed #15374: load TrustProxies middleware in Kernel.php commit7f3c86165b
Author: Marcus Moore <[email protected]> Date: Thu Aug 22 13:58:31 2024 -0700 Conditionally disable Add default values checkbox commit10b45812c4
Author: Marcus Moore <[email protected]> Date: Thu Aug 22 13:38:01 2024 -0700 Improve id for checkboxes and radio buttons commitc3165717ed
Author: Marcus Moore <[email protected]> Date: Thu Aug 22 13:20:04 2024 -0700 Handle old input commitd0a351a132
Author: Marcus Moore <[email protected]> Date: Thu Aug 22 12:59:03 2024 -0700 Add comment commit68749e7e87
Author: Marcus Moore <[email protected]> Date: Thu Aug 22 12:58:35 2024 -0700 Simplify logic commit0abb5637e0
Author: Marcus Moore <[email protected]> Date: Thu Aug 22 12:54:54 2024 -0700 WIP: handle old input commitaf0a95be12
Author: Marcus Moore <[email protected]> Date: Wed Aug 21 17:00:32 2024 -0700 Simplify assertions commitd67975cb62
Author: Marcus Moore <[email protected]> Date: Wed Aug 21 16:59:44 2024 -0700 Implement fix commit663b2fd844
Author: Marcus Moore <[email protected]> Date: Wed Aug 21 16:59:38 2024 -0700 Add test case commitbcace9d019
Author: Marcus Moore <[email protected]> Date: Wed Aug 21 16:54:16 2024 -0700 Point test to correct endpoint commitb59bf3e7dc
Author: Marcus Moore <[email protected]> Date: Wed Aug 21 16:49:29 2024 -0700 Add failing test commit3957d670d0
Author: Godfrey M <[email protected]> Date: Thu Aug 22 10:04:46 2024 -0700 fixes send acceptance reminder query commit821dd158d1
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 commit833dace2b4
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 commit56e31d2303
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]> commitec365b0804
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. commitaef0ac68c3
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. commitf12f9a816f
Author: Iisakki Jaakkola <[email protected]> Date: Thu Aug 22 15:47:12 2024 +0300 Update the official docker-compose file too while at it. commita000d6454f
Author: Iisakki Jaakkola <[email protected]> Date: Thu Aug 22 15:46:40 2024 +0300 Fix non-functional development docker-compose file. commitca8864c061
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]> commit423f4f9126
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 commit456c7d8d91
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 commit54cfe3f6e6
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 commit5e0b18104d
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 commit8b5d3f7fbd
Author: snipe <[email protected]> Date: Thu Aug 22 12:56:32 2024 +0100 Fixed extra closing p tag Signed-off-by: snipe <[email protected]> commit744f43676d
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]> commitec0b9b198f
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 commit6c9a402685
Author: snipe <[email protected]> Date: Thu Aug 22 11:20:52 2024 +0100 Updated prod assets Signed-off-by: snipe <[email protected]> commit1b310f3a24
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 commit94300d81d6
Author: snipe <[email protected]> Date: Thu Aug 22 11:19:32 2024 +0100 Updated dev assets Signed-off-by: snipe <[email protected]> commitbc9ea5a2ec
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 commit4635a6efc3
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 commit9608414eae
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 commit5efddf6f5b
Author: snipe <[email protected]> Date: Thu Aug 22 11:01:39 2024 +0100 Allow clear on country dropdown Signed-off-by: snipe <[email protected]> commit305dc049a4
Author: snipe <[email protected]> Date: Thu Aug 22 11:01:28 2024 +0100 Added asterisk help text Signed-off-by: snipe <[email protected]> commit3ac0702094
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]> commit47d8e2f8b9
Author: snipe <[email protected]> Date: Thu Aug 22 09:42:05 2024 +0100 Add @Scarzy as a contributor commita2246b9645
Author: Marcus Moore <[email protected]> Date: Wed Aug 21 17:00:32 2024 -0700 Simplify assertions commit1d89759706
Author: Marcus Moore <[email protected]> Date: Wed Aug 21 16:59:44 2024 -0700 Implement fix commit206f8fe605
Author: Marcus Moore <[email protected]> Date: Wed Aug 21 16:59:38 2024 -0700 Add test case commit21d2217619
Author: Marcus Moore <[email protected]> Date: Wed Aug 21 16:54:16 2024 -0700 Point test to correct endpoint commit833bcb282f
Author: Marcus Moore <[email protected]> Date: Wed Aug 21 16:49:29 2024 -0700 Add failing test commit83dd9ce20e
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 commita8eb76fd8d
Author: r-xyz <[email protected]> Date: Wed Aug 21 22:25:41 2024 +0200 Fixed model files API routes. commitcd7db5c4a8
Author: r-xyz <[email protected]> Date: Wed Aug 21 22:24:08 2024 +0200 Fix some typos in models file handler. commitda7313bc9d
Author: r-xyz <[email protected]> Date: Wed Aug 21 20:24:22 2024 +0200 Fix models files API routes. commit4ec361c718
Author: r-xyz <[email protected]> Date: Wed Aug 21 19:49:51 2024 +0200 Add AssetModel files endpoints to API commit738ef442fd
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 commitd29b3bfb9a
Author: snipe <[email protected]> Date: Wed Aug 21 13:06:16 2024 +0100 Few more hidden-print classes Signed-off-by: snipe <[email protected]> commit6fdce3c536
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. commit912bbf0e32
Author: snipe <[email protected]> Date: Wed Aug 21 13:02:21 2024 +0100 More print fixes Signed-off-by: snipe <[email protected]> commitc54bff0f83
Merge:d3f30ced9
01c4fe611
Author: snipe <[email protected]> Date: Wed Aug 21 12:24:13 2024 +0100 Merge remote-tracking branch 'origin/develop' commit01c4fe6113
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 commit0fa9f57971
Author: Brady Wetherington <[email protected]> Date: Wed Aug 21 11:53:38 2024 +0100 Improvements to upgrade.php script to improve Windows experience commit1ab29ec3a4
Author: r-xyz <[email protected]> Date: Wed Aug 21 11:52:09 2024 +0200 Rename docker startup scripts coherently. commit7e475a0786
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 commit26b3c62ab8
Author: snipe <[email protected]> Date: Wed Aug 21 10:29:51 2024 +0100 Cleaned up category title Signed-off-by: snipe <[email protected]> commitd3f30ced94
Merge:973e2e575
d0acf5b8a
Author: snipe <[email protected]> Date: Wed Aug 21 10:13:57 2024 +0100 Merge remote-tracking branch 'origin/develop' commitd0acf5b8a6
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 commit74fbc23823
Author: snipe <[email protected]> Date: Wed Aug 21 10:09:35 2024 +0100 Updated tests Signed-off-by: snipe <[email protected]> commita23dee52f2
Author: snipe <[email protected]> Date: Wed Aug 21 09:58:47 2024 +0100 Added tests Signed-off-by: snipe <[email protected]> commit4d03f1e110
Author: snipe <[email protected]> Date: Wed Aug 21 09:46:18 2024 +0100 Fixed #15341 - validate parent ID Signed-off-by: snipe <[email protected]> commit963911f2e1
Author: Godfrey M <[email protected]> Date: Wed Aug 21 00:23:10 2024 -0700 changed order of info stgack commit59832126cb
Author: Marcus Moore <[email protected]> Date: Tue Aug 20 16:52:51 2024 -0700 Improve comment commit680cce3ee2
Author: Marcus Moore <[email protected]> Date: Tue Aug 20 16:42:29 2024 -0700 Align indents commit6c5ec6a16c
Author: Marcus Moore <[email protected]> Date: Tue Aug 20 16:41:24 2024 -0700 Get datepicker working commit5d1f98bf93
Author: Marcus Moore <[email protected]> Date: Tue Aug 20 15:38:43 2024 -0700 Simplify by directly wire:modeling commit9d484077ae
Author: Godfrey M <[email protected]> Date: Tue Aug 20 14:24:37 2024 -0700 missed a file commit9858b0f37f
Author: Godfrey M <[email protected]> Date: Tue Aug 20 14:23:55 2024 -0700 fixes info tab for users and assets commit973e2e5756
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 commit09033b19a7
Author: snipe <[email protected]> Date: Tue Aug 20 19:44:13 2024 +0100 Bumped hash Signed-off-by: snipe <[email protected]> commit46ed076428
Merge:d3a555ce9
5fdeb9c41
Author: snipe <[email protected]> Date: Tue Aug 20 19:42:56 2024 +0100 Merge remote-tracking branch 'origin/develop' commit5fdeb9c413
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 commit22d3734075
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 commiteca6b03f44
Author: Marcus Moore <[email protected]> Date: Tue Aug 20 11:08:53 2024 -0700 Allow id to be rendered commitbbdbec7197
Author: Marcus Moore <[email protected]> Date: Tue Aug 20 11:00:39 2024 -0700 Rely on $attributes behavior rendering passed attributes commit6c450d1338
Author: snipe <[email protected]> Date: Tue Aug 20 18:18:17 2024 +0100 Updated languages Signed-off-by: snipe <[email protected]> commita8cd1027f3
Author: spencerrlongg <[email protected]> Date: Tue Aug 20 11:40:15 2024 -0500 rm commented code commitd3a555ce91
Author: snipe <[email protected]> Date: Tue Aug 20 11:49:39 2024 +0100 Updated assets Signed-off-by: snipe <[email protected]> commit0f8e041809
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 commitd99b306ae9
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 commit74136761df
Author: snipe <[email protected]> Date: Tue Aug 20 11:45:13 2024 +0100 Added TrimStrings middleware Signed-off-by: snipe <[email protected]> commitf597d64339
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 commit0072f1500e
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]> commit64bed01a91
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 commitf6319e11e7
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]> commit5d9f988df3
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]> commitf8c72fb0ac
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 commit8e1111c681
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 commit886514a25f
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 commitfa765667f2
Merge:94d8a547b
cb40a82e7
Author: Marcus Moore <[email protected]> Date: Mon Aug 19 14:41:58 2024 -0700 Merge branch 'develop' into livewire-importer-improvements commit434bdcd6d4
Author: Marcus Moore <[email protected]> Date: Mon Aug 19 14:31:47 2024 -0700 Add missing parentheses to conditional commitbe5f3f38f8
Author: snipe <[email protected]> Date: Mon Aug 19 14:48:12 2024 +0100 Settings pages Signed-off-by: snipe <[email protected]> commit08c3a25b39
Author: snipe <[email protected]> Date: Mon Aug 19 14:16:57 2024 +0100 Little more padding Signed-off-by: snipe <[email protected]> commit34cd4b6244
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]> commitd89c8682be
Author: snipe <[email protected]> Date: Mon Aug 19 13:46:31 2024 +0100 Reversed location button ordering Signed-off-by: snipe <[email protected]> commit6f024849e9
Author: snipe <[email protected]> Date: Mon Aug 19 13:39:24 2024 +0100 Few more Signed-off-by: snipe <[email protected]> commite048f0955f
Author: snipe <[email protected]> Date: Mon Aug 19 13:27:21 2024 +0100 More icons Signed-off-by: snipe <[email protected]> commit479b2b4fd3
Author: snipe <[email protected]> Date: Mon Aug 19 13:23:08 2024 +0100 More icons Signed-off-by: snipe <[email protected]> commit84f14a05bd
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]> commit8d52fa51b1
Author: snipe <[email protected]> Date: Mon Aug 19 13:20:06 2024 +0100 Fixed suppliers buttons Signed-off-by: snipe <[email protected]> commit229d8b9bf5
Author: snipe <[email protected]> Date: Mon Aug 19 13:19:59 2024 +0100 Added location restore Signed-off-by: snipe <[email protected]> commiteb8d43a804
Author: snipe <[email protected]> Date: Mon Aug 19 12:32:44 2024 +0100 Updated buttons on models Signed-off-by: snipe <[email protected]> commitf82266fade
Author: snipe <[email protected]> Date: Mon Aug 19 11:58:31 2024 +0100 Cleaned up presenters Signed-off-by: snipe <[email protected]> commitb4b6f7a35f
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]> commit0bc995b87f
Author: snipe <[email protected]> Date: Mon Aug 19 11:58:05 2024 +0100 Updated more icons Signed-off-by: snipe <[email protected]> commit59725f2031
Author: snipe <[email protected]> Date: Mon Aug 19 11:57:40 2024 +0100 Removed extra debugging in test Signed-off-by: snipe <[email protected]> commit00bc9ac806
Author: snipe <[email protected]> Date: Sun Aug 18 22:39:14 2024 +0100 Fixed spacing Signed-off-by: snipe <[email protected]> commitf200960a57
Author: snipe <[email protected]> Date: Sun Aug 18 22:26:57 2024 +0100 Aaaand more Signed-off-by: snipe <[email protected]> commitc700127f1a
Author: snipe <[email protected]> Date: Sun Aug 18 22:09:00 2024 +0100 Updated user view Signed-off-by: snipe <[email protected]> commitae2f9571b4
Author: snipe <[email protected]> Date: Sun Aug 18 21:57:37 2024 +0100 And still more Signed-off-by: snipe <[email protected]> commita77dcad336
Author: snipe <[email protected]> Date: Sun Aug 18 20:30:53 2024 +0100 More links Signed-off-by: snipe <[email protected]> commit7ace9324b4
Author: snipe <[email protected]> Date: Sun Aug 18 20:30:22 2024 +0100 Added padlock sound Signed-off-by: snipe <[email protected]> commitd2e889e927
Author: snipe <[email protected]> Date: Sun Aug 18 19:21:59 2024 +0100 Still more Signed-off-by: snipe <[email protected]> commit803bdb457c
Author: snipe <[email protected]> Date: Sun Aug 18 18:48:19 2024 +0100 Added calendar Signed-off-by: snipe <[email protected]> commit7c9b1f6e38
Author: snipe <[email protected]> Date: Sun Aug 18 18:39:22 2024 +0100 Added the plus icon Signed-off-by: snipe <[email protected]> commitd545537a43
Author: snipe <[email protected]> Date: Sun Aug 18 18:34:13 2024 +0100 More icons Signed-off-by: snipe <[email protected]> commit4d8904938d
Author: snipe <[email protected]> Date: Sun Aug 18 18:24:26 2024 +0100 Added calendar icon for datepickers Signed-off-by: snipe <[email protected]> commit0c09f2b2c0
Author: snipe <[email protected]> Date: Sun Aug 18 18:13:49 2024 +0100 Moar icon replacement Signed-off-by: snipe <[email protected]> commitbffba02511
Author: snipe <[email protected]> Date: Sun Aug 18 17:26:44 2024 +0100 Updated icons Signed-off-by: snipe <[email protected]> commit901f4df7ee
Author: snipe <[email protected]> Date: Sun Aug 18 17:03:36 2024 +0100 Added more icons Signed-off-by: snipe <[email protected]> commit9337cba340
Author: snipe <[email protected]> Date: Sun Aug 18 15:53:58 2024 +0100 Added download Signed-off-by: snipe <[email protected]> commit2b0c67c263
Author: snipe <[email protected]> Date: Sun Aug 18 15:51:00 2024 +0100 Load the icon helper Signed-off-by: snipe <[email protected]> commitda71f031f5
Author: snipe <[email protected]> Date: Sun Aug 18 15:48:24 2024 +0100 Use icon in hardware view Signed-off-by: snipe <[email protected]> commitd2e585baa7
Author: snipe <[email protected]> Date: Sun Aug 18 15:47:45 2024 +0100 Added icon blade Signed-off-by: snipe <[email protected]> commita102c085df
Author: snipe <[email protected]> Date: Sun Aug 18 15:47:37 2024 +0100 Added icon helper Signed-off-by: snipe <[email protected]> commite8a22f3c5b
Merge:d843cf8dc
cb40a82e7
Author: snipe <[email protected]> Date: Sun Aug 18 04:55:04 2024 +0100 Merge remote-tracking branch 'origin/develop' commitcb40a82e79
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 commit4253acad4c
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]> commitd843cf8dcc
Merge:1013dcae6
7e6ff3cbe
Author: snipe <[email protected]> Date: Sat Aug 17 00:52:10 2024 +0100 Merge remote-tracking branch 'origin/develop' commit1013dcae61
Merge:c30c649aa
e7ef3bf51
Author: snipe <[email protected]> Date: Sat Aug 17 00:38:44 2024 +0100 Merge remote-tracking branch 'origin/develop' commit70e5e0f9df
Author: spencerrlongg <[email protected]> Date: Fri Aug 16 12:52:06 2024 -0500 get rid of dd commitdec4691c73
Author: spencerrlongg <[email protected]> Date: Fri Aug 16 12:50:09 2024 -0500 should be good to go now commitc30c649aaa
Merge:bb1385369
ad6d09b6a
Author: snipe <[email protected]> Date: Fri Aug 16 16:44:02 2024 +0100 Merge remote-tracking branch 'origin/develop' commitbb1385369c
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 commitc1caf6088e
Author: snipe <[email protected]> Date: Fri Aug 16 13:12:13 2024 +0100 Prod assets Signed-off-by: snipe <[email protected]> commit12dfe71ea8
Merge:ca8926871
ea2b1b074
Author: snipe <[email protected]> Date: Fri Aug 16 12:48:42 2024 +0100 Merge remote-tracking branch 'origin/develop' commitca89268716
Merge:ec5731353
3167ee91d
Author: snipe <[email protected]> Date: Fri Aug 16 11:02:56 2024 +0100 Merge remote-tracking branch 'origin/develop' commit94d8a547b8
Merge:6521c0252
b39a7c6f0
Author: Marcus Moore <[email protected]> Date: Thu Aug 15 13:47:49 2024 -0700 Merge branch 'develop' into livewire-importer-improvements commit43b109fac0
Author: Marcus Moore <[email protected]> Date: Thu Aug 15 13:20:22 2024 -0700 Use cached values for textarea and radio input commit75c1e7658f
Author: Marcus Moore <[email protected]> Date: Thu Aug 15 10:43:41 2024 -0700 Improve method name commite7c9c799bb
Author: Marcus Moore <[email protected]> Date: Thu Aug 15 10:40:23 2024 -0700 Add wire:keys commit6ab976f353
Author: Marcus Moore <[email protected]> Date: Thu Aug 15 10:32:33 2024 -0700 Use cached values for text input commitec5731353a
Merge:3283704fe
b39a7c6f0
Author: snipe <[email protected]> Date: Thu Aug 15 15:53:52 2024 +0100 Merge remote-tracking branch 'origin/develop' commit3283704fe8
Author: snipe <[email protected]> Date: Thu Aug 15 12:25:08 2024 +0100 Updated assets Signed-off-by: snipe <[email protected]> commit540df32046
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 commit85486fa58c
Merge:3618df2ec
10dc1f136
Author: snipe <[email protected]> Date: Thu Aug 15 10:53:54 2024 +0100 Merge remote-tracking branch 'origin/develop' commit3618df2ec5
Merge:a201f22fd
8f7bce7aa
Author: snipe <[email protected]> Date: Thu Aug 15 10:44:39 2024 +0100 Merge remote-tracking branch 'origin/develop' commita201f22fdb
Author: snipe <[email protected]> Date: Thu Aug 15 10:36:12 2024 +0100 Bumped version Signed-off-by: snipe <[email protected]> commit6070d530cf
Merge:6c0cf9447
4d66f7c93
Author: snipe <[email protected]> Date: Thu Aug 15 10:35:33 2024 +0100 Merge remote-tracking branch 'origin/develop' commit6c0cf94473
Merge:bf4b91516
381003eea
Author: snipe <[email protected]> Date: Thu Aug 15 10:28:08 2024 +0100 Merge remote-tracking branch 'origin/develop' commit9622e05cf5
Author: spencerrlongg <[email protected]> Date: Wed Aug 14 18:41:06 2024 -0500 correct api test commitafaf53cdfc
Author: spencerrlongg <[email protected]> Date: Wed Aug 14 18:14:21 2024 -0500 failing ui test commitf031309f8f
Author: spencerrlongg <[email protected]> Date: Wed Aug 14 16:09:15 2024 -0500 set up api controller for route/model binding commit20ec420ba3
Author: spencerrlongg <[email protected]> Date: Wed Aug 14 13:53:29 2024 -0500 not quite done, api side needs some work commitab63a19aff
Author: Marcus Moore <[email protected]> Date: Wed Aug 14 11:01:51 2024 -0700 Initialize concept of cached values commita70b94e707
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 commit008bf036b5
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 commitcc5ad456e6
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 commitbf4b915168
Merge:0a9c2e354
0f1e5181a
Author: snipe <[email protected]> Date: Wed Aug 14 10:45:13 2024 +0100 Merge remote-tracking branch 'origin/develop' commit0a9c2e354f
Merge:47f1b3b14
e54400718
Author: snipe <[email protected]> Date: Wed Aug 14 10:02:43 2024 +0100 Merge remote-tracking branch 'origin/develop' commit038e86954b
Author: Marcus Moore <[email protected]> Date: Tue Aug 13 17:30:53 2024 -0700 Improve property name commitf6c1642bf2
Author: Marcus Moore <[email protected]> Date: Tue Aug 13 17:01:35 2024 -0700 Use computed fields in CustomFieldSetDefaultValuesForModel component commit120cfd13c5
Author: spencerrlongg <[email protected]> Date: Tue Aug 13 14:07:40 2024 -0500 translation commit09f2739298
Author: spencerrlongg <[email protected]> Date: Tue Aug 13 13:45:41 2024 -0500 works, un-reassignable licenses are an issue commit47f1b3b14e
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 commit198b76ebc2
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 commit5546f9676a
Merge:46caa478d
9e73eaf95
Author: snipe <[email protected]> Date: Tue Aug 13 13:51:33 2024 +0100 Merge remote-tracking branch 'origin/develop' commitec863df007
Author: spencerrlongg <[email protected]> Date: Mon Aug 12 16:58:53 2024 -0500 rm conditional that might be unnecessary commitcc3b8e0681
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 commitff145abbe7
Author: spencerrlongg <[email protected]> Date: Mon Aug 12 16:13:03 2024 -0500 use array for eager loading, makes ide prettier commit46caa478d2
Merge:4d8569e75
e6106aa7c
Author: snipe <[email protected]> Date: Mon Aug 12 20:47:45 2024 +0100 Merge remote-tracking branch 'origin/develop' commit4d8569e754
Merge:4dc57f95e
c9f8a84d4
Author: snipe <[email protected]> Date: Mon Aug 12 18:01:21 2024 +0100 Merge remote-tracking branch 'origin/develop' commit4dc57f95e2
Merge:316ee6f81
9d354ca65
Author: snipe <[email protected]> Date: Mon Aug 12 16:38:23 2024 +0100 Merge remote-tracking branch 'origin/develop' commit316ee6f810
Merge:509cc812e
3f2139349
Author: snipe <[email protected]> Date: Mon Aug 12 16:30:53 2024 +0100 Merge remote-tracking branch 'origin/develop' commit509cc812ea
Merge:d5f66bc0d
e7fb29fce
Author: snipe <[email protected]> Date: Mon Aug 12 15:58:40 2024 +0100 Merge remote-tracking branch 'origin/develop' commitd5f66bc0dd
Merge:1e213c31e
ce5be8ac2
Author: snipe <[email protected]> Date: Mon Aug 12 10:10:59 2024 +0100 Merge remote-tracking branch 'origin/develop' commit1e213c31ef
Merge:91874dfe0
1777bb4b9
Author: snipe <[email protected]> Date: Sun Aug 11 10:26:16 2024 +0100 Merge remote-tracking branch 'origin/develop' commit91874dfe0b
Merge:0e6eda5e8
5c6c655cd
Author: snipe <[email protected]> Date: Sat Aug 10 19:37:37 2024 +0100 Merge remote-tracking branch 'origin/develop' commit0e6eda5e8a
Merge:24560b936
60eb60215
Author: snipe <[email protected]> Date: Sat Aug 10 18:29:41 2024 +0100 Merge remote-tracking branch 'origin/develop' commit24560b9362
Author: snipe <[email protected]> Date: Sat Aug 10 18:24:49 2024 +0100 Updated prod assets Signed-off-by: snipe <[email protected]> commit6521c02526
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 commitbb465dbfaa
Author: Brady Wetherington <[email protected]> Date: Wed Jul 24 15:09:23 2024 +0100 Cut down run number to 100 from 1000 commit8cbcc237c0
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 commit97e3af8fc9
Author: Brady Wetherington <[email protected]> Date: Sat Jun 29 00:59:47 2024 +0100 WIP on new GitHub-backed stalebot settings commit914e29210a
Author: Brady Wetherington <[email protected]> Date: Wed Jun 26 18:53:01 2024 +0100 Initial rough stab at re-implementing stalebot commit8d1cc22c58
Author: Marcus Moore <[email protected]> Date: Thu Jul 18 12:00:01 2024 -0700 Turn on legacy binding since other components still use it commit7685de45f2
Author: Marcus Moore <[email protected]> Date: Wed Jul 17 17:12:14 2024 -0700 Turn off legacy binding commit199e68ff29
Author: Marcus Moore <[email protected]> Date: Wed Jul 17 17:10:12 2024 -0700 Simplify computed propery commit81bffccf01
Author: Marcus Moore <[email protected]> Date: Wed Jul 17 16:28:26 2024 -0700 Use better error message commitcfca1514c0
Author: Marcus Moore <[email protected]> Date: Wed Jul 17 16:22:44 2024 -0700 Swap file_id for activeFileId commitb4ed01243b
Author: Marcus Moore <[email protected]> Date: Wed Jul 17 13:40:41 2024 -0700 Add more details commit3772a21a51
Author: Marcus Moore <[email protected]> Date: Wed Jul 17 13:37:24 2024 -0700 Move comment up commit04b6cb763f
Author: Marcus Moore <[email protected]> Date: Wed Jul 17 10:58:48 2024 -0700 Add todo commitdd32341502
Author: Marcus Moore <[email protected]> Date: Tue Jul 16 17:21:18 2024 -0700 Display message if attempting to delete non-existent file commitf58e3114a2
Author: Marcus Moore <[email protected]> Date: Tue Jul 16 17:17:45 2024 -0700 Simplify destroy method and update list commiteba494ad8c
Author: Marcus Moore <[email protected]> Date: Tue Jul 16 17:03:42 2024 -0700 Make $activeFile a computed property commit7e89b58746
Author: Marcus Moore <[email protected]> Date: Tue Jul 16 16:08:42 2024 -0700 Move files to computed property commitb7744105a0
Author: Marcus Moore <[email protected]> Date: Tue Jul 16 14:20:41 2024 -0700 Migrate import type to component commit69263f0e5b
Author: Marcus Moore <[email protected]> Date: Tue Jul 16 13:30:29 2024 -0700 Migrate header row to component commit017530ba4b
Author: Marcus Moore <[email protected]> Date: Tue Jul 16 12:02:50 2024 -0700 Make updating hook more specific commitc8dad528a8
Author: Marcus Moore <[email protected]> Date: Mon Jul 15 16:15:58 2024 -0700 Migrate a couple items out of mount commit256e989ba1
Author: Marcus Moore <[email protected]> Date: Mon Jul 15 15:49:18 2024 -0700 Add test for importer commit9793016603
Author: Marcus Moore <[email protected]> Date: Thu Jul 11 13:32:16 2024 -0700 Remove unneeded AuthorizesRequests commit9e06f2d17f
Author: Marcus Moore <[email protected]> Date: Thu Jul 11 13:22:10 2024 -0700 Remove commented code commitd4d19569ee
Author: Godfrey M <[email protected]> Date: Thu Jul 11 10:52:47 2024 -0700 adds execution timer commit43c7504f89
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 commit1fa6a763bc
Author: Godfrey M <[email protected]> Date: Wed Jul 10 11:09:57 2024 -0700 updated description commit726308bfd5
Author: Godfrey M <[email protected]> Date: Wed Jul 10 10:58:45 2024 -0700 removed typo commit22ddb695f2
Author: Godfrey M <[email protected]> Date: Wed Jul 10 10:57:47 2024 -0700 better description commit09b2feac54
Author: Godfrey M <[email protected]> Date: Wed Jul 10 10:56:44 2024 -0700 updates assets with selected model to inherit asset model eol commit57e1df86c8
Author: Godfrey M <[email protected]> Date: Wed Jul 10 10:21:24 2024 -0700 finds model and collects assets with such model commit3ea5d4ee40
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 commit5fa0c87ab0
Author: Godfrey M <[email protected]> Date: Tue Apr 30 12:02:11 2024 -0700 null debugbar commit75aa01791a
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 commit697595d963
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 commit0bdd8a5917
Author: akemidx <[email protected]> Date: Wed Aug 2 16:40:38 2023 -0400 fixing key names commite35dd2daa1
Author: akemidx <[email protected]> Date: Wed Jul 26 17:45:18 2023 -0400 asset_eol_date stuff commitf71b69a739
Author: akemidx <[email protected]> Date: Wed Jul 26 17:31:06 2023 -0400 adding eol fields commit499a3debcd
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]>
8 lines
558 KiB
Plaintext
8 lines
558 KiB
Plaintext
{
|
|
"version": 3,
|
|
"sources": ["../node_modules/nprogress/nprogress.js", "../js/utils.js", "../js/features/supportFileUploads.js", "../../alpine/packages/alpinejs/dist/module.esm.js", "../js/features/supportEntangle.js", "../js/hooks.js", "../js/request/modal.js", "../js/request/pool.js", "../js/request/commit.js", "../js/request/bus.js", "../js/request/index.js", "../js/$wire.js", "../js/component.js", "../js/store.js", "../js/events.js", "../js/directives.js", "../../../../../usr/local/lib/node_modules/@alpinejs/collapse/dist/module.esm.js", "../../../../../usr/local/lib/node_modules/@alpinejs/focus/dist/module.esm.js", "../../../../../usr/local/lib/node_modules/@alpinejs/persist/dist/module.esm.js", "../../../../../usr/local/lib/node_modules/@alpinejs/intersect/dist/module.esm.js", "../node_modules/@alpinejs/resize/dist/module.esm.js", "../../alpine/packages/anchor/dist/module.esm.js", "../js/plugins/navigate/history.js", "../js/plugins/navigate/links.js", "../js/plugins/navigate/fetch.js", "../js/plugins/navigate/prefetch.js", "../js/plugins/navigate/teleport.js", "../js/plugins/navigate/scroll.js", "../js/plugins/navigate/persist.js", "../js/plugins/navigate/bar.js", "../js/plugins/navigate/popover.js", "../js/plugins/navigate/page.js", "../js/plugins/navigate/index.js", "../js/plugins/history/index.js", "../../alpine/packages/morph/dist/module.esm.js", "../../../../../usr/local/lib/node_modules/@alpinejs/mask/dist/module.esm.js", "../js/lifecycle.js", "../js/features/supportListeners.js", "../js/features/supportScriptsAndAssets.js", "../js/features/supportJsEvaluation.js", "../js/morph.js", "../js/features/supportMorphDom.js", "../js/features/supportDispatches.js", "../js/features/supportDisablingFormsDuringRequest.js", "../js/features/supportPropsAndModelables.js", "../js/features/supportFileDownloads.js", "../js/features/supportLazyLoading.js", "../js/features/supportQueryString.js", "../js/features/supportLaravelEcho.js", "../js/features/supportIsolating.js", "../js/features/supportNavigate.js", "../js/features/supportRedirects.js", "../js/directives/wire-transition.js", "../js/debounce.js", "../js/directives/wire-wildcard.js", "../js/directives/wire-navigate.js", "../js/directives/wire-confirm.js", "../js/directives/shared.js", "../js/directives/wire-offline.js", "../js/directives/wire-loading.js", "../js/directives/wire-stream.js", "../js/directives/wire-replace.js", "../js/directives/wire-ignore.js", "../js/directives/wire-dirty.js", "../js/directives/wire-model.js", "../js/directives/wire-init.js", "../js/directives/wire-poll.js", "../js/index.js"],
|
|
"sourcesContent": ["/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress\n * @license MIT */\n\n;(function(root, factory) {\n\n if (typeof define === 'function' && define.amd) {\n define(factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.NProgress = factory();\n }\n\n})(this, function() {\n var NProgress = {};\n\n NProgress.version = '0.2.0';\n\n var Settings = NProgress.settings = {\n minimum: 0.08,\n easing: 'ease',\n positionUsing: '',\n speed: 200,\n trickle: true,\n trickleRate: 0.02,\n trickleSpeed: 800,\n showSpinner: true,\n barSelector: '[role=\"bar\"]',\n spinnerSelector: '[role=\"spinner\"]',\n parent: 'body',\n template: '<div class=\"bar\" role=\"bar\"><div class=\"peg\"></div></div><div class=\"spinner\" role=\"spinner\"><div class=\"spinner-icon\"></div></div>'\n };\n\n /**\n * Updates configuration.\n *\n * NProgress.configure({\n * minimum: 0.1\n * });\n */\n NProgress.configure = function(options) {\n var key, value;\n for (key in options) {\n value = options[key];\n if (value !== undefined && options.hasOwnProperty(key)) Settings[key] = value;\n }\n\n return this;\n };\n\n /**\n * Last number.\n */\n\n NProgress.status = null;\n\n /**\n * Sets the progress bar status, where `n` is a number from `0.0` to `1.0`.\n *\n * NProgress.set(0.4);\n * NProgress.set(1.0);\n */\n\n NProgress.set = function(n) {\n var started = NProgress.isStarted();\n\n n = clamp(n, Settings.minimum, 1);\n NProgress.status = (n === 1 ? null : n);\n\n var progress = NProgress.render(!started),\n bar = progress.querySelector(Settings.barSelector),\n speed = Settings.speed,\n ease = Settings.easing;\n\n progress.offsetWidth; /* Repaint */\n\n queue(function(next) {\n // Set positionUsing if it hasn't already been set\n if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS();\n\n // Add transition\n css(bar, barPositionCSS(n, speed, ease));\n\n if (n === 1) {\n // Fade out\n css(progress, { \n transition: 'none', \n opacity: 1 \n });\n progress.offsetWidth; /* Repaint */\n\n setTimeout(function() {\n css(progress, { \n transition: 'all ' + speed + 'ms linear', \n opacity: 0 \n });\n setTimeout(function() {\n NProgress.remove();\n next();\n }, speed);\n }, speed);\n } else {\n setTimeout(next, speed);\n }\n });\n\n return this;\n };\n\n NProgress.isStarted = function() {\n return typeof NProgress.status === 'number';\n };\n\n /**\n * Shows the progress bar.\n * This is the same as setting the status to 0%, except that it doesn't go backwards.\n *\n * NProgress.start();\n *\n */\n NProgress.start = function() {\n if (!NProgress.status) NProgress.set(0);\n\n var work = function() {\n setTimeout(function() {\n if (!NProgress.status) return;\n NProgress.trickle();\n work();\n }, Settings.trickleSpeed);\n };\n\n if (Settings.trickle) work();\n\n return this;\n };\n\n /**\n * Hides the progress bar.\n * This is the *sort of* the same as setting the status to 100%, with the\n * difference being `done()` makes some placebo effect of some realistic motion.\n *\n * NProgress.done();\n *\n * If `true` is passed, it will show the progress bar even if its hidden.\n *\n * NProgress.done(true);\n */\n\n NProgress.done = function(force) {\n if (!force && !NProgress.status) return this;\n\n return NProgress.inc(0.3 + 0.5 * Math.random()).set(1);\n };\n\n /**\n * Increments by a random amount.\n */\n\n NProgress.inc = function(amount) {\n var n = NProgress.status;\n\n if (!n) {\n return NProgress.start();\n } else {\n if (typeof amount !== 'number') {\n amount = (1 - n) * clamp(Math.random() * n, 0.1, 0.95);\n }\n\n n = clamp(n + amount, 0, 0.994);\n return NProgress.set(n);\n }\n };\n\n NProgress.trickle = function() {\n return NProgress.inc(Math.random() * Settings.trickleRate);\n };\n\n /**\n * Waits for all supplied jQuery promises and\n * increases the progress as the promises resolve.\n *\n * @param $promise jQUery Promise\n */\n (function() {\n var initial = 0, current = 0;\n\n NProgress.promise = function($promise) {\n if (!$promise || $promise.state() === \"resolved\") {\n return this;\n }\n\n if (current === 0) {\n NProgress.start();\n }\n\n initial++;\n current++;\n\n $promise.always(function() {\n current--;\n if (current === 0) {\n initial = 0;\n NProgress.done();\n } else {\n NProgress.set((initial - current) / initial);\n }\n });\n\n return this;\n };\n\n })();\n\n /**\n * (Internal) renders the progress bar markup based on the `template`\n * setting.\n */\n\n NProgress.render = function(fromStart) {\n if (NProgress.isRendered()) return document.getElementById('nprogress');\n\n addClass(document.documentElement, 'nprogress-busy');\n \n var progress = document.createElement('div');\n progress.id = 'nprogress';\n progress.innerHTML = Settings.template;\n\n var bar = progress.querySelector(Settings.barSelector),\n perc = fromStart ? '-100' : toBarPerc(NProgress.status || 0),\n parent = document.querySelector(Settings.parent),\n spinner;\n \n css(bar, {\n transition: 'all 0 linear',\n transform: 'translate3d(' + perc + '%,0,0)'\n });\n\n if (!Settings.showSpinner) {\n spinner = progress.querySelector(Settings.spinnerSelector);\n spinner && removeElement(spinner);\n }\n\n if (parent != document.body) {\n addClass(parent, 'nprogress-custom-parent');\n }\n\n parent.appendChild(progress);\n return progress;\n };\n\n /**\n * Removes the element. Opposite of render().\n */\n\n NProgress.remove = function() {\n removeClass(document.documentElement, 'nprogress-busy');\n removeClass(document.querySelector(Settings.parent), 'nprogress-custom-parent');\n var progress = document.getElementById('nprogress');\n progress && removeElement(progress);\n };\n\n /**\n * Checks if the progress bar is rendered.\n */\n\n NProgress.isRendered = function() {\n return !!document.getElementById('nprogress');\n };\n\n /**\n * Determine which positioning CSS rule to use.\n */\n\n NProgress.getPositioningCSS = function() {\n // Sniff on document.body.style\n var bodyStyle = document.body.style;\n\n // Sniff prefixes\n var vendorPrefix = ('WebkitTransform' in bodyStyle) ? 'Webkit' :\n ('MozTransform' in bodyStyle) ? 'Moz' :\n ('msTransform' in bodyStyle) ? 'ms' :\n ('OTransform' in bodyStyle) ? 'O' : '';\n\n if (vendorPrefix + 'Perspective' in bodyStyle) {\n // Modern browsers with 3D support, e.g. Webkit, IE10\n return 'translate3d';\n } else if (vendorPrefix + 'Transform' in bodyStyle) {\n // Browsers without 3D support, e.g. IE9\n return 'translate';\n } else {\n // Browsers without translate() support, e.g. IE7-8\n return 'margin';\n }\n };\n\n /**\n * Helpers\n */\n\n function clamp(n, min, max) {\n if (n < min) return min;\n if (n > max) return max;\n return n;\n }\n\n /**\n * (Internal) converts a percentage (`0..1`) to a bar translateX\n * percentage (`-100%..0%`).\n */\n\n function toBarPerc(n) {\n return (-1 + n) * 100;\n }\n\n\n /**\n * (Internal) returns the correct CSS for changing the bar's\n * position given an n percentage, and speed and ease from Settings\n */\n\n function barPositionCSS(n, speed, ease) {\n var barCSS;\n\n if (Settings.positionUsing === 'translate3d') {\n barCSS = { transform: 'translate3d('+toBarPerc(n)+'%,0,0)' };\n } else if (Settings.positionUsing === 'translate') {\n barCSS = { transform: 'translate('+toBarPerc(n)+'%,0)' };\n } else {\n barCSS = { 'margin-left': toBarPerc(n)+'%' };\n }\n\n barCSS.transition = 'all '+speed+'ms '+ease;\n\n return barCSS;\n }\n\n /**\n * (Internal) Queues a function to be executed.\n */\n\n var queue = (function() {\n var pending = [];\n \n function next() {\n var fn = pending.shift();\n if (fn) {\n fn(next);\n }\n }\n\n return function(fn) {\n pending.push(fn);\n if (pending.length == 1) next();\n };\n })();\n\n /**\n * (Internal) Applies css properties to an element, similar to the jQuery \n * css method.\n *\n * While this helper does assist with vendor prefixed property names, it \n * does not perform any manipulation of values prior to setting styles.\n */\n\n var css = (function() {\n var cssPrefixes = [ 'Webkit', 'O', 'Moz', 'ms' ],\n cssProps = {};\n\n function camelCase(string) {\n return string.replace(/^-ms-/, 'ms-').replace(/-([\\da-z])/gi, function(match, letter) {\n return letter.toUpperCase();\n });\n }\n\n function getVendorProp(name) {\n var style = document.body.style;\n if (name in style) return name;\n\n var i = cssPrefixes.length,\n capName = name.charAt(0).toUpperCase() + name.slice(1),\n vendorName;\n while (i--) {\n vendorName = cssPrefixes[i] + capName;\n if (vendorName in style) return vendorName;\n }\n\n return name;\n }\n\n function getStyleProp(name) {\n name = camelCase(name);\n return cssProps[name] || (cssProps[name] = getVendorProp(name));\n }\n\n function applyCss(element, prop, value) {\n prop = getStyleProp(prop);\n element.style[prop] = value;\n }\n\n return function(element, properties) {\n var args = arguments,\n prop, \n value;\n\n if (args.length == 2) {\n for (prop in properties) {\n value = properties[prop];\n if (value !== undefined && properties.hasOwnProperty(prop)) applyCss(element, prop, value);\n }\n } else {\n applyCss(element, args[1], args[2]);\n }\n }\n })();\n\n /**\n * (Internal) Determines if an element or space separated list of class names contains a class name.\n */\n\n function hasClass(element, name) {\n var list = typeof element == 'string' ? element : classList(element);\n return list.indexOf(' ' + name + ' ') >= 0;\n }\n\n /**\n * (Internal) Adds a class to an element.\n */\n\n function addClass(element, name) {\n var oldList = classList(element),\n newList = oldList + name;\n\n if (hasClass(oldList, name)) return; \n\n // Trim the opening space.\n element.className = newList.substring(1);\n }\n\n /**\n * (Internal) Removes a class from an element.\n */\n\n function removeClass(element, name) {\n var oldList = classList(element),\n newList;\n\n if (!hasClass(element, name)) return;\n\n // Replace the class name.\n newList = oldList.replace(' ' + name + ' ', ' ');\n\n // Trim the opening and closing spaces.\n element.className = newList.substring(1, newList.length - 1);\n }\n\n /**\n * (Internal) Gets a space separated list of the class names on the element. \n * The list is wrapped with a single space on each end to facilitate finding \n * matches within the list.\n */\n\n function classList(element) {\n return (' ' + (element.className || '') + ' ').replace(/\\s+/gi, ' ');\n }\n\n /**\n * (Internal) Removes an element from the DOM.\n */\n\n function removeElement(element) {\n element && element.parentNode && element.parentNode.removeChild(element);\n }\n\n return NProgress;\n});\n\n", "\nexport class Bag {\n constructor() { this.arrays = {} }\n\n add(key, value) {\n if (! this.arrays[key]) this.arrays[key] = []\n this.arrays[key].push(value)\n }\n\n remove(key) {\n if (this.arrays[key]) delete this.arrays[key]\n }\n\n get(key) { return this.arrays[key] || [] }\n\n each(key, callback) { return this.get(key).forEach(callback) }\n}\n\nexport class WeakBag {\n constructor() { this.arrays = new WeakMap }\n\n add(key, value) {\n if (! this.arrays.has(key)) this.arrays.set(key, [])\n this.arrays.get(key).push(value)\n }\n\n remove(key) {\n if (this.arrays.has(key)) this.arrays.delete(key, [])\n }\n\n get(key) { return this.arrays.has(key) ? this.arrays.get(key) : [] }\n\n each(key, callback) { return this.get(key).forEach(callback) }\n}\n\nexport function dispatch(target, name, detail = {}, bubbles = true) {\n target.dispatchEvent(\n new CustomEvent(name, {\n detail,\n bubbles,\n // Allows events to pass the shadow DOM barrier.\n composed: true,\n cancelable: true,\n })\n )\n}\n\nexport function listen(target, name, handler) {\n target.addEventListener(name, handler)\n\n return () => target.removeEventListener(name, handler)\n}\n\n/**\n * Type-checking in JS is weird and annoying, these are better.\n */\nexport function isObjecty(subject) { return (typeof subject === 'object' && subject !== null) }\nexport function isObject(subject) { return (isObjecty(subject) && ! isArray(subject)) }\nexport function isArray(subject) { return Array.isArray(subject) }\nexport function isFunction(subject) { return typeof subject === 'function' }\nexport function isPrimitive(subject) { return typeof subject !== 'object' || subject === null }\n\n/**\n * Clone an object deeply to wipe out any shared references.\n */\nexport function deepClone(obj) { return JSON.parse(JSON.stringify(obj)) }\n\n/**\n * Determine if two objects take the exact same shape.\n */\nexport function deeplyEqual(a, b) { return JSON.stringify(a) === JSON.stringify(b) }\n\n/**\n * An easy way to loop through arrays and objects.\n */\nexport function each(subject, callback) {\n Object.entries(subject).forEach(([key, value]) => callback(key, value))\n}\n\n/**\n * Get a property from an object with support for dot-notation.\n */\nexport function dataGet(object, key) {\n if (key === '') return object\n\n return key.split('.').reduce((carry, i) => {\n if (carry === undefined) return undefined\n\n return carry[i]\n }, object)\n}\n\n/**\n * Set a property on an object with support for dot-notation.\n */\nexport function dataSet(object, key, value) {\n let segments = key.split('.')\n\n if (segments.length === 1) {\n return object[key] = value\n }\n\n let firstSegment = segments.shift()\n let restOfSegments = segments.join('.')\n\n if (object[firstSegment] === undefined) {\n object[firstSegment] = {}\n }\n\n dataSet(object[firstSegment], restOfSegments, value)\n}\n\n/**\n * Create a flat, dot-notated diff of two obejcts.\n */\nexport function diff(left, right, diffs = {}, path = '') {\n // Are they the same?\n if (left === right) return diffs\n\n // Are they COMPLETELY different?\n if (typeof left !== typeof right || (isObject(left) && isArray(right)) || (isArray(left) && isObject(right))) {\n diffs[path] = right;\n return diffs\n }\n\n // Is the right or left side a primitive value (a leaf node)?\n if (isPrimitive(left) || isPrimitive(right)) {\n diffs[path] = right\n return diffs\n }\n\n // We now know both are objects...\n let leftKeys = Object.keys(left)\n\n // Recursively diff the object's properties...\n Object.entries(right).forEach(([key, value]) => {\n diffs = {...diffs, ...diff(left[key], right[key], diffs, path === '' ? key : `${path}.${key}`)}\n leftKeys = leftKeys.filter(i => i !== key)\n })\n\n // Mark any items for removal...\n leftKeys.forEach(key => {\n diffs[`${path}.${key}`] = '__rm__'\n })\n\n return diffs\n}\n\n/**\n * The data that's passed between the browser and server is in the form of\n * nested tuples consisting of the schema: [rawValue, metadata]. In this\n * method we're extracting the plain JS object of only the raw values.\n */\nexport function extractData(payload) {\n let value = isSynthetic(payload) ? payload[0] : payload\n let meta = isSynthetic(payload) ? payload[1] : undefined\n\n if (isObjecty(value)) {\n Object.entries(value).forEach(([key, iValue]) => {\n value[key] = extractData(iValue)\n })\n }\n\n return value\n}\n\n/**\n * Determine if the variable passed in is a node in a nested metadata\n * tuple tree. (Meaning it takes the form of: [rawData, metadata])\n */\nexport function isSynthetic(subject) {\n return Array.isArray(subject)\n && subject.length === 2\n && typeof subject[1] === 'object'\n && Object.keys(subject[1]).includes('s')\n}\n\n/**\n * Post requests in Laravel require a csrf token to be passed\n * along with the payload. Here, we'll try and locate one.\n */\nexport function getCsrfToken() {\n // Purposely not caching. Fetching it fresh every time ensures we're\n // not depending on a stale session's CSRF token...\n\n if (document.querySelector('meta[name=\"csrf-token\"]')) {\n return document.querySelector('meta[name=\"csrf-token\"]').getAttribute('content')\n }\n\n if (document.querySelector('[data-csrf]')) {\n return document.querySelector('[data-csrf]').getAttribute('data-csrf')\n }\n\n if (window.livewireScriptConfig['csrf'] ?? false) {\n return window.livewireScriptConfig['csrf']\n }\n\n throw 'Livewire: No CSRF token detected'\n}\n\nlet nonce;\n\nexport function getNonce() {\n if (nonce) return nonce\n\n\n if (window.livewireScriptConfig && (window.livewireScriptConfig['nonce'] ?? false)) {\n nonce = window.livewireScriptConfig['nonce']\n\n return nonce\n }\n\n const elWithNonce = document.querySelector('style[data-livewire-style][nonce]')\n\n if (elWithNonce) {\n nonce = elWithNonce.nonce\n\n return nonce\n }\n\n return null\n}\n\n/**\n * Livewire's update URI. This is configurable via Livewire::setUpdateRoute(...)\n */\nexport function getUpdateUri() {\n return document.querySelector('[data-update-uri]')?.getAttribute('data-update-uri') ?? window.livewireScriptConfig['uri'] ?? null\n}\n\nexport function contentIsFromDump(content) {\n return !! content.match(/<script>Sfdump\\(\".+\"\\)<\\/script>/)\n}\n\nexport function splitDumpFromContent(content) {\n let dump = content.match(/.*<script>Sfdump\\(\".+\"\\)<\\/script>/s)\n\n return [dump, content.replace(dump, '')]\n}\n", "import { getCsrfToken } from '@/utils';\n\nlet uploadManagers = new WeakMap\n\nfunction getUploadManager(component) {\n if (! uploadManagers.has(component)) {\n let manager = new UploadManager(component)\n\n uploadManagers.set(component, manager)\n\n manager.registerListeners()\n }\n\n return uploadManagers.get(component)\n}\n\nexport function handleFileUpload(el, property, component, cleanup) {\n let manager = getUploadManager(component)\n\n let start = () => el.dispatchEvent(new CustomEvent('livewire-upload-start', { bubbles: true, detail: { id: component.id, property} }))\n let finish = () => el.dispatchEvent(new CustomEvent('livewire-upload-finish', { bubbles: true, detail: { id: component.id, property} }))\n let error = () => el.dispatchEvent(new CustomEvent('livewire-upload-error', { bubbles: true, detail: { id: component.id, property} }))\n let cancel = () => el.dispatchEvent(new CustomEvent('livewire-upload-cancel', { bubbles: true, detail: { id: component.id, property} }))\n let progress = (progressEvent) => {\n var percentCompleted = Math.round( (progressEvent.loaded * 100) / progressEvent.total )\n\n el.dispatchEvent(\n new CustomEvent('livewire-upload-progress', {\n bubbles: true, detail: { progress: percentCompleted }\n })\n )\n }\n\n let eventHandler = e => {\n if (e.target.files.length === 0) return\n\n start()\n\n if (e.target.multiple) {\n manager.uploadMultiple(property, e.target.files, finish, error, progress, cancel)\n } else {\n manager.upload(property, e.target.files[0], finish, error, progress, cancel)\n }\n }\n\n el.addEventListener('change', eventHandler)\n\n // If the Livewire property has changed to null or an empty string, then reset the input...\n component.$wire.$watch(property, (value) => {\n // This watch will only be released when the component is removed. However, the\n // actual file-upload element may be removed from the DOM withou the entire\n // component being removed. In this case, let's just bail early on this.\n if (! el.isConnected) return\n\n if (value === null || value === '') {\n el.value = ''\n }\n })\n\n // There's a bug in browsers where selecting a file, removing it,\n // then re-adding it doesn't fire the change event. This fixes it.\n // Reference: https://stackoverflow.com/questions/12030686/html-input-file-selection-event-not-firing-upon-selecting-the-same-file\n let clearFileInputValue = () => { el.value = null }\n el.addEventListener('click', clearFileInputValue)\n\n // Clear the input if the uploaded is cancelled...\n el.addEventListener('livewire-upload-cancel', clearFileInputValue)\n\n cleanup(() => {\n el.removeEventListener('change', eventHandler)\n el.removeEventListener('click', clearFileInputValue)\n })\n}\n\nclass UploadManager {\n constructor(component) {\n this.component = component\n this.uploadBag = new MessageBag\n this.removeBag = new MessageBag\n }\n\n registerListeners() {\n this.component.$wire.$on('upload:generatedSignedUrl', ({ name, url }) => {\n // We have to add reduntant \"setLoading\" calls because the dom-patch\n // from the first response will clear the setUploadLoading call\n // from the first upload call.\n setUploadLoading(this.component, name)\n\n this.handleSignedUrl(name, url)\n })\n\n this.component.$wire.$on('upload:generatedSignedUrlForS3', ({ name, payload }) => {\n setUploadLoading(this.component, name)\n\n this.handleS3PreSignedUrl(name, payload)\n })\n\n this.component.$wire.$on('upload:finished', ({ name, tmpFilenames }) => this.markUploadFinished(name, tmpFilenames))\n this.component.$wire.$on('upload:errored', ({ name }) => this.markUploadErrored(name))\n this.component.$wire.$on('upload:removed', ({ name, tmpFilename }) => this.removeBag.shift(name).finishCallback(tmpFilename))\n }\n\n upload(name, file, finishCallback, errorCallback, progressCallback, cancelledCallback) {\n this.setUpload(name, {\n files: [file],\n multiple: false,\n finishCallback,\n errorCallback,\n progressCallback,\n cancelledCallback,\n })\n }\n\n uploadMultiple(name, files, finishCallback, errorCallback, progressCallback, cancelledCallback) {\n this.setUpload(name, {\n files: Array.from(files),\n multiple: true,\n finishCallback,\n errorCallback,\n progressCallback,\n cancelledCallback,\n })\n }\n\n removeUpload(name, tmpFilename, finishCallback) {\n this.removeBag.push(name, {\n tmpFilename, finishCallback\n })\n\n this.component.$wire.call('_removeUpload', name, tmpFilename);\n }\n\n setUpload(name, uploadObject) {\n this.uploadBag.add(name, uploadObject)\n\n if (this.uploadBag.get(name).length === 1) {\n this.startUpload(name, uploadObject)\n }\n }\n\n handleSignedUrl(name, url) {\n let formData = new FormData()\n Array.from(this.uploadBag.first(name).files).forEach(file => formData.append('files[]', file, file.name))\n\n let headers = {\n 'Accept': 'application/json',\n }\n\n let csrfToken = getCsrfToken()\n\n if (csrfToken) headers['X-CSRF-TOKEN'] = csrfToken\n\n this.makeRequest(name, formData, 'post', url, headers, response => {\n return response.paths\n })\n }\n\n handleS3PreSignedUrl(name, payload) {\n let formData = this.uploadBag.first(name).files[0]\n\n let headers = payload.headers\n if ('Host' in headers) delete headers.Host\n let url = payload.url\n\n this.makeRequest(name, formData, 'put', url, headers, response => {\n return [payload.path]\n })\n }\n\n makeRequest(name, formData, method, url, headers, retrievePaths) {\n let request = new XMLHttpRequest()\n\n request.open(method, url)\n\n Object.entries(headers).forEach(([key, value]) => {\n request.setRequestHeader(key, value)\n })\n\n request.upload.addEventListener('progress', e => {\n e.detail = {}\n e.detail.progress = Math.floor((e.loaded * 100) / e.total)\n\n this.uploadBag.first(name).progressCallback(e)\n })\n\n request.addEventListener('load', () => {\n if ((request.status+'')[0] === '2') {\n let paths = retrievePaths(request.response && JSON.parse(request.response))\n\n this.component.$wire.call('_finishUpload', name, paths, this.uploadBag.first(name).multiple)\n\n return\n }\n\n let errors = null\n\n if (request.status === 422) {\n errors = request.response\n }\n\n this.component.$wire.call('_uploadErrored', name, errors, this.uploadBag.first(name).multiple)\n })\n\n this.uploadBag.first(name).request = request\n\n request.send(formData)\n }\n\n startUpload(name, uploadObject) {\n let fileInfos = uploadObject.files.map(file => {\n return { name: file.name, size: file.size, type: file.type }\n })\n\n this.component.$wire.call('_startUpload', name, fileInfos, uploadObject.multiple);\n\n setUploadLoading(this.component, name)\n }\n\n markUploadFinished(name, tmpFilenames) {\n unsetUploadLoading(this.component)\n\n let uploadObject = this.uploadBag.shift(name)\n uploadObject.finishCallback(uploadObject.multiple ? tmpFilenames : tmpFilenames[0])\n\n if (this.uploadBag.get(name).length > 0) this.startUpload(name, this.uploadBag.last(name))\n }\n\n markUploadErrored(name) {\n unsetUploadLoading(this.component)\n\n this.uploadBag.shift(name).errorCallback()\n\n if (this.uploadBag.get(name).length > 0) this.startUpload(name, this.uploadBag.last(name))\n }\n\n cancelUpload(name, cancelledCallback = null) {\n unsetUploadLoading(this.component)\n\n let uploadItem = this.uploadBag.first(name);\n\n if (uploadItem) {\n if (uploadItem.request) {\n uploadItem.request.abort();\n }\n\n this.uploadBag.shift(name).cancelledCallback();\n\n if (cancelledCallback) cancelledCallback()\n }\n }\n}\n\nexport default class MessageBag {\n constructor() {\n this.bag = {}\n }\n\n add(name, thing) {\n if (! this.bag[name]) {\n this.bag[name] = []\n }\n\n this.bag[name].push(thing)\n }\n\n push(name, thing) {\n this.add(name, thing)\n }\n\n first(name) {\n if (! this.bag[name]) return null\n\n return this.bag[name][0]\n }\n\n last(name) {\n return this.bag[name].slice(-1)[0]\n }\n\n get(name) {\n return this.bag[name]\n }\n\n shift(name) {\n return this.bag[name].shift()\n }\n\n call(name, ...params) {\n (this.listeners[name] || []).forEach(callback => {\n callback(...params)\n })\n }\n\n has(name) {\n return Object.keys(this.listeners).includes(name)\n }\n}\n\nfunction setUploadLoading() {\n // @todo\n}\n\nfunction unsetUploadLoading() {\n // @todo\n}\n\nexport function upload(\n component,\n name,\n file,\n finishCallback = () => { },\n errorCallback = () => { },\n progressCallback = () => { },\n cancelledCallback = () => { },\n) {\n let uploadManager = getUploadManager(component)\n\n uploadManager.upload(\n name,\n file,\n finishCallback,\n errorCallback,\n progressCallback,\n cancelledCallback,\n )\n}\n\nexport function uploadMultiple(\n component,\n name,\n files,\n finishCallback = () => { },\n errorCallback = () => { },\n progressCallback = () => { },\n cancelledCallback = () => { },\n) {\n let uploadManager = getUploadManager(component)\n\n uploadManager.uploadMultiple(\n name,\n files,\n finishCallback,\n errorCallback,\n progressCallback,\n cancelledCallback,\n )\n}\n\nexport function removeUpload(\n component,\n name,\n tmpFilename,\n finishCallback = () => { },\n errorCallback = () => { }\n) {\n let uploadManager = getUploadManager(component)\n\n uploadManager.removeUpload(\n name,\n tmpFilename,\n finishCallback,\n errorCallback\n )\n}\n\nexport function cancelUpload(\n component,\n name,\n cancelledCallback = () => { }\n) {\n let uploadManager = getUploadManager(component)\n\n uploadManager.cancelUpload(\n name,\n cancelledCallback\n )\n}\n", "// packages/alpinejs/src/scheduler.js\nvar flushPending = false;\nvar flushing = false;\nvar queue = [];\nvar lastFlushedIndex = -1;\nfunction scheduler(callback) {\n queueJob(callback);\n}\nfunction queueJob(job) {\n if (!queue.includes(job))\n queue.push(job);\n queueFlush();\n}\nfunction dequeueJob(job) {\n let index = queue.indexOf(job);\n if (index !== -1 && index > lastFlushedIndex)\n queue.splice(index, 1);\n}\nfunction queueFlush() {\n if (!flushing && !flushPending) {\n flushPending = true;\n queueMicrotask(flushJobs);\n }\n}\nfunction flushJobs() {\n flushPending = false;\n flushing = true;\n for (let i = 0; i < queue.length; i++) {\n queue[i]();\n lastFlushedIndex = i;\n }\n queue.length = 0;\n lastFlushedIndex = -1;\n flushing = false;\n}\n\n// packages/alpinejs/src/reactivity.js\nvar reactive;\nvar effect;\nvar release;\nvar raw;\nvar shouldSchedule = true;\nfunction disableEffectScheduling(callback) {\n shouldSchedule = false;\n callback();\n shouldSchedule = true;\n}\nfunction setReactivityEngine(engine) {\n reactive = engine.reactive;\n release = engine.release;\n effect = (callback) => engine.effect(callback, { scheduler: (task) => {\n if (shouldSchedule) {\n scheduler(task);\n } else {\n task();\n }\n } });\n raw = engine.raw;\n}\nfunction overrideEffect(override) {\n effect = override;\n}\nfunction elementBoundEffect(el) {\n let cleanup2 = () => {\n };\n let wrappedEffect = (callback) => {\n let effectReference = effect(callback);\n if (!el._x_effects) {\n el._x_effects = /* @__PURE__ */ new Set();\n el._x_runEffects = () => {\n el._x_effects.forEach((i) => i());\n };\n }\n el._x_effects.add(effectReference);\n cleanup2 = () => {\n if (effectReference === void 0)\n return;\n el._x_effects.delete(effectReference);\n release(effectReference);\n };\n return effectReference;\n };\n return [wrappedEffect, () => {\n cleanup2();\n }];\n}\nfunction watch(getter, callback) {\n let firstTime = true;\n let oldValue;\n let effectReference = effect(() => {\n let value = getter();\n JSON.stringify(value);\n if (!firstTime) {\n queueMicrotask(() => {\n callback(value, oldValue);\n oldValue = value;\n });\n } else {\n oldValue = value;\n }\n firstTime = false;\n });\n return () => release(effectReference);\n}\n\n// packages/alpinejs/src/mutation.js\nvar onAttributeAddeds = [];\nvar onElRemoveds = [];\nvar onElAddeds = [];\nfunction onElAdded(callback) {\n onElAddeds.push(callback);\n}\nfunction onElRemoved(el, callback) {\n if (typeof callback === \"function\") {\n if (!el._x_cleanups)\n el._x_cleanups = [];\n el._x_cleanups.push(callback);\n } else {\n callback = el;\n onElRemoveds.push(callback);\n }\n}\nfunction onAttributesAdded(callback) {\n onAttributeAddeds.push(callback);\n}\nfunction onAttributeRemoved(el, name, callback) {\n if (!el._x_attributeCleanups)\n el._x_attributeCleanups = {};\n if (!el._x_attributeCleanups[name])\n el._x_attributeCleanups[name] = [];\n el._x_attributeCleanups[name].push(callback);\n}\nfunction cleanupAttributes(el, names) {\n if (!el._x_attributeCleanups)\n return;\n Object.entries(el._x_attributeCleanups).forEach(([name, value]) => {\n if (names === void 0 || names.includes(name)) {\n value.forEach((i) => i());\n delete el._x_attributeCleanups[name];\n }\n });\n}\nfunction cleanupElement(el) {\n el._x_effects?.forEach(dequeueJob);\n while (el._x_cleanups?.length)\n el._x_cleanups.pop()();\n}\nvar observer = new MutationObserver(onMutate);\nvar currentlyObserving = false;\nfunction startObservingMutations() {\n observer.observe(document, { subtree: true, childList: true, attributes: true, attributeOldValue: true });\n currentlyObserving = true;\n}\nfunction stopObservingMutations() {\n flushObserver();\n observer.disconnect();\n currentlyObserving = false;\n}\nvar queuedMutations = [];\nfunction flushObserver() {\n let records = observer.takeRecords();\n queuedMutations.push(() => records.length > 0 && onMutate(records));\n let queueLengthWhenTriggered = queuedMutations.length;\n queueMicrotask(() => {\n if (queuedMutations.length === queueLengthWhenTriggered) {\n while (queuedMutations.length > 0)\n queuedMutations.shift()();\n }\n });\n}\nfunction mutateDom(callback) {\n if (!currentlyObserving)\n return callback();\n stopObservingMutations();\n let result = callback();\n startObservingMutations();\n return result;\n}\nvar isCollecting = false;\nvar deferredMutations = [];\nfunction deferMutations() {\n isCollecting = true;\n}\nfunction flushAndStopDeferringMutations() {\n isCollecting = false;\n onMutate(deferredMutations);\n deferredMutations = [];\n}\nfunction onMutate(mutations) {\n if (isCollecting) {\n deferredMutations = deferredMutations.concat(mutations);\n return;\n }\n let addedNodes = /* @__PURE__ */ new Set();\n let removedNodes = /* @__PURE__ */ new Set();\n let addedAttributes = /* @__PURE__ */ new Map();\n let removedAttributes = /* @__PURE__ */ new Map();\n for (let i = 0; i < mutations.length; i++) {\n if (mutations[i].target._x_ignoreMutationObserver)\n continue;\n if (mutations[i].type === \"childList\") {\n mutations[i].addedNodes.forEach((node) => node.nodeType === 1 && addedNodes.add(node));\n mutations[i].removedNodes.forEach((node) => node.nodeType === 1 && removedNodes.add(node));\n }\n if (mutations[i].type === \"attributes\") {\n let el = mutations[i].target;\n let name = mutations[i].attributeName;\n let oldValue = mutations[i].oldValue;\n let add2 = () => {\n if (!addedAttributes.has(el))\n addedAttributes.set(el, []);\n addedAttributes.get(el).push({ name, value: el.getAttribute(name) });\n };\n let remove = () => {\n if (!removedAttributes.has(el))\n removedAttributes.set(el, []);\n removedAttributes.get(el).push(name);\n };\n if (el.hasAttribute(name) && oldValue === null) {\n add2();\n } else if (el.hasAttribute(name)) {\n remove();\n add2();\n } else {\n remove();\n }\n }\n }\n removedAttributes.forEach((attrs, el) => {\n cleanupAttributes(el, attrs);\n });\n addedAttributes.forEach((attrs, el) => {\n onAttributeAddeds.forEach((i) => i(el, attrs));\n });\n for (let node of removedNodes) {\n if (addedNodes.has(node))\n continue;\n onElRemoveds.forEach((i) => i(node));\n }\n addedNodes.forEach((node) => {\n node._x_ignoreSelf = true;\n node._x_ignore = true;\n });\n for (let node of addedNodes) {\n if (removedNodes.has(node))\n continue;\n if (!node.isConnected)\n continue;\n delete node._x_ignoreSelf;\n delete node._x_ignore;\n onElAddeds.forEach((i) => i(node));\n node._x_ignore = true;\n node._x_ignoreSelf = true;\n }\n addedNodes.forEach((node) => {\n delete node._x_ignoreSelf;\n delete node._x_ignore;\n });\n addedNodes = null;\n removedNodes = null;\n addedAttributes = null;\n removedAttributes = null;\n}\n\n// packages/alpinejs/src/scope.js\nfunction scope(node) {\n return mergeProxies(closestDataStack(node));\n}\nfunction addScopeToNode(node, data2, referenceNode) {\n node._x_dataStack = [data2, ...closestDataStack(referenceNode || node)];\n return () => {\n node._x_dataStack = node._x_dataStack.filter((i) => i !== data2);\n };\n}\nfunction closestDataStack(node) {\n if (node._x_dataStack)\n return node._x_dataStack;\n if (typeof ShadowRoot === \"function\" && node instanceof ShadowRoot) {\n return closestDataStack(node.host);\n }\n if (!node.parentNode) {\n return [];\n }\n return closestDataStack(node.parentNode);\n}\nfunction mergeProxies(objects) {\n return new Proxy({ objects }, mergeProxyTrap);\n}\nvar mergeProxyTrap = {\n ownKeys({ objects }) {\n return Array.from(\n new Set(objects.flatMap((i) => Object.keys(i)))\n );\n },\n has({ objects }, name) {\n if (name == Symbol.unscopables)\n return false;\n return objects.some(\n (obj) => Object.prototype.hasOwnProperty.call(obj, name) || Reflect.has(obj, name)\n );\n },\n get({ objects }, name, thisProxy) {\n if (name == \"toJSON\")\n return collapseProxies;\n return Reflect.get(\n objects.find(\n (obj) => Reflect.has(obj, name)\n ) || {},\n name,\n thisProxy\n );\n },\n set({ objects }, name, value, thisProxy) {\n const target = objects.find(\n (obj) => Object.prototype.hasOwnProperty.call(obj, name)\n ) || objects[objects.length - 1];\n const descriptor = Object.getOwnPropertyDescriptor(target, name);\n if (descriptor?.set && descriptor?.get)\n return descriptor.set.call(thisProxy, value) || true;\n return Reflect.set(target, name, value);\n }\n};\nfunction collapseProxies() {\n let keys = Reflect.ownKeys(this);\n return keys.reduce((acc, key) => {\n acc[key] = Reflect.get(this, key);\n return acc;\n }, {});\n}\n\n// packages/alpinejs/src/interceptor.js\nfunction initInterceptors(data2) {\n let isObject2 = (val) => typeof val === \"object\" && !Array.isArray(val) && val !== null;\n let recurse = (obj, basePath = \"\") => {\n Object.entries(Object.getOwnPropertyDescriptors(obj)).forEach(([key, { value, enumerable }]) => {\n if (enumerable === false || value === void 0)\n return;\n if (typeof value === \"object\" && value !== null && value.__v_skip)\n return;\n let path = basePath === \"\" ? key : `${basePath}.${key}`;\n if (typeof value === \"object\" && value !== null && value._x_interceptor) {\n obj[key] = value.initialize(data2, path, key);\n } else {\n if (isObject2(value) && value !== obj && !(value instanceof Element)) {\n recurse(value, path);\n }\n }\n });\n };\n return recurse(data2);\n}\nfunction interceptor(callback, mutateObj = () => {\n}) {\n let obj = {\n initialValue: void 0,\n _x_interceptor: true,\n initialize(data2, path, key) {\n return callback(this.initialValue, () => get(data2, path), (value) => set(data2, path, value), path, key);\n }\n };\n mutateObj(obj);\n return (initialValue) => {\n if (typeof initialValue === \"object\" && initialValue !== null && initialValue._x_interceptor) {\n let initialize = obj.initialize.bind(obj);\n obj.initialize = (data2, path, key) => {\n let innerValue = initialValue.initialize(data2, path, key);\n obj.initialValue = innerValue;\n return initialize(data2, path, key);\n };\n } else {\n obj.initialValue = initialValue;\n }\n return obj;\n };\n}\nfunction get(obj, path) {\n return path.split(\".\").reduce((carry, segment) => carry[segment], obj);\n}\nfunction set(obj, path, value) {\n if (typeof path === \"string\")\n path = path.split(\".\");\n if (path.length === 1)\n obj[path[0]] = value;\n else if (path.length === 0)\n throw error;\n else {\n if (obj[path[0]])\n return set(obj[path[0]], path.slice(1), value);\n else {\n obj[path[0]] = {};\n return set(obj[path[0]], path.slice(1), value);\n }\n }\n}\n\n// packages/alpinejs/src/magics.js\nvar magics = {};\nfunction magic(name, callback) {\n magics[name] = callback;\n}\nfunction injectMagics(obj, el) {\n let memoizedUtilities = getUtilities(el);\n Object.entries(magics).forEach(([name, callback]) => {\n Object.defineProperty(obj, `$${name}`, {\n get() {\n return callback(el, memoizedUtilities);\n },\n enumerable: false\n });\n });\n return obj;\n}\nfunction getUtilities(el) {\n let [utilities, cleanup2] = getElementBoundUtilities(el);\n let utils = { interceptor, ...utilities };\n onElRemoved(el, cleanup2);\n return utils;\n}\n\n// packages/alpinejs/src/utils/error.js\nfunction tryCatch(el, expression, callback, ...args) {\n try {\n return callback(...args);\n } catch (e) {\n handleError(e, el, expression);\n }\n}\nfunction handleError(error2, el, expression = void 0) {\n error2 = Object.assign(\n error2 ?? { message: \"No error message given.\" },\n { el, expression }\n );\n console.warn(`Alpine Expression Error: ${error2.message}\n\n${expression ? 'Expression: \"' + expression + '\"\\n\\n' : \"\"}`, el);\n setTimeout(() => {\n throw error2;\n }, 0);\n}\n\n// packages/alpinejs/src/evaluator.js\nvar shouldAutoEvaluateFunctions = true;\nfunction dontAutoEvaluateFunctions(callback) {\n let cache = shouldAutoEvaluateFunctions;\n shouldAutoEvaluateFunctions = false;\n let result = callback();\n shouldAutoEvaluateFunctions = cache;\n return result;\n}\nfunction evaluate(el, expression, extras = {}) {\n let result;\n evaluateLater(el, expression)((value) => result = value, extras);\n return result;\n}\nfunction evaluateLater(...args) {\n return theEvaluatorFunction(...args);\n}\nvar theEvaluatorFunction = normalEvaluator;\nfunction setEvaluator(newEvaluator) {\n theEvaluatorFunction = newEvaluator;\n}\nfunction normalEvaluator(el, expression) {\n let overriddenMagics = {};\n injectMagics(overriddenMagics, el);\n let dataStack = [overriddenMagics, ...closestDataStack(el)];\n let evaluator = typeof expression === \"function\" ? generateEvaluatorFromFunction(dataStack, expression) : generateEvaluatorFromString(dataStack, expression, el);\n return tryCatch.bind(null, el, expression, evaluator);\n}\nfunction generateEvaluatorFromFunction(dataStack, func) {\n return (receiver = () => {\n }, { scope: scope2 = {}, params = [] } = {}) => {\n let result = func.apply(mergeProxies([scope2, ...dataStack]), params);\n runIfTypeOfFunction(receiver, result);\n };\n}\nvar evaluatorMemo = {};\nfunction generateFunctionFromString(expression, el) {\n if (evaluatorMemo[expression]) {\n return evaluatorMemo[expression];\n }\n let AsyncFunction = Object.getPrototypeOf(async function() {\n }).constructor;\n let rightSideSafeExpression = /^[\\n\\s]*if.*\\(.*\\)/.test(expression.trim()) || /^(let|const)\\s/.test(expression.trim()) ? `(async()=>{ ${expression} })()` : expression;\n const safeAsyncFunction = () => {\n try {\n let func2 = new AsyncFunction(\n [\"__self\", \"scope\"],\n `with (scope) { __self.result = ${rightSideSafeExpression} }; __self.finished = true; return __self.result;`\n );\n Object.defineProperty(func2, \"name\", {\n value: `[Alpine] ${expression}`\n });\n return func2;\n } catch (error2) {\n handleError(error2, el, expression);\n return Promise.resolve();\n }\n };\n let func = safeAsyncFunction();\n evaluatorMemo[expression] = func;\n return func;\n}\nfunction generateEvaluatorFromString(dataStack, expression, el) {\n let func = generateFunctionFromString(expression, el);\n return (receiver = () => {\n }, { scope: scope2 = {}, params = [] } = {}) => {\n func.result = void 0;\n func.finished = false;\n let completeScope = mergeProxies([scope2, ...dataStack]);\n if (typeof func === \"function\") {\n let promise = func(func, completeScope).catch((error2) => handleError(error2, el, expression));\n if (func.finished) {\n runIfTypeOfFunction(receiver, func.result, completeScope, params, el);\n func.result = void 0;\n } else {\n promise.then((result) => {\n runIfTypeOfFunction(receiver, result, completeScope, params, el);\n }).catch((error2) => handleError(error2, el, expression)).finally(() => func.result = void 0);\n }\n }\n };\n}\nfunction runIfTypeOfFunction(receiver, value, scope2, params, el) {\n if (shouldAutoEvaluateFunctions && typeof value === \"function\") {\n let result = value.apply(scope2, params);\n if (result instanceof Promise) {\n result.then((i) => runIfTypeOfFunction(receiver, i, scope2, params)).catch((error2) => handleError(error2, el, value));\n } else {\n receiver(result);\n }\n } else if (typeof value === \"object\" && value instanceof Promise) {\n value.then((i) => receiver(i));\n } else {\n receiver(value);\n }\n}\n\n// packages/alpinejs/src/directives.js\nvar prefixAsString = \"x-\";\nfunction prefix(subject = \"\") {\n return prefixAsString + subject;\n}\nfunction setPrefix(newPrefix) {\n prefixAsString = newPrefix;\n}\nvar directiveHandlers = {};\nfunction directive(name, callback) {\n directiveHandlers[name] = callback;\n return {\n before(directive2) {\n if (!directiveHandlers[directive2]) {\n console.warn(String.raw`Cannot find directive \\`${directive2}\\`. \\`${name}\\` will use the default order of execution`);\n return;\n }\n const pos = directiveOrder.indexOf(directive2);\n directiveOrder.splice(pos >= 0 ? pos : directiveOrder.indexOf(\"DEFAULT\"), 0, name);\n }\n };\n}\nfunction directiveExists(name) {\n return Object.keys(directiveHandlers).includes(name);\n}\nfunction directives(el, attributes, originalAttributeOverride) {\n attributes = Array.from(attributes);\n if (el._x_virtualDirectives) {\n let vAttributes = Object.entries(el._x_virtualDirectives).map(([name, value]) => ({ name, value }));\n let staticAttributes = attributesOnly(vAttributes);\n vAttributes = vAttributes.map((attribute) => {\n if (staticAttributes.find((attr) => attr.name === attribute.name)) {\n return {\n name: `x-bind:${attribute.name}`,\n value: `\"${attribute.value}\"`\n };\n }\n return attribute;\n });\n attributes = attributes.concat(vAttributes);\n }\n let transformedAttributeMap = {};\n let directives2 = attributes.map(toTransformedAttributes((newName, oldName) => transformedAttributeMap[newName] = oldName)).filter(outNonAlpineAttributes).map(toParsedDirectives(transformedAttributeMap, originalAttributeOverride)).sort(byPriority);\n return directives2.map((directive2) => {\n return getDirectiveHandler(el, directive2);\n });\n}\nfunction attributesOnly(attributes) {\n return Array.from(attributes).map(toTransformedAttributes()).filter((attr) => !outNonAlpineAttributes(attr));\n}\nvar isDeferringHandlers = false;\nvar directiveHandlerStacks = /* @__PURE__ */ new Map();\nvar currentHandlerStackKey = Symbol();\nfunction deferHandlingDirectives(callback) {\n isDeferringHandlers = true;\n let key = Symbol();\n currentHandlerStackKey = key;\n directiveHandlerStacks.set(key, []);\n let flushHandlers = () => {\n while (directiveHandlerStacks.get(key).length)\n directiveHandlerStacks.get(key).shift()();\n directiveHandlerStacks.delete(key);\n };\n let stopDeferring = () => {\n isDeferringHandlers = false;\n flushHandlers();\n };\n callback(flushHandlers);\n stopDeferring();\n}\nfunction getElementBoundUtilities(el) {\n let cleanups = [];\n let cleanup2 = (callback) => cleanups.push(callback);\n let [effect3, cleanupEffect] = elementBoundEffect(el);\n cleanups.push(cleanupEffect);\n let utilities = {\n Alpine: alpine_default,\n effect: effect3,\n cleanup: cleanup2,\n evaluateLater: evaluateLater.bind(evaluateLater, el),\n evaluate: evaluate.bind(evaluate, el)\n };\n let doCleanup = () => cleanups.forEach((i) => i());\n return [utilities, doCleanup];\n}\nfunction getDirectiveHandler(el, directive2) {\n let noop = () => {\n };\n let handler4 = directiveHandlers[directive2.type] || noop;\n let [utilities, cleanup2] = getElementBoundUtilities(el);\n onAttributeRemoved(el, directive2.original, cleanup2);\n let fullHandler = () => {\n if (el._x_ignore || el._x_ignoreSelf)\n return;\n handler4.inline && handler4.inline(el, directive2, utilities);\n handler4 = handler4.bind(handler4, el, directive2, utilities);\n isDeferringHandlers ? directiveHandlerStacks.get(currentHandlerStackKey).push(handler4) : handler4();\n };\n fullHandler.runCleanups = cleanup2;\n return fullHandler;\n}\nvar startingWith = (subject, replacement) => ({ name, value }) => {\n if (name.startsWith(subject))\n name = name.replace(subject, replacement);\n return { name, value };\n};\nvar into = (i) => i;\nfunction toTransformedAttributes(callback = () => {\n}) {\n return ({ name, value }) => {\n let { name: newName, value: newValue } = attributeTransformers.reduce((carry, transform) => {\n return transform(carry);\n }, { name, value });\n if (newName !== name)\n callback(newName, name);\n return { name: newName, value: newValue };\n };\n}\nvar attributeTransformers = [];\nfunction mapAttributes(callback) {\n attributeTransformers.push(callback);\n}\nfunction outNonAlpineAttributes({ name }) {\n return alpineAttributeRegex().test(name);\n}\nvar alpineAttributeRegex = () => new RegExp(`^${prefixAsString}([^:^.]+)\\\\b`);\nfunction toParsedDirectives(transformedAttributeMap, originalAttributeOverride) {\n return ({ name, value }) => {\n let typeMatch = name.match(alpineAttributeRegex());\n let valueMatch = name.match(/:([a-zA-Z0-9\\-_:]+)/);\n let modifiers = name.match(/\\.[^.\\]]+(?=[^\\]]*$)/g) || [];\n let original = originalAttributeOverride || transformedAttributeMap[name] || name;\n return {\n type: typeMatch ? typeMatch[1] : null,\n value: valueMatch ? valueMatch[1] : null,\n modifiers: modifiers.map((i) => i.replace(\".\", \"\")),\n expression: value,\n original\n };\n };\n}\nvar DEFAULT = \"DEFAULT\";\nvar directiveOrder = [\n \"ignore\",\n \"ref\",\n \"data\",\n \"id\",\n \"anchor\",\n \"bind\",\n \"init\",\n \"for\",\n \"model\",\n \"modelable\",\n \"transition\",\n \"show\",\n \"if\",\n DEFAULT,\n \"teleport\"\n];\nfunction byPriority(a, b) {\n let typeA = directiveOrder.indexOf(a.type) === -1 ? DEFAULT : a.type;\n let typeB = directiveOrder.indexOf(b.type) === -1 ? DEFAULT : b.type;\n return directiveOrder.indexOf(typeA) - directiveOrder.indexOf(typeB);\n}\n\n// packages/alpinejs/src/utils/dispatch.js\nfunction dispatch(el, name, detail = {}) {\n el.dispatchEvent(\n new CustomEvent(name, {\n detail,\n bubbles: true,\n // Allows events to pass the shadow DOM barrier.\n composed: true,\n cancelable: true\n })\n );\n}\n\n// packages/alpinejs/src/utils/walk.js\nfunction walk(el, callback) {\n if (typeof ShadowRoot === \"function\" && el instanceof ShadowRoot) {\n Array.from(el.children).forEach((el2) => walk(el2, callback));\n return;\n }\n let skip = false;\n callback(el, () => skip = true);\n if (skip)\n return;\n let node = el.firstElementChild;\n while (node) {\n walk(node, callback, false);\n node = node.nextElementSibling;\n }\n}\n\n// packages/alpinejs/src/utils/warn.js\nfunction warn(message, ...args) {\n console.warn(`Alpine Warning: ${message}`, ...args);\n}\n\n// packages/alpinejs/src/lifecycle.js\nvar started = false;\nfunction start() {\n if (started)\n warn(\"Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems.\");\n started = true;\n if (!document.body)\n warn(\"Unable to initialize. Trying to load Alpine before `<body>` is available. Did you forget to add `defer` in Alpine's `<script>` tag?\");\n dispatch(document, \"alpine:init\");\n dispatch(document, \"alpine:initializing\");\n startObservingMutations();\n onElAdded((el) => initTree(el, walk));\n onElRemoved((el) => destroyTree(el));\n onAttributesAdded((el, attrs) => {\n directives(el, attrs).forEach((handle) => handle());\n });\n let outNestedComponents = (el) => !closestRoot(el.parentElement, true);\n Array.from(document.querySelectorAll(allSelectors().join(\",\"))).filter(outNestedComponents).forEach((el) => {\n initTree(el);\n });\n dispatch(document, \"alpine:initialized\");\n setTimeout(() => {\n warnAboutMissingPlugins();\n });\n}\nvar rootSelectorCallbacks = [];\nvar initSelectorCallbacks = [];\nfunction rootSelectors() {\n return rootSelectorCallbacks.map((fn) => fn());\n}\nfunction allSelectors() {\n return rootSelectorCallbacks.concat(initSelectorCallbacks).map((fn) => fn());\n}\nfunction addRootSelector(selectorCallback) {\n rootSelectorCallbacks.push(selectorCallback);\n}\nfunction addInitSelector(selectorCallback) {\n initSelectorCallbacks.push(selectorCallback);\n}\nfunction closestRoot(el, includeInitSelectors = false) {\n return findClosest(el, (element) => {\n const selectors = includeInitSelectors ? allSelectors() : rootSelectors();\n if (selectors.some((selector) => element.matches(selector)))\n return true;\n });\n}\nfunction findClosest(el, callback) {\n if (!el)\n return;\n if (callback(el))\n return el;\n if (el._x_teleportBack)\n el = el._x_teleportBack;\n if (!el.parentElement)\n return;\n return findClosest(el.parentElement, callback);\n}\nfunction isRoot(el) {\n return rootSelectors().some((selector) => el.matches(selector));\n}\nvar initInterceptors2 = [];\nfunction interceptInit(callback) {\n initInterceptors2.push(callback);\n}\nfunction initTree(el, walker = walk, intercept = () => {\n}) {\n deferHandlingDirectives(() => {\n walker(el, (el2, skip) => {\n intercept(el2, skip);\n initInterceptors2.forEach((i) => i(el2, skip));\n directives(el2, el2.attributes).forEach((handle) => handle());\n el2._x_ignore && skip();\n });\n });\n}\nfunction destroyTree(root, walker = walk) {\n walker(root, (el) => {\n cleanupElement(el);\n cleanupAttributes(el);\n });\n}\nfunction warnAboutMissingPlugins() {\n let pluginDirectives = [\n [\"ui\", \"dialog\", [\"[x-dialog], [x-popover]\"]],\n [\"anchor\", \"anchor\", [\"[x-anchor]\"]],\n [\"sort\", \"sort\", [\"[x-sort]\"]]\n ];\n pluginDirectives.forEach(([plugin2, directive2, selectors]) => {\n if (directiveExists(directive2))\n return;\n selectors.some((selector) => {\n if (document.querySelector(selector)) {\n warn(`found \"${selector}\", but missing ${plugin2} plugin`);\n return true;\n }\n });\n });\n}\n\n// packages/alpinejs/src/nextTick.js\nvar tickStack = [];\nvar isHolding = false;\nfunction nextTick(callback = () => {\n}) {\n queueMicrotask(() => {\n isHolding || setTimeout(() => {\n releaseNextTicks();\n });\n });\n return new Promise((res) => {\n tickStack.push(() => {\n callback();\n res();\n });\n });\n}\nfunction releaseNextTicks() {\n isHolding = false;\n while (tickStack.length)\n tickStack.shift()();\n}\nfunction holdNextTicks() {\n isHolding = true;\n}\n\n// packages/alpinejs/src/utils/classes.js\nfunction setClasses(el, value) {\n if (Array.isArray(value)) {\n return setClassesFromString(el, value.join(\" \"));\n } else if (typeof value === \"object\" && value !== null) {\n return setClassesFromObject(el, value);\n } else if (typeof value === \"function\") {\n return setClasses(el, value());\n }\n return setClassesFromString(el, value);\n}\nfunction setClassesFromString(el, classString) {\n let split = (classString2) => classString2.split(\" \").filter(Boolean);\n let missingClasses = (classString2) => classString2.split(\" \").filter((i) => !el.classList.contains(i)).filter(Boolean);\n let addClassesAndReturnUndo = (classes) => {\n el.classList.add(...classes);\n return () => {\n el.classList.remove(...classes);\n };\n };\n classString = classString === true ? classString = \"\" : classString || \"\";\n return addClassesAndReturnUndo(missingClasses(classString));\n}\nfunction setClassesFromObject(el, classObject) {\n let split = (classString) => classString.split(\" \").filter(Boolean);\n let forAdd = Object.entries(classObject).flatMap(([classString, bool]) => bool ? split(classString) : false).filter(Boolean);\n let forRemove = Object.entries(classObject).flatMap(([classString, bool]) => !bool ? split(classString) : false).filter(Boolean);\n let added = [];\n let removed = [];\n forRemove.forEach((i) => {\n if (el.classList.contains(i)) {\n el.classList.remove(i);\n removed.push(i);\n }\n });\n forAdd.forEach((i) => {\n if (!el.classList.contains(i)) {\n el.classList.add(i);\n added.push(i);\n }\n });\n return () => {\n removed.forEach((i) => el.classList.add(i));\n added.forEach((i) => el.classList.remove(i));\n };\n}\n\n// packages/alpinejs/src/utils/styles.js\nfunction setStyles(el, value) {\n if (typeof value === \"object\" && value !== null) {\n return setStylesFromObject(el, value);\n }\n return setStylesFromString(el, value);\n}\nfunction setStylesFromObject(el, value) {\n let previousStyles = {};\n Object.entries(value).forEach(([key, value2]) => {\n previousStyles[key] = el.style[key];\n if (!key.startsWith(\"--\")) {\n key = kebabCase(key);\n }\n el.style.setProperty(key, value2);\n });\n setTimeout(() => {\n if (el.style.length === 0) {\n el.removeAttribute(\"style\");\n }\n });\n return () => {\n setStyles(el, previousStyles);\n };\n}\nfunction setStylesFromString(el, value) {\n let cache = el.getAttribute(\"style\", value);\n el.setAttribute(\"style\", value);\n return () => {\n el.setAttribute(\"style\", cache || \"\");\n };\n}\nfunction kebabCase(subject) {\n return subject.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\n\n// packages/alpinejs/src/utils/once.js\nfunction once(callback, fallback = () => {\n}) {\n let called = false;\n return function() {\n if (!called) {\n called = true;\n callback.apply(this, arguments);\n } else {\n fallback.apply(this, arguments);\n }\n };\n}\n\n// packages/alpinejs/src/directives/x-transition.js\ndirective(\"transition\", (el, { value, modifiers, expression }, { evaluate: evaluate2 }) => {\n if (typeof expression === \"function\")\n expression = evaluate2(expression);\n if (expression === false)\n return;\n if (!expression || typeof expression === \"boolean\") {\n registerTransitionsFromHelper(el, modifiers, value);\n } else {\n registerTransitionsFromClassString(el, expression, value);\n }\n});\nfunction registerTransitionsFromClassString(el, classString, stage) {\n registerTransitionObject(el, setClasses, \"\");\n let directiveStorageMap = {\n \"enter\": (classes) => {\n el._x_transition.enter.during = classes;\n },\n \"enter-start\": (classes) => {\n el._x_transition.enter.start = classes;\n },\n \"enter-end\": (classes) => {\n el._x_transition.enter.end = classes;\n },\n \"leave\": (classes) => {\n el._x_transition.leave.during = classes;\n },\n \"leave-start\": (classes) => {\n el._x_transition.leave.start = classes;\n },\n \"leave-end\": (classes) => {\n el._x_transition.leave.end = classes;\n }\n };\n directiveStorageMap[stage](classString);\n}\nfunction registerTransitionsFromHelper(el, modifiers, stage) {\n registerTransitionObject(el, setStyles);\n let doesntSpecify = !modifiers.includes(\"in\") && !modifiers.includes(\"out\") && !stage;\n let transitioningIn = doesntSpecify || modifiers.includes(\"in\") || [\"enter\"].includes(stage);\n let transitioningOut = doesntSpecify || modifiers.includes(\"out\") || [\"leave\"].includes(stage);\n if (modifiers.includes(\"in\") && !doesntSpecify) {\n modifiers = modifiers.filter((i, index) => index < modifiers.indexOf(\"out\"));\n }\n if (modifiers.includes(\"out\") && !doesntSpecify) {\n modifiers = modifiers.filter((i, index) => index > modifiers.indexOf(\"out\"));\n }\n let wantsAll = !modifiers.includes(\"opacity\") && !modifiers.includes(\"scale\");\n let wantsOpacity = wantsAll || modifiers.includes(\"opacity\");\n let wantsScale = wantsAll || modifiers.includes(\"scale\");\n let opacityValue = wantsOpacity ? 0 : 1;\n let scaleValue = wantsScale ? modifierValue(modifiers, \"scale\", 95) / 100 : 1;\n let delay = modifierValue(modifiers, \"delay\", 0) / 1e3;\n let origin = modifierValue(modifiers, \"origin\", \"center\");\n let property = \"opacity, transform\";\n let durationIn = modifierValue(modifiers, \"duration\", 150) / 1e3;\n let durationOut = modifierValue(modifiers, \"duration\", 75) / 1e3;\n let easing = `cubic-bezier(0.4, 0.0, 0.2, 1)`;\n if (transitioningIn) {\n el._x_transition.enter.during = {\n transformOrigin: origin,\n transitionDelay: `${delay}s`,\n transitionProperty: property,\n transitionDuration: `${durationIn}s`,\n transitionTimingFunction: easing\n };\n el._x_transition.enter.start = {\n opacity: opacityValue,\n transform: `scale(${scaleValue})`\n };\n el._x_transition.enter.end = {\n opacity: 1,\n transform: `scale(1)`\n };\n }\n if (transitioningOut) {\n el._x_transition.leave.during = {\n transformOrigin: origin,\n transitionDelay: `${delay}s`,\n transitionProperty: property,\n transitionDuration: `${durationOut}s`,\n transitionTimingFunction: easing\n };\n el._x_transition.leave.start = {\n opacity: 1,\n transform: `scale(1)`\n };\n el._x_transition.leave.end = {\n opacity: opacityValue,\n transform: `scale(${scaleValue})`\n };\n }\n}\nfunction registerTransitionObject(el, setFunction, defaultValue = {}) {\n if (!el._x_transition)\n el._x_transition = {\n enter: { during: defaultValue, start: defaultValue, end: defaultValue },\n leave: { during: defaultValue, start: defaultValue, end: defaultValue },\n in(before = () => {\n }, after = () => {\n }) {\n transition(el, setFunction, {\n during: this.enter.during,\n start: this.enter.start,\n end: this.enter.end\n }, before, after);\n },\n out(before = () => {\n }, after = () => {\n }) {\n transition(el, setFunction, {\n during: this.leave.during,\n start: this.leave.start,\n end: this.leave.end\n }, before, after);\n }\n };\n}\nwindow.Element.prototype._x_toggleAndCascadeWithTransitions = function(el, value, show, hide) {\n const nextTick2 = document.visibilityState === \"visible\" ? requestAnimationFrame : setTimeout;\n let clickAwayCompatibleShow = () => nextTick2(show);\n if (value) {\n if (el._x_transition && (el._x_transition.enter || el._x_transition.leave)) {\n 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();\n } else {\n el._x_transition ? el._x_transition.in(show) : clickAwayCompatibleShow();\n }\n return;\n }\n el._x_hidePromise = el._x_transition ? new Promise((resolve, reject) => {\n el._x_transition.out(() => {\n }, () => resolve(hide));\n el._x_transitioning && el._x_transitioning.beforeCancel(() => reject({ isFromCancelledTransition: true }));\n }) : Promise.resolve(hide);\n queueMicrotask(() => {\n let closest = closestHide(el);\n if (closest) {\n if (!closest._x_hideChildren)\n closest._x_hideChildren = [];\n closest._x_hideChildren.push(el);\n } else {\n nextTick2(() => {\n let hideAfterChildren = (el2) => {\n let carry = Promise.all([\n el2._x_hidePromise,\n ...(el2._x_hideChildren || []).map(hideAfterChildren)\n ]).then(([i]) => i?.());\n delete el2._x_hidePromise;\n delete el2._x_hideChildren;\n return carry;\n };\n hideAfterChildren(el).catch((e) => {\n if (!e.isFromCancelledTransition)\n throw e;\n });\n });\n }\n });\n};\nfunction closestHide(el) {\n let parent = el.parentNode;\n if (!parent)\n return;\n return parent._x_hidePromise ? parent : closestHide(parent);\n}\nfunction transition(el, setFunction, { during, start: start2, end } = {}, before = () => {\n}, after = () => {\n}) {\n if (el._x_transitioning)\n el._x_transitioning.cancel();\n if (Object.keys(during).length === 0 && Object.keys(start2).length === 0 && Object.keys(end).length === 0) {\n before();\n after();\n return;\n }\n let undoStart, undoDuring, undoEnd;\n performTransition(el, {\n start() {\n undoStart = setFunction(el, start2);\n },\n during() {\n undoDuring = setFunction(el, during);\n },\n before,\n end() {\n undoStart();\n undoEnd = setFunction(el, end);\n },\n after,\n cleanup() {\n undoDuring();\n undoEnd();\n }\n });\n}\nfunction performTransition(el, stages) {\n let interrupted, reachedBefore, reachedEnd;\n let finish = once(() => {\n mutateDom(() => {\n interrupted = true;\n if (!reachedBefore)\n stages.before();\n if (!reachedEnd) {\n stages.end();\n releaseNextTicks();\n }\n stages.after();\n if (el.isConnected)\n stages.cleanup();\n delete el._x_transitioning;\n });\n });\n el._x_transitioning = {\n beforeCancels: [],\n beforeCancel(callback) {\n this.beforeCancels.push(callback);\n },\n cancel: once(function() {\n while (this.beforeCancels.length) {\n this.beforeCancels.shift()();\n }\n ;\n finish();\n }),\n finish\n };\n mutateDom(() => {\n stages.start();\n stages.during();\n });\n holdNextTicks();\n requestAnimationFrame(() => {\n if (interrupted)\n return;\n let duration = Number(getComputedStyle(el).transitionDuration.replace(/,.*/, \"\").replace(\"s\", \"\")) * 1e3;\n let delay = Number(getComputedStyle(el).transitionDelay.replace(/,.*/, \"\").replace(\"s\", \"\")) * 1e3;\n if (duration === 0)\n duration = Number(getComputedStyle(el).animationDuration.replace(\"s\", \"\")) * 1e3;\n mutateDom(() => {\n stages.before();\n });\n reachedBefore = true;\n requestAnimationFrame(() => {\n if (interrupted)\n return;\n mutateDom(() => {\n stages.end();\n });\n releaseNextTicks();\n setTimeout(el._x_transitioning.finish, duration + delay);\n reachedEnd = true;\n });\n });\n}\nfunction modifierValue(modifiers, key, fallback) {\n if (modifiers.indexOf(key) === -1)\n return fallback;\n const rawValue = modifiers[modifiers.indexOf(key) + 1];\n if (!rawValue)\n return fallback;\n if (key === \"scale\") {\n if (isNaN(rawValue))\n return fallback;\n }\n if (key === \"duration\" || key === \"delay\") {\n let match = rawValue.match(/([0-9]+)ms/);\n if (match)\n return match[1];\n }\n if (key === \"origin\") {\n if ([\"top\", \"right\", \"left\", \"center\", \"bottom\"].includes(modifiers[modifiers.indexOf(key) + 2])) {\n return [rawValue, modifiers[modifiers.indexOf(key) + 2]].join(\" \");\n }\n }\n return rawValue;\n}\n\n// packages/alpinejs/src/clone.js\nvar isCloning = false;\nfunction skipDuringClone(callback, fallback = () => {\n}) {\n return (...args) => isCloning ? fallback(...args) : callback(...args);\n}\nfunction onlyDuringClone(callback) {\n return (...args) => isCloning && callback(...args);\n}\nvar interceptors = [];\nfunction interceptClone(callback) {\n interceptors.push(callback);\n}\nfunction cloneNode(from, to) {\n interceptors.forEach((i) => i(from, to));\n isCloning = true;\n dontRegisterReactiveSideEffects(() => {\n initTree(to, (el, callback) => {\n callback(el, () => {\n });\n });\n });\n isCloning = false;\n}\nvar isCloningLegacy = false;\nfunction clone(oldEl, newEl) {\n if (!newEl._x_dataStack)\n newEl._x_dataStack = oldEl._x_dataStack;\n isCloning = true;\n isCloningLegacy = true;\n dontRegisterReactiveSideEffects(() => {\n cloneTree(newEl);\n });\n isCloning = false;\n isCloningLegacy = false;\n}\nfunction cloneTree(el) {\n let hasRunThroughFirstEl = false;\n let shallowWalker = (el2, callback) => {\n walk(el2, (el3, skip) => {\n if (hasRunThroughFirstEl && isRoot(el3))\n return skip();\n hasRunThroughFirstEl = true;\n callback(el3, skip);\n });\n };\n initTree(el, shallowWalker);\n}\nfunction dontRegisterReactiveSideEffects(callback) {\n let cache = effect;\n overrideEffect((callback2, el) => {\n let storedEffect = cache(callback2);\n release(storedEffect);\n return () => {\n };\n });\n callback();\n overrideEffect(cache);\n}\n\n// packages/alpinejs/src/utils/bind.js\nfunction bind(el, name, value, modifiers = []) {\n if (!el._x_bindings)\n el._x_bindings = reactive({});\n el._x_bindings[name] = value;\n name = modifiers.includes(\"camel\") ? camelCase(name) : name;\n switch (name) {\n case \"value\":\n bindInputValue(el, value);\n break;\n case \"style\":\n bindStyles(el, value);\n break;\n case \"class\":\n bindClasses(el, value);\n break;\n case \"selected\":\n case \"checked\":\n bindAttributeAndProperty(el, name, value);\n break;\n default:\n bindAttribute(el, name, value);\n break;\n }\n}\nfunction bindInputValue(el, value) {\n if (isRadio(el)) {\n if (el.attributes.value === void 0) {\n el.value = value;\n }\n if (window.fromModel) {\n if (typeof value === \"boolean\") {\n el.checked = safeParseBoolean(el.value) === value;\n } else {\n el.checked = checkedAttrLooseCompare(el.value, value);\n }\n }\n } else if (isCheckbox(el)) {\n if (Number.isInteger(value)) {\n el.value = value;\n } else if (!Array.isArray(value) && typeof value !== \"boolean\" && ![null, void 0].includes(value)) {\n el.value = String(value);\n } else {\n if (Array.isArray(value)) {\n el.checked = value.some((val) => checkedAttrLooseCompare(val, el.value));\n } else {\n el.checked = !!value;\n }\n }\n } else if (el.tagName === \"SELECT\") {\n updateSelect(el, value);\n } else {\n if (el.value === value)\n return;\n el.value = value === void 0 ? \"\" : value;\n }\n}\nfunction bindClasses(el, value) {\n if (el._x_undoAddedClasses)\n el._x_undoAddedClasses();\n el._x_undoAddedClasses = setClasses(el, value);\n}\nfunction bindStyles(el, value) {\n if (el._x_undoAddedStyles)\n el._x_undoAddedStyles();\n el._x_undoAddedStyles = setStyles(el, value);\n}\nfunction bindAttributeAndProperty(el, name, value) {\n bindAttribute(el, name, value);\n setPropertyIfChanged(el, name, value);\n}\nfunction bindAttribute(el, name, value) {\n if ([null, void 0, false].includes(value) && attributeShouldntBePreservedIfFalsy(name)) {\n el.removeAttribute(name);\n } else {\n if (isBooleanAttr(name))\n value = name;\n setIfChanged(el, name, value);\n }\n}\nfunction setIfChanged(el, attrName, value) {\n if (el.getAttribute(attrName) != value) {\n el.setAttribute(attrName, value);\n }\n}\nfunction setPropertyIfChanged(el, propName, value) {\n if (el[propName] !== value) {\n el[propName] = value;\n }\n}\nfunction updateSelect(el, value) {\n const arrayWrappedValue = [].concat(value).map((value2) => {\n return value2 + \"\";\n });\n Array.from(el.options).forEach((option) => {\n option.selected = arrayWrappedValue.includes(option.value);\n });\n}\nfunction camelCase(subject) {\n return subject.toLowerCase().replace(/-(\\w)/g, (match, char) => char.toUpperCase());\n}\nfunction checkedAttrLooseCompare(valueA, valueB) {\n return valueA == valueB;\n}\nfunction safeParseBoolean(rawValue) {\n if ([1, \"1\", \"true\", \"on\", \"yes\", true].includes(rawValue)) {\n return true;\n }\n if ([0, \"0\", \"false\", \"off\", \"no\", false].includes(rawValue)) {\n return false;\n }\n return rawValue ? Boolean(rawValue) : null;\n}\nvar booleanAttributes = /* @__PURE__ */ new Set([\n \"allowfullscreen\",\n \"async\",\n \"autofocus\",\n \"autoplay\",\n \"checked\",\n \"controls\",\n \"default\",\n \"defer\",\n \"disabled\",\n \"formnovalidate\",\n \"inert\",\n \"ismap\",\n \"itemscope\",\n \"loop\",\n \"multiple\",\n \"muted\",\n \"nomodule\",\n \"novalidate\",\n \"open\",\n \"playsinline\",\n \"readonly\",\n \"required\",\n \"reversed\",\n \"selected\",\n \"shadowrootclonable\",\n \"shadowrootdelegatesfocus\",\n \"shadowrootserializable\"\n]);\nfunction isBooleanAttr(attrName) {\n return booleanAttributes.has(attrName);\n}\nfunction attributeShouldntBePreservedIfFalsy(name) {\n return ![\"aria-pressed\", \"aria-checked\", \"aria-expanded\", \"aria-selected\"].includes(name);\n}\nfunction getBinding(el, name, fallback) {\n if (el._x_bindings && el._x_bindings[name] !== void 0)\n return el._x_bindings[name];\n return getAttributeBinding(el, name, fallback);\n}\nfunction extractProp(el, name, fallback, extract = true) {\n if (el._x_bindings && el._x_bindings[name] !== void 0)\n return el._x_bindings[name];\n if (el._x_inlineBindings && el._x_inlineBindings[name] !== void 0) {\n let binding = el._x_inlineBindings[name];\n binding.extract = extract;\n return dontAutoEvaluateFunctions(() => {\n return evaluate(el, binding.expression);\n });\n }\n return getAttributeBinding(el, name, fallback);\n}\nfunction getAttributeBinding(el, name, fallback) {\n let attr = el.getAttribute(name);\n if (attr === null)\n return typeof fallback === \"function\" ? fallback() : fallback;\n if (attr === \"\")\n return true;\n if (isBooleanAttr(name)) {\n return !![name, \"true\"].includes(attr);\n }\n return attr;\n}\nfunction isCheckbox(el) {\n return el.type === \"checkbox\" || el.localName === \"ui-checkbox\" || el.localName === \"ui-switch\";\n}\nfunction isRadio(el) {\n return el.type === \"radio\" || el.localName === \"ui-radio\";\n}\n\n// packages/alpinejs/src/utils/debounce.js\nfunction debounce(func, wait) {\n var timeout;\n return function() {\n var context = this, args = arguments;\n var later = function() {\n timeout = null;\n func.apply(context, args);\n };\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n };\n}\n\n// packages/alpinejs/src/utils/throttle.js\nfunction throttle(func, limit) {\n let inThrottle;\n return function() {\n let context = this, args = arguments;\n if (!inThrottle) {\n func.apply(context, args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n}\n\n// packages/alpinejs/src/entangle.js\nfunction entangle({ get: outerGet, set: outerSet }, { get: innerGet, set: innerSet }) {\n let firstRun = true;\n let outerHash;\n let innerHash;\n let reference = effect(() => {\n let outer = outerGet();\n let inner = innerGet();\n if (firstRun) {\n innerSet(cloneIfObject(outer));\n firstRun = false;\n } else {\n let outerHashLatest = JSON.stringify(outer);\n let innerHashLatest = JSON.stringify(inner);\n if (outerHashLatest !== outerHash) {\n innerSet(cloneIfObject(outer));\n } else if (outerHashLatest !== innerHashLatest) {\n outerSet(cloneIfObject(inner));\n } else {\n }\n }\n outerHash = JSON.stringify(outerGet());\n innerHash = JSON.stringify(innerGet());\n });\n return () => {\n release(reference);\n };\n}\nfunction cloneIfObject(value) {\n return typeof value === \"object\" ? JSON.parse(JSON.stringify(value)) : value;\n}\n\n// packages/alpinejs/src/plugin.js\nfunction plugin(callback) {\n let callbacks = Array.isArray(callback) ? callback : [callback];\n callbacks.forEach((i) => i(alpine_default));\n}\n\n// packages/alpinejs/src/store.js\nvar stores = {};\nvar isReactive = false;\nfunction store(name, value) {\n if (!isReactive) {\n stores = reactive(stores);\n isReactive = true;\n }\n if (value === void 0) {\n return stores[name];\n }\n stores[name] = value;\n initInterceptors(stores[name]);\n if (typeof value === \"object\" && value !== null && value.hasOwnProperty(\"init\") && typeof value.init === \"function\") {\n stores[name].init();\n }\n}\nfunction getStores() {\n return stores;\n}\n\n// packages/alpinejs/src/binds.js\nvar binds = {};\nfunction bind2(name, bindings) {\n let getBindings = typeof bindings !== \"function\" ? () => bindings : bindings;\n if (name instanceof Element) {\n return applyBindingsObject(name, getBindings());\n } else {\n binds[name] = getBindings;\n }\n return () => {\n };\n}\nfunction injectBindingProviders(obj) {\n Object.entries(binds).forEach(([name, callback]) => {\n Object.defineProperty(obj, name, {\n get() {\n return (...args) => {\n return callback(...args);\n };\n }\n });\n });\n return obj;\n}\nfunction applyBindingsObject(el, obj, original) {\n let cleanupRunners = [];\n while (cleanupRunners.length)\n cleanupRunners.pop()();\n let attributes = Object.entries(obj).map(([name, value]) => ({ name, value }));\n let staticAttributes = attributesOnly(attributes);\n attributes = attributes.map((attribute) => {\n if (staticAttributes.find((attr) => attr.name === attribute.name)) {\n return {\n name: `x-bind:${attribute.name}`,\n value: `\"${attribute.value}\"`\n };\n }\n return attribute;\n });\n directives(el, attributes, original).map((handle) => {\n cleanupRunners.push(handle.runCleanups);\n handle();\n });\n return () => {\n while (cleanupRunners.length)\n cleanupRunners.pop()();\n };\n}\n\n// packages/alpinejs/src/datas.js\nvar datas = {};\nfunction data(name, callback) {\n datas[name] = callback;\n}\nfunction injectDataProviders(obj, context) {\n Object.entries(datas).forEach(([name, callback]) => {\n Object.defineProperty(obj, name, {\n get() {\n return (...args) => {\n return callback.bind(context)(...args);\n };\n },\n enumerable: false\n });\n });\n return obj;\n}\n\n// packages/alpinejs/src/alpine.js\nvar Alpine = {\n get reactive() {\n return reactive;\n },\n get release() {\n return release;\n },\n get effect() {\n return effect;\n },\n get raw() {\n return raw;\n },\n version: \"3.14.3\",\n flushAndStopDeferringMutations,\n dontAutoEvaluateFunctions,\n disableEffectScheduling,\n startObservingMutations,\n stopObservingMutations,\n setReactivityEngine,\n onAttributeRemoved,\n onAttributesAdded,\n closestDataStack,\n skipDuringClone,\n onlyDuringClone,\n addRootSelector,\n addInitSelector,\n interceptClone,\n addScopeToNode,\n deferMutations,\n mapAttributes,\n evaluateLater,\n interceptInit,\n setEvaluator,\n mergeProxies,\n extractProp,\n findClosest,\n onElRemoved,\n closestRoot,\n destroyTree,\n interceptor,\n // INTERNAL: not public API and is subject to change without major release.\n transition,\n // INTERNAL\n setStyles,\n // INTERNAL\n mutateDom,\n directive,\n entangle,\n throttle,\n debounce,\n evaluate,\n initTree,\n nextTick,\n prefixed: prefix,\n prefix: setPrefix,\n plugin,\n magic,\n store,\n start,\n clone,\n // INTERNAL\n cloneNode,\n // INTERNAL\n bound: getBinding,\n $data: scope,\n watch,\n walk,\n data,\n bind: bind2\n};\nvar alpine_default = Alpine;\n\n// node_modules/@vue/shared/dist/shared.esm-bundler.js\nfunction makeMap(str, expectsLowerCase) {\n const map = /* @__PURE__ */ Object.create(null);\n const list = str.split(\",\");\n for (let i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase ? (val) => !!map[val.toLowerCase()] : (val) => !!map[val];\n}\nvar specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nvar isBooleanAttr2 = /* @__PURE__ */ makeMap(specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`);\nvar EMPTY_OBJ = true ? Object.freeze({}) : {};\nvar EMPTY_ARR = true ? Object.freeze([]) : [];\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar hasOwn = (val, key) => hasOwnProperty.call(val, key);\nvar isArray = Array.isArray;\nvar isMap = (val) => toTypeString(val) === \"[object Map]\";\nvar isString = (val) => typeof val === \"string\";\nvar isSymbol = (val) => typeof val === \"symbol\";\nvar isObject = (val) => val !== null && typeof val === \"object\";\nvar objectToString = Object.prototype.toString;\nvar toTypeString = (value) => objectToString.call(value);\nvar toRawType = (value) => {\n return toTypeString(value).slice(8, -1);\n};\nvar isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\nvar cacheStringFunction = (fn) => {\n const cache = /* @__PURE__ */ Object.create(null);\n return (str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n};\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cacheStringFunction((str) => {\n return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\nvar capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));\nvar toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``);\nvar hasChanged = (value, oldValue) => value !== oldValue && (value === value || oldValue === oldValue);\n\n// node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js\nvar targetMap = /* @__PURE__ */ new WeakMap();\nvar effectStack = [];\nvar activeEffect;\nvar ITERATE_KEY = Symbol(true ? \"iterate\" : \"\");\nvar MAP_KEY_ITERATE_KEY = Symbol(true ? \"Map key iterate\" : \"\");\nfunction isEffect(fn) {\n return fn && fn._isEffect === true;\n}\nfunction effect2(fn, options = EMPTY_OBJ) {\n if (isEffect(fn)) {\n fn = fn.raw;\n }\n const effect3 = createReactiveEffect(fn, options);\n if (!options.lazy) {\n effect3();\n }\n return effect3;\n}\nfunction stop(effect3) {\n if (effect3.active) {\n cleanup(effect3);\n if (effect3.options.onStop) {\n effect3.options.onStop();\n }\n effect3.active = false;\n }\n}\nvar uid = 0;\nfunction createReactiveEffect(fn, options) {\n const effect3 = function reactiveEffect() {\n if (!effect3.active) {\n return fn();\n }\n if (!effectStack.includes(effect3)) {\n cleanup(effect3);\n try {\n enableTracking();\n effectStack.push(effect3);\n activeEffect = effect3;\n return fn();\n } finally {\n effectStack.pop();\n resetTracking();\n activeEffect = effectStack[effectStack.length - 1];\n }\n }\n };\n effect3.id = uid++;\n effect3.allowRecurse = !!options.allowRecurse;\n effect3._isEffect = true;\n effect3.active = true;\n effect3.raw = fn;\n effect3.deps = [];\n effect3.options = options;\n return effect3;\n}\nfunction cleanup(effect3) {\n const { deps } = effect3;\n if (deps.length) {\n for (let i = 0; i < deps.length; i++) {\n deps[i].delete(effect3);\n }\n deps.length = 0;\n }\n}\nvar shouldTrack = true;\nvar trackStack = [];\nfunction pauseTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = false;\n}\nfunction enableTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = true;\n}\nfunction resetTracking() {\n const last = trackStack.pop();\n shouldTrack = last === void 0 ? true : last;\n}\nfunction track(target, type, key) {\n if (!shouldTrack || activeEffect === void 0) {\n return;\n }\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n targetMap.set(target, depsMap = /* @__PURE__ */ new Map());\n }\n let dep = depsMap.get(key);\n if (!dep) {\n depsMap.set(key, dep = /* @__PURE__ */ new Set());\n }\n if (!dep.has(activeEffect)) {\n dep.add(activeEffect);\n activeEffect.deps.push(dep);\n if (activeEffect.options.onTrack) {\n activeEffect.options.onTrack({\n effect: activeEffect,\n target,\n type,\n key\n });\n }\n }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n return;\n }\n const effects = /* @__PURE__ */ new Set();\n const add2 = (effectsToAdd) => {\n if (effectsToAdd) {\n effectsToAdd.forEach((effect3) => {\n if (effect3 !== activeEffect || effect3.allowRecurse) {\n effects.add(effect3);\n }\n });\n }\n };\n if (type === \"clear\") {\n depsMap.forEach(add2);\n } else if (key === \"length\" && isArray(target)) {\n depsMap.forEach((dep, key2) => {\n if (key2 === \"length\" || key2 >= newValue) {\n add2(dep);\n }\n });\n } else {\n if (key !== void 0) {\n add2(depsMap.get(key));\n }\n switch (type) {\n case \"add\":\n if (!isArray(target)) {\n add2(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n add2(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n } else if (isIntegerKey(key)) {\n add2(depsMap.get(\"length\"));\n }\n break;\n case \"delete\":\n if (!isArray(target)) {\n add2(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n add2(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n }\n break;\n case \"set\":\n if (isMap(target)) {\n add2(depsMap.get(ITERATE_KEY));\n }\n break;\n }\n }\n const run = (effect3) => {\n if (effect3.options.onTrigger) {\n effect3.options.onTrigger({\n effect: effect3,\n target,\n key,\n type,\n newValue,\n oldValue,\n oldTarget\n });\n }\n if (effect3.options.scheduler) {\n effect3.options.scheduler(effect3);\n } else {\n effect3();\n }\n };\n effects.forEach(run);\n}\nvar isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);\nvar builtInSymbols = new Set(Object.getOwnPropertyNames(Symbol).map((key) => Symbol[key]).filter(isSymbol));\nvar get2 = /* @__PURE__ */ createGetter();\nvar readonlyGet = /* @__PURE__ */ createGetter(true);\nvar arrayInstrumentations = /* @__PURE__ */ createArrayInstrumentations();\nfunction createArrayInstrumentations() {\n const instrumentations = {};\n [\"includes\", \"indexOf\", \"lastIndexOf\"].forEach((key) => {\n instrumentations[key] = function(...args) {\n const arr = toRaw(this);\n for (let i = 0, l = this.length; i < l; i++) {\n track(arr, \"get\", i + \"\");\n }\n const res = arr[key](...args);\n if (res === -1 || res === false) {\n return arr[key](...args.map(toRaw));\n } else {\n return res;\n }\n };\n });\n [\"push\", \"pop\", \"shift\", \"unshift\", \"splice\"].forEach((key) => {\n instrumentations[key] = function(...args) {\n pauseTracking();\n const res = toRaw(this)[key].apply(this, args);\n resetTracking();\n return res;\n };\n });\n return instrumentations;\n}\nfunction createGetter(isReadonly = false, shallow = false) {\n return function get3(target, key, receiver) {\n if (key === \"__v_isReactive\") {\n return !isReadonly;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly;\n } else if (key === \"__v_raw\" && receiver === (isReadonly ? shallow ? shallowReadonlyMap : readonlyMap : shallow ? shallowReactiveMap : reactiveMap).get(target)) {\n return target;\n }\n const targetIsArray = isArray(target);\n if (!isReadonly && targetIsArray && hasOwn(arrayInstrumentations, key)) {\n return Reflect.get(arrayInstrumentations, key, receiver);\n }\n const res = Reflect.get(target, key, receiver);\n if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n return res;\n }\n if (!isReadonly) {\n track(target, \"get\", key);\n }\n if (shallow) {\n return res;\n }\n if (isRef(res)) {\n const shouldUnwrap = !targetIsArray || !isIntegerKey(key);\n return shouldUnwrap ? res.value : res;\n }\n if (isObject(res)) {\n return isReadonly ? readonly(res) : reactive2(res);\n }\n return res;\n };\n}\nvar set2 = /* @__PURE__ */ createSetter();\nfunction createSetter(shallow = false) {\n return function set3(target, key, value, receiver) {\n let oldValue = target[key];\n if (!shallow) {\n value = toRaw(value);\n oldValue = toRaw(oldValue);\n if (!isArray(target) && isRef(oldValue) && !isRef(value)) {\n oldValue.value = value;\n return true;\n }\n }\n const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key);\n const result = Reflect.set(target, key, value, receiver);\n if (target === toRaw(receiver)) {\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n }\n return result;\n };\n}\nfunction deleteProperty(target, key) {\n const hadKey = hasOwn(target, key);\n const oldValue = target[key];\n const result = Reflect.deleteProperty(target, key);\n if (result && hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n}\nfunction has(target, key) {\n const result = Reflect.has(target, key);\n if (!isSymbol(key) || !builtInSymbols.has(key)) {\n track(target, \"has\", key);\n }\n return result;\n}\nfunction ownKeys(target) {\n track(target, \"iterate\", isArray(target) ? \"length\" : ITERATE_KEY);\n return Reflect.ownKeys(target);\n}\nvar mutableHandlers = {\n get: get2,\n set: set2,\n deleteProperty,\n has,\n ownKeys\n};\nvar readonlyHandlers = {\n get: readonlyGet,\n set(target, key) {\n if (true) {\n console.warn(`Set operation on key \"${String(key)}\" failed: target is readonly.`, target);\n }\n return true;\n },\n deleteProperty(target, key) {\n if (true) {\n console.warn(`Delete operation on key \"${String(key)}\" failed: target is readonly.`, target);\n }\n return true;\n }\n};\nvar toReactive = (value) => isObject(value) ? reactive2(value) : value;\nvar toReadonly = (value) => isObject(value) ? readonly(value) : value;\nvar toShallow = (value) => value;\nvar getProto = (v) => Reflect.getPrototypeOf(v);\nfunction get$1(target, key, isReadonly = false, isShallow = false) {\n target = target[\n \"__v_raw\"\n /* RAW */\n ];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (key !== rawKey) {\n !isReadonly && track(rawTarget, \"get\", key);\n }\n !isReadonly && track(rawTarget, \"get\", rawKey);\n const { has: has2 } = getProto(rawTarget);\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n if (has2.call(rawTarget, key)) {\n return wrap(target.get(key));\n } else if (has2.call(rawTarget, rawKey)) {\n return wrap(target.get(rawKey));\n } else if (target !== rawTarget) {\n target.get(key);\n }\n}\nfunction has$1(key, isReadonly = false) {\n const target = this[\n \"__v_raw\"\n /* RAW */\n ];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (key !== rawKey) {\n !isReadonly && track(rawTarget, \"has\", key);\n }\n !isReadonly && track(rawTarget, \"has\", rawKey);\n return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);\n}\nfunction size(target, isReadonly = false) {\n target = target[\n \"__v_raw\"\n /* RAW */\n ];\n !isReadonly && track(toRaw(target), \"iterate\", ITERATE_KEY);\n return Reflect.get(target, \"size\", target);\n}\nfunction add(value) {\n value = toRaw(value);\n const target = toRaw(this);\n const proto = getProto(target);\n const hadKey = proto.has.call(target, value);\n if (!hadKey) {\n target.add(value);\n trigger(target, \"add\", value, value);\n }\n return this;\n}\nfunction set$1(key, value) {\n value = toRaw(value);\n const target = toRaw(this);\n const { has: has2, get: get3 } = getProto(target);\n let hadKey = has2.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has2.call(target, key);\n } else if (true) {\n checkIdentityKeys(target, has2, key);\n }\n const oldValue = get3.call(target, key);\n target.set(key, value);\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n return this;\n}\nfunction deleteEntry(key) {\n const target = toRaw(this);\n const { has: has2, get: get3 } = getProto(target);\n let hadKey = has2.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has2.call(target, key);\n } else if (true) {\n checkIdentityKeys(target, has2, key);\n }\n const oldValue = get3 ? get3.call(target, key) : void 0;\n const result = target.delete(key);\n if (hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n}\nfunction clear() {\n const target = toRaw(this);\n const hadItems = target.size !== 0;\n const oldTarget = true ? isMap(target) ? new Map(target) : new Set(target) : void 0;\n const result = target.clear();\n if (hadItems) {\n trigger(target, \"clear\", void 0, void 0, oldTarget);\n }\n return result;\n}\nfunction createForEach(isReadonly, isShallow) {\n return function forEach(callback, thisArg) {\n const observed = this;\n const target = observed[\n \"__v_raw\"\n /* RAW */\n ];\n const rawTarget = toRaw(target);\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n !isReadonly && track(rawTarget, \"iterate\", ITERATE_KEY);\n return target.forEach((value, key) => {\n return callback.call(thisArg, wrap(value), wrap(key), observed);\n });\n };\n}\nfunction createIterableMethod(method, isReadonly, isShallow) {\n return function(...args) {\n const target = this[\n \"__v_raw\"\n /* RAW */\n ];\n const rawTarget = toRaw(target);\n const targetIsMap = isMap(rawTarget);\n const isPair = method === \"entries\" || method === Symbol.iterator && targetIsMap;\n const isKeyOnly = method === \"keys\" && targetIsMap;\n const innerIterator = target[method](...args);\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n !isReadonly && track(rawTarget, \"iterate\", isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);\n return {\n // iterator protocol\n next() {\n const { value, done } = innerIterator.next();\n return done ? { value, done } : {\n value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n done\n };\n },\n // iterable protocol\n [Symbol.iterator]() {\n return this;\n }\n };\n };\n}\nfunction createReadonlyMethod(type) {\n return function(...args) {\n if (true) {\n const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n console.warn(`${capitalize(type)} operation ${key}failed: target is readonly.`, toRaw(this));\n }\n return type === \"delete\" ? false : this;\n };\n}\nfunction createInstrumentations() {\n const mutableInstrumentations2 = {\n get(key) {\n return get$1(this, key);\n },\n get size() {\n return size(this);\n },\n has: has$1,\n add,\n set: set$1,\n delete: deleteEntry,\n clear,\n forEach: createForEach(false, false)\n };\n const shallowInstrumentations2 = {\n get(key) {\n return get$1(this, key, false, true);\n },\n get size() {\n return size(this);\n },\n has: has$1,\n add,\n set: set$1,\n delete: deleteEntry,\n clear,\n forEach: createForEach(false, true)\n };\n const readonlyInstrumentations2 = {\n get(key) {\n return get$1(this, key, true);\n },\n get size() {\n return size(this, true);\n },\n has(key) {\n return has$1.call(this, key, true);\n },\n add: createReadonlyMethod(\n \"add\"\n /* ADD */\n ),\n set: createReadonlyMethod(\n \"set\"\n /* SET */\n ),\n delete: createReadonlyMethod(\n \"delete\"\n /* DELETE */\n ),\n clear: createReadonlyMethod(\n \"clear\"\n /* CLEAR */\n ),\n forEach: createForEach(true, false)\n };\n const shallowReadonlyInstrumentations2 = {\n get(key) {\n return get$1(this, key, true, true);\n },\n get size() {\n return size(this, true);\n },\n has(key) {\n return has$1.call(this, key, true);\n },\n add: createReadonlyMethod(\n \"add\"\n /* ADD */\n ),\n set: createReadonlyMethod(\n \"set\"\n /* SET */\n ),\n delete: createReadonlyMethod(\n \"delete\"\n /* DELETE */\n ),\n clear: createReadonlyMethod(\n \"clear\"\n /* CLEAR */\n ),\n forEach: createForEach(true, true)\n };\n const iteratorMethods = [\"keys\", \"values\", \"entries\", Symbol.iterator];\n iteratorMethods.forEach((method) => {\n mutableInstrumentations2[method] = createIterableMethod(method, false, false);\n readonlyInstrumentations2[method] = createIterableMethod(method, true, false);\n shallowInstrumentations2[method] = createIterableMethod(method, false, true);\n shallowReadonlyInstrumentations2[method] = createIterableMethod(method, true, true);\n });\n return [\n mutableInstrumentations2,\n readonlyInstrumentations2,\n shallowInstrumentations2,\n shallowReadonlyInstrumentations2\n ];\n}\nvar [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* @__PURE__ */ createInstrumentations();\nfunction createInstrumentationGetter(isReadonly, shallow) {\n const instrumentations = shallow ? isReadonly ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly ? readonlyInstrumentations : mutableInstrumentations;\n return (target, key, receiver) => {\n if (key === \"__v_isReactive\") {\n return !isReadonly;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly;\n } else if (key === \"__v_raw\") {\n return target;\n }\n return Reflect.get(hasOwn(instrumentations, key) && key in target ? instrumentations : target, key, receiver);\n };\n}\nvar mutableCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, false)\n};\nvar readonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, false)\n};\nfunction checkIdentityKeys(target, has2, key) {\n const rawKey = toRaw(key);\n if (rawKey !== key && has2.call(target, rawKey)) {\n const type = toRawType(target);\n 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.`);\n }\n}\nvar reactiveMap = /* @__PURE__ */ new WeakMap();\nvar shallowReactiveMap = /* @__PURE__ */ new WeakMap();\nvar readonlyMap = /* @__PURE__ */ new WeakMap();\nvar shallowReadonlyMap = /* @__PURE__ */ new WeakMap();\nfunction targetTypeMap(rawType) {\n switch (rawType) {\n case \"Object\":\n case \"Array\":\n return 1;\n case \"Map\":\n case \"Set\":\n case \"WeakMap\":\n case \"WeakSet\":\n return 2;\n default:\n return 0;\n }\n}\nfunction getTargetType(value) {\n return value[\n \"__v_skip\"\n /* SKIP */\n ] || !Object.isExtensible(value) ? 0 : targetTypeMap(toRawType(value));\n}\nfunction reactive2(target) {\n if (target && target[\n \"__v_isReadonly\"\n /* IS_READONLY */\n ]) {\n return target;\n }\n return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);\n}\nfunction readonly(target) {\n return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);\n}\nfunction createReactiveObject(target, isReadonly, baseHandlers, collectionHandlers, proxyMap) {\n if (!isObject(target)) {\n if (true) {\n console.warn(`value cannot be made reactive: ${String(target)}`);\n }\n return target;\n }\n if (target[\n \"__v_raw\"\n /* RAW */\n ] && !(isReadonly && target[\n \"__v_isReactive\"\n /* IS_REACTIVE */\n ])) {\n return target;\n }\n const existingProxy = proxyMap.get(target);\n if (existingProxy) {\n return existingProxy;\n }\n const targetType = getTargetType(target);\n if (targetType === 0) {\n return target;\n }\n const proxy = new Proxy(target, targetType === 2 ? collectionHandlers : baseHandlers);\n proxyMap.set(target, proxy);\n return proxy;\n}\nfunction toRaw(observed) {\n return observed && toRaw(observed[\n \"__v_raw\"\n /* RAW */\n ]) || observed;\n}\nfunction isRef(r) {\n return Boolean(r && r.__v_isRef === true);\n}\n\n// packages/alpinejs/src/magics/$nextTick.js\nmagic(\"nextTick\", () => nextTick);\n\n// packages/alpinejs/src/magics/$dispatch.js\nmagic(\"dispatch\", (el) => dispatch.bind(dispatch, el));\n\n// packages/alpinejs/src/magics/$watch.js\nmagic(\"watch\", (el, { evaluateLater: evaluateLater2, cleanup: cleanup2 }) => (key, callback) => {\n let evaluate2 = evaluateLater2(key);\n let getter = () => {\n let value;\n evaluate2((i) => value = i);\n return value;\n };\n let unwatch = watch(getter, callback);\n cleanup2(unwatch);\n});\n\n// packages/alpinejs/src/magics/$store.js\nmagic(\"store\", getStores);\n\n// packages/alpinejs/src/magics/$data.js\nmagic(\"data\", (el) => scope(el));\n\n// packages/alpinejs/src/magics/$root.js\nmagic(\"root\", (el) => closestRoot(el));\n\n// packages/alpinejs/src/magics/$refs.js\nmagic(\"refs\", (el) => {\n if (el._x_refs_proxy)\n return el._x_refs_proxy;\n el._x_refs_proxy = mergeProxies(getArrayOfRefObject(el));\n return el._x_refs_proxy;\n});\nfunction getArrayOfRefObject(el) {\n let refObjects = [];\n findClosest(el, (i) => {\n if (i._x_refs)\n refObjects.push(i._x_refs);\n });\n return refObjects;\n}\n\n// packages/alpinejs/src/ids.js\nvar globalIdMemo = {};\nfunction findAndIncrementId(name) {\n if (!globalIdMemo[name])\n globalIdMemo[name] = 0;\n return ++globalIdMemo[name];\n}\nfunction closestIdRoot(el, name) {\n return findClosest(el, (element) => {\n if (element._x_ids && element._x_ids[name])\n return true;\n });\n}\nfunction setIdRoot(el, name) {\n if (!el._x_ids)\n el._x_ids = {};\n if (!el._x_ids[name])\n el._x_ids[name] = findAndIncrementId(name);\n}\n\n// packages/alpinejs/src/magics/$id.js\nmagic(\"id\", (el, { cleanup: cleanup2 }) => (name, key = null) => {\n let cacheKey = `${name}${key ? `-${key}` : \"\"}`;\n return cacheIdByNameOnElement(el, cacheKey, cleanup2, () => {\n let root = closestIdRoot(el, name);\n let id = root ? root._x_ids[name] : findAndIncrementId(name);\n return key ? `${name}-${id}-${key}` : `${name}-${id}`;\n });\n});\ninterceptClone((from, to) => {\n if (from._x_id) {\n to._x_id = from._x_id;\n }\n});\nfunction cacheIdByNameOnElement(el, cacheKey, cleanup2, callback) {\n if (!el._x_id)\n el._x_id = {};\n if (el._x_id[cacheKey])\n return el._x_id[cacheKey];\n let output = callback();\n el._x_id[cacheKey] = output;\n cleanup2(() => {\n delete el._x_id[cacheKey];\n });\n return output;\n}\n\n// packages/alpinejs/src/magics/$el.js\nmagic(\"el\", (el) => el);\n\n// packages/alpinejs/src/magics/index.js\nwarnMissingPluginMagic(\"Focus\", \"focus\", \"focus\");\nwarnMissingPluginMagic(\"Persist\", \"persist\", \"persist\");\nfunction warnMissingPluginMagic(name, magicName, slug) {\n magic(magicName, (el) => warn(`You can't use [$${magicName}] without first installing the \"${name}\" plugin here: https://alpinejs.dev/plugins/${slug}`, el));\n}\n\n// packages/alpinejs/src/directives/x-modelable.js\ndirective(\"modelable\", (el, { expression }, { effect: effect3, evaluateLater: evaluateLater2, cleanup: cleanup2 }) => {\n let func = evaluateLater2(expression);\n let innerGet = () => {\n let result;\n func((i) => result = i);\n return result;\n };\n let evaluateInnerSet = evaluateLater2(`${expression} = __placeholder`);\n let innerSet = (val) => evaluateInnerSet(() => {\n }, { scope: { \"__placeholder\": val } });\n let initialValue = innerGet();\n innerSet(initialValue);\n queueMicrotask(() => {\n if (!el._x_model)\n return;\n el._x_removeModelListeners[\"default\"]();\n let outerGet = el._x_model.get;\n let outerSet = el._x_model.set;\n let releaseEntanglement = entangle(\n {\n get() {\n return outerGet();\n },\n set(value) {\n outerSet(value);\n }\n },\n {\n get() {\n return innerGet();\n },\n set(value) {\n innerSet(value);\n }\n }\n );\n cleanup2(releaseEntanglement);\n });\n});\n\n// packages/alpinejs/src/directives/x-teleport.js\ndirective(\"teleport\", (el, { modifiers, expression }, { cleanup: cleanup2 }) => {\n if (el.tagName.toLowerCase() !== \"template\")\n warn(\"x-teleport can only be used on a <template> tag\", el);\n let target = getTarget(expression);\n let clone2 = el.content.cloneNode(true).firstElementChild;\n el._x_teleport = clone2;\n clone2._x_teleportBack = el;\n el.setAttribute(\"data-teleport-template\", true);\n clone2.setAttribute(\"data-teleport-target\", true);\n if (el._x_forwardEvents) {\n el._x_forwardEvents.forEach((eventName) => {\n clone2.addEventListener(eventName, (e) => {\n e.stopPropagation();\n el.dispatchEvent(new e.constructor(e.type, e));\n });\n });\n }\n addScopeToNode(clone2, {}, el);\n let placeInDom = (clone3, target2, modifiers2) => {\n if (modifiers2.includes(\"prepend\")) {\n target2.parentNode.insertBefore(clone3, target2);\n } else if (modifiers2.includes(\"append\")) {\n target2.parentNode.insertBefore(clone3, target2.nextSibling);\n } else {\n target2.appendChild(clone3);\n }\n };\n mutateDom(() => {\n placeInDom(clone2, target, modifiers);\n skipDuringClone(() => {\n initTree(clone2);\n clone2._x_ignore = true;\n })();\n });\n el._x_teleportPutBack = () => {\n let target2 = getTarget(expression);\n mutateDom(() => {\n placeInDom(el._x_teleport, target2, modifiers);\n });\n };\n cleanup2(\n () => mutateDom(() => {\n clone2.remove();\n destroyTree(clone2);\n })\n );\n});\nvar teleportContainerDuringClone = document.createElement(\"div\");\nfunction getTarget(expression) {\n let target = skipDuringClone(() => {\n return document.querySelector(expression);\n }, () => {\n return teleportContainerDuringClone;\n })();\n if (!target)\n warn(`Cannot find x-teleport element for selector: \"${expression}\"`);\n return target;\n}\n\n// packages/alpinejs/src/directives/x-ignore.js\nvar handler = () => {\n};\nhandler.inline = (el, { modifiers }, { cleanup: cleanup2 }) => {\n modifiers.includes(\"self\") ? el._x_ignoreSelf = true : el._x_ignore = true;\n cleanup2(() => {\n modifiers.includes(\"self\") ? delete el._x_ignoreSelf : delete el._x_ignore;\n });\n};\ndirective(\"ignore\", handler);\n\n// packages/alpinejs/src/directives/x-effect.js\ndirective(\"effect\", skipDuringClone((el, { expression }, { effect: effect3 }) => {\n effect3(evaluateLater(el, expression));\n}));\n\n// packages/alpinejs/src/utils/on.js\nfunction on(el, event, modifiers, callback) {\n let listenerTarget = el;\n let handler4 = (e) => callback(e);\n let options = {};\n let wrapHandler = (callback2, wrapper) => (e) => wrapper(callback2, e);\n if (modifiers.includes(\"dot\"))\n event = dotSyntax(event);\n if (modifiers.includes(\"camel\"))\n event = camelCase2(event);\n if (modifiers.includes(\"passive\"))\n options.passive = true;\n if (modifiers.includes(\"capture\"))\n options.capture = true;\n if (modifiers.includes(\"window\"))\n listenerTarget = window;\n if (modifiers.includes(\"document\"))\n listenerTarget = document;\n if (modifiers.includes(\"debounce\")) {\n let nextModifier = modifiers[modifiers.indexOf(\"debounce\") + 1] || \"invalid-wait\";\n let wait = isNumeric(nextModifier.split(\"ms\")[0]) ? Number(nextModifier.split(\"ms\")[0]) : 250;\n handler4 = debounce(handler4, wait);\n }\n if (modifiers.includes(\"throttle\")) {\n let nextModifier = modifiers[modifiers.indexOf(\"throttle\") + 1] || \"invalid-wait\";\n let wait = isNumeric(nextModifier.split(\"ms\")[0]) ? Number(nextModifier.split(\"ms\")[0]) : 250;\n handler4 = throttle(handler4, wait);\n }\n if (modifiers.includes(\"prevent\"))\n handler4 = wrapHandler(handler4, (next, e) => {\n e.preventDefault();\n next(e);\n });\n if (modifiers.includes(\"stop\"))\n handler4 = wrapHandler(handler4, (next, e) => {\n e.stopPropagation();\n next(e);\n });\n if (modifiers.includes(\"once\")) {\n handler4 = wrapHandler(handler4, (next, e) => {\n next(e);\n listenerTarget.removeEventListener(event, handler4, options);\n });\n }\n if (modifiers.includes(\"away\") || modifiers.includes(\"outside\")) {\n listenerTarget = document;\n handler4 = wrapHandler(handler4, (next, e) => {\n if (el.contains(e.target))\n return;\n if (e.target.isConnected === false)\n return;\n if (el.offsetWidth < 1 && el.offsetHeight < 1)\n return;\n if (el._x_isShown === false)\n return;\n next(e);\n });\n }\n if (modifiers.includes(\"self\"))\n handler4 = wrapHandler(handler4, (next, e) => {\n e.target === el && next(e);\n });\n if (isKeyEvent(event) || isClickEvent(event)) {\n handler4 = wrapHandler(handler4, (next, e) => {\n if (isListeningForASpecificKeyThatHasntBeenPressed(e, modifiers)) {\n return;\n }\n next(e);\n });\n }\n listenerTarget.addEventListener(event, handler4, options);\n return () => {\n listenerTarget.removeEventListener(event, handler4, options);\n };\n}\nfunction dotSyntax(subject) {\n return subject.replace(/-/g, \".\");\n}\nfunction camelCase2(subject) {\n return subject.toLowerCase().replace(/-(\\w)/g, (match, char) => char.toUpperCase());\n}\nfunction isNumeric(subject) {\n return !Array.isArray(subject) && !isNaN(subject);\n}\nfunction kebabCase2(subject) {\n if ([\" \", \"_\"].includes(\n subject\n ))\n return subject;\n return subject.replace(/([a-z])([A-Z])/g, \"$1-$2\").replace(/[_\\s]/, \"-\").toLowerCase();\n}\nfunction isKeyEvent(event) {\n return [\"keydown\", \"keyup\"].includes(event);\n}\nfunction isClickEvent(event) {\n return [\"contextmenu\", \"click\", \"mouse\"].some((i) => event.includes(i));\n}\nfunction isListeningForASpecificKeyThatHasntBeenPressed(e, modifiers) {\n let keyModifiers = modifiers.filter((i) => {\n return ![\"window\", \"document\", \"prevent\", \"stop\", \"once\", \"capture\", \"self\", \"away\", \"outside\", \"passive\"].includes(i);\n });\n if (keyModifiers.includes(\"debounce\")) {\n let debounceIndex = keyModifiers.indexOf(\"debounce\");\n keyModifiers.splice(debounceIndex, isNumeric((keyModifiers[debounceIndex + 1] || \"invalid-wait\").split(\"ms\")[0]) ? 2 : 1);\n }\n if (keyModifiers.includes(\"throttle\")) {\n let debounceIndex = keyModifiers.indexOf(\"throttle\");\n keyModifiers.splice(debounceIndex, isNumeric((keyModifiers[debounceIndex + 1] || \"invalid-wait\").split(\"ms\")[0]) ? 2 : 1);\n }\n if (keyModifiers.length === 0)\n return false;\n if (keyModifiers.length === 1 && keyToModifiers(e.key).includes(keyModifiers[0]))\n return false;\n const systemKeyModifiers = [\"ctrl\", \"shift\", \"alt\", \"meta\", \"cmd\", \"super\"];\n const selectedSystemKeyModifiers = systemKeyModifiers.filter((modifier) => keyModifiers.includes(modifier));\n keyModifiers = keyModifiers.filter((i) => !selectedSystemKeyModifiers.includes(i));\n if (selectedSystemKeyModifiers.length > 0) {\n const activelyPressedKeyModifiers = selectedSystemKeyModifiers.filter((modifier) => {\n if (modifier === \"cmd\" || modifier === \"super\")\n modifier = \"meta\";\n return e[`${modifier}Key`];\n });\n if (activelyPressedKeyModifiers.length === selectedSystemKeyModifiers.length) {\n if (isClickEvent(e.type))\n return false;\n if (keyToModifiers(e.key).includes(keyModifiers[0]))\n return false;\n }\n }\n return true;\n}\nfunction keyToModifiers(key) {\n if (!key)\n return [];\n key = kebabCase2(key);\n let modifierToKeyMap = {\n \"ctrl\": \"control\",\n \"slash\": \"/\",\n \"space\": \" \",\n \"spacebar\": \" \",\n \"cmd\": \"meta\",\n \"esc\": \"escape\",\n \"up\": \"arrow-up\",\n \"down\": \"arrow-down\",\n \"left\": \"arrow-left\",\n \"right\": \"arrow-right\",\n \"period\": \".\",\n \"comma\": \",\",\n \"equal\": \"=\",\n \"minus\": \"-\",\n \"underscore\": \"_\"\n };\n modifierToKeyMap[key] = key;\n return Object.keys(modifierToKeyMap).map((modifier) => {\n if (modifierToKeyMap[modifier] === key)\n return modifier;\n }).filter((modifier) => modifier);\n}\n\n// packages/alpinejs/src/directives/x-model.js\ndirective(\"model\", (el, { modifiers, expression }, { effect: effect3, cleanup: cleanup2 }) => {\n let scopeTarget = el;\n if (modifiers.includes(\"parent\")) {\n scopeTarget = el.parentNode;\n }\n let evaluateGet = evaluateLater(scopeTarget, expression);\n let evaluateSet;\n if (typeof expression === \"string\") {\n evaluateSet = evaluateLater(scopeTarget, `${expression} = __placeholder`);\n } else if (typeof expression === \"function\" && typeof expression() === \"string\") {\n evaluateSet = evaluateLater(scopeTarget, `${expression()} = __placeholder`);\n } else {\n evaluateSet = () => {\n };\n }\n let getValue = () => {\n let result;\n evaluateGet((value) => result = value);\n return isGetterSetter(result) ? result.get() : result;\n };\n let setValue = (value) => {\n let result;\n evaluateGet((value2) => result = value2);\n if (isGetterSetter(result)) {\n result.set(value);\n } else {\n evaluateSet(() => {\n }, {\n scope: { \"__placeholder\": value }\n });\n }\n };\n if (typeof expression === \"string\" && el.type === \"radio\") {\n mutateDom(() => {\n if (!el.hasAttribute(\"name\"))\n el.setAttribute(\"name\", expression);\n });\n }\n var event = el.tagName.toLowerCase() === \"select\" || [\"checkbox\", \"radio\"].includes(el.type) || modifiers.includes(\"lazy\") ? \"change\" : \"input\";\n let removeListener = isCloning ? () => {\n } : on(el, event, modifiers, (e) => {\n setValue(getInputValue(el, modifiers, e, getValue()));\n });\n if (modifiers.includes(\"fill\")) {\n if ([void 0, null, \"\"].includes(getValue()) || isCheckbox(el) && Array.isArray(getValue()) || el.tagName.toLowerCase() === \"select\" && el.multiple) {\n setValue(\n getInputValue(el, modifiers, { target: el }, getValue())\n );\n }\n }\n if (!el._x_removeModelListeners)\n el._x_removeModelListeners = {};\n el._x_removeModelListeners[\"default\"] = removeListener;\n cleanup2(() => el._x_removeModelListeners[\"default\"]());\n if (el.form) {\n let removeResetListener = on(el.form, \"reset\", [], (e) => {\n nextTick(() => el._x_model && el._x_model.set(getInputValue(el, modifiers, { target: el }, getValue())));\n });\n cleanup2(() => removeResetListener());\n }\n el._x_model = {\n get() {\n return getValue();\n },\n set(value) {\n setValue(value);\n }\n };\n el._x_forceModelUpdate = (value) => {\n if (value === void 0 && typeof expression === \"string\" && expression.match(/\\./))\n value = \"\";\n window.fromModel = true;\n mutateDom(() => bind(el, \"value\", value));\n delete window.fromModel;\n };\n effect3(() => {\n let value = getValue();\n if (modifiers.includes(\"unintrusive\") && document.activeElement.isSameNode(el))\n return;\n el._x_forceModelUpdate(value);\n });\n});\nfunction getInputValue(el, modifiers, event, currentValue) {\n return mutateDom(() => {\n if (event instanceof CustomEvent && event.detail !== void 0)\n return event.detail !== null && event.detail !== void 0 ? event.detail : event.target.value;\n else if (isCheckbox(el)) {\n if (Array.isArray(currentValue)) {\n let newValue = null;\n if (modifiers.includes(\"number\")) {\n newValue = safeParseNumber(event.target.value);\n } else if (modifiers.includes(\"boolean\")) {\n newValue = safeParseBoolean(event.target.value);\n } else {\n newValue = event.target.value;\n }\n return event.target.checked ? currentValue.includes(newValue) ? currentValue : currentValue.concat([newValue]) : currentValue.filter((el2) => !checkedAttrLooseCompare2(el2, newValue));\n } else {\n return event.target.checked;\n }\n } else if (el.tagName.toLowerCase() === \"select\" && el.multiple) {\n if (modifiers.includes(\"number\")) {\n return Array.from(event.target.selectedOptions).map((option) => {\n let rawValue = option.value || option.text;\n return safeParseNumber(rawValue);\n });\n } else if (modifiers.includes(\"boolean\")) {\n return Array.from(event.target.selectedOptions).map((option) => {\n let rawValue = option.value || option.text;\n return safeParseBoolean(rawValue);\n });\n }\n return Array.from(event.target.selectedOptions).map((option) => {\n return option.value || option.text;\n });\n } else {\n let newValue;\n if (isRadio(el)) {\n if (event.target.checked) {\n newValue = event.target.value;\n } else {\n newValue = currentValue;\n }\n } else {\n newValue = event.target.value;\n }\n if (modifiers.includes(\"number\")) {\n return safeParseNumber(newValue);\n } else if (modifiers.includes(\"boolean\")) {\n return safeParseBoolean(newValue);\n } else if (modifiers.includes(\"trim\")) {\n return newValue.trim();\n } else {\n return newValue;\n }\n }\n });\n}\nfunction safeParseNumber(rawValue) {\n let number = rawValue ? parseFloat(rawValue) : null;\n return isNumeric2(number) ? number : rawValue;\n}\nfunction checkedAttrLooseCompare2(valueA, valueB) {\n return valueA == valueB;\n}\nfunction isNumeric2(subject) {\n return !Array.isArray(subject) && !isNaN(subject);\n}\nfunction isGetterSetter(value) {\n return value !== null && typeof value === \"object\" && typeof value.get === \"function\" && typeof value.set === \"function\";\n}\n\n// packages/alpinejs/src/directives/x-cloak.js\ndirective(\"cloak\", (el) => queueMicrotask(() => mutateDom(() => el.removeAttribute(prefix(\"cloak\")))));\n\n// packages/alpinejs/src/directives/x-init.js\naddInitSelector(() => `[${prefix(\"init\")}]`);\ndirective(\"init\", skipDuringClone((el, { expression }, { evaluate: evaluate2 }) => {\n if (typeof expression === \"string\") {\n return !!expression.trim() && evaluate2(expression, {}, false);\n }\n return evaluate2(expression, {}, false);\n}));\n\n// packages/alpinejs/src/directives/x-text.js\ndirective(\"text\", (el, { expression }, { effect: effect3, evaluateLater: evaluateLater2 }) => {\n let evaluate2 = evaluateLater2(expression);\n effect3(() => {\n evaluate2((value) => {\n mutateDom(() => {\n el.textContent = value;\n });\n });\n });\n});\n\n// packages/alpinejs/src/directives/x-html.js\ndirective(\"html\", (el, { expression }, { effect: effect3, evaluateLater: evaluateLater2 }) => {\n let evaluate2 = evaluateLater2(expression);\n effect3(() => {\n evaluate2((value) => {\n mutateDom(() => {\n el.innerHTML = value;\n el._x_ignoreSelf = true;\n initTree(el);\n delete el._x_ignoreSelf;\n });\n });\n });\n});\n\n// packages/alpinejs/src/directives/x-bind.js\nmapAttributes(startingWith(\":\", into(prefix(\"bind:\"))));\nvar handler2 = (el, { value, modifiers, expression, original }, { effect: effect3, cleanup: cleanup2 }) => {\n if (!value) {\n let bindingProviders = {};\n injectBindingProviders(bindingProviders);\n let getBindings = evaluateLater(el, expression);\n getBindings((bindings) => {\n applyBindingsObject(el, bindings, original);\n }, { scope: bindingProviders });\n return;\n }\n if (value === \"key\")\n return storeKeyForXFor(el, expression);\n if (el._x_inlineBindings && el._x_inlineBindings[value] && el._x_inlineBindings[value].extract) {\n return;\n }\n let evaluate2 = evaluateLater(el, expression);\n effect3(() => evaluate2((result) => {\n if (result === void 0 && typeof expression === \"string\" && expression.match(/\\./)) {\n result = \"\";\n }\n mutateDom(() => bind(el, value, result, modifiers));\n }));\n cleanup2(() => {\n el._x_undoAddedClasses && el._x_undoAddedClasses();\n el._x_undoAddedStyles && el._x_undoAddedStyles();\n });\n};\nhandler2.inline = (el, { value, modifiers, expression }) => {\n if (!value)\n return;\n if (!el._x_inlineBindings)\n el._x_inlineBindings = {};\n el._x_inlineBindings[value] = { expression, extract: false };\n};\ndirective(\"bind\", handler2);\nfunction storeKeyForXFor(el, expression) {\n el._x_keyExpression = expression;\n}\n\n// packages/alpinejs/src/directives/x-data.js\naddRootSelector(() => `[${prefix(\"data\")}]`);\ndirective(\"data\", (el, { expression }, { cleanup: cleanup2 }) => {\n if (shouldSkipRegisteringDataDuringClone(el))\n return;\n expression = expression === \"\" ? \"{}\" : expression;\n let magicContext = {};\n injectMagics(magicContext, el);\n let dataProviderContext = {};\n injectDataProviders(dataProviderContext, magicContext);\n let data2 = evaluate(el, expression, { scope: dataProviderContext });\n if (data2 === void 0 || data2 === true)\n data2 = {};\n injectMagics(data2, el);\n let reactiveData = reactive(data2);\n initInterceptors(reactiveData);\n let undo = addScopeToNode(el, reactiveData);\n reactiveData[\"init\"] && evaluate(el, reactiveData[\"init\"]);\n cleanup2(() => {\n reactiveData[\"destroy\"] && evaluate(el, reactiveData[\"destroy\"]);\n undo();\n });\n});\ninterceptClone((from, to) => {\n if (from._x_dataStack) {\n to._x_dataStack = from._x_dataStack;\n to.setAttribute(\"data-has-alpine-state\", true);\n }\n});\nfunction shouldSkipRegisteringDataDuringClone(el) {\n if (!isCloning)\n return false;\n if (isCloningLegacy)\n return true;\n return el.hasAttribute(\"data-has-alpine-state\");\n}\n\n// packages/alpinejs/src/directives/x-show.js\ndirective(\"show\", (el, { modifiers, expression }, { effect: effect3 }) => {\n let evaluate2 = evaluateLater(el, expression);\n if (!el._x_doHide)\n el._x_doHide = () => {\n mutateDom(() => {\n el.style.setProperty(\"display\", \"none\", modifiers.includes(\"important\") ? \"important\" : void 0);\n });\n };\n if (!el._x_doShow)\n el._x_doShow = () => {\n mutateDom(() => {\n if (el.style.length === 1 && el.style.display === \"none\") {\n el.removeAttribute(\"style\");\n } else {\n el.style.removeProperty(\"display\");\n }\n });\n };\n let hide = () => {\n el._x_doHide();\n el._x_isShown = false;\n };\n let show = () => {\n el._x_doShow();\n el._x_isShown = true;\n };\n let clickAwayCompatibleShow = () => setTimeout(show);\n let toggle = once(\n (value) => value ? show() : hide(),\n (value) => {\n if (typeof el._x_toggleAndCascadeWithTransitions === \"function\") {\n el._x_toggleAndCascadeWithTransitions(el, value, show, hide);\n } else {\n value ? clickAwayCompatibleShow() : hide();\n }\n }\n );\n let oldValue;\n let firstTime = true;\n effect3(() => evaluate2((value) => {\n if (!firstTime && value === oldValue)\n return;\n if (modifiers.includes(\"immediate\"))\n value ? clickAwayCompatibleShow() : hide();\n toggle(value);\n oldValue = value;\n firstTime = false;\n }));\n});\n\n// packages/alpinejs/src/directives/x-for.js\ndirective(\"for\", (el, { expression }, { effect: effect3, cleanup: cleanup2 }) => {\n let iteratorNames = parseForExpression(expression);\n let evaluateItems = evaluateLater(el, iteratorNames.items);\n let evaluateKey = evaluateLater(\n el,\n // the x-bind:key expression is stored for our use instead of evaluated.\n el._x_keyExpression || \"index\"\n );\n el._x_prevKeys = [];\n el._x_lookup = {};\n effect3(() => loop(el, iteratorNames, evaluateItems, evaluateKey));\n cleanup2(() => {\n Object.values(el._x_lookup).forEach((el2) => mutateDom(\n () => {\n destroyTree(el2);\n el2.remove();\n }\n ));\n delete el._x_prevKeys;\n delete el._x_lookup;\n });\n});\nfunction loop(el, iteratorNames, evaluateItems, evaluateKey) {\n let isObject2 = (i) => typeof i === \"object\" && !Array.isArray(i);\n let templateEl = el;\n evaluateItems((items) => {\n if (isNumeric3(items) && items >= 0) {\n items = Array.from(Array(items).keys(), (i) => i + 1);\n }\n if (items === void 0)\n items = [];\n let lookup = el._x_lookup;\n let prevKeys = el._x_prevKeys;\n let scopes = [];\n let keys = [];\n if (isObject2(items)) {\n items = Object.entries(items).map(([key, value]) => {\n let scope2 = getIterationScopeVariables(iteratorNames, value, key, items);\n evaluateKey((value2) => {\n if (keys.includes(value2))\n warn(\"Duplicate key on x-for\", el);\n keys.push(value2);\n }, { scope: { index: key, ...scope2 } });\n scopes.push(scope2);\n });\n } else {\n for (let i = 0; i < items.length; i++) {\n let scope2 = getIterationScopeVariables(iteratorNames, items[i], i, items);\n evaluateKey((value) => {\n if (keys.includes(value))\n warn(\"Duplicate key on x-for\", el);\n keys.push(value);\n }, { scope: { index: i, ...scope2 } });\n scopes.push(scope2);\n }\n }\n let adds = [];\n let moves = [];\n let removes = [];\n let sames = [];\n for (let i = 0; i < prevKeys.length; i++) {\n let key = prevKeys[i];\n if (keys.indexOf(key) === -1)\n removes.push(key);\n }\n prevKeys = prevKeys.filter((key) => !removes.includes(key));\n let lastKey = \"template\";\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n let prevIndex = prevKeys.indexOf(key);\n if (prevIndex === -1) {\n prevKeys.splice(i, 0, key);\n adds.push([lastKey, i]);\n } else if (prevIndex !== i) {\n let keyInSpot = prevKeys.splice(i, 1)[0];\n let keyForSpot = prevKeys.splice(prevIndex - 1, 1)[0];\n prevKeys.splice(i, 0, keyForSpot);\n prevKeys.splice(prevIndex, 0, keyInSpot);\n moves.push([keyInSpot, keyForSpot]);\n } else {\n sames.push(key);\n }\n lastKey = key;\n }\n for (let i = 0; i < removes.length; i++) {\n let key = removes[i];\n if (!(key in lookup))\n continue;\n mutateDom(() => {\n destroyTree(lookup[key]);\n lookup[key].remove();\n });\n delete lookup[key];\n }\n for (let i = 0; i < moves.length; i++) {\n let [keyInSpot, keyForSpot] = moves[i];\n let elInSpot = lookup[keyInSpot];\n let elForSpot = lookup[keyForSpot];\n let marker = document.createElement(\"div\");\n mutateDom(() => {\n if (!elForSpot)\n warn(`x-for \":key\" is undefined or invalid`, templateEl, keyForSpot, lookup);\n elForSpot.after(marker);\n elInSpot.after(elForSpot);\n elForSpot._x_currentIfEl && elForSpot.after(elForSpot._x_currentIfEl);\n marker.before(elInSpot);\n elInSpot._x_currentIfEl && elInSpot.after(elInSpot._x_currentIfEl);\n marker.remove();\n });\n elForSpot._x_refreshXForScope(scopes[keys.indexOf(keyForSpot)]);\n }\n for (let i = 0; i < adds.length; i++) {\n let [lastKey2, index] = adds[i];\n let lastEl = lastKey2 === \"template\" ? templateEl : lookup[lastKey2];\n if (lastEl._x_currentIfEl)\n lastEl = lastEl._x_currentIfEl;\n let scope2 = scopes[index];\n let key = keys[index];\n let clone2 = document.importNode(templateEl.content, true).firstElementChild;\n let reactiveScope = reactive(scope2);\n addScopeToNode(clone2, reactiveScope, templateEl);\n clone2._x_refreshXForScope = (newScope) => {\n Object.entries(newScope).forEach(([key2, value]) => {\n reactiveScope[key2] = value;\n });\n };\n mutateDom(() => {\n lastEl.after(clone2);\n skipDuringClone(() => initTree(clone2))();\n });\n if (typeof key === \"object\") {\n warn(\"x-for key cannot be an object, it must be a string or an integer\", templateEl);\n }\n lookup[key] = clone2;\n }\n for (let i = 0; i < sames.length; i++) {\n lookup[sames[i]]._x_refreshXForScope(scopes[keys.indexOf(sames[i])]);\n }\n templateEl._x_prevKeys = keys;\n });\n}\nfunction parseForExpression(expression) {\n let forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\n let stripParensRE = /^\\s*\\(|\\)\\s*$/g;\n let forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/;\n let inMatch = expression.match(forAliasRE);\n if (!inMatch)\n return;\n let res = {};\n res.items = inMatch[2].trim();\n let item = inMatch[1].replace(stripParensRE, \"\").trim();\n let iteratorMatch = item.match(forIteratorRE);\n if (iteratorMatch) {\n res.item = item.replace(forIteratorRE, \"\").trim();\n res.index = iteratorMatch[1].trim();\n if (iteratorMatch[2]) {\n res.collection = iteratorMatch[2].trim();\n }\n } else {\n res.item = item;\n }\n return res;\n}\nfunction getIterationScopeVariables(iteratorNames, item, index, items) {\n let scopeVariables = {};\n if (/^\\[.*\\]$/.test(iteratorNames.item) && Array.isArray(item)) {\n let names = iteratorNames.item.replace(\"[\", \"\").replace(\"]\", \"\").split(\",\").map((i) => i.trim());\n names.forEach((name, i) => {\n scopeVariables[name] = item[i];\n });\n } else if (/^\\{.*\\}$/.test(iteratorNames.item) && !Array.isArray(item) && typeof item === \"object\") {\n let names = iteratorNames.item.replace(\"{\", \"\").replace(\"}\", \"\").split(\",\").map((i) => i.trim());\n names.forEach((name) => {\n scopeVariables[name] = item[name];\n });\n } else {\n scopeVariables[iteratorNames.item] = item;\n }\n if (iteratorNames.index)\n scopeVariables[iteratorNames.index] = index;\n if (iteratorNames.collection)\n scopeVariables[iteratorNames.collection] = items;\n return scopeVariables;\n}\nfunction isNumeric3(subject) {\n return !Array.isArray(subject) && !isNaN(subject);\n}\n\n// packages/alpinejs/src/directives/x-ref.js\nfunction handler3() {\n}\nhandler3.inline = (el, { expression }, { cleanup: cleanup2 }) => {\n let root = closestRoot(el);\n if (!root._x_refs)\n root._x_refs = {};\n root._x_refs[expression] = el;\n cleanup2(() => delete root._x_refs[expression]);\n};\ndirective(\"ref\", handler3);\n\n// packages/alpinejs/src/directives/x-if.js\ndirective(\"if\", (el, { expression }, { effect: effect3, cleanup: cleanup2 }) => {\n if (el.tagName.toLowerCase() !== \"template\")\n warn(\"x-if can only be used on a <template> tag\", el);\n let evaluate2 = evaluateLater(el, expression);\n let show = () => {\n if (el._x_currentIfEl)\n return el._x_currentIfEl;\n let clone2 = el.content.cloneNode(true).firstElementChild;\n addScopeToNode(clone2, {}, el);\n mutateDom(() => {\n el.after(clone2);\n skipDuringClone(() => initTree(clone2))();\n });\n el._x_currentIfEl = clone2;\n el._x_undoIf = () => {\n mutateDom(() => {\n destroyTree(clone2);\n clone2.remove();\n });\n delete el._x_currentIfEl;\n };\n return clone2;\n };\n let hide = () => {\n if (!el._x_undoIf)\n return;\n el._x_undoIf();\n delete el._x_undoIf;\n };\n effect3(() => evaluate2((value) => {\n value ? show() : hide();\n }));\n cleanup2(() => el._x_undoIf && el._x_undoIf());\n});\n\n// packages/alpinejs/src/directives/x-id.js\ndirective(\"id\", (el, { expression }, { evaluate: evaluate2 }) => {\n let names = evaluate2(expression);\n names.forEach((name) => setIdRoot(el, name));\n});\ninterceptClone((from, to) => {\n if (from._x_ids) {\n to._x_ids = from._x_ids;\n }\n});\n\n// packages/alpinejs/src/directives/x-on.js\nmapAttributes(startingWith(\"@\", into(prefix(\"on:\"))));\ndirective(\"on\", skipDuringClone((el, { value, modifiers, expression }, { cleanup: cleanup2 }) => {\n let evaluate2 = expression ? evaluateLater(el, expression) : () => {\n };\n if (el.tagName.toLowerCase() === \"template\") {\n if (!el._x_forwardEvents)\n el._x_forwardEvents = [];\n if (!el._x_forwardEvents.includes(value))\n el._x_forwardEvents.push(value);\n }\n let removeListener = on(el, value, modifiers, (e) => {\n evaluate2(() => {\n }, { scope: { \"$event\": e }, params: [e] });\n });\n cleanup2(() => removeListener());\n}));\n\n// packages/alpinejs/src/directives/index.js\nwarnMissingPluginDirective(\"Collapse\", \"collapse\", \"collapse\");\nwarnMissingPluginDirective(\"Intersect\", \"intersect\", \"intersect\");\nwarnMissingPluginDirective(\"Focus\", \"trap\", \"focus\");\nwarnMissingPluginDirective(\"Mask\", \"mask\", \"mask\");\nfunction warnMissingPluginDirective(name, directiveName, slug) {\n directive(directiveName, (el) => warn(`You can't use [x-${directiveName}] without first installing the \"${name}\" plugin here: https://alpinejs.dev/plugins/${slug}`, el));\n}\n\n// packages/alpinejs/src/index.js\nalpine_default.setEvaluator(normalEvaluator);\nalpine_default.setReactivityEngine({ reactive: reactive2, effect: effect2, release: stop, raw: toRaw });\nvar src_default = alpine_default;\n\n// packages/alpinejs/builds/module.js\nvar module_default = src_default;\nexport {\n src_default as Alpine,\n module_default as default\n};\n", "import Alpine from 'alpinejs'\n\nexport function generateEntangleFunction(component, cleanup) {\n if (! cleanup) cleanup = () => {}\n\n return (name, live = false) => {\n let isLive = live\n let livewireProperty = name\n let livewireComponent = component.$wire\n let livewirePropertyValue = livewireComponent.get(livewireProperty)\n\n let interceptor = Alpine.interceptor((initialValue, getter, setter, path, key) => {\n // Check to see if the Livewire property exists and if not log a console error\n // and return so everything else keeps running.\n if (typeof livewirePropertyValue === 'undefined') {\n console.error(`Livewire Entangle Error: Livewire property ['${livewireProperty}'] cannot be found on component: ['${component.name}']`)\n return\n }\n\n let release = Alpine.entangle({\n // Outer scope...\n get() {\n return livewireComponent.get(name)\n },\n set(value) {\n livewireComponent.set(name, value, isLive)\n }\n }, {\n // Inner scope...\n get() {\n return getter()\n },\n set(value) {\n setter(value)\n }\n })\n\n cleanup(() => release())\n\n return cloneIfObject(livewireComponent.get(name))\n }, obj => {\n Object.defineProperty(obj, 'live', {\n get() {\n isLive = true\n\n return obj\n }\n })\n })\n\n return interceptor(livewirePropertyValue)\n }\n}\n\nfunction cloneIfObject(value) {\n return typeof value === 'object'\n ? JSON.parse(JSON.stringify(value))\n : value\n}\n", "import { isFunction } from '@/utils'\n\n/**\n * Our internal event listener bus...\n */\nlet listeners = []\n\n/**\n * Register a callback to run when an event is triggered...\n */\nexport function on(name, callback) {\n if (! listeners[name]) listeners[name] = []\n\n listeners[name].push(callback)\n\n // Return an \"off\" callback to remove the listener...\n return () => {\n listeners[name] = listeners[name].filter(i => i !== callback)\n }\n}\n\n/**\n * In addition to triggering an event, this method allows you to\n * defer running callbacks returned from listeners and pass a\n * value through each one so they can act like middleware.\n *\n * An example of using this combination to the fullest:\n *\n * // First let's look at the triggering phase:\n * let finish = trigger([event name], ...[event params])\n *\n * return finish([pass-through value])\n *\n * // Now, let's look at the \"listening\" phase:\n * on([event name], (...[event params]) => {\n * // The contents of this callback will be run immediately on trigger.\n *\n * return ([pass-through value]) => {\n * // This callback will be run when \"finish()\" is called.\n *\n * // The [pass-through value] can be mutated and must\n * // be returned for the next callback to process.\n * return [pass-through value]\n * }\n * })\n */\nexport function trigger(name, ...params) {\n let callbacks = listeners[name] || []\n\n let finishers = []\n\n for (let i = 0; i < callbacks.length; i++) {\n let finisher = callbacks[i](...params)\n\n if (isFunction(finisher)) finishers.push(finisher)\n }\n\n return (result) => {\n return runFinishers(finishers, result)\n }\n}\n\nexport async function triggerAsync(name, ...params) {\n let callbacks = listeners[name] || []\n\n let finishers = []\n\n for (let i = 0; i < callbacks.length; i++) {\n let finisher = await callbacks[i](...params)\n\n if (isFunction(finisher)) finishers.push(finisher)\n }\n\n return (result) => {\n return runFinishers(finishers, result)\n }\n}\n\nexport function runFinishers(finishers, result)\n{\n let latest = result\n\n for (let i = 0; i < finishers.length; i++) {\n let iResult = finishers[i](latest)\n\n if (iResult !== undefined) {\n latest = iResult\n }\n }\n\n return latest\n}\n", "\n// This code and concept is all Jonathan Reinink - thanks main!\nexport function showHtmlModal(html) {\n let page = document.createElement('html')\n page.innerHTML = html\n page.querySelectorAll('a').forEach(a =>\n a.setAttribute('target', '_top')\n )\n\n let modal = document.getElementById('livewire-error')\n\n if (typeof modal != 'undefined' && modal != null) {\n // Modal already exists.\n modal.innerHTML = ''\n } else {\n modal = document.createElement('div')\n modal.id = 'livewire-error'\n modal.style.position = 'fixed'\n modal.style.width = '100vw'\n modal.style.height = '100vh'\n modal.style.padding = '50px'\n modal.style.backgroundColor = 'rgba(0, 0, 0, .6)'\n modal.style.zIndex = 200000\n }\n\n let iframe = document.createElement('iframe')\n iframe.style.backgroundColor = '#17161A'\n iframe.style.borderRadius = '5px'\n iframe.style.width = '100%'\n iframe.style.height = '100%'\n modal.appendChild(iframe)\n\n document.body.prepend(modal)\n document.body.style.overflow = 'hidden'\n iframe.contentWindow.document.open()\n iframe.contentWindow.document.write(page.outerHTML)\n iframe.contentWindow.document.close()\n\n // Close on click.\n modal.addEventListener('click', () => hideHtmlModal(modal))\n\n // Close on escape key press.\n modal.setAttribute('tabindex', 0)\n modal.addEventListener('keydown', e => {\n if (e.key === 'Escape') hideHtmlModal(modal)\n })\n modal.focus()\n}\n\nexport function hideHtmlModal(modal) {\n modal.outerHTML = ''\n document.body.style.overflow = 'visible'\n}\n", "import { sendRequest } from \"@/request\"\n\n/**\n * The RequestPool contains a list of commits to be sent to the server...\n */\nexport class RequestPool {\n constructor() {\n this.commits = new Set\n }\n\n add(commit) {\n this.commits.add(commit)\n }\n\n delete(commit) {\n this.commits.delete(commit)\n }\n\n hasCommitFor(component) {\n return !! this.findCommitByComponent(component)\n }\n\n findCommitByComponent(component) {\n // Determine if this pool already has a commit for this component...\n for (let [idx, commit] of this.commits.entries()) {\n if (commit.component === component) return commit\n }\n }\n\n // Determine if a commit should be added to this pool or isolated into its own...\n shouldHoldCommit(commit) {\n return ! commit.isolate\n }\n\n empty() {\n return this.commits.size === 0\n }\n\n async send() {\n this.prepare()\n\n // Send this pool of commits to the server and let the commits\n // Manage their own response actions...\n await sendRequest(this)\n }\n\n prepare() {\n // Give each commit a chance to do any last-minute prep\n // before being sent to the server.\n this.commits.forEach(i => i.prepare())\n }\n\n payload() {\n // Extract a request payload from each of the commits in this pool...\n let commitPayloads = []\n\n // Collect success and failure callbacks to be used inside aggregated callbacks...\n let successReceivers = []\n let failureReceivers = []\n\n this.commits.forEach(commit => {\n let [payload, succeed, fail] = commit.toRequestPayload()\n\n commitPayloads.push(payload)\n successReceivers.push(succeed)\n failureReceivers.push(fail)\n })\n\n // Aggregate the success and failure callbacks for individual commits\n // into something that can be called singularly...\n let succeed = components => successReceivers.forEach(receiver => receiver(components.shift()))\n\n let fail = () => failureReceivers.forEach(receiver => receiver())\n\n return [ commitPayloads, succeed, fail ]\n }\n}\n", "import { diff } from '@/utils'\nimport { on, trigger } from '@/hooks'\n\n/**\n * A commit represents an individual component updating itself server-side...\n */\nexport class Commit {\n constructor(component) {\n this.component = component\n this.isolate = false\n this.calls = []\n this.receivers = []\n this.resolvers = []\n }\n\n // Add a new resolver to be resolved when a commit is returned from the server...\n addResolver(resolver) {\n this.resolvers.push(resolver)\n }\n\n // Add a new action \"call\" to the commit payload...\n addCall(method, params, receiver) {\n this.calls.push({\n path: '', method, params,\n handleReturn(value) {\n receiver(value)\n },\n })\n }\n\n prepare() {\n trigger('commit.prepare', { component: this.component })\n }\n\n // Generate a JSON-friendly server-request payload...\n toRequestPayload() {\n // Generate a \"diff\" of the current last known server-side state, and\n // the new front-end state so that we can update the server atomically...\n let propertiesDiff = diff(this.component.canonical, this.component.ephemeral)\n\n let updates = this.component.mergeQueuedUpdates(propertiesDiff)\n\n let payload = {\n snapshot: this.component.snapshotEncoded,\n updates: updates,\n calls: this.calls.map(i => ({\n path: i.path,\n method: i.method,\n params: i.params,\n }))\n }\n\n // Store success and failure hooks from commit listeners\n // so they can be aggregated into a singular callback later...\n let succeedCallbacks = []\n let failCallbacks = []\n let respondCallbacks = []\n\n let succeed = (fwd) => succeedCallbacks.forEach(i => i(fwd))\n let fail = () => failCallbacks.forEach(i => i())\n let respond = () => respondCallbacks.forEach(i => i())\n\n // Allow other areas of the codebase to hook into the lifecycle\n // of an individual commit...\n let finishTarget = trigger('commit', {\n component: this.component,\n commit: payload,\n succeed: (callback) => {\n succeedCallbacks.push(callback)\n },\n fail: (callback) => {\n failCallbacks.push(callback)\n },\n respond: (callback) => {\n respondCallbacks.push(callback)\n },\n })\n\n // Handle the response payload for a commit...\n let handleResponse = (response) => {\n let { snapshot, effects } = response\n\n respond()\n\n // Take the new snapshot and merge it into the existing one...\n this.component.mergeNewSnapshot(snapshot, effects, updates)\n\n // Trigger any side effects from the payload like \"morph\" and \"dispatch event\"...\n this.component.processEffects(this.component.effects)\n\n if (effects['returns']) {\n let returns = effects['returns']\n\n // Here we'll match up returned values with their method call handlers. We need to build up\n // two \"stacks\" of the same length and walk through them together to handle them properly...\n let returnHandlerStack = this.calls.map(({ handleReturn }) => (handleReturn))\n\n returnHandlerStack.forEach((handleReturn, index) => {\n handleReturn(returns[index])\n })\n }\n\n let parsedSnapshot = JSON.parse(snapshot)\n\n finishTarget({ snapshot: parsedSnapshot, effects })\n\n this.resolvers.forEach(i => i())\n\n succeed(response)\n }\n\n let handleFailure = () => {\n respond()\n\n fail()\n }\n\n return [payload, handleResponse, handleFailure]\n }\n}\n", "import { trigger } from '@/hooks'\nimport { RequestPool } from './pool'\nimport { Commit } from './commit'\n\n/**\n * This bus manages the pooling of multiple commits and sending\n * those pools of commits to the server...\n */\nexport class CommitBus {\n constructor() {\n // A list of loose, un-pooled, commits ready to be pooled and sent to the server...\n this.commits = new Set\n\n // A list of commit pools currently out to the server...\n this.pools = new Set\n }\n\n add(component) {\n // If this component already has a commit, leave it, otherwise,\n // create a new commit and add it to the list...\n let commit = this.findCommitOr(component, () => {\n let newCommit = new Commit(component)\n\n this.commits.add(newCommit)\n\n return newCommit\n })\n\n // Buffer the sending of a pool for 5ms to account for UI interactions\n // that will trigger multiple events within a few milliseconds of each other.\n // For example, clicking on a button that both unfocuses a field and registers a mousedown...\n bufferPoolingForFiveMs(commit, () => {\n // If this commit is already in a pool, leave it be...\n let pool = this.findPoolWithComponent(commit.component)\n\n if (! pool) {\n // If it's not, create a new pool or add it to an existing one and trigger a network request...\n this.createAndSendNewPool()\n }\n })\n\n return commit\n }\n\n findCommitOr(component, callback) {\n for (let [idx, commit] of this.commits.entries()) {\n if (commit.component === component) {\n return commit\n }\n }\n\n return callback()\n }\n\n findPoolWithComponent(component) {\n for (let [idx, pool] of this.pools.entries()) {\n if (pool.hasCommitFor(component)) return pool\n }\n }\n\n createAndSendNewPool() {\n // Allow features like \"reactive properties\" to initiate associated\n // commits before those commits are pooled for a network request...\n trigger('commit.pooling', { commits: this.commits })\n\n // Split commits up across one or multiple pools to be sent as seperate network requests...\n let pools = this.corraleCommitsIntoPools()\n\n // Clear all commits in the queue now that they're in pools...\n this.commits.clear()\n\n trigger('commit.pooled', { pools })\n\n // Go through each pool and...\n pools.forEach(pool => {\n // Ignore empty pools (if other parts of the system have moved commits around different pools)...\n if (pool.empty()) return\n\n // Add it to the list of pending pools...\n this.pools.add(pool)\n\n // Send it's payload along to the server...\n pool.send().then(() => {\n // When it comes back, remove it from the list...\n this.pools.delete(pool)\n\n // Trigger another pooling phase in case commits have\n // been added while the current request was out...\n this.sendAnyQueuedCommits()\n })\n })\n }\n\n corraleCommitsIntoPools() {\n let pools = new Set\n\n // Go through each commit and assess wether it should be bundled\n // with other commits or sperated into it's own pool (network request)...\n for (let [idx, commit] of this.commits.entries()) {\n let hasFoundPool = false\n\n // If an existing pool wants to claim a commit, let it...\n pools.forEach(pool => {\n if (pool.shouldHoldCommit(commit)) {\n pool.add(commit)\n\n hasFoundPool = true\n }\n })\n\n // Otherwise, create a new pool and seed it with this commit...\n if (! hasFoundPool) {\n let newPool = new RequestPool\n\n newPool.add(commit)\n\n pools.add(newPool)\n }\n }\n\n return pools\n }\n\n sendAnyQueuedCommits() {\n if (this.commits.size > 0) {\n this.createAndSendNewPool()\n }\n }\n}\n\nlet buffersByCommit = new WeakMap\n\nfunction bufferPoolingForFiveMs(commit, callback) {\n if (buffersByCommit.has(commit)) return\n\n buffersByCommit.set(commit, setTimeout(() => {\n callback()\n\n buffersByCommit.delete(commit)\n }, 5))\n}\n", "import { getCsrfToken, contentIsFromDump, splitDumpFromContent, getUpdateUri } from '@/utils'\nimport { trigger, triggerAsync } from '@/hooks'\nimport { showHtmlModal } from './modal'\nimport { CommitBus } from './bus'\n\n/**\n * This is the bus that manages pooling and sending\n * commits to the server as network requests...\n */\nlet commitBus = new CommitBus\n\n/**\n * Create a commit and trigger a network request...\n */\nexport async function requestCommit(component) {\n let commit = commitBus.add(component)\n\n let promise = new Promise((resolve) => {\n commit.addResolver(resolve)\n })\n\n promise.commit = commit\n\n return promise\n}\n\n/**\n * Create a commit with an \"action\" call and trigger a network request...\n */\nexport async function requestCall(component, method, params) {\n let commit = commitBus.add(component)\n\n let promise = new Promise((resolve) => {\n commit.addCall(method, params, value => resolve(value))\n })\n\n promise.commit = commit\n\n return promise\n}\n\n/**\n * Send a pool of commits to the server over HTTP...\n */\nexport async function sendRequest(pool) {\n let [payload, handleSuccess, handleFailure] = pool.payload()\n\n let options = {\n method: 'POST',\n body: JSON.stringify({\n _token: getCsrfToken(),\n components: payload,\n }),\n headers: {\n 'Content-type': 'application/json',\n 'X-Livewire': '',\n },\n }\n\n let succeedCallbacks = []\n let failCallbacks = []\n let respondCallbacks = []\n\n let succeed = (fwd) => succeedCallbacks.forEach(i => i(fwd))\n let fail = (fwd) => failCallbacks.forEach(i => i(fwd))\n let respond = (fwd) => respondCallbacks.forEach(i => i(fwd))\n\n let finishProfile = trigger('request.profile', options)\n\n let updateUri = getUpdateUri()\n\n trigger('request', {\n url: updateUri,\n options,\n payload: options.body,\n respond: i => respondCallbacks.push(i),\n succeed: i => succeedCallbacks.push(i),\n fail: i => failCallbacks.push(i),\n })\n\n let response\n\n try {\n response = await fetch(updateUri, options)\n } catch (e) {\n // If something went wrong with the fetch (particularly\n // this would happen if the connection went offline)\n // fail with a 503 and allow Livewire to clean up\n\n finishProfile({ content: '{}', failed: true })\n\n handleFailure()\n\n fail({\n status: 503,\n content: null,\n preventDefault: () => {},\n })\n\n return\n }\n\n let mutableObject = {\n status: response.status,\n response,\n }\n\n respond(mutableObject)\n\n response = mutableObject.response\n\n let content = await response.text()\n\n // Handle error response...\n if (! response.ok) {\n finishProfile({ content: '{}', failed: true })\n\n let preventDefault = false\n\n handleFailure()\n\n fail({\n status: response.status,\n content,\n preventDefault: () => preventDefault = true,\n })\n\n if (preventDefault) return\n\n if (response.status === 419) {\n handlePageExpiry()\n }\n\n return showFailureModal(content)\n }\n\n /**\n * Sometimes a redirect happens on the backend outside of Livewire's control,\n * for example to a login page from a middleware, so we will just redirect\n * to that page.\n */\n if (response.redirected) {\n window.location.href = response.url\n }\n\n /**\n * Sometimes a response will be prepended with html to render a dump, so we\n * will seperate the dump html from Livewire's JSON response content and\n * render the dump in a modal and allow Livewire to continue with the\n * request.\n */\n if (contentIsFromDump(content)) {\n let dump\n [dump, content] = splitDumpFromContent(content)\n\n showHtmlModal(dump)\n\n finishProfile({ content: '{}', failed: true })\n } else {\n finishProfile({ content, failed: false })\n }\n\n let { components, assets } = JSON.parse(content)\n\n await triggerAsync('payload.intercept', { components, assets })\n\n await handleSuccess(components)\n\n succeed({ status: response.status, json: JSON.parse(content) })\n}\n\nfunction handlePageExpiry() {\n confirm(\n 'This page has expired.\\nWould you like to refresh the page?'\n ) && window.location.reload()\n}\n\nfunction showFailureModal(content) {\n let html = content\n\n showHtmlModal(html)\n}\n", "import { cancelUpload, removeUpload, upload, uploadMultiple } from './features/supportFileUploads'\nimport { dispatch, dispatchSelf, dispatchTo, listen } from '@/events'\nimport { generateEntangleFunction } from '@/features/supportEntangle'\nimport { closestComponent } from '@/store'\nimport { requestCommit, requestCall } from '@/request'\nimport { dataGet, dataSet } from '@/utils'\nimport Alpine from 'alpinejs'\n\nlet properties = {}\nlet fallback\n\nfunction wireProperty(name, callback, component = null) {\n properties[name] = callback\n}\n\nfunction wireFallback(callback) {\n fallback = callback\n}\n\n// For V2 backwards compatibility...\n// And I actually like both depending on the scenario...\nlet aliases = {\n 'on': '$on',\n 'el': '$el',\n 'id': '$id',\n 'get': '$get',\n 'set': '$set',\n 'call': '$call',\n 'commit': '$commit',\n 'watch': '$watch',\n 'entangle': '$entangle',\n 'dispatch': '$dispatch',\n 'dispatchTo': '$dispatchTo',\n 'dispatchSelf': '$dispatchSelf',\n 'upload': '$upload',\n 'uploadMultiple': '$uploadMultiple',\n 'removeUpload': '$removeUpload',\n 'cancelUpload': '$cancelUpload',\n}\n\nexport function generateWireObject(component, state) {\n return new Proxy({}, {\n get(target, property) {\n if (property === '__instance') return component\n\n if (property in aliases) {\n return getProperty(component, aliases[property])\n } else if (property in properties) {\n return getProperty(component, property)\n } else if (property in state) {\n return state[property]\n } else if (! ['then'].includes(property)) {\n return getFallback(component)(property)\n }\n },\n\n set(target, property, value) {\n if (property in state) {\n state[property] = value\n }\n\n return true\n },\n })\n}\n\nfunction getProperty(component, name) {\n return properties[name](component)\n}\n\nfunction getFallback(component) {\n return fallback(component)\n}\n\nAlpine.magic('wire', (el, { cleanup }) => {\n // Purposely initializing an empty variable here is a \"memo\"\n // so that a component is lazy-loaded when using $wire from Alpine...\n let component\n\n // Override $wire methods that need to be cleaned up when\n // and element is removed. For example, `x-data=\"{ foo: $wire.entangle(...) }\"`:\n // we would want the entangle effect freed if the element was removed from the DOM...\n return new Proxy({}, {\n get(target, property) {\n if (! component) component = closestComponent(el)\n\n if (['$entangle', 'entangle'].includes(property)) {\n return generateEntangleFunction(component, cleanup)\n }\n\n return component.$wire[property]\n },\n\n set(target, property, value) {\n if (! component) component = closestComponent(el)\n\n component.$wire[property] = value\n\n return true\n },\n })\n})\n\nwireProperty('__instance', (component) => component)\n\nwireProperty('$get', (component) => (property, reactive = true) => dataGet(reactive ? component.reactive : component.ephemeral, property))\n\nwireProperty('$el', (component) => {\n return component.el\n})\n\nwireProperty('$id', (component) => {\n return component.id\n})\n\nwireProperty('$set', (component) => async (property, value, live = true) => {\n dataSet(component.reactive, property, value)\n\n // If \"live\", send a request, queueing the property update to happen first\n // on the server, then trickle back down to the client and get merged...\n if (live) {\n component.queueUpdate(property, value)\n\n return await requestCommit(component)\n }\n\n return Promise.resolve()\n})\n\nwireProperty('$call', (component) => async (method, ...params) => {\n return await component.$wire[method](...params)\n})\n\nwireProperty('$entangle', (component) => (name, live = false) => {\n return generateEntangleFunction(component)(name, live)\n})\n\nwireProperty('$toggle', (component) => (name, live = true) => {\n return component.$wire.set(name, ! component.$wire.get(name), live)\n})\n\nwireProperty('$watch', (component) => (path, callback) => {\n let getter = () => {\n return dataGet(component.reactive, path)\n }\n\n let unwatch = Alpine.watch(getter, callback)\n\n component.addCleanup(unwatch)\n})\n\nwireProperty('$refresh', (component) => component.$wire.$commit)\nwireProperty('$commit', (component) => async () => await requestCommit(component))\n\nwireProperty('$on', (component) => (...params) => listen(component, ...params))\n\nwireProperty('$dispatch', (component) => (...params) => dispatch(component, ...params))\nwireProperty('$dispatchSelf', (component) => (...params) => dispatchSelf(component, ...params))\nwireProperty('$dispatchTo', () => (...params) => dispatchTo(...params))\nwireProperty('$upload', (component) => (...params) => upload(component, ...params))\nwireProperty('$uploadMultiple', (component) => (...params) => uploadMultiple(component, ...params))\nwireProperty('$removeUpload', (component) => (...params) => removeUpload(component, ...params))\nwireProperty('$cancelUpload', (component) => (...params) => cancelUpload(component, ...params))\n\nlet parentMemo = new WeakMap\n\nwireProperty('$parent', component => {\n if (parentMemo.has(component)) return parentMemo.get(component).$wire\n\n let parent = component.parent\n\n parentMemo.set(component, parent)\n\n return parent.$wire\n})\n\nlet overriddenMethods = new WeakMap\n\nexport function overrideMethod(component, method, callback) {\n if (! overriddenMethods.has(component)) {\n overriddenMethods.set(component, {})\n }\n\n let obj = overriddenMethods.get(component)\n\n obj[method] = callback\n\n overriddenMethods.set(component, obj)\n}\n\nwireFallback((component) => (property) => async (...params) => {\n // If this method is passed directly to a Vue or Alpine\n // event listener (@click=\"someMethod\") without using\n // parens, strip out the automatically added event.\n if (params.length === 1 && params[0] instanceof Event) {\n params = []\n }\n\n if (overriddenMethods.has(component)) {\n let overrides = overriddenMethods.get(component)\n\n if (typeof overrides[property] === 'function') {\n return overrides[property](params)\n }\n }\n\n return await requestCall(component, property, params)\n})\n", "import { dataSet, deepClone, diff, extractData} from '@/utils'\nimport { generateWireObject } from '@/$wire'\nimport { closestComponent, findComponent } from '@/store'\nimport { trigger } from '@/hooks'\n\nexport class Component {\n constructor(el) {\n if (el.__livewire) throw 'Component already initialized';\n\n el.__livewire = this\n\n this.el = el\n\n this.id = el.getAttribute('wire:id')\n\n this.__livewireId = this.id // @legacy\n\n this.snapshotEncoded = el.getAttribute('wire:snapshot')\n\n this.snapshot = JSON.parse(this.snapshotEncoded)\n\n if (! this.snapshot) {\n throw `Snapshot missing on Livewire component with id: ` + this.id\n }\n\n this.name = this.snapshot.memo.name\n\n this.effects = JSON.parse(el.getAttribute('wire:effects'))\n this.originalEffects = deepClone(this.effects)\n\n // \"canonical\" data represents the last known server state.\n this.canonical = extractData(deepClone(this.snapshot.data))\n // \"ephemeral\" represents the most current state. (This can be freely manipulated by end users)\n this.ephemeral = extractData(deepClone(this.snapshot.data))\n // \"reactive\" is just ephemeral, except when you mutate it, front-ends like Vue react.\n this.reactive = Alpine.reactive(this.ephemeral)\n\n this.queuedUpdates = {}\n\n // this.$wire = this.reactive\n this.$wire = generateWireObject(this, this.reactive)\n\n this.cleanups = []\n\n // Effects will be processed after every request, but we'll also handle them on initialization.\n this.processEffects(this.effects)\n }\n\n mergeNewSnapshot(snapshotEncoded, effects, updates = {}) {\n let snapshot = JSON.parse(snapshotEncoded)\n\n let oldCanonical = deepClone(this.canonical)\n let updatedOldCanonical = this.applyUpdates(oldCanonical, updates)\n\n let newCanonical = extractData(deepClone(snapshot.data))\n\n let dirty = diff(updatedOldCanonical, newCanonical)\n\n this.snapshotEncoded = snapshotEncoded\n\n this.snapshot = snapshot\n\n this.effects = effects\n\n this.canonical = extractData(deepClone(snapshot.data))\n\n let newData = extractData(deepClone(snapshot.data))\n\n Object.entries(dirty).forEach(([key, value]) => {\n let rootKey = key.split('.')[0]\n this.reactive[rootKey] = newData[rootKey]\n })\n // Object.entries(this.ephemeral).forEach(([key, value]) => {\n // if (! deeplyEqual(this.ephemeral[key], newData[key])) {\n // this.reactive[key] = newData[key]\n // }\n // })\n\n return dirty\n }\n\n queueUpdate(propertyName, value) {\n // These updates will be applied first on the server\n // on the next request, then trickle back to the\n // client on the next request that gets sent.\n this.queuedUpdates[propertyName] = value\n }\n\n mergeQueuedUpdates(diff) {\n // Before adding queuedUpdates into the diff list, we will remove any diffs\n // that will be overriden by the queued update. Queued updates will take\n // priority against ephemeral updates that have happend since them...\n Object.entries(this.queuedUpdates).forEach(([updateKey, updateValue]) => {\n Object.entries(diff).forEach(([diffKey, diffValue]) => {\n if (diffKey.startsWith(updateValue)) {\n delete diff[diffKey]\n }\n })\n\n diff[updateKey] = updateValue\n })\n\n this.queuedUpdates = []\n\n return diff\n }\n\n applyUpdates(object, updates) {\n for (let key in updates) {\n dataSet(object, key, updates[key])\n }\n\n return object\n }\n\n replayUpdate(snapshot, html) {\n let effects = { ...this.effects, html}\n\n this.mergeNewSnapshot(JSON.stringify(snapshot), effects)\n\n this.processEffects({ html })\n }\n\n /**\n * Here we'll take the new state and side effects from the\n * server and use them to update the existing data that\n * users interact with, triggering reactive effects.\n */\n processEffects(effects) {\n // This is for BC.\n trigger('effects', this, effects)\n\n trigger('effect', {\n component: this,\n effects,\n cleanup: i => this.addCleanup(i)\n })\n }\n\n get children() {\n let meta = this.snapshot.memo\n let childIds = Object.values(meta.children).map(i => i[1])\n\n return childIds.map(id => findComponent(id))\n }\n\n get parent() {\n return closestComponent(this.el.parentElement)\n }\n\n inscribeSnapshotAndEffectsOnElement() {\n let el = this.el\n\n el.setAttribute('wire:snapshot', this.snapshotEncoded)\n\n // We need to re-register any event listeners that were originally registered...\n let effects = this.originalEffects.listeners\n ? { listeners: this.originalEffects.listeners }\n : {}\n\n // We need to re-register any url/query-string bindings...\n if (this.originalEffects.url) {\n effects.url = this.originalEffects.url\n }\n\n // We need to re-register any scripts that were originally registered...\n if (this.originalEffects.scripts) {\n effects.scripts = this.originalEffects.scripts;\n }\n\n el.setAttribute('wire:effects', JSON.stringify(effects))\n }\n\n addCleanup(cleanup) {\n this.cleanups.push(cleanup)\n }\n\n cleanup() {\n delete this.el.__livewire\n\n while (this.cleanups.length > 0) {\n this.cleanups.pop()()\n }\n }\n}\n", "import { Component } from \"@/component\";\nimport { trigger } from \"@/hooks\";\n\nlet components = {}\n\nexport function initComponent(el) {\n let component = new Component(el)\n\n if (components[component.id]) throw 'Component already registered'\n\n let cleanup = (i) => component.addCleanup(i)\n\n trigger('component.init', { component, cleanup })\n\n components[component.id] = component\n\n return component\n}\n\nexport function destroyComponent(id) {\n let component = components[id]\n\n if (! component) return\n\n component.cleanup()\n\n delete components[id]\n}\n\nexport function hasComponent(id) {\n return !! components[id]\n}\n\nexport function findComponent(id) {\n let component = components[id]\n\n if (! component) throw 'Component not found: ' + id\n\n return component\n}\n\nexport function closestComponent(el, strict = true) {\n let closestRoot = Alpine.findClosest(el, i => i.__livewire)\n\n if (! closestRoot) {\n if (strict) throw \"Could not find Livewire component in DOM tree\"\n\n return\n }\n\n return closestRoot.__livewire\n}\n\nexport function componentsByName(name) {\n return Object.values(components).filter(component => {\n return name == component.name\n })\n}\n\nexport function getByName(name) {\n return componentsByName(name).map(i => i.$wire)\n}\n\nexport function find(id) {\n let component = components[id]\n\n return component && component.$wire\n}\n\nexport function first() {\n return Object.values(components)[0].$wire\n}\n\nexport function all() {\n return Object.values(components)\n}\n", "import { componentsByName } from \"@/store\"\n\nexport function dispatch(component, name, params) {\n dispatchEvent(component.el, name, params)\n}\n\nexport function dispatchGlobal(name, params) {\n dispatchEvent(window, name, params)\n}\n\nexport function dispatchSelf(component, name, params) {\n dispatchEvent(component.el, name, params, false)\n}\n\nexport function dispatchTo(componentName, name, params) {\n let targets = componentsByName(componentName)\n\n targets.forEach(target => {\n dispatchEvent(target.el, name, params, false)\n })\n}\n\nexport function listen(component, name, callback) {\n component.el.addEventListener(name, e => {\n callback(e.detail)\n })\n}\n\nexport function on(eventName, callback) {\n let handler = (e) => {\n // Implemented for backwards compatibility...\n if (! e.__livewire) return\n\n callback(e.detail)\n }\n\n window.addEventListener(eventName, handler)\n\n return () => {\n window.removeEventListener(eventName, handler)\n }\n}\n\nfunction dispatchEvent(target, name, params, bubbles = true) {\n let e = new CustomEvent(name, { bubbles, detail: params })\n\n e.__livewire = { name, params, receivedBy: [] }\n\n target.dispatchEvent(e)\n}\n", "import { on } from './hooks'\n\nlet customDirectiveNames = new Set\n\nexport function matchesForLivewireDirective(attributeName) {\n return attributeName.match(new RegExp('wire:'))\n}\n\nexport function extractDirective(el, name) {\n let [value, ...modifiers] = name.replace(new RegExp('wire:'), '').split('.')\n\n return new Directive(value, modifiers, name, el)\n}\n\nexport function directive(name, callback) {\n // Prevent the same directive from registering multiple initialization listeners...\n if (customDirectiveNames.has(name)) return\n\n customDirectiveNames.add(name)\n\n on('directive.init', ({ el, component, directive, cleanup }) => {\n if (directive.value === name) {\n callback({\n el, directive, component, $wire: component.$wire, cleanup\n })\n }\n })\n}\n\nexport function getDirectives(el) {\n return new DirectiveManager(el)\n}\n\nexport function customDirectiveHasBeenRegistered(name) {\n return customDirectiveNames.has(name)\n}\n\nclass DirectiveManager {\n constructor(el) {\n this.el = el\n this.directives = this.extractTypeModifiersAndValue()\n }\n\n all() {\n return this.directives\n }\n\n has(value) {\n return this.directives.map(directive => directive.value).includes(value)\n }\n\n missing(value) {\n return ! this.has(value)\n }\n\n get(value) {\n return this.directives.find(directive => directive.value === value)\n }\n\n extractTypeModifiersAndValue() {\n return Array.from(this.el.getAttributeNames()\n // Filter only the livewire directives.\n .filter(name => matchesForLivewireDirective(name))\n // Parse out the type, modifiers, and value from it.\n .map(name => extractDirective(this.el, name)))\n }\n}\n\nexport class Directive {\n constructor(value, modifiers, rawName, el) {\n this.rawName = this.raw = rawName\n this.el = el\n this.eventContext\n\n this.value = value\n this.modifiers = modifiers\n this.expression = this.el.getAttribute(this.rawName)\n }\n\n get method() {\n const { method } = this.parseOutMethodAndParams(this.expression)\n\n return method\n }\n\n get params() {\n const { params } = this.parseOutMethodAndParams(this.expression)\n\n return params\n }\n\n parseOutMethodAndParams(rawMethod) {\n let method = rawMethod\n let params = []\n const methodAndParamString = method.match(/(.*?)\\((.*)\\)/s)\n\n if (methodAndParamString) {\n method = methodAndParamString[1]\n\n // Use a function that returns it's arguments to parse and eval all params\n // This \"$event\" is for use inside the livewire event handler.\n let func = new Function('$event', `return (function () {\n for (var l=arguments.length, p=new Array(l), k=0; k<l; k++) {\n p[k] = arguments[k];\n }\n return [].concat(p);\n })(${methodAndParamString[2]})`)\n\n params = func(this.eventContext)\n }\n\n return { method, params }\n }\n}\n", "// packages/collapse/src/index.js\nfunction src_default(Alpine) {\n Alpine.directive(\"collapse\", collapse);\n collapse.inline = (el, { modifiers }) => {\n if (!modifiers.includes(\"min\"))\n return;\n el._x_doShow = () => {\n };\n el._x_doHide = () => {\n };\n };\n function collapse(el, { modifiers }) {\n let duration = modifierValue(modifiers, \"duration\", 250) / 1e3;\n let floor = modifierValue(modifiers, \"min\", 0);\n let fullyHide = !modifiers.includes(\"min\");\n if (!el._x_isShown)\n el.style.height = `${floor}px`;\n if (!el._x_isShown && fullyHide)\n el.hidden = true;\n if (!el._x_isShown)\n el.style.overflow = \"hidden\";\n let setFunction = (el2, styles) => {\n let revertFunction = Alpine.setStyles(el2, styles);\n return styles.height ? () => {\n } : revertFunction;\n };\n let transitionStyles = {\n transitionProperty: \"height\",\n transitionDuration: `${duration}s`,\n transitionTimingFunction: \"cubic-bezier(0.4, 0.0, 0.2, 1)\"\n };\n el._x_transition = {\n in(before = () => {\n }, after = () => {\n }) {\n if (fullyHide)\n el.hidden = false;\n if (fullyHide)\n el.style.display = null;\n let current = el.getBoundingClientRect().height;\n el.style.height = \"auto\";\n let full = el.getBoundingClientRect().height;\n if (current === full) {\n current = floor;\n }\n Alpine.transition(el, Alpine.setStyles, {\n during: transitionStyles,\n start: { height: current + \"px\" },\n end: { height: full + \"px\" }\n }, () => el._x_isShown = true, () => {\n if (el.getBoundingClientRect().height == full) {\n el.style.overflow = null;\n }\n });\n },\n out(before = () => {\n }, after = () => {\n }) {\n let full = el.getBoundingClientRect().height;\n Alpine.transition(el, setFunction, {\n during: transitionStyles,\n start: { height: full + \"px\" },\n end: { height: floor + \"px\" }\n }, () => el.style.overflow = \"hidden\", () => {\n el._x_isShown = false;\n if (el.style.height == `${floor}px` && fullyHide) {\n el.style.display = \"none\";\n el.hidden = true;\n }\n });\n }\n };\n }\n}\nfunction modifierValue(modifiers, key, fallback) {\n if (modifiers.indexOf(key) === -1)\n return fallback;\n const rawValue = modifiers[modifiers.indexOf(key) + 1];\n if (!rawValue)\n return fallback;\n if (key === \"duration\") {\n let match = rawValue.match(/([0-9]+)ms/);\n if (match)\n return match[1];\n }\n if (key === \"min\") {\n let match = rawValue.match(/([0-9]+)px/);\n if (match)\n return match[1];\n }\n return rawValue;\n}\n\n// packages/collapse/builds/module.js\nvar module_default = src_default;\nexport {\n src_default as collapse,\n module_default as default\n};\n", "// node_modules/tabbable/dist/index.esm.js\nvar candidateSelectors = [\"input\", \"select\", \"textarea\", \"a[href]\", \"button\", \"[tabindex]:not(slot)\", \"audio[controls]\", \"video[controls]\", '[contenteditable]:not([contenteditable=\"false\"])', \"details>summary:first-of-type\", \"details\"];\nvar candidateSelector = /* @__PURE__ */ candidateSelectors.join(\",\");\nvar NoElement = typeof Element === \"undefined\";\nvar matches = NoElement ? function() {\n} : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\nvar getRootNode = !NoElement && Element.prototype.getRootNode ? function(element) {\n return element.getRootNode();\n} : function(element) {\n return element.ownerDocument;\n};\nvar getCandidates = function getCandidates2(el, includeContainer, filter) {\n var candidates = Array.prototype.slice.apply(el.querySelectorAll(candidateSelector));\n if (includeContainer && matches.call(el, candidateSelector)) {\n candidates.unshift(el);\n }\n candidates = candidates.filter(filter);\n return candidates;\n};\nvar getCandidatesIteratively = function getCandidatesIteratively2(elements, includeContainer, options) {\n var candidates = [];\n var elementsToCheck = Array.from(elements);\n while (elementsToCheck.length) {\n var element = elementsToCheck.shift();\n if (element.tagName === \"SLOT\") {\n var assigned = element.assignedElements();\n var content = assigned.length ? assigned : element.children;\n var nestedCandidates = getCandidatesIteratively2(content, true, options);\n if (options.flatten) {\n candidates.push.apply(candidates, nestedCandidates);\n } else {\n candidates.push({\n scope: element,\n candidates: nestedCandidates\n });\n }\n } else {\n var validCandidate = matches.call(element, candidateSelector);\n if (validCandidate && options.filter(element) && (includeContainer || !elements.includes(element))) {\n candidates.push(element);\n }\n var shadowRoot = element.shadowRoot || // check for an undisclosed shadow\n typeof options.getShadowRoot === \"function\" && options.getShadowRoot(element);\n var validShadowRoot = !options.shadowRootFilter || options.shadowRootFilter(element);\n if (shadowRoot && validShadowRoot) {\n var _nestedCandidates = getCandidatesIteratively2(shadowRoot === true ? element.children : shadowRoot.children, true, options);\n if (options.flatten) {\n candidates.push.apply(candidates, _nestedCandidates);\n } else {\n candidates.push({\n scope: element,\n candidates: _nestedCandidates\n });\n }\n } else {\n elementsToCheck.unshift.apply(elementsToCheck, element.children);\n }\n }\n }\n return candidates;\n};\nvar getTabindex = function getTabindex2(node, isScope) {\n if (node.tabIndex < 0) {\n if ((isScope || /^(AUDIO|VIDEO|DETAILS)$/.test(node.tagName) || node.isContentEditable) && isNaN(parseInt(node.getAttribute(\"tabindex\"), 10))) {\n return 0;\n }\n }\n return node.tabIndex;\n};\nvar sortOrderedTabbables = function sortOrderedTabbables2(a, b) {\n return a.tabIndex === b.tabIndex ? a.documentOrder - b.documentOrder : a.tabIndex - b.tabIndex;\n};\nvar isInput = function isInput2(node) {\n return node.tagName === \"INPUT\";\n};\nvar isHiddenInput = function isHiddenInput2(node) {\n return isInput(node) && node.type === \"hidden\";\n};\nvar isDetailsWithSummary = function isDetailsWithSummary2(node) {\n var r = node.tagName === \"DETAILS\" && Array.prototype.slice.apply(node.children).some(function(child) {\n return child.tagName === \"SUMMARY\";\n });\n return r;\n};\nvar getCheckedRadio = function getCheckedRadio2(nodes, form) {\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].checked && nodes[i].form === form) {\n return nodes[i];\n }\n }\n};\nvar isTabbableRadio = function isTabbableRadio2(node) {\n if (!node.name) {\n return true;\n }\n var radioScope = node.form || getRootNode(node);\n var queryRadios = function queryRadios2(name) {\n return radioScope.querySelectorAll('input[type=\"radio\"][name=\"' + name + '\"]');\n };\n var radioSet;\n if (typeof window !== \"undefined\" && typeof window.CSS !== \"undefined\" && typeof window.CSS.escape === \"function\") {\n radioSet = queryRadios(window.CSS.escape(node.name));\n } else {\n try {\n radioSet = queryRadios(node.name);\n } catch (err) {\n 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);\n return false;\n }\n }\n var checked = getCheckedRadio(radioSet, node.form);\n return !checked || checked === node;\n};\nvar isRadio = function isRadio2(node) {\n return isInput(node) && node.type === \"radio\";\n};\nvar isNonTabbableRadio = function isNonTabbableRadio2(node) {\n return isRadio(node) && !isTabbableRadio(node);\n};\nvar isZeroArea = function isZeroArea2(node) {\n var _node$getBoundingClie = node.getBoundingClientRect(), width = _node$getBoundingClie.width, height = _node$getBoundingClie.height;\n return width === 0 && height === 0;\n};\nvar isHidden = function isHidden2(node, _ref) {\n var displayCheck = _ref.displayCheck, getShadowRoot = _ref.getShadowRoot;\n if (getComputedStyle(node).visibility === \"hidden\") {\n return true;\n }\n var isDirectSummary = matches.call(node, \"details>summary:first-of-type\");\n var nodeUnderDetails = isDirectSummary ? node.parentElement : node;\n if (matches.call(nodeUnderDetails, \"details:not([open]) *\")) {\n return true;\n }\n var nodeRootHost = getRootNode(node).host;\n var nodeIsAttached = (nodeRootHost === null || nodeRootHost === void 0 ? void 0 : nodeRootHost.ownerDocument.contains(nodeRootHost)) || node.ownerDocument.contains(node);\n if (!displayCheck || displayCheck === \"full\") {\n if (typeof getShadowRoot === \"function\") {\n var originalNode = node;\n while (node) {\n var parentElement = node.parentElement;\n var rootNode = getRootNode(node);\n if (parentElement && !parentElement.shadowRoot && getShadowRoot(parentElement) === true) {\n return isZeroArea(node);\n } else if (node.assignedSlot) {\n node = node.assignedSlot;\n } else if (!parentElement && rootNode !== node.ownerDocument) {\n node = rootNode.host;\n } else {\n node = parentElement;\n }\n }\n node = originalNode;\n }\n if (nodeIsAttached) {\n return !node.getClientRects().length;\n }\n } else if (displayCheck === \"non-zero-area\") {\n return isZeroArea(node);\n }\n return false;\n};\nvar isDisabledFromFieldset = function isDisabledFromFieldset2(node) {\n if (/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(node.tagName)) {\n var parentNode = node.parentElement;\n while (parentNode) {\n if (parentNode.tagName === \"FIELDSET\" && parentNode.disabled) {\n for (var i = 0; i < parentNode.children.length; i++) {\n var child = parentNode.children.item(i);\n if (child.tagName === \"LEGEND\") {\n return matches.call(parentNode, \"fieldset[disabled] *\") ? true : !child.contains(node);\n }\n }\n return true;\n }\n parentNode = parentNode.parentElement;\n }\n }\n return false;\n};\nvar isNodeMatchingSelectorFocusable = function isNodeMatchingSelectorFocusable2(options, node) {\n if (node.disabled || isHiddenInput(node) || isHidden(node, options) || // For a details element with a summary, the summary element gets the focus\n isDetailsWithSummary(node) || isDisabledFromFieldset(node)) {\n return false;\n }\n return true;\n};\nvar isNodeMatchingSelectorTabbable = function isNodeMatchingSelectorTabbable2(options, node) {\n if (isNonTabbableRadio(node) || getTabindex(node) < 0 || !isNodeMatchingSelectorFocusable(options, node)) {\n return false;\n }\n return true;\n};\nvar isValidShadowRootTabbable = function isValidShadowRootTabbable2(shadowHostNode) {\n var tabIndex = parseInt(shadowHostNode.getAttribute(\"tabindex\"), 10);\n if (isNaN(tabIndex) || tabIndex >= 0) {\n return true;\n }\n return false;\n};\nvar sortByOrder = function sortByOrder2(candidates) {\n var regularTabbables = [];\n var orderedTabbables = [];\n candidates.forEach(function(item, i) {\n var isScope = !!item.scope;\n var element = isScope ? item.scope : item;\n var candidateTabindex = getTabindex(element, isScope);\n var elements = isScope ? sortByOrder2(item.candidates) : element;\n if (candidateTabindex === 0) {\n isScope ? regularTabbables.push.apply(regularTabbables, elements) : regularTabbables.push(element);\n } else {\n orderedTabbables.push({\n documentOrder: i,\n tabIndex: candidateTabindex,\n item,\n isScope,\n content: elements\n });\n }\n });\n return orderedTabbables.sort(sortOrderedTabbables).reduce(function(acc, sortable) {\n sortable.isScope ? acc.push.apply(acc, sortable.content) : acc.push(sortable.content);\n return acc;\n }, []).concat(regularTabbables);\n};\nvar tabbable = function tabbable2(el, options) {\n options = options || {};\n var candidates;\n if (options.getShadowRoot) {\n candidates = getCandidatesIteratively([el], options.includeContainer, {\n filter: isNodeMatchingSelectorTabbable.bind(null, options),\n flatten: false,\n getShadowRoot: options.getShadowRoot,\n shadowRootFilter: isValidShadowRootTabbable\n });\n } else {\n candidates = getCandidates(el, options.includeContainer, isNodeMatchingSelectorTabbable.bind(null, options));\n }\n return sortByOrder(candidates);\n};\nvar focusable = function focusable2(el, options) {\n options = options || {};\n var candidates;\n if (options.getShadowRoot) {\n candidates = getCandidatesIteratively([el], options.includeContainer, {\n filter: isNodeMatchingSelectorFocusable.bind(null, options),\n flatten: true,\n getShadowRoot: options.getShadowRoot\n });\n } else {\n candidates = getCandidates(el, options.includeContainer, isNodeMatchingSelectorFocusable.bind(null, options));\n }\n return candidates;\n};\nvar isTabbable = function isTabbable2(node, options) {\n options = options || {};\n if (!node) {\n throw new Error(\"No node provided\");\n }\n if (matches.call(node, candidateSelector) === false) {\n return false;\n }\n return isNodeMatchingSelectorTabbable(options, node);\n};\nvar focusableCandidateSelector = /* @__PURE__ */ candidateSelectors.concat(\"iframe\").join(\",\");\nvar isFocusable = function isFocusable2(node, options) {\n options = options || {};\n if (!node) {\n throw new Error(\"No node provided\");\n }\n if (matches.call(node, focusableCandidateSelector) === false) {\n return false;\n }\n return isNodeMatchingSelectorFocusable(options, node);\n};\n\n// node_modules/focus-trap/dist/focus-trap.esm.js\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), true).forEach(function(key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nvar activeFocusTraps = function() {\n var trapQueue = [];\n return {\n activateTrap: function activateTrap(trap) {\n if (trapQueue.length > 0) {\n var activeTrap = trapQueue[trapQueue.length - 1];\n if (activeTrap !== trap) {\n activeTrap.pause();\n }\n }\n var trapIndex = trapQueue.indexOf(trap);\n if (trapIndex === -1) {\n trapQueue.push(trap);\n } else {\n trapQueue.splice(trapIndex, 1);\n trapQueue.push(trap);\n }\n },\n deactivateTrap: function deactivateTrap(trap) {\n var trapIndex = trapQueue.indexOf(trap);\n if (trapIndex !== -1) {\n trapQueue.splice(trapIndex, 1);\n }\n if (trapQueue.length > 0) {\n trapQueue[trapQueue.length - 1].unpause();\n }\n }\n };\n}();\nvar isSelectableInput = function isSelectableInput2(node) {\n return node.tagName && node.tagName.toLowerCase() === \"input\" && typeof node.select === \"function\";\n};\nvar isEscapeEvent = function isEscapeEvent2(e) {\n return e.key === \"Escape\" || e.key === \"Esc\" || e.keyCode === 27;\n};\nvar isTabEvent = function isTabEvent2(e) {\n return e.key === \"Tab\" || e.keyCode === 9;\n};\nvar delay = function delay2(fn) {\n return setTimeout(fn, 0);\n};\nvar findIndex = function findIndex2(arr, fn) {\n var idx = -1;\n arr.every(function(value, i) {\n if (fn(value)) {\n idx = i;\n return false;\n }\n return true;\n });\n return idx;\n};\nvar valueOrHandler = function valueOrHandler2(value) {\n for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n params[_key - 1] = arguments[_key];\n }\n return typeof value === \"function\" ? value.apply(void 0, params) : value;\n};\nvar getActualTarget = function getActualTarget2(event) {\n return event.target.shadowRoot && typeof event.composedPath === \"function\" ? event.composedPath()[0] : event.target;\n};\nvar createFocusTrap = function createFocusTrap2(elements, userOptions) {\n var doc = (userOptions === null || userOptions === void 0 ? void 0 : userOptions.document) || document;\n var config = _objectSpread2({\n returnFocusOnDeactivate: true,\n escapeDeactivates: true,\n delayInitialFocus: true\n }, userOptions);\n var state = {\n // containers given to createFocusTrap()\n // @type {Array<HTMLElement>}\n containers: [],\n // list of objects identifying tabbable nodes in `containers` in the trap\n // NOTE: it's possible that a group has no tabbable nodes if nodes get removed while the trap\n // is active, but the trap should never get to a state where there isn't at least one group\n // with at least one tabbable node in it (that would lead to an error condition that would\n // result in an error being thrown)\n // @type {Array<{\n // container: HTMLElement,\n // tabbableNodes: Array<HTMLElement>, // empty if none\n // focusableNodes: Array<HTMLElement>, // empty if none\n // firstTabbableNode: HTMLElement|null,\n // lastTabbableNode: HTMLElement|null,\n // nextTabbableNode: (node: HTMLElement, forward: boolean) => HTMLElement|undefined\n // }>}\n containerGroups: [],\n // same order/length as `containers` list\n // references to objects in `containerGroups`, but only those that actually have\n // tabbable nodes in them\n // NOTE: same order as `containers` and `containerGroups`, but __not necessarily__\n // the same length\n tabbableGroups: [],\n nodeFocusedBeforeActivation: null,\n mostRecentlyFocusedNode: null,\n active: false,\n paused: false,\n // timer ID for when delayInitialFocus is true and initial focus in this trap\n // has been delayed during activation\n delayInitialFocusTimer: void 0\n };\n var trap;\n var getOption = function getOption2(configOverrideOptions, optionName, configOptionName) {\n return configOverrideOptions && configOverrideOptions[optionName] !== void 0 ? configOverrideOptions[optionName] : config[configOptionName || optionName];\n };\n var findContainerIndex = function findContainerIndex2(element) {\n return state.containerGroups.findIndex(function(_ref) {\n var container = _ref.container, tabbableNodes = _ref.tabbableNodes;\n return container.contains(element) || // fall back to explicit tabbable search which will take into consideration any\n // web components if the `tabbableOptions.getShadowRoot` option was used for\n // the trap, enabling shadow DOM support in tabbable (`Node.contains()` doesn't\n // look inside web components even if open)\n tabbableNodes.find(function(node) {\n return node === element;\n });\n });\n };\n var getNodeForOption = function getNodeForOption2(optionName) {\n var optionValue = config[optionName];\n if (typeof optionValue === \"function\") {\n for (var _len2 = arguments.length, params = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n params[_key2 - 1] = arguments[_key2];\n }\n optionValue = optionValue.apply(void 0, params);\n }\n if (optionValue === true) {\n optionValue = void 0;\n }\n if (!optionValue) {\n if (optionValue === void 0 || optionValue === false) {\n return optionValue;\n }\n throw new Error(\"`\".concat(optionName, \"` was specified but was not a node, or did not return a node\"));\n }\n var node = optionValue;\n if (typeof optionValue === \"string\") {\n node = doc.querySelector(optionValue);\n if (!node) {\n throw new Error(\"`\".concat(optionName, \"` as selector refers to no known node\"));\n }\n }\n return node;\n };\n var getInitialFocusNode = function getInitialFocusNode2() {\n var node = getNodeForOption(\"initialFocus\");\n if (node === false) {\n return false;\n }\n if (node === void 0) {\n if (findContainerIndex(doc.activeElement) >= 0) {\n node = doc.activeElement;\n } else {\n var firstTabbableGroup = state.tabbableGroups[0];\n var firstTabbableNode = firstTabbableGroup && firstTabbableGroup.firstTabbableNode;\n node = firstTabbableNode || getNodeForOption(\"fallbackFocus\");\n }\n }\n if (!node) {\n throw new Error(\"Your focus-trap needs to have at least one focusable element\");\n }\n return node;\n };\n var updateTabbableNodes = function updateTabbableNodes2() {\n state.containerGroups = state.containers.map(function(container) {\n var tabbableNodes = tabbable(container, config.tabbableOptions);\n var focusableNodes = focusable(container, config.tabbableOptions);\n return {\n container,\n tabbableNodes,\n focusableNodes,\n firstTabbableNode: tabbableNodes.length > 0 ? tabbableNodes[0] : null,\n lastTabbableNode: tabbableNodes.length > 0 ? tabbableNodes[tabbableNodes.length - 1] : null,\n /**\n * Finds the __tabbable__ node that follows the given node in the specified direction,\n * in this container, if any.\n * @param {HTMLElement} node\n * @param {boolean} [forward] True if going in forward tab order; false if going\n * in reverse.\n * @returns {HTMLElement|undefined} The next tabbable node, if any.\n */\n nextTabbableNode: function nextTabbableNode(node) {\n var forward = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;\n var nodeIdx = focusableNodes.findIndex(function(n) {\n return n === node;\n });\n if (nodeIdx < 0) {\n return void 0;\n }\n if (forward) {\n return focusableNodes.slice(nodeIdx + 1).find(function(n) {\n return isTabbable(n, config.tabbableOptions);\n });\n }\n return focusableNodes.slice(0, nodeIdx).reverse().find(function(n) {\n return isTabbable(n, config.tabbableOptions);\n });\n }\n };\n });\n state.tabbableGroups = state.containerGroups.filter(function(group) {\n return group.tabbableNodes.length > 0;\n });\n if (state.tabbableGroups.length <= 0 && !getNodeForOption(\"fallbackFocus\")) {\n throw new Error(\"Your focus-trap must have at least one container with at least one tabbable node in it at all times\");\n }\n };\n var tryFocus = function tryFocus2(node) {\n if (node === false) {\n return;\n }\n if (node === doc.activeElement) {\n return;\n }\n if (!node || !node.focus) {\n tryFocus2(getInitialFocusNode());\n return;\n }\n node.focus({\n preventScroll: !!config.preventScroll\n });\n state.mostRecentlyFocusedNode = node;\n if (isSelectableInput(node)) {\n node.select();\n }\n };\n var getReturnFocusNode = function getReturnFocusNode2(previousActiveElement) {\n var node = getNodeForOption(\"setReturnFocus\", previousActiveElement);\n return node ? node : node === false ? false : previousActiveElement;\n };\n var checkPointerDown = function checkPointerDown2(e) {\n var target = getActualTarget(e);\n if (findContainerIndex(target) >= 0) {\n return;\n }\n if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n trap.deactivate({\n // if, on deactivation, we should return focus to the node originally-focused\n // when the trap was activated (or the configured `setReturnFocus` node),\n // then assume it's also OK to return focus to the outside node that was\n // just clicked, causing deactivation, as long as that node is focusable;\n // if it isn't focusable, then return focus to the original node focused\n // on activation (or the configured `setReturnFocus` node)\n // NOTE: by setting `returnFocus: false`, deactivate() will do nothing,\n // which will result in the outside click setting focus to the node\n // that was clicked, whether it's focusable or not; by setting\n // `returnFocus: true`, we'll attempt to re-focus the node originally-focused\n // on activation (or the configured `setReturnFocus` node)\n returnFocus: config.returnFocusOnDeactivate && !isFocusable(target, config.tabbableOptions)\n });\n return;\n }\n if (valueOrHandler(config.allowOutsideClick, e)) {\n return;\n }\n e.preventDefault();\n };\n var checkFocusIn = function checkFocusIn2(e) {\n var target = getActualTarget(e);\n var targetContained = findContainerIndex(target) >= 0;\n if (targetContained || target instanceof Document) {\n if (targetContained) {\n state.mostRecentlyFocusedNode = target;\n }\n } else {\n e.stopImmediatePropagation();\n tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode());\n }\n };\n var checkTab = function checkTab2(e) {\n var target = getActualTarget(e);\n updateTabbableNodes();\n var destinationNode = null;\n if (state.tabbableGroups.length > 0) {\n var containerIndex = findContainerIndex(target);\n var containerGroup = containerIndex >= 0 ? state.containerGroups[containerIndex] : void 0;\n if (containerIndex < 0) {\n if (e.shiftKey) {\n destinationNode = state.tabbableGroups[state.tabbableGroups.length - 1].lastTabbableNode;\n } else {\n destinationNode = state.tabbableGroups[0].firstTabbableNode;\n }\n } else if (e.shiftKey) {\n var startOfGroupIndex = findIndex(state.tabbableGroups, function(_ref2) {\n var firstTabbableNode = _ref2.firstTabbableNode;\n return target === firstTabbableNode;\n });\n if (startOfGroupIndex < 0 && (containerGroup.container === target || isFocusable(target, config.tabbableOptions) && !isTabbable(target, config.tabbableOptions) && !containerGroup.nextTabbableNode(target, false))) {\n startOfGroupIndex = containerIndex;\n }\n if (startOfGroupIndex >= 0) {\n var destinationGroupIndex = startOfGroupIndex === 0 ? state.tabbableGroups.length - 1 : startOfGroupIndex - 1;\n var destinationGroup = state.tabbableGroups[destinationGroupIndex];\n destinationNode = destinationGroup.lastTabbableNode;\n }\n } else {\n var lastOfGroupIndex = findIndex(state.tabbableGroups, function(_ref3) {\n var lastTabbableNode = _ref3.lastTabbableNode;\n return target === lastTabbableNode;\n });\n if (lastOfGroupIndex < 0 && (containerGroup.container === target || isFocusable(target, config.tabbableOptions) && !isTabbable(target, config.tabbableOptions) && !containerGroup.nextTabbableNode(target))) {\n lastOfGroupIndex = containerIndex;\n }\n if (lastOfGroupIndex >= 0) {\n var _destinationGroupIndex = lastOfGroupIndex === state.tabbableGroups.length - 1 ? 0 : lastOfGroupIndex + 1;\n var _destinationGroup = state.tabbableGroups[_destinationGroupIndex];\n destinationNode = _destinationGroup.firstTabbableNode;\n }\n }\n } else {\n destinationNode = getNodeForOption(\"fallbackFocus\");\n }\n if (destinationNode) {\n e.preventDefault();\n tryFocus(destinationNode);\n }\n };\n var checkKey = function checkKey2(e) {\n if (isEscapeEvent(e) && valueOrHandler(config.escapeDeactivates, e) !== false) {\n e.preventDefault();\n trap.deactivate();\n return;\n }\n if (isTabEvent(e)) {\n checkTab(e);\n return;\n }\n };\n var checkClick = function checkClick2(e) {\n var target = getActualTarget(e);\n if (findContainerIndex(target) >= 0) {\n return;\n }\n if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n return;\n }\n if (valueOrHandler(config.allowOutsideClick, e)) {\n return;\n }\n e.preventDefault();\n e.stopImmediatePropagation();\n };\n var addListeners = function addListeners2() {\n if (!state.active) {\n return;\n }\n activeFocusTraps.activateTrap(trap);\n state.delayInitialFocusTimer = config.delayInitialFocus ? delay(function() {\n tryFocus(getInitialFocusNode());\n }) : tryFocus(getInitialFocusNode());\n doc.addEventListener(\"focusin\", checkFocusIn, true);\n doc.addEventListener(\"mousedown\", checkPointerDown, {\n capture: true,\n passive: false\n });\n doc.addEventListener(\"touchstart\", checkPointerDown, {\n capture: true,\n passive: false\n });\n doc.addEventListener(\"click\", checkClick, {\n capture: true,\n passive: false\n });\n doc.addEventListener(\"keydown\", checkKey, {\n capture: true,\n passive: false\n });\n return trap;\n };\n var removeListeners = function removeListeners2() {\n if (!state.active) {\n return;\n }\n doc.removeEventListener(\"focusin\", checkFocusIn, true);\n doc.removeEventListener(\"mousedown\", checkPointerDown, true);\n doc.removeEventListener(\"touchstart\", checkPointerDown, true);\n doc.removeEventListener(\"click\", checkClick, true);\n doc.removeEventListener(\"keydown\", checkKey, true);\n return trap;\n };\n trap = {\n get active() {\n return state.active;\n },\n get paused() {\n return state.paused;\n },\n activate: function activate(activateOptions) {\n if (state.active) {\n return this;\n }\n var onActivate = getOption(activateOptions, \"onActivate\");\n var onPostActivate = getOption(activateOptions, \"onPostActivate\");\n var checkCanFocusTrap = getOption(activateOptions, \"checkCanFocusTrap\");\n if (!checkCanFocusTrap) {\n updateTabbableNodes();\n }\n state.active = true;\n state.paused = false;\n state.nodeFocusedBeforeActivation = doc.activeElement;\n if (onActivate) {\n onActivate();\n }\n var finishActivation = function finishActivation2() {\n if (checkCanFocusTrap) {\n updateTabbableNodes();\n }\n addListeners();\n if (onPostActivate) {\n onPostActivate();\n }\n };\n if (checkCanFocusTrap) {\n checkCanFocusTrap(state.containers.concat()).then(finishActivation, finishActivation);\n return this;\n }\n finishActivation();\n return this;\n },\n deactivate: function deactivate(deactivateOptions) {\n if (!state.active) {\n return this;\n }\n var options = _objectSpread2({\n onDeactivate: config.onDeactivate,\n onPostDeactivate: config.onPostDeactivate,\n checkCanReturnFocus: config.checkCanReturnFocus\n }, deactivateOptions);\n clearTimeout(state.delayInitialFocusTimer);\n state.delayInitialFocusTimer = void 0;\n removeListeners();\n state.active = false;\n state.paused = false;\n activeFocusTraps.deactivateTrap(trap);\n var onDeactivate = getOption(options, \"onDeactivate\");\n var onPostDeactivate = getOption(options, \"onPostDeactivate\");\n var checkCanReturnFocus = getOption(options, \"checkCanReturnFocus\");\n var returnFocus = getOption(options, \"returnFocus\", \"returnFocusOnDeactivate\");\n if (onDeactivate) {\n onDeactivate();\n }\n var finishDeactivation = function finishDeactivation2() {\n delay(function() {\n if (returnFocus) {\n tryFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation));\n }\n if (onPostDeactivate) {\n onPostDeactivate();\n }\n });\n };\n if (returnFocus && checkCanReturnFocus) {\n checkCanReturnFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation)).then(finishDeactivation, finishDeactivation);\n return this;\n }\n finishDeactivation();\n return this;\n },\n pause: function pause() {\n if (state.paused || !state.active) {\n return this;\n }\n state.paused = true;\n removeListeners();\n return this;\n },\n unpause: function unpause() {\n if (!state.paused || !state.active) {\n return this;\n }\n state.paused = false;\n updateTabbableNodes();\n addListeners();\n return this;\n },\n updateContainerElements: function updateContainerElements(containerElements) {\n var elementsAsArray = [].concat(containerElements).filter(Boolean);\n state.containers = elementsAsArray.map(function(element) {\n return typeof element === \"string\" ? doc.querySelector(element) : element;\n });\n if (state.active) {\n updateTabbableNodes();\n }\n return this;\n }\n };\n trap.updateContainerElements(elements);\n return trap;\n};\n\n// packages/focus/src/index.js\nfunction src_default(Alpine) {\n let lastFocused;\n let currentFocused;\n window.addEventListener(\"focusin\", () => {\n lastFocused = currentFocused;\n currentFocused = document.activeElement;\n });\n Alpine.magic(\"focus\", (el) => {\n let within = el;\n return {\n __noscroll: false,\n __wrapAround: false,\n within(el2) {\n within = el2;\n return this;\n },\n withoutScrolling() {\n this.__noscroll = true;\n return this;\n },\n noscroll() {\n this.__noscroll = true;\n return this;\n },\n withWrapAround() {\n this.__wrapAround = true;\n return this;\n },\n wrap() {\n return this.withWrapAround();\n },\n focusable(el2) {\n return isFocusable(el2);\n },\n previouslyFocused() {\n return lastFocused;\n },\n lastFocused() {\n return lastFocused;\n },\n focused() {\n return currentFocused;\n },\n focusables() {\n if (Array.isArray(within))\n return within;\n return focusable(within, { displayCheck: \"none\" });\n },\n all() {\n return this.focusables();\n },\n isFirst(el2) {\n let els = this.all();\n return els[0] && els[0].isSameNode(el2);\n },\n isLast(el2) {\n let els = this.all();\n return els.length && els.slice(-1)[0].isSameNode(el2);\n },\n getFirst() {\n return this.all()[0];\n },\n getLast() {\n return this.all().slice(-1)[0];\n },\n getNext() {\n let list = this.all();\n let current = document.activeElement;\n if (list.indexOf(current) === -1)\n return;\n if (this.__wrapAround && list.indexOf(current) === list.length - 1) {\n return list[0];\n }\n return list[list.indexOf(current) + 1];\n },\n getPrevious() {\n let list = this.all();\n let current = document.activeElement;\n if (list.indexOf(current) === -1)\n return;\n if (this.__wrapAround && list.indexOf(current) === 0) {\n return list.slice(-1)[0];\n }\n return list[list.indexOf(current) - 1];\n },\n first() {\n this.focus(this.getFirst());\n },\n last() {\n this.focus(this.getLast());\n },\n next() {\n this.focus(this.getNext());\n },\n previous() {\n this.focus(this.getPrevious());\n },\n prev() {\n return this.previous();\n },\n focus(el2) {\n if (!el2)\n return;\n setTimeout(() => {\n if (!el2.hasAttribute(\"tabindex\"))\n el2.setAttribute(\"tabindex\", \"0\");\n el2.focus({ preventScroll: this.__noscroll });\n });\n }\n };\n });\n Alpine.directive(\"trap\", Alpine.skipDuringClone(\n (el, { expression, modifiers }, { effect, evaluateLater, cleanup }) => {\n let evaluator = evaluateLater(expression);\n let oldValue = false;\n let options = {\n escapeDeactivates: false,\n allowOutsideClick: true,\n fallbackFocus: () => el\n };\n if (modifiers.includes(\"noautofocus\")) {\n options.initialFocus = false;\n } else {\n let autofocusEl = el.querySelector(\"[autofocus]\");\n if (autofocusEl)\n options.initialFocus = autofocusEl;\n }\n let trap = createFocusTrap(el, options);\n let undoInert = () => {\n };\n let undoDisableScrolling = () => {\n };\n const releaseFocus = () => {\n undoInert();\n undoInert = () => {\n };\n undoDisableScrolling();\n undoDisableScrolling = () => {\n };\n trap.deactivate({\n returnFocus: !modifiers.includes(\"noreturn\")\n });\n };\n effect(() => evaluator((value) => {\n if (oldValue === value)\n return;\n if (value && !oldValue) {\n if (modifiers.includes(\"noscroll\"))\n undoDisableScrolling = disableScrolling();\n if (modifiers.includes(\"inert\"))\n undoInert = setInert(el);\n setTimeout(() => {\n trap.activate();\n }, 15);\n }\n if (!value && oldValue) {\n releaseFocus();\n }\n oldValue = !!value;\n }));\n cleanup(releaseFocus);\n },\n // When cloning, we only want to add aria-hidden attributes to the\n // DOM and not try to actually trap, as trapping can mess with the\n // live DOM and isn't just isolated to the cloned DOM.\n (el, { expression, modifiers }, { evaluate }) => {\n if (modifiers.includes(\"inert\") && evaluate(expression))\n setInert(el);\n }\n ));\n}\nfunction setInert(el) {\n let undos = [];\n crawlSiblingsUp(el, (sibling) => {\n let cache = sibling.hasAttribute(\"aria-hidden\");\n sibling.setAttribute(\"aria-hidden\", \"true\");\n undos.push(() => cache || sibling.removeAttribute(\"aria-hidden\"));\n });\n return () => {\n while (undos.length)\n undos.pop()();\n };\n}\nfunction crawlSiblingsUp(el, callback) {\n if (el.isSameNode(document.body) || !el.parentNode)\n return;\n Array.from(el.parentNode.children).forEach((sibling) => {\n if (sibling.isSameNode(el)) {\n crawlSiblingsUp(el.parentNode, callback);\n } else {\n callback(sibling);\n }\n });\n}\nfunction disableScrolling() {\n let overflow = document.documentElement.style.overflow;\n let paddingRight = document.documentElement.style.paddingRight;\n let scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n document.documentElement.style.overflow = \"hidden\";\n document.documentElement.style.paddingRight = `${scrollbarWidth}px`;\n return () => {\n document.documentElement.style.overflow = overflow;\n document.documentElement.style.paddingRight = paddingRight;\n };\n}\n\n// packages/focus/builds/module.js\nvar module_default = src_default;\nexport {\n module_default as default,\n src_default as focus\n};\n/*! Bundled license information:\n\ntabbable/dist/index.esm.js:\n (*!\n * tabbable 5.3.3\n * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE\n *)\n\nfocus-trap/dist/focus-trap.esm.js:\n (*!\n * focus-trap 6.9.4\n * @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE\n *)\n*/\n", "// packages/persist/src/index.js\nfunction src_default(Alpine) {\n let persist = () => {\n let alias;\n let storage;\n try {\n storage = localStorage;\n } catch (e) {\n console.error(e);\n console.warn(\"Alpine: $persist is using temporary storage since localStorage is unavailable.\");\n let dummy = /* @__PURE__ */ new Map();\n storage = {\n getItem: dummy.get.bind(dummy),\n setItem: dummy.set.bind(dummy)\n };\n }\n return Alpine.interceptor((initialValue, getter, setter, path, key) => {\n let lookup = alias || `_x_${path}`;\n let initial = storageHas(lookup, storage) ? storageGet(lookup, storage) : initialValue;\n setter(initial);\n Alpine.effect(() => {\n let value = getter();\n storageSet(lookup, value, storage);\n setter(value);\n });\n return initial;\n }, (func) => {\n func.as = (key) => {\n alias = key;\n return func;\n }, func.using = (target) => {\n storage = target;\n return func;\n };\n });\n };\n Object.defineProperty(Alpine, \"$persist\", { get: () => persist() });\n Alpine.magic(\"persist\", persist);\n Alpine.persist = (key, { get, set }, storage = localStorage) => {\n let initial = storageHas(key, storage) ? storageGet(key, storage) : get();\n set(initial);\n Alpine.effect(() => {\n let value = get();\n storageSet(key, value, storage);\n set(value);\n });\n };\n}\nfunction storageHas(key, storage) {\n return storage.getItem(key) !== null;\n}\nfunction storageGet(key, storage) {\n let value = storage.getItem(key, storage);\n if (value === void 0)\n return;\n return JSON.parse(value);\n}\nfunction storageSet(key, value, storage) {\n storage.setItem(key, JSON.stringify(value));\n}\n\n// packages/persist/builds/module.js\nvar module_default = src_default;\nexport {\n module_default as default,\n src_default as persist\n};\n", "// packages/intersect/src/index.js\nfunction src_default(Alpine) {\n Alpine.directive(\"intersect\", Alpine.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater, cleanup }) => {\n let evaluate = evaluateLater(expression);\n let options = {\n rootMargin: getRootMargin(modifiers),\n threshold: getThreshold(modifiers)\n };\n let observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting === (value === \"leave\"))\n return;\n evaluate();\n modifiers.includes(\"once\") && observer.disconnect();\n });\n }, options);\n observer.observe(el);\n cleanup(() => {\n observer.disconnect();\n });\n }));\n}\nfunction getThreshold(modifiers) {\n if (modifiers.includes(\"full\"))\n return 0.99;\n if (modifiers.includes(\"half\"))\n return 0.5;\n if (!modifiers.includes(\"threshold\"))\n return 0;\n let threshold = modifiers[modifiers.indexOf(\"threshold\") + 1];\n if (threshold === \"100\")\n return 1;\n if (threshold === \"0\")\n return 0;\n return Number(`.${threshold}`);\n}\nfunction getLengthValue(rawValue) {\n let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/);\n return match ? match[1] + (match[2] || \"px\") : void 0;\n}\nfunction getRootMargin(modifiers) {\n const key = \"margin\";\n const fallback = \"0px 0px 0px 0px\";\n const index = modifiers.indexOf(key);\n if (index === -1)\n return fallback;\n let values = [];\n for (let i = 1; i < 5; i++) {\n values.push(getLengthValue(modifiers[index + i] || \"\"));\n }\n values = values.filter((v) => v !== void 0);\n return values.length ? values.join(\" \").trim() : fallback;\n}\n\n// packages/intersect/builds/module.js\nvar module_default = src_default;\nexport {\n module_default as default,\n src_default as intersect\n};\n", "// packages/resize/src/index.js\nfunction src_default(Alpine) {\n Alpine.directive(\"resize\", Alpine.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater, cleanup }) => {\n let evaluator = evaluateLater(expression);\n let evaluate = (width, height) => {\n evaluator(() => {\n }, { scope: { \"$width\": width, \"$height\": height } });\n };\n let off = modifiers.includes(\"document\") ? onDocumentResize(evaluate) : onElResize(el, evaluate);\n cleanup(() => off());\n }));\n}\nfunction onElResize(el, callback) {\n let observer = new ResizeObserver((entries) => {\n let [width, height] = dimensions(entries);\n callback(width, height);\n });\n observer.observe(el);\n return () => observer.disconnect();\n}\nvar documentResizeObserver;\nvar documentResizeObserverCallbacks = /* @__PURE__ */ new Set();\nfunction onDocumentResize(callback) {\n documentResizeObserverCallbacks.add(callback);\n if (!documentResizeObserver) {\n documentResizeObserver = new ResizeObserver((entries) => {\n let [width, height] = dimensions(entries);\n documentResizeObserverCallbacks.forEach((i) => i(width, height));\n });\n documentResizeObserver.observe(document.documentElement);\n }\n return () => {\n documentResizeObserverCallbacks.delete(callback);\n };\n}\nfunction dimensions(entries) {\n let width, height;\n for (let entry of entries) {\n width = entry.borderBoxSize[0].inlineSize;\n height = entry.borderBoxSize[0].blockSize;\n }\n return [width, height];\n}\n\n// packages/resize/builds/module.js\nvar module_default = src_default;\nexport {\n module_default as default,\n src_default as resize\n};\n", "// node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs\nvar min = Math.min;\nvar max = Math.max;\nvar round = Math.round;\nvar floor = Math.floor;\nvar createCoords = (v) => ({\n x: v,\n y: v\n});\nvar oppositeSideMap = {\n left: \"right\",\n right: \"left\",\n bottom: \"top\",\n top: \"bottom\"\n};\nvar oppositeAlignmentMap = {\n start: \"end\",\n end: \"start\"\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === \"function\" ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split(\"-\")[0];\n}\nfunction getAlignment(placement) {\n return placement.split(\"-\")[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === \"x\" ? \"y\" : \"x\";\n}\nfunction getAxisLength(axis) {\n return axis === \"y\" ? \"height\" : \"width\";\n}\nfunction getSideAxis(placement) {\n return [\"top\", \"bottom\"].includes(getSide(placement)) ? \"y\" : \"x\";\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === \"x\" ? alignment === (rtl ? \"end\" : \"start\") ? \"right\" : \"left\" : alignment === \"start\" ? \"bottom\" : \"top\";\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.replace(/start|end/g, (alignment) => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n const lr = [\"left\", \"right\"];\n const rl = [\"right\", \"left\"];\n const tb = [\"top\", \"bottom\"];\n const bt = [\"bottom\", \"top\"];\n switch (side) {\n case \"top\":\n case \"bottom\":\n if (rtl)\n return isStart ? rl : lr;\n return isStart ? lr : rl;\n case \"left\":\n case \"right\":\n return isStart ? tb : bt;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === \"start\", rtl);\n if (alignment) {\n list = list.map((side) => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, (side) => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== \"number\" ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n return {\n ...rect,\n top: rect.y,\n left: rect.x,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n };\n}\n\n// node_modules/@floating-ui/core/dist/floating-ui.core.mjs\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === \"y\";\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case \"top\":\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case \"bottom\":\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case \"right\":\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case \"left\":\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case \"start\":\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case \"end\":\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\nvar computePosition = async (reference, floating, config) => {\n const {\n placement = \"bottom\",\n strategy = \"absolute\",\n middleware = [],\n platform: platform2\n } = config;\n const validMiddleware = middleware.filter(Boolean);\n const rtl = await (platform2.isRTL == null ? void 0 : platform2.isRTL(floating));\n let rects = await platform2.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let middlewareData = {};\n let resetCount = 0;\n for (let i = 0; i < validMiddleware.length; i++) {\n const {\n name,\n fn\n } = validMiddleware[i];\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform: platform2,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = {\n ...middlewareData,\n [name]: {\n ...middlewareData[name],\n ...data\n }\n };\n if (reset && resetCount <= 50) {\n resetCount++;\n if (typeof reset === \"object\") {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform2.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n continue;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform: platform2,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = \"clippingAncestors\",\n rootBoundary = \"viewport\",\n elementContext = \"floating\",\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === \"floating\" ? \"reference\" : \"floating\";\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform2.getClippingRect({\n 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)),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === \"floating\" ? {\n ...rects.floating,\n x,\n y\n } : rects.reference;\n const offsetParent = await (platform2.getOffsetParent == null ? void 0 : platform2.getOffsetParent(elements.floating));\n const offsetScale = await (platform2.isElement == null ? void 0 : platform2.isElement(offsetParent)) ? await (platform2.getScale == null ? void 0 : platform2.getScale(offsetParent)) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform2.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform2.convertOffsetParentRelativeRectToViewportRelativeRect({\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\nvar flip = function(options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: \"flip\",\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform: platform2,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = \"bestFit\",\n fallbackAxisSideDirection = \"none\",\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform2.isRTL == null ? void 0 : platform2.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n if (!specifiedFallbackPlacements && fallbackAxisSideDirection !== \"none\") {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements2 = [initialPlacement, ...fallbackPlacements];\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides2 = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides2[0]], overflow[sides2[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n if (!overflows.every((side2) => side2 <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements2[nextIndex];\n if (nextPlacement) {\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n 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;\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case \"bestFit\": {\n var _overflowsData$map$so;\n 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];\n if (placement2) {\n resetPlacement = placement2;\n }\n break;\n }\n case \"initialPlacement\":\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform: platform2,\n elements\n } = state;\n const rtl = await (platform2.isRTL == null ? void 0 : platform2.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === \"y\";\n const mainAxisMulti = [\"left\", \"top\"].includes(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === \"number\" ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: 0,\n crossAxis: 0,\n alignmentAxis: null,\n ...rawValue\n };\n if (alignment && typeof alignmentAxis === \"number\") {\n crossAxis = alignment === \"end\" ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\nvar offset = function(options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: \"offset\",\n options,\n async fn(state) {\n const {\n x,\n y\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: diffCoords\n };\n }\n };\n};\nvar shift = function(options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: \"shift\",\n options,\n async fn(state) {\n const {\n x,\n y,\n placement\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: (_ref) => {\n let {\n x: x2,\n y: y2\n } = _ref;\n return {\n x: x2,\n y: y2\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === \"y\" ? \"top\" : \"left\";\n const maxSide = mainAxis === \"y\" ? \"bottom\" : \"right\";\n const min2 = mainAxisCoord + overflow[minSide];\n const max2 = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min2, mainAxisCoord, max2);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === \"y\" ? \"top\" : \"left\";\n const maxSide = crossAxis === \"y\" ? \"bottom\" : \"right\";\n const min2 = crossAxisCoord + overflow[minSide];\n const max2 = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min2, crossAxisCoord, max2);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y\n }\n };\n }\n };\n};\n\n// node_modules/@floating-ui/utils/dom/dist/floating-ui.utils.dom.mjs\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || \"\").toLowerCase();\n }\n return \"#document\";\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null ? void 0 : (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (typeof ShadowRoot === \"undefined\") {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && ![\"inline\", \"contents\"].includes(display);\n}\nfunction isTableElement(element) {\n return [\"table\", \"td\", \"th\"].includes(getNodeName(element));\n}\nfunction isContainingBlock(element) {\n const webkit = isWebKit();\n const css = getComputedStyle(element);\n 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));\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else {\n currentNode = getParentNode(currentNode);\n }\n }\n return null;\n}\nfunction isWebKit() {\n if (typeof CSS === \"undefined\" || !CSS.supports)\n return false;\n return CSS.supports(\"-webkit-backdrop-filter\", \"none\");\n}\nfunction isLastTraversableNode(node) {\n return [\"html\", \"body\", \"#document\"].includes(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.pageXOffset,\n scrollTop: element.pageYOffset\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === \"html\") {\n return node;\n }\n const result = (\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot || // DOM Element detected.\n node.parentNode || // ShadowRoot detected.\n isShadowRoot(node) && node.host || // Fallback.\n getDocumentElement(node)\n );\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], win.frameElement && traverseIframes ? getOverflowAncestors(win.frameElement) : []);\n }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\n\n// node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs\nfunction getCssDimensions(element) {\n const css = getComputedStyle(element);\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\nvar noOffsets = /* @__PURE__ */ createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentIFrame = win.frameElement;\n while (currentIFrame && offsetParent && offsetWin !== win) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentIFrame = getWindow(currentIFrame).frameElement;\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n if (offsetParent === documentElement) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== \"fixed\") {\n if (getNodeName(offsetParent) !== \"body\" || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y\n };\n}\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\nfunction getWindowScrollBarX(element) {\n return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;\n}\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle(body).direction === \"rtl\") {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === \"fixed\") {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === \"fixed\");\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === \"viewport\") {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === \"document\") {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n ...clippingAncestor,\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle(parentNode).position === \"fixed\" || hasFixedPositionAncestor(parentNode, stopNode);\n}\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter((el) => isElement(el) && getNodeName(el) !== \"body\");\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle(element).position === \"fixed\";\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === \"fixed\") {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === \"static\" && !!currentContainingBlockComputedStyle && [\"absolute\", \"fixed\"].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n result = result.filter((ancestor) => ancestor !== currentNode);\n } else {\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === \"clippingAncestors\" ? getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.top\n };\n}\nfunction getDimensions(element) {\n return getCssDimensions(element);\n}\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === \"fixed\";\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== \"body\" || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle(element).position === \"fixed\") {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n return element.offsetParent;\n}\nfunction getOffsetParent(element, polyfill) {\n const window2 = getWindow(element);\n if (!isHTMLElement(element)) {\n return window2;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === \"static\") {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && (getNodeName(offsetParent) === \"html\" || getNodeName(offsetParent) === \"body\" && getComputedStyle(offsetParent).position === \"static\" && !isContainingBlock(offsetParent))) {\n return window2;\n }\n return offsetParent || getContainingBlock(element) || window2;\n}\nvar getElementRects = async function(_ref) {\n let {\n reference,\n floating,\n strategy\n } = _ref;\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n return {\n reference: getRectRelativeToOffsetParent(reference, await getOffsetParentFn(floating), strategy),\n floating: {\n x: 0,\n y: 0,\n ...await getDimensionsFn(floating)\n }\n };\n};\nfunction isRTL(element) {\n return getComputedStyle(element).direction === \"rtl\";\n}\nvar platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n clearTimeout(timeoutId);\n io && io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const {\n left,\n top,\n width,\n height\n } = element.getBoundingClientRect();\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 100);\n } else {\n refresh(false, ratio);\n }\n }\n isFirstUpdate = false;\n }\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle <iframe>s\n root: root.ownerDocument\n });\n } catch (e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n refresh(true);\n return cleanup;\n}\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === \"function\",\n layoutShift = typeof IntersectionObserver === \"function\",\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...referenceEl ? getOverflowAncestors(referenceEl) : [], ...getOverflowAncestors(floating)] : [];\n ancestors.forEach((ancestor) => {\n ancestorScroll && ancestor.addEventListener(\"scroll\", update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener(\"resize\", update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver((_ref) => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n resizeObserver && resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n resizeObserver.observe(floating);\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n ancestors.forEach((ancestor) => {\n ancestorScroll && ancestor.removeEventListener(\"scroll\", update);\n ancestorResize && ancestor.removeEventListener(\"resize\", update);\n });\n cleanupIo && cleanupIo();\n resizeObserver && resizeObserver.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\nvar computePosition2 = (reference, floating, options) => {\n const cache = /* @__PURE__ */ new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\n// packages/anchor/src/index.js\nfunction src_default(Alpine) {\n Alpine.magic(\"anchor\", (el) => {\n if (!el._x_anchor)\n throw \"Alpine: No x-anchor directive found on element using $anchor...\";\n return el._x_anchor;\n });\n Alpine.interceptClone((from, to) => {\n if (from && from._x_anchor && !to._x_anchor) {\n to._x_anchor = from._x_anchor;\n }\n });\n Alpine.directive(\"anchor\", Alpine.skipDuringClone(\n (el, { expression, modifiers, value }, { cleanup, evaluate: evaluate2 }) => {\n let { placement, offsetValue, unstyled } = getOptions(modifiers);\n el._x_anchor = Alpine.reactive({ x: 0, y: 0 });\n let reference = evaluate2(expression);\n if (!reference)\n throw \"Alpine: no element provided to x-anchor...\";\n let compute = () => {\n let previousValue;\n computePosition2(reference, el, {\n placement,\n middleware: [flip(), shift({ padding: 5 }), offset(offsetValue)]\n }).then(({ x, y }) => {\n unstyled || setStyles(el, x, y);\n if (JSON.stringify({ x, y }) !== previousValue) {\n el._x_anchor.x = x;\n el._x_anchor.y = y;\n }\n previousValue = JSON.stringify({ x, y });\n });\n };\n let release = autoUpdate(reference, el, () => compute());\n cleanup(() => release());\n },\n // When cloning (or \"morphing\"), we will graft the style and position data from the live tree...\n (el, { expression, modifiers, value }, { cleanup, evaluate: evaluate2 }) => {\n let { placement, offsetValue, unstyled } = getOptions(modifiers);\n if (el._x_anchor) {\n unstyled || setStyles(el, el._x_anchor.x, el._x_anchor.y);\n }\n }\n ));\n}\nfunction setStyles(el, x, y) {\n Object.assign(el.style, {\n left: x + \"px\",\n top: y + \"px\",\n position: \"absolute\"\n });\n}\nfunction getOptions(modifiers) {\n let positions = [\"top\", \"top-start\", \"top-end\", \"right\", \"right-start\", \"right-end\", \"bottom\", \"bottom-start\", \"bottom-end\", \"left\", \"left-start\", \"left-end\"];\n let placement = positions.find((i) => modifiers.includes(i));\n let offsetValue = 0;\n if (modifiers.includes(\"offset\")) {\n let idx = modifiers.findIndex((i) => i === \"offset\");\n offsetValue = modifiers[idx + 1] !== void 0 ? Number(modifiers[idx + 1]) : offsetValue;\n }\n let unstyled = modifiers.includes(\"no-style\");\n return { placement, offsetValue, unstyled };\n}\n\n// packages/anchor/builds/module.js\nvar module_default = src_default;\nexport {\n src_default as anchor,\n module_default as default\n};\n", "\nclass Snapshot {\n constructor(url, html) {\n this.url = url\n this.html = html\n }\n}\n\nlet snapshotCache = {\n currentKey: null,\n currentUrl: null,\n keys: [],\n lookup: {},\n\n limit: 10,\n\n has(location) {\n return this.lookup[location] !== undefined\n },\n\n retrieve(location) {\n let snapshot = this.lookup[location]\n\n if (snapshot === undefined)\n throw (\n 'No back button cache found for current location: ' +\n location\n )\n\n return snapshot\n },\n\n replace(key, snapshot) {\n if (this.has(key)) {\n this.lookup[key] = snapshot\n } else {\n this.push(key, snapshot)\n }\n },\n\n push(key, snapshot) {\n this.lookup[key] = snapshot\n\n let index = this.keys.indexOf(key)\n\n if (index > -1) this.keys.splice(index, 1)\n\n this.keys.unshift(key)\n\n this.trim()\n },\n\n trim() {\n for (let key of this.keys.splice(this.limit)) {\n delete this.lookup[key]\n }\n }\n}\n\nexport function updateCurrentPageHtmlInHistoryStateForLaterBackButtonClicks() {\n // Create a history state entry for the initial page load.\n // (This is so later hitting back can restore this page).\n let url = new URL(window.location.href, document.baseURI)\n\n replaceUrl(url, document.documentElement.outerHTML)\n}\n\nexport function updateCurrentPageHtmlInSnapshotCacheForLaterBackButtonClicks(key, url) {\n let html = document.documentElement.outerHTML\n\n snapshotCache.replace(key, new Snapshot(url, html))\n}\n\nexport function whenTheBackOrForwardButtonIsClicked(\n registerFallback,\n handleHtml\n) {\n let fallback\n\n registerFallback(i => (fallback = i))\n\n window.addEventListener('popstate', e => {\n let state = e.state || {}\n\n let alpine = state.alpine || {}\n\n // If state is an empty object, then the popstate has probably been triggered\n // by anchor tags `#my-heading`, so we don't want to handle them.\n if (Object.keys(state).length === 0) return\n\n if (! alpine.snapshotIdx) return\n\n if (snapshotCache.has(alpine.snapshotIdx)) {\n let snapshot = snapshotCache.retrieve(alpine.snapshotIdx)\n\n handleHtml(snapshot.html, snapshot.url, snapshotCache.currentUrl, snapshotCache.currentKey)\n } else {\n fallback(alpine.url)\n }\n })\n}\n\nexport function updateUrlAndStoreLatestHtmlForFutureBackButtons(\n html,\n destination\n) {\n pushUrl(destination, html)\n}\n\nexport function pushUrl(url, html) {\n updateUrl('pushState', url, html)\n}\n\nexport function replaceUrl(url, html) {\n updateUrl('replaceState', url, html)\n}\n\nfunction updateUrl(method, url, html) {\n let key = url.toString() + '-' + Math.random()\n\n method === 'pushState'\n ? snapshotCache.push(key, new Snapshot(url, html))\n : snapshotCache.replace(key = (snapshotCache.currentKey ?? key), new Snapshot(url, html))\n\n let state = history.state || {}\n\n if (!state.alpine) state.alpine = {}\n\n state.alpine.snapshotIdx = key\n state.alpine.url = url.toString()\n\n try {\n // 640k character limit:\n history[method](state, JSON.stringify(document.title), url)\n\n snapshotCache.currentKey = key\n snapshotCache.currentUrl = url\n } catch (error) {\n if (error instanceof DOMException && error.name === 'SecurityError') {\n console.error(\n \"Livewire: You can't use wire:navigate with a link to a different root domain: \" +\n url\n )\n }\n\n console.error(error)\n }\n}\n", "\nexport function whenThisLinkIsPressed(el, callback) {\n let isProgrammaticClick = e => ! e.isTrusted\n let isNotPlainLeftClick = e => (e.which > 1) || (e.altKey) || (e.ctrlKey) || (e.metaKey) || (e.shiftKey)\n let isNotPlainEnterKey = (e) => (e.which !== 13) || (e.altKey) || (e.ctrlKey) || (e.metaKey) || (e.shiftKey)\n\n el.addEventListener('click', e => {\n // This allows programmatic clicking of links via: `$0.click()`...\n if (isProgrammaticClick(e)) {\n e.preventDefault()\n\n callback(whenReleased => whenReleased())\n\n return\n }\n\n // This allows cmd+click and such to still work as expected...\n if (isNotPlainLeftClick(e)) return;\n\n // If it's a plain left click, we want to prevent \"click\" and let \"mouseup\" do its thing...\n e.preventDefault()\n })\n\n el.addEventListener('mousedown', e => {\n // We only care about left clicks for wire:navigate...\n if (isNotPlainLeftClick(e)) return;\n\n e.preventDefault()\n\n callback((whenReleased) => {\n let handler = e => {\n e.preventDefault()\n\n whenReleased()\n\n el.removeEventListener('mouseup', handler)\n }\n\n el.addEventListener('mouseup', handler)\n })\n })\n\n el.addEventListener(\"keydown\", e => {\n // We only care about the enter key...\n if (isNotPlainEnterKey(e)) return;\n\n e.preventDefault()\n\n callback(whenReleased => whenReleased())\n })\n}\n\nexport function whenThisLinkIsHoveredFor(el, ms = 60, callback) {\n el.addEventListener('mouseenter', e => {\n let timeout = setTimeout(() => {\n callback(e)\n }, ms)\n\n let handler = () => {\n clearTimeout(timeout)\n el.removeEventListener('mouseleave', handler)\n }\n\n el.addEventListener('mouseleave', handler)\n })\n}\n\nexport function extractDestinationFromLink(linkEl) {\n return createUrlObjectFromString(linkEl.getAttribute('href'))\n}\n\nexport function createUrlObjectFromString(urlString) {\n return urlString !== null && new URL(urlString, document.baseURI)\n}\n\nexport function getUriStringFromUrlObject(urlObject) {\n return urlObject.pathname + urlObject.search + urlObject.hash\n}\n", "import { trigger } from \"@/hooks\"\nimport { createUrlObjectFromString, getUriStringFromUrlObject } from \"./links\"\n\nexport function fetchHtml(destination, callback) {\n let uri = getUriStringFromUrlObject(destination)\n\n performFetch(uri, (html, finalDestination) => {\n callback(html, finalDestination)\n })\n}\n\nexport function performFetch(uri, callback) {\n let options = {\n headers: {\n 'X-Livewire-Navigate': ''\n }\n }\n\n trigger('navigate.request', {\n url: uri,\n options,\n })\n\n let finalDestination\n\n fetch(uri, options).then(response => {\n let destination = createUrlObjectFromString(uri)\n finalDestination = createUrlObjectFromString(response.url)\n\n // If there was no redirect triggered by the URL that was fetched...\n if ((destination.pathname + destination.search) === (finalDestination.pathname + finalDestination.search)) {\n // Then let's cary over any \"hash\" entries on the URL.\n // We have to do this because hashes aren't sent to\n // the server by \"fetch\", so it needs to get added\n finalDestination.hash = destination.hash\n }\n\n return response.text()\n }).then(html => {\n callback(html, finalDestination)\n });\n}\n", "import { performFetch } from \"@/plugins/navigate/fetch\";\nimport { getUriStringFromUrlObject } from \"./links\";\n\n// Warning: this could cause some memory leaks\nlet prefetches = {}\n\nexport function prefetchHtml(destination, callback) {\n let uri = getUriStringFromUrlObject(destination)\n\n if (prefetches[uri]) return\n\n prefetches[uri] = { finished: false, html: null, whenFinished: () => {} }\n\n performFetch(uri, (html, routedUri) => {\n callback(html, routedUri)\n })\n}\n\nexport function storeThePrefetchedHtmlForWhenALinkIsClicked(html, destination, finalDestination) {\n let state = prefetches[getUriStringFromUrlObject(destination)]\n state.html = html\n state.finished = true\n state.finalDestination = finalDestination\n state.whenFinished()\n}\n\nexport function getPretchedHtmlOr(destination, receive, ifNoPrefetchExists) {\n let uri = getUriStringFromUrlObject(destination)\n\n if (! prefetches[uri]) return ifNoPrefetchExists()\n\n if (prefetches[uri].finished) {\n let html = prefetches[uri].html\n let finalDestination = prefetches[uri].finalDestination\n\n delete prefetches[uri]\n\n return receive(html, finalDestination)\n } else {\n prefetches[uri].whenFinished = () => {\n let html = prefetches[uri].html\n let finalDestination = prefetches[uri].finalDestination\n\n delete prefetches[uri]\n\n receive(html, finalDestination)\n }\n }\n}\n\n", "import Alpine from \"alpinejs\"\n\nexport function packUpPersistedTeleports(persistedEl) {\n // Persisted elements get removed from the DOM and then re-added later. We need to do the same\n // with any `x-teleport`ed elements...\n Alpine.mutateDom(() => {\n persistedEl.querySelectorAll('[data-teleport-template]').forEach(i => i._x_teleport.remove())\n })\n}\n\nexport function removeAnyLeftOverStaleTeleportTargets(body) {\n // We need to remove any left-over teleported elements form the page\n // as they are stale and will be re-initialized when Alpine boots up on this page...\n Alpine.mutateDom(() => {\n body.querySelectorAll('[data-teleport-target]').forEach(i => i.remove())\n })\n}\n\nexport function unPackPersistedTeleports(persistedEl) {\n // Before we put back any persisted elements, we're going to\n // find any \"x-teleports\" and put their targets back on the page...\n Alpine.walk(persistedEl, (el, skip) => {\n if (! el._x_teleport) return;\n\n el._x_teleportPutBack()\n\n skip()\n })\n}\n\nexport function isTeleportTarget(el) {\n return el.hasAttribute('data-teleport-target')\n}\n", "\nexport function storeScrollInformationInHtmlBeforeNavigatingAway() {\n document.body.setAttribute('data-scroll-x', document.body.scrollLeft)\n document.body.setAttribute('data-scroll-y', document.body.scrollTop)\n\n document.querySelectorAll(['[x-navigate\\\\:scroll]', '[wire\\\\:scroll]']).forEach(el => {\n el.setAttribute('data-scroll-x', el.scrollLeft)\n el.setAttribute('data-scroll-y', el.scrollTop)\n })\n}\n\nexport function restoreScrollPositionOrScrollToTop() {\n let scroll = el => {\n if (! el.hasAttribute('data-scroll-x')) {\n window.scrollTo({ top: 0, left: 0, behavior: 'instant' })\n } else {\n el.scrollTo({\n top: Number(el.getAttribute('data-scroll-y')),\n left: Number(el.getAttribute('data-scroll-x')),\n behavior: 'instant',\n })\n el.removeAttribute('data-scroll-x')\n el.removeAttribute('data-scroll-y')\n }\n }\n\n queueMicrotask(() => {\n queueMicrotask(() => { // Double microtask here to make sure scrolling restoration is the LAST thing to happen. (Even after Alpine's x-init functions)...\n scroll(document.body)\n\n document.querySelectorAll(['[x-navigate\\\\:scroll]', '[wire\\\\:scroll]']).forEach(scroll)\n })\n })\n}\n", "import Alpine from 'alpinejs'\n\nlet els = {}\n\nexport function storePersistantElementsForLater(callback) {\n els = {}\n\n document.querySelectorAll('[x-persist]').forEach(i => {\n els[i.getAttribute('x-persist')] = i\n\n callback(i)\n\n Alpine.mutateDom(() => {\n i.remove()\n })\n })\n}\n\nexport function putPersistantElementsBack(callback) {\n let usedPersists = []\n\n document.querySelectorAll('[x-persist]').forEach(i => {\n let old = els[i.getAttribute('x-persist')]\n\n // There might be a brand new x-persist element...\n if (! old) return\n\n usedPersists.push(i.getAttribute('x-persist'))\n\n old._x_wasPersisted = true\n\n callback(old, i)\n\n Alpine.mutateDom(() => {\n i.replaceWith(old)\n })\n })\n\n Object.entries(els).forEach(([key, el]) => {\n if (usedPersists.includes(key)) return\n\n // Destory the un-used persist DOM trees before releasing them...\n Alpine.destroyTree(el)\n })\n\n // Release unused persists for garbage collection...\n els = {}\n}\n\nexport function isPersistedElement(el) {\n return el.hasAttribute('x-persist')\n}\n", "import NProgress from 'nprogress'\nimport { getNonce } from '@/utils'\n\nNProgress.configure({\n minimum: 0.1,\n trickleSpeed: 200,\n showSpinner: false,\n parent: 'body',\n})\n\ninjectStyles()\n\nlet inProgress = false\n\nexport function showAndStartProgressBar() {\n inProgress = true\n\n // Only show progress bar if it's been a little bit...\n setTimeout(() => {\n if (! inProgress) return\n\n NProgress.start()\n }, 150)\n}\n\nexport function finishAndHideProgressBar() {\n inProgress = false\n\n NProgress.done()\n}\n\nexport function removeAnyLeftOverStaleProgressBars() {\n NProgress.remove()\n}\n\nfunction injectStyles() {\n let style = document.createElement('style')\n\n style.innerHTML = `/* Make clicks pass-through */\n\n #nprogress {\n pointer-events: none;\n }\n\n #nprogress .bar {\n background: var(--livewire-progress-bar-color, #29d);\n\n position: fixed;\n z-index: 1031;\n top: 0;\n left: 0;\n\n width: 100%;\n height: 2px;\n }\n\n /* Fancy blur effect */\n #nprogress .peg {\n display: block;\n position: absolute;\n right: 0px;\n width: 100px;\n height: 100%;\n box-shadow: 0 0 10px var(--livewire-progress-bar-color, #29d), 0 0 5px var(--livewire-progress-bar-color, #29d);\n opacity: 1.0;\n\n -webkit-transform: rotate(3deg) translate(0px, -4px);\n -ms-transform: rotate(3deg) translate(0px, -4px);\n transform: rotate(3deg) translate(0px, -4px);\n }\n\n /* Remove these to get rid of the spinner */\n #nprogress .spinner {\n display: block;\n position: fixed;\n z-index: 1031;\n top: 15px;\n right: 15px;\n }\n\n #nprogress .spinner-icon {\n width: 18px;\n height: 18px;\n box-sizing: border-box;\n\n border: solid 2px transparent;\n border-top-color: var(--livewire-progress-bar-color, #29d);\n border-left-color: var(--livewire-progress-bar-color, #29d);\n border-radius: 50%;\n\n -webkit-animation: nprogress-spinner 400ms linear infinite;\n animation: nprogress-spinner 400ms linear infinite;\n }\n\n .nprogress-custom-parent {\n overflow: hidden;\n position: relative;\n }\n\n .nprogress-custom-parent #nprogress .spinner,\n .nprogress-custom-parent #nprogress .bar {\n position: absolute;\n }\n\n @-webkit-keyframes nprogress-spinner {\n 0% { -webkit-transform: rotate(0deg); }\n 100% { -webkit-transform: rotate(360deg); }\n }\n @keyframes nprogress-spinner {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n `\n\n let nonce = getNonce()\n\n if (nonce) style.nonce = nonce\n\n document.head.appendChild(style)\n}\n", "\nexport function packUpPersistedPopovers(persistedEl) {\n persistedEl.querySelectorAll(':popover-open').forEach(el => {\n el.setAttribute('data-navigate-popover-open', '')\n\n let animations = el.getAnimations()\n\n // Gather any in-progress animations, serialize them, and pause them, for later re-triggering...\n el._pausedAnimations = animations.map(animation => ({\n keyframes: animation.effect.getKeyframes(),\n options: {\n duration: animation.effect.getTiming().duration,\n easing: animation.effect.getTiming().easing,\n fill: animation.effect.getTiming().fill,\n iterations: animation.effect.getTiming().iterations\n },\n currentTime: animation.currentTime,\n playState: animation.playState\n }))\n\n animations.forEach(i => i.pause())\n })\n}\n\nexport function unPackPersistedPopovers(persistedEl) {\n persistedEl.querySelectorAll('[data-navigate-popover-open]').forEach(el => {\n el.removeAttribute('data-navigate-popover-open')\n\n // Wait for the popovers to be fully connected to the DOM...\n queueMicrotask(() => {\n if (! el.isConnected) return\n\n // Show them because disconnected popovers are force-hidden...\n el.showPopover()\n\n // End the out-of-the-box animations...\n el.getAnimations().forEach(i => i.finish())\n\n // If there are any paused animations, we need to re-trigger them...\n if (el._pausedAnimations) {\n el._pausedAnimations.forEach(({keyframes, options, currentTime, now, playState}) => {\n let animation = el.animate(keyframes, options);\n\n animation.currentTime = currentTime;\n })\n\n delete el._pausedAnimations\n }\n })\n })\n}\n", "let oldBodyScriptTagHashes = []\n\nlet attributesExemptFromScriptTagHashing = [\n 'data-csrf',\n 'aria-hidden',\n]\n\nexport function swapCurrentPageWithNewHtml(html, andThen) {\n let newDocument = (new DOMParser()).parseFromString(html, \"text/html\")\n let newBody = document.adoptNode(newDocument.body)\n let newHead = document.adoptNode(newDocument.head)\n\n oldBodyScriptTagHashes = oldBodyScriptTagHashes.concat(Array.from(document.body.querySelectorAll('script')).map(i => {\n return simpleHash(ignoreAttributes(i.outerHTML, attributesExemptFromScriptTagHashing))\n }))\n\n let afterRemoteScriptsHaveLoaded = () => {}\n\n mergeNewHead(newHead).finally(() => {\n afterRemoteScriptsHaveLoaded()\n })\n\n prepNewBodyScriptTagsToRun(newBody, oldBodyScriptTagHashes)\n\n let oldBody = document.body\n\n document.body.replaceWith(newBody)\n\n Alpine.destroyTree(oldBody)\n\n andThen(i => afterRemoteScriptsHaveLoaded = i)\n}\n\nfunction prepNewBodyScriptTagsToRun(newBody, oldBodyScriptTagHashes) {\n newBody.querySelectorAll('script').forEach(i => {\n // We don't want to re-run script tags marked as \"data-navigate-once\"...\n if (i.hasAttribute('data-navigate-once')) {\n // However, if they didn't exist on the previous page, we do.\n // Therefore, we'll check the \"old body script hashes\" to\n // see if it was already there before skipping it...\n\n let hash = simpleHash(\n ignoreAttributes(i.outerHTML, attributesExemptFromScriptTagHashing)\n )\n\n if (oldBodyScriptTagHashes.includes(hash)) return\n }\n\n i.replaceWith(cloneScriptTag(i))\n })\n}\n\nfunction mergeNewHead(newHead) {\n let children = Array.from(document.head.children)\n let headChildrenHtmlLookup = children.map(i => i.outerHTML)\n\n // Only add scripts and styles that aren't already loaded on the page.\n let garbageCollector = document.createDocumentFragment()\n\n let touchedHeadElements = []\n\n let remoteScriptsPromises = []\n\n for (let child of Array.from(newHead.children)) {\n if (isAsset(child)) {\n if (! headChildrenHtmlLookup.includes(child.outerHTML)) {\n if (isTracked(child)) {\n if (ifTheQueryStringChangedSinceLastRequest(child, children)) {\n setTimeout(() => window.location.reload())\n }\n }\n\n if (isScript(child)) {\n try {\n remoteScriptsPromises.push(\n injectScriptTagAndWaitForItToFullyLoad(\n cloneScriptTag(child)\n )\n )\n } catch (error) {\n // Let's eat any promise rejects so that we don't\n // break the rest of the Alpine intializing...\n // Any errors triggered by adding the script tag to the page\n // will still be thrown...\n }\n } else {\n document.head.appendChild(child)\n }\n } else {\n garbageCollector.appendChild(child)\n }\n\n touchedHeadElements.push(child)\n }\n }\n\n // Remove any assets that aren't on the new page...\n // @todo: Re-enable this code and find a better way to managed injected stylesheets. See livewire/livewire#6824\n // for (let child of Array.from(document.head.children)) {\n // if (isAsset(child)) {\n // if (! touchedHeadElements.some(i => i.outerHTML === child.outerHTML)) {\n // child.remove()\n // }\n // }\n // }\n\n // How to free up the garbage collector?\n\n // Remove existing non-asset elements like meta, base, title, template.\n for (let child of Array.from(document.head.children)) {\n if (! isAsset(child)) child.remove()\n }\n\n // Add new non-asset elements left over in the new head element.\n for (let child of Array.from(newHead.children)) {\n document.head.appendChild(child)\n }\n\n return Promise.all(remoteScriptsPromises)\n}\n\nasync function injectScriptTagAndWaitForItToFullyLoad(script) {\n return new Promise((resolve, reject) => {\n // Script assets need to be loaded synchronously so that scripts have\n // their global variables available...\n if (script.src) {\n script.onload = () => resolve()\n script.onerror = () => reject()\n } else {\n resolve()\n }\n\n document.head.appendChild(script)\n })\n}\n\nfunction cloneScriptTag(el) {\n let script = document.createElement('script')\n\n script.textContent = el.textContent\n script.async = el.async\n\n for (let attr of el.attributes) {\n script.setAttribute(attr.name, attr.value)\n }\n\n return script\n}\n\nfunction isTracked(el) {\n return el.hasAttribute('data-navigate-track')\n}\n\nfunction ifTheQueryStringChangedSinceLastRequest(el, currentHeadChildren) {\n let [uri, queryString] = extractUriAndQueryString(el)\n\n return currentHeadChildren.some(child => {\n if (! isTracked(child)) return false\n\n let [currentUri, currentQueryString] = extractUriAndQueryString(child)\n\n // Only consider a data-navigate-track element changed if the query string has changed (not the URI)...\n if (currentUri === uri && queryString !== currentQueryString) return true\n })\n}\n\nfunction extractUriAndQueryString(el) {\n let url = isScript(el) ? el.src : el.href\n\n return url.split('?')\n}\n\nfunction isAsset(el) {\n return (el.tagName.toLowerCase() === 'link' && el.getAttribute('rel').toLowerCase() === 'stylesheet')\n || el.tagName.toLowerCase() === 'style'\n || el.tagName.toLowerCase() === 'script'\n}\n\nfunction isScript(el) {\n return el.tagName.toLowerCase() === 'script'\n}\n\nfunction simpleHash(str) {\n return str.split('').reduce((a, b) => {\n a = ((a << 5) - a) + b.charCodeAt(0)\n\n return a & a\n }, 0);\n}\n\nfunction ignoreAttributes(subject, attributesToRemove) {\n let result = subject\n\n attributesToRemove.forEach(attr => {\n // Create a regex pattern to match the attribute and its value.\n // The regex handles attributes that have values surrounded by either single or double quotes.\n const regex = new RegExp(`${attr}=\"[^\"]*\"|${attr}='[^']*'`, 'g')\n\n result = result.replace(regex, '')\n })\n\n // Remove all whitespace to make things less flaky...\n result = result.replaceAll(' ', '')\n\n return result.trim()\n}\n", "import { replaceUrl, updateCurrentPageHtmlInHistoryStateForLaterBackButtonClicks, updateCurrentPageHtmlInSnapshotCacheForLaterBackButtonClicks, updateUrlAndStoreLatestHtmlForFutureBackButtons, whenTheBackOrForwardButtonIsClicked } from \"./history\"\nimport { getPretchedHtmlOr, prefetchHtml, storeThePrefetchedHtmlForWhenALinkIsClicked } from \"./prefetch\"\nimport { createUrlObjectFromString, extractDestinationFromLink, whenThisLinkIsHoveredFor, whenThisLinkIsPressed } from \"./links\"\nimport { isTeleportTarget, packUpPersistedTeleports, removeAnyLeftOverStaleTeleportTargets, unPackPersistedTeleports } from \"./teleport\"\nimport { restoreScrollPositionOrScrollToTop, storeScrollInformationInHtmlBeforeNavigatingAway } from \"./scroll\"\nimport { isPersistedElement, putPersistantElementsBack, storePersistantElementsForLater } from \"./persist\"\nimport { finishAndHideProgressBar, removeAnyLeftOverStaleProgressBars, showAndStartProgressBar } from \"./bar\"\nimport { packUpPersistedPopovers, unPackPersistedPopovers } from \"./popover\"\nimport { swapCurrentPageWithNewHtml } from \"./page\"\nimport { fetchHtml } from \"./fetch\"\n\nlet enablePersist = true\nlet showProgressBar = true\nlet restoreScroll = true\nlet autofocus = false\n\nexport default function (Alpine) {\n\n Alpine.navigate = (url) => {\n let destination = createUrlObjectFromString(url)\n\n let prevented = fireEventForOtherLibrariesToHookInto('alpine:navigate', {\n url: destination, history: false, cached: false,\n })\n\n if (prevented) return\n\n navigateTo(destination)\n }\n\n Alpine.navigate.disableProgressBar = () => {\n showProgressBar = false\n }\n\n Alpine.addInitSelector(() => `[${Alpine.prefixed('navigate')}]`)\n\n Alpine.directive('navigate', (el, { modifiers }) => {\n let shouldPrefetchOnHover = modifiers.includes('hover')\n\n shouldPrefetchOnHover && whenThisLinkIsHoveredFor(el, 60, () => {\n let destination = extractDestinationFromLink(el)\n\n if (! destination) return\n\n prefetchHtml(destination, (html, finalDestination) => {\n storeThePrefetchedHtmlForWhenALinkIsClicked(html, destination, finalDestination)\n })\n })\n\n whenThisLinkIsPressed(el, (whenItIsReleased) => {\n let destination = extractDestinationFromLink(el)\n\n if (! destination) return\n\n prefetchHtml(destination, (html, finalDestination) => {\n storeThePrefetchedHtmlForWhenALinkIsClicked(html, destination, finalDestination)\n })\n\n whenItIsReleased(() => {\n let prevented = fireEventForOtherLibrariesToHookInto('alpine:navigate', {\n url: destination, history: false, cached: false,\n })\n\n if (prevented) return\n\n navigateTo(destination);\n })\n })\n })\n\n function navigateTo(destination, shouldPushToHistoryState = true) {\n showProgressBar && showAndStartProgressBar()\n\n fetchHtmlOrUsePrefetchedHtml(destination, (html, finalDestination) => {\n fireEventForOtherLibrariesToHookInto('alpine:navigating')\n\n restoreScroll && storeScrollInformationInHtmlBeforeNavigatingAway()\n\n showProgressBar && finishAndHideProgressBar()\n\n cleanupAlpineElementsOnThePageThatArentInsideAPersistedElement()\n\n updateCurrentPageHtmlInHistoryStateForLaterBackButtonClicks()\n\n preventAlpineFromPickingUpDomChanges(Alpine, andAfterAllThis => {\n enablePersist && storePersistantElementsForLater(persistedEl => {\n packUpPersistedTeleports(persistedEl)\n packUpPersistedPopovers(persistedEl)\n })\n\n if (shouldPushToHistoryState) {\n updateUrlAndStoreLatestHtmlForFutureBackButtons(html, finalDestination)\n } else {\n replaceUrl(finalDestination, html)\n }\n\n swapCurrentPageWithNewHtml(html, (afterNewScriptsAreDoneLoading) => {\n removeAnyLeftOverStaleTeleportTargets(document.body)\n\n enablePersist && putPersistantElementsBack((persistedEl, newStub) => {\n unPackPersistedTeleports(persistedEl)\n unPackPersistedPopovers(persistedEl)\n })\n\n restoreScrollPositionOrScrollToTop()\n\n afterNewScriptsAreDoneLoading(() => {\n andAfterAllThis(() => {\n setTimeout(() => {\n autofocus && autofocusElementsWithTheAutofocusAttribute()\n })\n\n nowInitializeAlpineOnTheNewPage(Alpine)\n\n fireEventForOtherLibrariesToHookInto('alpine:navigated')\n })\n })\n })\n })\n })\n }\n\n whenTheBackOrForwardButtonIsClicked(\n (ifThePageBeingVisitedHasntBeenCached) => {\n ifThePageBeingVisitedHasntBeenCached((url) => {\n let destination = createUrlObjectFromString(url)\n\n let prevented = fireEventForOtherLibrariesToHookInto('alpine:navigate', {\n url: destination, history: true, cached: false,\n })\n\n if (prevented) return\n\n let shouldPushToHistoryState = false\n\n navigateTo(destination, shouldPushToHistoryState)\n })\n },\n (html, url, currentPageUrl, currentPageKey) => {\n let destination = createUrlObjectFromString(url)\n\n let prevented = fireEventForOtherLibrariesToHookInto('alpine:navigate', {\n url: destination, history: true, cached: true,\n })\n\n if (prevented) return\n\n // @todo: see if there's a way to update the current HTML BEFORE\n // the back button is hit, and not AFTER:\n storeScrollInformationInHtmlBeforeNavigatingAway()\n\n // This ensures the current HTML has the latest snapshot\n fireEventForOtherLibrariesToHookInto('alpine:navigating')\n\n // Only update the snapshot and not the history state as the history state\n // has already changed to the new page due to the popstate event\n updateCurrentPageHtmlInSnapshotCacheForLaterBackButtonClicks(currentPageUrl, currentPageKey)\n\n preventAlpineFromPickingUpDomChanges(Alpine, andAfterAllThis => {\n enablePersist && storePersistantElementsForLater(persistedEl => {\n packUpPersistedTeleports(persistedEl)\n packUpPersistedPopovers(persistedEl)\n })\n\n swapCurrentPageWithNewHtml(html, () => {\n removeAnyLeftOverStaleProgressBars()\n\n removeAnyLeftOverStaleTeleportTargets(document.body)\n\n enablePersist && putPersistantElementsBack((persistedEl, newStub) => {\n unPackPersistedTeleports(persistedEl)\n unPackPersistedPopovers(persistedEl)\n })\n\n restoreScrollPositionOrScrollToTop()\n\n andAfterAllThis(() => {\n autofocus && autofocusElementsWithTheAutofocusAttribute()\n\n nowInitializeAlpineOnTheNewPage(Alpine)\n\n fireEventForOtherLibrariesToHookInto('alpine:navigated')\n })\n })\n })\n },\n )\n\n // Because DOMContentLoaded is fired on first load,\n // we should fire alpine:navigated as a replacement as well...\n setTimeout(() => {\n fireEventForOtherLibrariesToHookInto('alpine:navigated')\n })\n}\n\nfunction fetchHtmlOrUsePrefetchedHtml(fromDestination, callback) {\n getPretchedHtmlOr(fromDestination, callback, () => {\n fetchHtml(fromDestination, callback)\n })\n}\n\nfunction preventAlpineFromPickingUpDomChanges(Alpine, callback) {\n Alpine.stopObservingMutations()\n\n callback((afterAllThis) => {\n Alpine.startObservingMutations()\n\n queueMicrotask(() => {\n afterAllThis()\n })\n })\n}\n\nfunction fireEventForOtherLibrariesToHookInto(name, detail) {\n let event = new CustomEvent(name, {\n cancelable: true,\n bubbles: true,\n detail,\n })\n\n document.dispatchEvent(event)\n\n return event.defaultPrevented\n}\n\nfunction nowInitializeAlpineOnTheNewPage(Alpine) {\n Alpine.initTree(document.body, undefined, (el, skip) => {\n if (el._x_wasPersisted) skip()\n })\n}\n\nfunction autofocusElementsWithTheAutofocusAttribute() {\n document.querySelector('[autofocus]') && document.querySelector('[autofocus]').focus()\n}\n\nfunction cleanupAlpineElementsOnThePageThatArentInsideAPersistedElement() {\n // Create a new tree walker that skips persisted elements...\n let walker = function (root, callback) {\n Alpine.walk(root, (el, skip) => {\n if (isPersistedElement(el)) skip()\n if (isTeleportTarget(el)) skip()\n else callback(el, skip)\n })\n }\n\n // Set Alpine in motion to destroy itself on the page. If this proves\n // to be a performance issue at some point (walking the DOM tree),\n // we can be more surgical about cleaning up x-for/if instead...\n Alpine.destroyTree(document.body, walker)\n}\n", "import { isObjecty } from \"@/utils\"\n\nexport default function history(Alpine) {\n Alpine.magic('queryString', (el, { interceptor }) => {\n let alias\n let alwaysShow = false\n let usePush = false\n\n return interceptor((initialSeedValue, getter, setter, path, key) => {\n let queryKey = alias || path\n\n let { initial, replace, push, pop } = track(queryKey, initialSeedValue, alwaysShow)\n\n setter(initial)\n\n if (! usePush) {\n Alpine.effect(() => replace(getter()))\n } else {\n Alpine.effect(() => push(getter()))\n\n pop(async newValue => {\n setter(newValue)\n\n let tillTheEndOfTheMicrotaskQueue = () => Promise.resolve()\n\n await tillTheEndOfTheMicrotaskQueue() // ...so that we preserve the internal lock...\n })\n }\n\n return initial\n }, func => {\n func.alwaysShow = () => { alwaysShow = true; return func }\n func.usePush = () => { usePush = true; return func }\n func.as = key => { alias = key; return func }\n })\n })\n\n Alpine.history = { track }\n}\n\nexport function track(name, initialSeedValue, alwaysShow = false, except = null) {\n let { has, get, set, remove } = queryStringUtils()\n\n let url = new URL(window.location.href)\n let isInitiallyPresentInUrl = has(url, name)\n let initialValue = isInitiallyPresentInUrl ? get(url, name) : initialSeedValue\n let initialValueMemo = JSON.stringify(initialValue)\n let exceptValueMemo = [false, null, undefined].includes(except) ? initialSeedValue : JSON.stringify(except)\n\n let hasReturnedToInitialValue = (newValue) => JSON.stringify(newValue) === initialValueMemo\n let hasReturnedToExceptValue = (newValue) => JSON.stringify(newValue) === exceptValueMemo\n\n if (alwaysShow) url = set(url, name, initialValue)\n\n replace(url, name, { value: initialValue })\n\n let lock = false\n\n let update = (strategy, newValue) => {\n if (lock) return\n\n let url = new URL(window.location.href)\n\n // This block of code is what needs to be changed for this failing test to pass:\n if (! alwaysShow && ! isInitiallyPresentInUrl && hasReturnedToInitialValue(newValue)) {\n url = remove(url, name)\n // This is so that when deeply nested values are tracked, but their parent array/object\n // is removed, we can handle it gracefully by removing the entry from the URL instead\n // of letting it get set to `?someKey=undefined` which causes issues on refresh...\n } else if (newValue === undefined) {\n url = remove(url, name)\n } else if (! alwaysShow && hasReturnedToExceptValue(newValue)) {\n url = remove(url, name)\n } else {\n url = set(url, name, newValue)\n }\n\n // Right now, the above block, checks a few conditions and updates/removes an entry from the query string.\n // The new strategy needs to be something like:\n // - If \"alwaysShow\" is toggled on, then just \"set\" the whole thing with no deep diff\n // - Otherwise, run a deep comparison callback (given the original value and new value).\n // - The callback recieves two params (leaf name and value)\n // - Check leaf name and value for existance in the original URL from page load. If it's there, just call \"set\"\n // - Check leaf name and value for equivelance to original name and value, if equal, call \"remove\", otherwise, \"set\"\n\n // That code will look something like this:\n\n // if (alwaysShow) {\n // set(url, name, newValue)\n // } else {\n // deepCompare(name, newValue, originalValue, (leafName, leafValue) => {\n // // ....\n // })\n // }\n\n strategy(url, name, { value: newValue})\n }\n\n return {\n initial: initialValue,\n\n replace(newValue) { // Update via replaceState...\n update(replace, newValue)\n },\n\n push(newValue) { // Update via pushState...\n update(push, newValue)\n },\n\n pop(receiver) { // \"popstate\" handler...\n let handler = (e) => {\n if (! e.state || ! e.state.alpine) return\n\n Object.entries(e.state.alpine).forEach(([iName, { value: newValue }]) => {\n if (iName !== name) return\n\n lock = true\n\n // Allow the \"receiver\" to be an async function in case a non-syncronous\n // operation (like an ajax) requests needs to happen while preserving\n // the \"locking\" mechanism (\"lock = true\" in this case)...\n let result = receiver(newValue)\n\n if (result instanceof Promise) {\n result.finally(() => lock = false)\n } else {\n lock = false\n }\n })\n }\n\n window.addEventListener('popstate', handler)\n\n return () => window.removeEventListener('popstate', handler)\n }\n }\n}\n\nfunction replace(url, key, object) {\n let state = window.history.state || {}\n\n if (! state.alpine) state.alpine = {}\n\n state.alpine[key] = unwrap(object)\n\n window.history.replaceState(state, '', url.toString())\n}\n\nfunction push(url, key, object) {\n let state = window.history.state || {}\n\n if (! state.alpine) state.alpine = {}\n\n state = { alpine: {...state.alpine, ...{[key]: unwrap(object)}} }\n\n window.history.pushState(state, '', url.toString())\n}\n\nfunction unwrap(object) {\n if (object === undefined) return undefined\n\n return JSON.parse(JSON.stringify(object))\n}\n\nfunction queryStringUtils() {\n return {\n has(url, key) {\n let search = url.search\n\n if (! search) return false\n\n let data = fromQueryString(search)\n\n return Object.keys(data).includes(key)\n },\n get(url, key) {\n let search = url.search\n\n if (! search) return false\n\n let data = fromQueryString(search)\n\n return data[key]\n },\n set(url, key, value) {\n let data = fromQueryString(url.search)\n\n data[key] = stripNulls(unwrap(value))\n\n url.search = toQueryString(data)\n\n return url\n },\n remove(url, key) {\n let data = fromQueryString(url.search)\n\n delete data[key]\n\n url.search = toQueryString(data)\n\n return url\n },\n }\n}\n\nfunction stripNulls(value) {\n if (! isObjecty(value)) return value\n\n for (let key in value) {\n if (value[key] === null) delete value[key]\n else value[key] = stripNulls(value[key])\n }\n\n return value\n}\n\n// This function converts JavaScript data to bracketed query string notation...\n// { items: [['foo']] } -> \"items[0][0]=foo\"\nfunction toQueryString(data) {\n let isObjecty = (subject) => typeof subject === 'object' && subject !== null\n\n let buildQueryStringEntries = (data, entries = {}, baseKey = '') => {\n Object.entries(data).forEach(([iKey, iValue]) => {\n let key = baseKey === '' ? iKey : `${baseKey}[${iKey}]`\n\n if (iValue === null) {\n entries[key] = '';\n } else if (! isObjecty(iValue)) {\n entries[key] = encodeURIComponent(iValue)\n .replaceAll('%20', '+') // Conform to RFC1738\n .replaceAll('%2C', ',')\n } else {\n entries = {...entries, ...buildQueryStringEntries(iValue, entries, key)}\n }\n })\n\n return entries\n }\n\n let entries = buildQueryStringEntries(data)\n\n return Object.entries(entries).map(([key, value]) => `${key}=${value}`).join('&')\n}\n\n// This function converts bracketed query string notation back to JS data...\n// \"items[0][0]=foo\" -> { items: [['foo']] }\nfunction fromQueryString(search) {\n search = search.replace('?', '')\n\n if (search === '') return {}\n\n let insertDotNotatedValueIntoData = (key, value, data) => {\n let [first, second, ...rest] = key.split('.')\n\n // We're at a leaf node, let's make the assigment...\n if (! second) return data[key] = value\n\n // This is where we fill in empty arrays/objects allong the way to the assigment...\n if (data[first] === undefined) {\n data[first] = isNaN(second) ? {} : []\n }\n\n // Keep deferring assignment until the full key is built up...\n insertDotNotatedValueIntoData([second, ...rest].join('.'), value, data[first])\n }\n\n let entries = search.split('&').map(i => i.split('='))\n\n // let data = {} creates a security (XSS) vulnerability here. We need to use\n // Object.create(null) instead so that we have a \"pure\" object that doesnt\n // inherit Object.prototype and expose the js internals to manipulation.\n let data = Object.create(null)\n\n entries.forEach(([key, value]) => {\n // Query string params don't always have values... (`?foo=`)\n if ( typeof value == 'undefined' ) return;\n\n value = decodeURIComponent(value.replaceAll('+', '%20'))\n\n if (! key.includes('[')) {\n data[key] = value\n } else {\n // Convert to dot notation because it's easier...\n let dotNotatedKey = key.replaceAll('[', '.').replaceAll(']', '')\n\n insertDotNotatedValueIntoData(dotNotatedKey, value, data)\n }\n })\n\n return data\n}\n", "// packages/morph/src/morph.js\nfunction morph(from, toHtml, options) {\n monkeyPatchDomSetAttributeToAllowAtSymbols();\n let fromEl;\n let toEl;\n let key, lookahead, updating, updated, removing, removed, adding, added;\n function assignOptions(options2 = {}) {\n let defaultGetKey = (el) => el.getAttribute(\"key\");\n let noop = () => {\n };\n updating = options2.updating || noop;\n updated = options2.updated || noop;\n removing = options2.removing || noop;\n removed = options2.removed || noop;\n adding = options2.adding || noop;\n added = options2.added || noop;\n key = options2.key || defaultGetKey;\n lookahead = options2.lookahead || false;\n }\n function patch(from2, to) {\n if (differentElementNamesTypesOrKeys(from2, to)) {\n return swapElements(from2, to);\n }\n let updateChildrenOnly = false;\n if (shouldSkip(updating, from2, to, () => updateChildrenOnly = true))\n return;\n if (from2.nodeType === 1 && window.Alpine) {\n window.Alpine.cloneNode(from2, to);\n if (from2._x_teleport && to._x_teleport) {\n patch(from2._x_teleport, to._x_teleport);\n }\n }\n if (textOrComment(to)) {\n patchNodeValue(from2, to);\n updated(from2, to);\n return;\n }\n if (!updateChildrenOnly) {\n patchAttributes(from2, to);\n }\n updated(from2, to);\n patchChildren(from2, to);\n }\n function differentElementNamesTypesOrKeys(from2, to) {\n return from2.nodeType != to.nodeType || from2.nodeName != to.nodeName || getKey(from2) != getKey(to);\n }\n function swapElements(from2, to) {\n if (shouldSkip(removing, from2))\n return;\n let toCloned = to.cloneNode(true);\n if (shouldSkip(adding, toCloned))\n return;\n from2.replaceWith(toCloned);\n removed(from2);\n added(toCloned);\n }\n function patchNodeValue(from2, to) {\n let value = to.nodeValue;\n if (from2.nodeValue !== value) {\n from2.nodeValue = value;\n }\n }\n function patchAttributes(from2, to) {\n if (from2._x_transitioning)\n return;\n if (from2._x_isShown && !to._x_isShown) {\n return;\n }\n if (!from2._x_isShown && to._x_isShown) {\n return;\n }\n let domAttributes = Array.from(from2.attributes);\n let toAttributes = Array.from(to.attributes);\n for (let i = domAttributes.length - 1; i >= 0; i--) {\n let name = domAttributes[i].name;\n if (!to.hasAttribute(name)) {\n from2.removeAttribute(name);\n }\n }\n for (let i = toAttributes.length - 1; i >= 0; i--) {\n let name = toAttributes[i].name;\n let value = toAttributes[i].value;\n if (from2.getAttribute(name) !== value) {\n from2.setAttribute(name, value);\n }\n }\n }\n function patchChildren(from2, to) {\n let fromKeys = keyToMap(from2.children);\n let fromKeyHoldovers = {};\n let currentTo = getFirstNode(to);\n let currentFrom = getFirstNode(from2);\n while (currentTo) {\n seedingMatchingId(currentTo, currentFrom);\n let toKey = getKey(currentTo);\n let fromKey = getKey(currentFrom);\n if (!currentFrom) {\n if (toKey && fromKeyHoldovers[toKey]) {\n let holdover = fromKeyHoldovers[toKey];\n from2.appendChild(holdover);\n currentFrom = holdover;\n } else {\n if (!shouldSkip(adding, currentTo)) {\n let clone = currentTo.cloneNode(true);\n from2.appendChild(clone);\n added(clone);\n }\n currentTo = getNextSibling(to, currentTo);\n continue;\n }\n }\n let isIf = (node) => node && node.nodeType === 8 && node.textContent === \"[if BLOCK]><![endif]\";\n let isEnd = (node) => node && node.nodeType === 8 && node.textContent === \"[if ENDBLOCK]><![endif]\";\n if (isIf(currentTo) && isIf(currentFrom)) {\n let nestedIfCount = 0;\n let fromBlockStart = currentFrom;\n while (currentFrom) {\n let next = getNextSibling(from2, currentFrom);\n if (isIf(next)) {\n nestedIfCount++;\n } else if (isEnd(next) && nestedIfCount > 0) {\n nestedIfCount--;\n } else if (isEnd(next) && nestedIfCount === 0) {\n currentFrom = next;\n break;\n }\n currentFrom = next;\n }\n let fromBlockEnd = currentFrom;\n nestedIfCount = 0;\n let toBlockStart = currentTo;\n while (currentTo) {\n let next = getNextSibling(to, currentTo);\n if (isIf(next)) {\n nestedIfCount++;\n } else if (isEnd(next) && nestedIfCount > 0) {\n nestedIfCount--;\n } else if (isEnd(next) && nestedIfCount === 0) {\n currentTo = next;\n break;\n }\n currentTo = next;\n }\n let toBlockEnd = currentTo;\n let fromBlock = new Block(fromBlockStart, fromBlockEnd);\n let toBlock = new Block(toBlockStart, toBlockEnd);\n patchChildren(fromBlock, toBlock);\n continue;\n }\n if (currentFrom.nodeType === 1 && lookahead && !currentFrom.isEqualNode(currentTo)) {\n let nextToElementSibling = getNextSibling(to, currentTo);\n let found = false;\n while (!found && nextToElementSibling) {\n if (nextToElementSibling.nodeType === 1 && currentFrom.isEqualNode(nextToElementSibling)) {\n found = true;\n currentFrom = addNodeBefore(from2, currentTo, currentFrom);\n fromKey = getKey(currentFrom);\n }\n nextToElementSibling = getNextSibling(to, nextToElementSibling);\n }\n }\n if (toKey !== fromKey) {\n if (!toKey && fromKey) {\n fromKeyHoldovers[fromKey] = currentFrom;\n currentFrom = addNodeBefore(from2, currentTo, currentFrom);\n fromKeyHoldovers[fromKey].remove();\n currentFrom = getNextSibling(from2, currentFrom);\n currentTo = getNextSibling(to, currentTo);\n continue;\n }\n if (toKey && !fromKey) {\n if (fromKeys[toKey]) {\n currentFrom.replaceWith(fromKeys[toKey]);\n currentFrom = fromKeys[toKey];\n }\n }\n if (toKey && fromKey) {\n let fromKeyNode = fromKeys[toKey];\n if (fromKeyNode) {\n fromKeyHoldovers[fromKey] = currentFrom;\n currentFrom.replaceWith(fromKeyNode);\n currentFrom = fromKeyNode;\n } else {\n fromKeyHoldovers[fromKey] = currentFrom;\n currentFrom = addNodeBefore(from2, currentTo, currentFrom);\n fromKeyHoldovers[fromKey].remove();\n currentFrom = getNextSibling(from2, currentFrom);\n currentTo = getNextSibling(to, currentTo);\n continue;\n }\n }\n }\n let currentFromNext = currentFrom && getNextSibling(from2, currentFrom);\n patch(currentFrom, currentTo);\n currentTo = currentTo && getNextSibling(to, currentTo);\n currentFrom = currentFromNext;\n }\n let removals = [];\n while (currentFrom) {\n if (!shouldSkip(removing, currentFrom))\n removals.push(currentFrom);\n currentFrom = getNextSibling(from2, currentFrom);\n }\n while (removals.length) {\n let domForRemoval = removals.shift();\n domForRemoval.remove();\n removed(domForRemoval);\n }\n }\n function getKey(el) {\n return el && el.nodeType === 1 && key(el);\n }\n function keyToMap(els) {\n let map = {};\n for (let el of els) {\n let theKey = getKey(el);\n if (theKey) {\n map[theKey] = el;\n }\n }\n return map;\n }\n function addNodeBefore(parent, node, beforeMe) {\n if (!shouldSkip(adding, node)) {\n let clone = node.cloneNode(true);\n parent.insertBefore(clone, beforeMe);\n added(clone);\n return clone;\n }\n return node;\n }\n assignOptions(options);\n fromEl = from;\n toEl = typeof toHtml === \"string\" ? createElement(toHtml) : toHtml;\n if (window.Alpine && window.Alpine.closestDataStack && !from._x_dataStack) {\n toEl._x_dataStack = window.Alpine.closestDataStack(from);\n toEl._x_dataStack && window.Alpine.cloneNode(from, toEl);\n }\n patch(from, toEl);\n fromEl = void 0;\n toEl = void 0;\n return from;\n}\nmorph.step = () => {\n};\nmorph.log = () => {\n};\nfunction shouldSkip(hook, ...args) {\n let skip = false;\n hook(...args, () => skip = true);\n return skip;\n}\nvar patched = false;\nfunction createElement(html) {\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n return template.content.firstElementChild;\n}\nfunction textOrComment(el) {\n return el.nodeType === 3 || el.nodeType === 8;\n}\nvar Block = class {\n constructor(start, end) {\n this.startComment = start;\n this.endComment = end;\n }\n get children() {\n let children = [];\n let currentNode = this.startComment.nextSibling;\n while (currentNode && currentNode !== this.endComment) {\n children.push(currentNode);\n currentNode = currentNode.nextSibling;\n }\n return children;\n }\n appendChild(child) {\n this.endComment.before(child);\n }\n get firstChild() {\n let first = this.startComment.nextSibling;\n if (first === this.endComment)\n return;\n return first;\n }\n nextNode(reference) {\n let next = reference.nextSibling;\n if (next === this.endComment)\n return;\n return next;\n }\n insertBefore(newNode, reference) {\n reference.before(newNode);\n return newNode;\n }\n};\nfunction getFirstNode(parent) {\n return parent.firstChild;\n}\nfunction getNextSibling(parent, reference) {\n let next;\n if (parent instanceof Block) {\n next = parent.nextNode(reference);\n } else {\n next = reference.nextSibling;\n }\n return next;\n}\nfunction monkeyPatchDomSetAttributeToAllowAtSymbols() {\n if (patched)\n return;\n patched = true;\n let original = Element.prototype.setAttribute;\n let hostDiv = document.createElement(\"div\");\n Element.prototype.setAttribute = function newSetAttribute(name, value) {\n if (!name.includes(\"@\")) {\n return original.call(this, name, value);\n }\n hostDiv.innerHTML = `<span ${name}=\"${value}\"></span>`;\n let attr = hostDiv.firstElementChild.getAttributeNode(name);\n hostDiv.firstElementChild.removeAttributeNode(attr);\n this.setAttributeNode(attr);\n };\n}\nfunction seedingMatchingId(to, from) {\n let fromId = from && from._x_bindings && from._x_bindings.id;\n if (!fromId)\n return;\n to.setAttribute(\"id\", fromId);\n to.id = fromId;\n}\n\n// packages/morph/src/index.js\nfunction src_default(Alpine) {\n Alpine.morph = morph;\n}\n\n// packages/morph/builds/module.js\nvar module_default = src_default;\nexport {\n module_default as default,\n src_default as morph\n};\n", "// packages/mask/src/index.js\nfunction src_default(Alpine) {\n Alpine.directive(\"mask\", (el, { value, expression }, { effect, evaluateLater, cleanup }) => {\n let templateFn = () => expression;\n let lastInputValue = \"\";\n queueMicrotask(() => {\n if ([\"function\", \"dynamic\"].includes(value)) {\n let evaluator = evaluateLater(expression);\n effect(() => {\n templateFn = (input) => {\n let result;\n Alpine.dontAutoEvaluateFunctions(() => {\n evaluator((value2) => {\n result = typeof value2 === \"function\" ? value2(input) : value2;\n }, { scope: {\n // These are \"magics\" we'll make available to the x-mask:function:\n \"$input\": input,\n \"$money\": formatMoney.bind({ el })\n } });\n });\n return result;\n };\n processInputValue(el, false);\n });\n } else {\n processInputValue(el, false);\n }\n if (el._x_model)\n el._x_model.set(el.value);\n });\n const controller = new AbortController();\n cleanup(() => {\n controller.abort();\n });\n el.addEventListener(\"input\", () => processInputValue(el), {\n signal: controller.signal,\n // Setting this as a capture phase listener to ensure it runs\n // before wire:model or x-model added as a latent binding...\n capture: true\n });\n el.addEventListener(\"blur\", () => processInputValue(el, false), { signal: controller.signal });\n function processInputValue(el2, shouldRestoreCursor = true) {\n let input = el2.value;\n let template = templateFn(input);\n if (!template || template === \"false\")\n return false;\n if (lastInputValue.length - el2.value.length === 1) {\n return lastInputValue = el2.value;\n }\n let setInput = () => {\n lastInputValue = el2.value = formatInput(input, template);\n };\n if (shouldRestoreCursor) {\n restoreCursorPosition(el2, template, () => {\n setInput();\n });\n } else {\n setInput();\n }\n }\n function formatInput(input, template) {\n if (input === \"\")\n return \"\";\n let strippedDownInput = stripDown(template, input);\n let rebuiltInput = buildUp(template, strippedDownInput);\n return rebuiltInput;\n }\n }).before(\"model\");\n}\nfunction restoreCursorPosition(el, template, callback) {\n let cursorPosition = el.selectionStart;\n let unformattedValue = el.value;\n callback();\n let beforeLeftOfCursorBeforeFormatting = unformattedValue.slice(0, cursorPosition);\n let newPosition = buildUp(\n template,\n stripDown(\n template,\n beforeLeftOfCursorBeforeFormatting\n )\n ).length;\n el.setSelectionRange(newPosition, newPosition);\n}\nfunction stripDown(template, input) {\n let inputToBeStripped = input;\n let output = \"\";\n let regexes = {\n \"9\": /[0-9]/,\n \"a\": /[a-zA-Z]/,\n \"*\": /[a-zA-Z0-9]/\n };\n let wildcardTemplate = \"\";\n for (let i = 0; i < template.length; i++) {\n if ([\"9\", \"a\", \"*\"].includes(template[i])) {\n wildcardTemplate += template[i];\n continue;\n }\n for (let j = 0; j < inputToBeStripped.length; j++) {\n if (inputToBeStripped[j] === template[i]) {\n inputToBeStripped = inputToBeStripped.slice(0, j) + inputToBeStripped.slice(j + 1);\n break;\n }\n }\n }\n for (let i = 0; i < wildcardTemplate.length; i++) {\n let found = false;\n for (let j = 0; j < inputToBeStripped.length; j++) {\n if (regexes[wildcardTemplate[i]].test(inputToBeStripped[j])) {\n output += inputToBeStripped[j];\n inputToBeStripped = inputToBeStripped.slice(0, j) + inputToBeStripped.slice(j + 1);\n found = true;\n break;\n }\n }\n if (!found)\n break;\n }\n return output;\n}\nfunction buildUp(template, input) {\n let clean = Array.from(input);\n let output = \"\";\n for (let i = 0; i < template.length; i++) {\n if (![\"9\", \"a\", \"*\"].includes(template[i])) {\n output += template[i];\n continue;\n }\n if (clean.length === 0)\n break;\n output += clean.shift();\n }\n return output;\n}\nfunction formatMoney(input, delimiter = \".\", thousands, precision = 2) {\n if (input === \"-\")\n return \"-\";\n if (/^\\D+$/.test(input))\n return \"9\";\n if (thousands === null || thousands === void 0) {\n thousands = delimiter === \",\" ? \".\" : \",\";\n }\n let addThousands = (input2, thousands2) => {\n let output = \"\";\n let counter = 0;\n for (let i = input2.length - 1; i >= 0; i--) {\n if (input2[i] === thousands2)\n continue;\n if (counter === 3) {\n output = input2[i] + thousands2 + output;\n counter = 0;\n } else {\n output = input2[i] + output;\n }\n counter++;\n }\n return output;\n };\n let minus = input.startsWith(\"-\") ? \"-\" : \"\";\n let strippedInput = input.replaceAll(new RegExp(`[^0-9\\\\${delimiter}]`, \"g\"), \"\");\n let template = Array.from({ length: strippedInput.split(delimiter)[0].length }).fill(\"9\").join(\"\");\n template = `${minus}${addThousands(template, thousands)}`;\n if (precision > 0 && input.includes(delimiter))\n template += `${delimiter}` + \"9\".repeat(precision);\n queueMicrotask(() => {\n if (this.el.value.endsWith(delimiter))\n return;\n if (this.el.value[this.el.selectionStart - 1] === delimiter) {\n this.el.setSelectionRange(this.el.selectionStart - 1, this.el.selectionStart - 1);\n }\n });\n return template;\n}\n\n// packages/mask/builds/module.js\nvar module_default = src_default;\nexport {\n module_default as default,\n src_default as mask,\n stripDown\n};\n", "import { closestComponent, destroyComponent, initComponent } from './store'\nimport { matchesForLivewireDirective, extractDirective } from './directives'\nimport { trigger } from './hooks'\nimport collapse from '@alpinejs/collapse'\nimport focus from '@alpinejs/focus'\nimport persist from '@alpinejs/persist'\nimport intersect from '@alpinejs/intersect'\nimport resize from '@alpinejs/resize'\nimport anchor from '@alpinejs/anchor'\nimport navigate from './plugins/navigate'\nimport history from './plugins/history'\nimport morph from '@alpinejs/morph'\nimport mask from '@alpinejs/mask'\nimport Alpine from 'alpinejs'\nimport { dispatch } from './utils'\n\nexport function start() {\n setTimeout(() => ensureLivewireScriptIsntMisplaced())\n\n dispatch(document, 'livewire:init')\n dispatch(document, 'livewire:initializing')\n\n Alpine.plugin(morph)\n Alpine.plugin(history)\n Alpine.plugin(intersect)\n Alpine.plugin(resize)\n Alpine.plugin(collapse)\n Alpine.plugin(anchor)\n Alpine.plugin(focus)\n Alpine.plugin(persist)\n Alpine.plugin(navigate)\n Alpine.plugin(mask)\n\n Alpine.addRootSelector(() => '[wire\\\\:id]')\n\n Alpine.onAttributesAdded((el, attributes) => {\n // if there are no \"wire:\" directives we don't need to process this element any further.\n // This prevents Livewire from causing general slowness for other Alpine elements on the page...\n if (! Array.from(attributes).some(attribute => matchesForLivewireDirective(attribute.name))) return\n\n let component = closestComponent(el, false)\n\n if (! component) return\n\n attributes.forEach(attribute => {\n if (! matchesForLivewireDirective(attribute.name)) return;\n\n let directive = extractDirective(el, attribute.name)\n\n trigger('directive.init', { el, component, directive, cleanup: (callback) => {\n Alpine.onAttributeRemoved(el, directive.raw, callback)\n } })\n })\n })\n\n Alpine.interceptInit(\n Alpine.skipDuringClone(el => {\n // if there are no \"wire:\" directives we don't need to process this element any further.\n // This prevents Livewire from causing general slowness for other Alpine elements on the page...\n if (! Array.from(el.attributes).some(attribute => matchesForLivewireDirective(attribute.name))) return\n\n if (el.hasAttribute('wire:id')) {\n let component = initComponent(el)\n\n Alpine.onAttributeRemoved(el, 'wire:id', () => {\n destroyComponent(component.id)\n })\n }\n\n let component = closestComponent(el, false)\n\n if (component) {\n trigger('element.init', { el, component })\n\n let directives = Array.from(el.getAttributeNames())\n .filter(name => matchesForLivewireDirective(name))\n .map(name => extractDirective(el, name))\n\n directives.forEach(directive => {\n trigger('directive.init', { el, component, directive, cleanup: (callback) => {\n Alpine.onAttributeRemoved(el, directive.raw, callback)\n } })\n })\n }\n })\n )\n\n Alpine.start()\n\n setTimeout(() => window.Livewire.initialRenderIsFinished = true)\n\n dispatch(document, 'livewire:initialized')\n}\n\nfunction ensureLivewireScriptIsntMisplaced() {\n let el = document.querySelector('script[data-update-uri][data-csrf]')\n\n // If there is no Livewire-injected script on the page, move on...\n if (! el) return\n\n // If there is, let's ensure it's at the top-level. If it's nested\n // inside a normal element, that probably means that a closing\n // tag was missing in the template and Chrome moved the tag.\n\n // We're only checking for \"div\" here because it's quick and useful...\n let livewireEl = el.closest('[wire\\\\:id]')\n\n if (livewireEl) {\n console.warn('Livewire: missing closing tags found. Ensure your template elements contain matching closing tags.', livewireEl)\n }\n}\n", "import { on as hook } from '@/hooks'\n\nhook('effect', ({ component, effects }) => {\n registerListeners(component, effects.listeners || [])\n})\n\nfunction registerListeners(component, listeners) {\n listeners.forEach(name => {\n // Register a global listener...\n let handler = (e) => {\n if (e.__livewire) e.__livewire.receivedBy.push(component)\n\n component.$wire.call('__dispatch', name, e.detail || {})\n }\n\n window.addEventListener(name, handler)\n\n component.addCleanup(() => window.removeEventListener(name, handler))\n\n // Register a listener for when \"to\" or \"self\"\n component.el.addEventListener(name, (e) => {\n // We don't care about non-Livewire dispatches...\n if (! e.__livewire) return\n\n // We don't care about Livewire bubbling dispatches (only \"to\" and \"self\")...\n if (e.bubbles) return\n\n if (e.__livewire) e.__livewire.receivedBy.push(component.id)\n\n component.$wire.call('__dispatch', name, e.detail || {})\n })\n })\n}\n\n\n", "import { on } from '@/hooks'\nimport Alpine from 'alpinejs'\n\nlet executedScripts = new WeakMap\n\nlet executedAssets = new Set\n\non('payload.intercept', async ({ assets }) => {\n if(! assets) return\n\n for (let [key, asset] of Object.entries(assets)) {\n await onlyIfAssetsHaventBeenLoadedAlreadyOnThisPage(key, async () => {\n await addAssetsToHeadTagOfPage(asset)\n })\n }\n})\n\n// Assets that were injected into the HTML need to be registered so that\n// they aren't loaded again...\non('component.init', ({ component }) => {\n let assets = component.snapshot.memo.assets\n\n if (assets) {\n assets.forEach((key) => {\n if (executedAssets.has(key)) return\n executedAssets.add(key)\n })\n }\n})\n\non('effect', ({ component, effects }) => {\n let scripts = effects.scripts\n\n if (scripts) {\n Object.entries(scripts).forEach(([key, content]) => {\n onlyIfScriptHasntBeenRunAlreadyForThisComponent(component, key, () => {\n let scriptContent = extractScriptTagContent(content)\n\n Alpine.dontAutoEvaluateFunctions(() => {\n Alpine.evaluate(component.el, scriptContent, { '$wire': component.$wire })\n })\n })\n })\n }\n})\n\nfunction onlyIfScriptHasntBeenRunAlreadyForThisComponent(component, key, callback) {\n if (executedScripts.has(component)) {\n let alreadyRunKeys = executedScripts.get(component)\n\n if (alreadyRunKeys.includes(key)) return\n }\n\n callback()\n\n if (! executedScripts.has(component)) executedScripts.set(component, [])\n\n let alreadyRunKeys = executedScripts.get(component)\n\n alreadyRunKeys.push(key)\n\n executedScripts.set(component, alreadyRunKeys)\n}\n\nfunction extractScriptTagContent(rawHtml) {\n let scriptRegex = /<script\\b[^>]*>([\\s\\S]*?)<\\/script>/gm\n let matches = scriptRegex.exec(rawHtml)\n let innards = matches && matches[1] ? matches[1].trim() : ''\n\n return innards\n}\n\nasync function onlyIfAssetsHaventBeenLoadedAlreadyOnThisPage(key, callback) {\n if (executedAssets.has(key)) return\n\n await callback()\n\n executedAssets.add(key)\n}\n\nasync function addAssetsToHeadTagOfPage(rawHtml) {\n let newDocument = (new DOMParser()).parseFromString(rawHtml, \"text/html\")\n let newHead = document.adoptNode(newDocument.head)\n\n for (let child of newHead.children) {\n try {\n await runAssetSynchronously(child)\n } catch (error) {\n // Let's eat any promise rejects so that we don't\n // break the rest of Livewire's handling of the response...\n // Any errors triggered by adding the script tag to the page\n // will still be thrown...\n }\n }\n}\n\nasync function runAssetSynchronously(child) {\n return new Promise((resolve, reject) => {\n if (isScript(child)) {\n let script = cloneScriptTag(child)\n\n // Script assets need to be loaded synchronously so that scripts have\n // their global variables available...\n if (script.src) {\n script.onload = () => resolve()\n script.onerror = () => reject()\n } else {\n resolve()\n }\n\n document.head.appendChild(script)\n } else {\n document.head.appendChild(child)\n\n resolve()\n }\n })\n}\n\nfunction isScript(el) {\n return el.tagName.toLowerCase() === 'script'\n}\n\nfunction cloneScriptTag(el) {\n let script = document.createElement('script')\n\n script.textContent = el.textContent\n script.async = el.async\n\n for (let attr of el.attributes) {\n script.setAttribute(attr.name, attr.value)\n }\n\n return script\n}\n", "import { overrideMethod } from '@/$wire'\nimport { on } from '@/hooks'\nimport Alpine from 'alpinejs'\n\non('effect', ({ component, effects }) => {\n let js = effects.js\n let xjs = effects.xjs\n\n if (js) {\n Object.entries(js).forEach(([method, body]) => {\n overrideMethod(component, method, () => {\n Alpine.evaluate(component.el, body)\n })\n })\n }\n\n if (xjs) {\n xjs.forEach(expression => {\n Alpine.evaluate(component.el, expression)\n })\n }\n})\n\n", "import { trigger } from \"@/hooks\"\nimport { closestComponent } from \"@/store\"\nimport Alpine from 'alpinejs'\n\nexport function morph(component, el, html) {\n let wrapperTag = el.parentElement\n // If the root element is a \"tr\", we need the wrapper to be a \"table\"...\n ? el.parentElement.tagName.toLowerCase()\n : 'div'\n\n let wrapper = document.createElement(wrapperTag)\n\n wrapper.innerHTML = html\n let parentComponent\n\n try {\n parentComponent = closestComponent(el.parentElement)\n } catch (e) {}\n\n parentComponent && (wrapper.__livewire = parentComponent)\n\n let to = wrapper.firstElementChild\n\n to.__livewire = component\n\n trigger('morph', { el, toEl: to, component })\n\n Alpine.morph(el, to, {\n updating: (el, toEl, childrenOnly, skip) => {\n if (isntElement(el)) return\n\n trigger('morph.updating', { el, toEl, component, skip, childrenOnly })\n\n // bypass DOM diffing for children by overwriting the content\n if (el.__livewire_replace === true) el.innerHTML = toEl.innerHTML;\n // completely bypass DOM diffing for this element and all children\n if (el.__livewire_replace_self === true) { el.outerHTML = toEl.outerHTML; return skip(); }\n\n if (el.__livewire_ignore === true) return skip()\n if (el.__livewire_ignore_self === true) childrenOnly()\n\n // Children will update themselves.\n if (isComponentRootEl(el) && el.getAttribute('wire:id') !== component.id) return skip()\n\n // Give the root Livewire \"to\" element, the same object reference as the \"from\"\n // element. This ensures new Alpine magics like $wire and @entangle can\n // initialize in the context of a real Livewire component object.\n if (isComponentRootEl(el)) toEl.__livewire = component\n },\n\n updated: (el) => {\n if (isntElement(el)) return\n\n trigger('morph.updated', { el, component })\n },\n\n removing: (el, skip) => {\n if (isntElement(el)) return\n\n trigger('morph.removing', { el, component, skip })\n },\n\n removed: (el) => {\n if (isntElement(el)) return\n\n trigger('morph.removed', { el, component })\n },\n\n adding: (el) => {\n trigger('morph.adding', { el, component })\n },\n\n added: (el) => {\n if (isntElement(el)) return\n\n const closestComponentId = closestComponent(el).id\n\n trigger('morph.added', { el })\n },\n\n key: (el) => {\n if (isntElement(el)) return\n\n return el.hasAttribute(`wire:key`)\n ? el.getAttribute(`wire:key`)\n : // If no \"key\", then first check for \"wire:id\", then \"id\"\n el.hasAttribute(`wire:id`)\n ? el.getAttribute(`wire:id`)\n : el.id\n },\n\n lookahead: false,\n })\n\n trigger('morphed', { el, component })\n}\n\nfunction isntElement(el) {\n return typeof el.hasAttribute !== 'function'\n}\n\nfunction isComponentRootEl(el) {\n return el.hasAttribute('wire:id')\n}\n", "import { morph } from '@/morph'\nimport { on } from '@/hooks'\n\non('effect', ({ component, effects }) => {\n let html = effects.html\n if (! html) return\n\n // Wrapping this in a double queueMicrotask. The first one puts it after all\n // other \"effect\" hooks, and the second one puts it after all reactive\n // Alpine effects (that are processed via flushJobs in scheduler).\n queueMicrotask(() => {\n queueMicrotask(() => {\n morph(component, component.el, html)\n })\n })\n})\n", "import { dispatch, dispatchSelf, dispatchTo } from '@/events'\nimport { on } from '@/hooks'\n\non('effect', ({ component, effects }) => {\n dispatchEvents(component, effects.dispatches || [])\n})\n\nfunction dispatchEvents(component, dispatches) {\n dispatches.forEach(({ name, params = {}, self = false, to }) => {\n if (self) dispatchSelf(component, name, params)\n else if (to) dispatchTo(to, name, params)\n else dispatch(component, name, params)\n })\n}\n\n\n", "import { getDirectives } from '@/directives'\nimport { on } from '@/hooks'\nimport { Bag } from '@/utils'\nimport Alpine from 'alpinejs'\n\nlet cleanups = new Bag\n\n// Adding a setTimeout here so that these event listeners are\n// registered AFTER most other event listenrs, this way, we\n// can call \"stopPropagation\" for things like wire:confirm\non('directive.init', ({ el, directive, cleanup, component }) => setTimeout(() => {\n if (directive.value !== 'submit') return\n\n // Livewire will clean it all up automatically when the form\n // submission returns and the new DOM lacks these additions...\n el.addEventListener('submit', () => {\n // If using wire:submit=\"$parent...\", we will need to use\n // the parent ID as a reference for undoing because it's\n // the ID that will come back from the network request.\n let componentId = directive.expression.startsWith('$parent')\n ? component.parent.id\n : component.id\n\n let cleanup = disableForm(el)\n\n cleanups.add(componentId, cleanup)\n })\n}))\n\non('commit', ({ component, respond }) => {\n respond(() => {\n cleanups.each(component.id, i => i())\n cleanups.remove(component.id)\n })\n})\n\nfunction disableForm(formEl) {\n let undos = []\n\n Alpine.walk(formEl, (el, skip) => {\n if (! formEl.contains(el)) return\n\n if (el.hasAttribute('wire:ignore')) return skip()\n\n if (shouldMarkDisabled(el)) {\n undos.push(markDisabled(el))\n } else if (shouldMarkReadOnly(el)) {\n undos.push(markReadOnly(el))\n }\n })\n\n return () => {\n while (undos.length > 0) undos.shift()()\n }\n}\n\nfunction shouldMarkDisabled(el) {\n let tag = el.tagName.toLowerCase()\n\n if (tag === 'select') return true\n if (tag === 'button' && el.type === 'submit') return true\n if (tag === 'input' && (el.type === 'checkbox' || el.type === 'radio')) return true\n\n return false\n}\n\nfunction shouldMarkReadOnly(el) {\n return ['input', 'textarea'].includes(el.tagName.toLowerCase())\n}\n\nfunction markDisabled(el) {\n let undo = el.disabled\n ? () => {}\n : () => el.disabled = false\n\n el.disabled = true\n\n return undo\n}\n\nfunction markReadOnly(el) {\n let undo = el.readOnly\n ? () => {}\n : () => el.readOnly = false\n\n el.readOnly = true\n\n return undo\n}\n", "import { on } from '@/hooks'\n\n// Ensure that all child components with reactive props (even deeply nested)\n// are included in the network request...\non('commit.pooling', ({ commits }) => {\n commits.forEach(commit => {\n let component = commit.component\n\n getDeepChildrenWithBindings(component, child => {\n child.$wire.$commit()\n })\n })\n})\n\n// Ensure that related components are pooled together, even if they chose\n// to be isolated normally...\non('commit.pooled', ({ pools }) => {\n let commits = getPooledCommits(pools)\n\n commits.forEach(commit => {\n let component = commit.component\n\n getDeepChildrenWithBindings(component, child => {\n colocateCommitsByComponent(pools, component, child)\n })\n })\n})\n\nfunction getPooledCommits(pools) {\n let commits = []\n\n pools.forEach(pool => {\n pool.commits.forEach(commit => {\n commits.push(commit)\n })\n })\n\n return commits\n}\n\nfunction colocateCommitsByComponent(pools, component, foreignComponent) {\n let pool = findPoolWithComponent(pools, component)\n\n let foreignPool = findPoolWithComponent(pools, foreignComponent)\n\n let foreignCommit = foreignPool.findCommitByComponent(foreignComponent)\n\n // Delete needs to come before add in case there are the same pool...\n foreignPool.delete(foreignCommit)\n\n pool.add(foreignCommit)\n\n // Cleanup empty pools...\n pools.forEach(pool => {\n if (pool.empty()) pools.delete(pool)\n })\n}\n\nfunction findPoolWithComponent(pools, component) {\n for (let [idx, pool] of pools.entries()) {\n if (pool.hasCommitFor(component)) return pool\n }\n}\n\nfunction getDeepChildrenWithBindings(component, callback) {\n getDeepChildren(component, child => {\n if (hasReactiveProps(child) || hasWireModelableBindings(child)) {\n callback(child)\n }\n })\n}\n\nfunction hasReactiveProps(component) {\n let meta = component.snapshot.memo\n let props = meta.props\n\n return !! props\n}\n\nfunction hasWireModelableBindings(component) {\n let meta = component.snapshot.memo\n let bindings = meta.bindings\n\n return !! bindings\n}\n\nfunction getDeepChildren(component, callback) {\n component.children.forEach(child => {\n callback(child)\n\n getDeepChildren(child, callback)\n })\n}\n", "import { on } from '@/hooks'\n\non('commit', ({ succeed }) => {\n succeed(({ effects }) => {\n let download = effects.download\n\n if (! download) return\n\n // We need to use window.webkitURL so downloads work on iOS Safari.\n let urlObject = window.webkitURL || window.URL\n\n let url = urlObject.createObjectURL(\n base64toBlob(download.content, download.contentType)\n )\n\n let invisibleLink = document.createElement('a')\n\n invisibleLink.style.display = 'none'\n invisibleLink.href = url\n invisibleLink.download = download.name\n\n document.body.appendChild(invisibleLink)\n\n invisibleLink.click()\n\n setTimeout(function() {\n urlObject.revokeObjectURL(url)\n }, 0);\n })\n})\n\nfunction base64toBlob(b64Data, contentType = '', sliceSize = 512) {\n const byteCharacters = atob(b64Data)\n const byteArrays = []\n\n if (contentType === null) contentType = ''\n\n for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {\n let slice = byteCharacters.slice(offset, offset + sliceSize)\n\n let byteNumbers = new Array(slice.length)\n\n for (let i = 0; i < slice.length; i++) {\n byteNumbers[i] = slice.charCodeAt(i)\n }\n\n let byteArray = new Uint8Array(byteNumbers)\n\n byteArrays.push(byteArray)\n }\n\n return new Blob(byteArrays, { type: contentType });\n}\n", "import { on } from '@/hooks'\n\nlet componentsThatWantToBeBundled = new WeakSet\n\nlet componentsThatAreLazy = new WeakSet\n\non('component.init', ({ component }) => {\n let memo = component.snapshot.memo\n\n // We only care about lazy components...\n if (memo.lazyLoaded === undefined) return\n\n componentsThatAreLazy.add(component)\n\n // The component doesn't want its lazy load to be an isolated request\n // then we'll mark it to detect at \"pool\" time to make sure it gets bundled...\n if (memo.lazyIsolated !== undefined && memo.lazyIsolated === false) {\n componentsThatWantToBeBundled.add(component)\n }\n})\n\non('commit.pooling', ({ commits }) => {\n commits.forEach(commit => {\n // We only care about lazy components...\n if (! componentsThatAreLazy.has(commit.component)) return\n\n if (componentsThatWantToBeBundled.has(commit.component)) {\n commit.isolate = false\n\n componentsThatWantToBeBundled.delete(commit.component)\n } else {\n commit.isolate = true\n }\n\n // Component is no longer lazy after the first full request, so remove it...\n componentsThatAreLazy.delete(commit.component)\n })\n})\n", "import { on } from '@/hooks'\nimport { dataGet } from '@/utils'\nimport Alpine from 'alpinejs'\nimport { track } from '@/plugins/history'\n\non('effect', ({ component, effects, cleanup }) => {\n let queryString = effects['url']\n\n if (! queryString) return\n\n Object.entries(queryString).forEach(([key, value]) => {\n let { name, as, use, alwaysShow, except } = normalizeQueryStringEntry(key, value)\n\n if (! as) as = name\n\n let initialValue = [false, null, undefined].includes(except) ? dataGet(component.ephemeral, name) : except\n\n let { replace, push, pop } = track(as, initialValue, alwaysShow, except)\n\n if (use === 'replace') {\n let effectReference = Alpine.effect(() => {\n replace(dataGet(component.reactive, name))\n })\n\n cleanup(() => Alpine.release(effectReference))\n } else if (use === 'push') {\n let forgetCommitHandler = on('commit', ({ component: commitComponent, succeed }) => {\n if (component !== commitComponent) return\n\n let beforeValue = dataGet(component.canonical, name)\n\n succeed(() => {\n let afterValue = dataGet(component.canonical, name)\n\n if (JSON.stringify(beforeValue) === JSON.stringify(afterValue)) return\n\n push(afterValue)\n })\n })\n\n let forgetPopHandler = pop(async newValue => {\n await component.$wire.set(name, newValue)\n\n // @todo: this is the absolute worst thing ever I'm so sorry this needs to be refactored stat:\n document.querySelectorAll('input').forEach(el => {\n el._x_forceModelUpdate && el._x_forceModelUpdate(el._x_model.get())\n })\n })\n\n cleanup(() => {\n forgetCommitHandler()\n forgetPopHandler()\n })\n }\n })\n})\n\nfunction normalizeQueryStringEntry(key, value) {\n let defaults = { use: 'replace', alwaysShow: false }\n\n if (typeof value === 'string') {\n return {...defaults, name: value, as: value }\n } else {\n let fullerDefaults = {...defaults, name: key, as: key }\n\n return {...fullerDefaults, ...value }\n }\n}\n", "import { on } from '@/hooks'\nimport { dispatchSelf } from '@/events'\n\non('request', ({ options }) => {\n if (window.Echo) {\n options.headers['X-Socket-ID'] = window.Echo.socketId()\n }\n})\n\non('effect', ({ component, effects }) => {\n let listeners = effects.listeners || []\n\n listeners.forEach(event => {\n if (event.startsWith('echo')) {\n if (typeof window.Echo === 'undefined') {\n console.warn('Laravel Echo cannot be found')\n\n return\n }\n\n let event_parts = event.split(/(echo:|echo-)|:|,/)\n\n if (event_parts[1] == 'echo:') {\n event_parts.splice(2, 0, 'channel', undefined)\n }\n\n if (event_parts[2] == 'notification') {\n event_parts.push(undefined, undefined)\n }\n\n let [\n s1,\n signature,\n channel_type,\n s2,\n channel,\n s3,\n event_name,\n ] = event_parts\n\n if (['channel', 'private', 'encryptedPrivate'].includes(channel_type)) {\n let handler = e => dispatchSelf(component, event, [e])\n\n window.Echo[channel_type](channel).listen(event_name, handler)\n\n component.addCleanup(() => {\n window.Echo[channel_type](channel).stopListening(event_name, handler)\n })\n } else if (channel_type == 'presence') {\n if (['here', 'joining', 'leaving'].includes(event_name)) {\n window.Echo.join(channel)[event_name](e => {\n dispatchSelf(component, event, [e])\n })\n\n // @todo: add listener cleanup...\n } else{\n let handler = e => dispatchSelf(component, event, [e])\n\n window.Echo.join(channel).listen(event_name, handler)\n\n component.addCleanup(() => {\n window.Echo.leaveChannel(channel)\n })\n }\n } else if (channel_type == 'notification') {\n window.Echo.private(channel).notification(notification => {\n dispatchSelf(component, event, [notification])\n })\n\n // @todo: add listener cleanup...\n } else {\n console.warn('Echo channel type not yet supported')\n }\n }\n })\n})\n", "import { on } from '@/hooks'\n\nlet componentsThatAreIsolated = new WeakSet\n\non('component.init', ({ component }) => {\n let memo = component.snapshot.memo\n\n // We only care about isolated components...\n if (memo.isolate !== true) return\n\n componentsThatAreIsolated.add(component)\n})\n\non('commit.pooling', ({ commits }) => {\n commits.forEach(commit => {\n // We only care about isolated components...\n if (! componentsThatAreIsolated.has(commit.component)) return\n\n commit.isolate = true\n })\n})\n", "\nshouldHideProgressBar() && Alpine.navigate.disableProgressBar()\n\ndocument.addEventListener('alpine:navigate', e => forwardEvent('livewire:navigate', e))\ndocument.addEventListener('alpine:navigating', e => forwardEvent('livewire:navigating', e))\ndocument.addEventListener('alpine:navigated', e => forwardEvent('livewire:navigated', e))\n\nfunction forwardEvent(name, original) {\n let event = new CustomEvent(name, { cancelable: true, bubbles: true, detail: original.detail })\n\n document.dispatchEvent(event)\n\n if (event.defaultPrevented) {\n original.preventDefault()\n }\n}\n\nexport function shouldRedirectUsingNavigateOr(effects, url, or) {\n let forceNavigate = effects.redirectUsingNavigate\n\n if (forceNavigate) {\n Alpine.navigate(url)\n } else {\n or()\n }\n}\n\nfunction shouldHideProgressBar() {\n if (!! document.querySelector('[data-no-progress-bar]')) return true\n\n if (window.livewireScriptConfig && window.livewireScriptConfig.progressBar === false) return true\n\n return false\n}\n", "import { on } from \"@/hooks\"\nimport { shouldRedirectUsingNavigateOr } from \"./supportNavigate\"\n\non('effect', ({ effects }) => {\n if (! effects['redirect']) return\n\n let url = effects['redirect']\n\n shouldRedirectUsingNavigateOr(effects, url, () => {\n window.location.href = url\n })\n})\n", "import { directive } from \"@/directives\"\nimport { on } from '@/hooks'\nimport Alpine from 'alpinejs'\n\non('morph.added', ({ el }) => {\n el.__addedByMorph = true\n})\n\ndirective('transition', ({ el, directive, component, cleanup }) => {\n let visibility = Alpine.reactive({ state: el.__addedByMorph ? false : true })\n\n // We're going to control the element's transition with Alpine transitions...\n Alpine.bind(el, {\n [directive.rawName.replace('wire:', 'x-')]: '',\n 'x-show'() { return visibility.state },\n })\n\n // If it's not the initial page load, transition the element in...\n el.__addedByMorph && setTimeout(() => visibility.state = true)\n\n let cleanups = []\n\n cleanups.push(on('morph.removing', ({ el, skip }) => {\n // Here we interupt morphdom from removing an element...\n skip()\n\n // When the transition ends...\n el.addEventListener('transitionend', () => {\n // We can actually remove the element and all the listeners along with it...\n el.remove()\n })\n\n // Now we can trigger a transition:\n visibility.state = false\n\n cleanups.push(on('morph', ({ component: morphComponent }) => {\n if (morphComponent !== component) return\n\n // While this element is transitioning out, a new morph is about to occur.\n // Let's expidite this one and clean it up so it doesn't interfere...\n el.remove()\n\n cleanups.forEach(i => i())\n }))\n }))\n\n cleanup(() => cleanups.forEach(i => i()))\n})\n\n\n\n", "import { WeakBag } from './utils'\n\nlet callbacksByComponent = new WeakBag\n\nexport function debounceByComponent(component, callback, time) {\n // Prepare yourself for what's happening here.\n // Any text input with wire:model on it should be \"debounced\" by ~150ms by default.\n // We can't use a simple debounce function because we need a way to clear all the pending\n // debounces if a user submits a form or performs some other action.\n // This is a modified debounce function that acts just like a debounce, except it stores\n // the pending callbacks in a global property so we can \"clear them\" on command instead\n // of waiting for their setTimeouts to expire. I know.\n\n // This is a \"null\" callback. Each wire:model will resister one of these upon initialization.\n let callbackRegister = { callback: () => { } }\n callbacksByComponent.add(component, callbackRegister)\n\n // This is a normal \"timeout\" for a debounce function.\n var timeout\n\n return e => {\n clearTimeout(timeout)\n\n timeout = setTimeout(() => {\n callback(e)\n timeout = undefined\n\n // Because we just called the callback, let's return the\n // callback register to it's normal \"null\" state.\n callbackRegister.callback = () => { }\n }, time)\n\n // Register the current callback in the register as a kind-of \"escape-hatch\".\n callbackRegister.callback = () => {\n clearTimeout(timeout)\n callback(e)\n }\n }\n}\n\nexport function callAndClearComponentDebounces(component, callback) {\n // This is to protect against the following scenario:\n // A user is typing into a debounced input, and hits the enter key.\n // If the enter key submits a form or something, the submission\n // will happen BEFORE the model input finishes syncing because\n // of the debounce. This makes sure to clear anything in the debounce queue.\n\n callbacksByComponent.each(component, callbackRegister => {\n callbackRegister.callback()\n callbackRegister.callback = () => { }\n })\n\n callback()\n}\n", "import { callAndClearComponentDebounces } from '@/debounce'\nimport { customDirectiveHasBeenRegistered } from '@/directives'\nimport { on } from '@/hooks'\nimport Alpine from 'alpinejs'\n\non('directive.init', ({ el, directive, cleanup, component }) => {\n if (['snapshot', 'effects', 'model', 'init', 'loading', 'poll', 'ignore', 'id', 'data', 'key', 'target', 'dirty'].includes(directive.value)) return\n if (customDirectiveHasBeenRegistered(directive.value)) return\n\n let attribute = directive.rawName.replace('wire:', 'x-on:')\n\n // Automatically add .prevent to wire:submit, if they didn't add it themselves...\n if (directive.value === 'submit' && ! directive.modifiers.includes('prevent')) {\n attribute = attribute + '.prevent'\n }\n\n let cleanupBinding = Alpine.bind(el, {\n [attribute](e) {\n let execute = () => {\n callAndClearComponentDebounces(component, () => {\n // Forward these calls directly to $wire. Let them handle firing the request.\n Alpine.evaluate(el, '$wire.'+directive.expression, { scope: { $event: e }})\n })\n }\n\n // Account for the existance of wire:confirm=\"...\" on the action...\n if (el.__livewire_confirm) {\n el.__livewire_confirm(() => {\n execute()\n }, () => {\n e.stopImmediatePropagation()\n })\n } else {\n execute()\n }\n }\n })\n\n cleanup(cleanupBinding)\n})\n", "import Alpine from 'alpinejs'\n\nAlpine.addInitSelector(() => `[wire\\\\:navigate]`)\nAlpine.addInitSelector(() => `[wire\\\\:navigate\\\\.hover]`)\n\nAlpine.interceptInit(\n Alpine.skipDuringClone(el => {\n if (el.hasAttribute('wire:navigate')) {\n Alpine.bind(el, { ['x-navigate']: true })\n } else if (el.hasAttribute('wire:navigate.hover')) {\n Alpine.bind(el, { ['x-navigate.hover']: true })\n }\n })\n)\n\ndocument.addEventListener('alpine:navigating', () => {\n // Before navigating away, we'll inscribe the latest state of each component\n // in their HTML so that upon return, they will have the latest state...\n Livewire.all().forEach(component => {\n component.inscribeSnapshotAndEffectsOnElement()\n })\n})\n", "import { directive } from \"@/directives\"\n\ndirective('confirm', ({ el, directive }) => {\n let message = directive.expression\n let shouldPrompt = directive.modifiers.includes('prompt')\n\n // Convert sanitized linebreaks (\"\\n\") to real line breaks...\n message = message.replaceAll('\\\\n', '\\n')\n\n if (message === '') message = 'Are you sure?'\n\n el.__livewire_confirm = (action, instead) => {\n if (shouldPrompt) {\n let [question, expected] = message.split('|')\n\n if (! expected) {\n console.warn('Livewire: Must provide expectation with wire:confirm.prompt')\n } else {\n let input = prompt(question)\n\n if (input === expected) {\n action()\n } else {\n instead()\n }\n }\n } else {\n if (confirm(message)) action()\n else instead()\n }\n }\n})\n", "\nexport function toggleBooleanStateDirective(el, directive, isTruthy, cachedDisplay = null) {\n isTruthy = directive.modifiers.includes('remove') ? ! isTruthy : isTruthy\n\n if (directive.modifiers.includes('class')) {\n let classes = directive.expression.split(' ').filter(String)\n\n if (isTruthy) {\n el.classList.add(...classes)\n } else {\n el.classList.remove(...classes)\n }\n } else if (directive.modifiers.includes('attr')) {\n if (isTruthy) {\n el.setAttribute(directive.expression, true)\n } else {\n el.removeAttribute(directive.expression)\n }\n } else {\n let cache = cachedDisplay ?? window\n .getComputedStyle(el, null)\n .getPropertyValue('display')\n\n let display = (['inline', 'block', 'table', 'flex', 'grid', 'inline-flex']\n .filter(i => directive.modifiers.includes(i))[0] || 'inline-block')\n\n // If element is to be removed, set display to its current value...\n // display = (directive.modifiers.includes('remove') && ! isTruthy)\n display = (directive.modifiers.includes('remove') && ! isTruthy)\n ? cache : display\n\n el.style.display = isTruthy ? display : 'none'\n }\n}\n", "import { toggleBooleanStateDirective } from './shared'\nimport { directive } from '@/directives'\n\nlet offlineHandlers = new Set\nlet onlineHandlers = new Set\n\nwindow.addEventListener('offline', () => offlineHandlers.forEach(i => i()))\nwindow.addEventListener('online', () => onlineHandlers.forEach(i => i()))\n\ndirective('offline', ({ el, directive, cleanup }) => {\n let setOffline = () => toggleBooleanStateDirective(el, directive, true)\n let setOnline = () => toggleBooleanStateDirective(el, directive, false)\n\n offlineHandlers.add(setOffline)\n onlineHandlers.add(setOnline)\n\n cleanup(() => {\n offlineHandlers.delete(setOffline)\n onlineHandlers.delete(setOnline)\n })\n})\n", "import { toggleBooleanStateDirective } from './shared'\nimport { directive, getDirectives } from \"@/directives\"\nimport { on } from '@/hooks'\nimport { listen } from '@/utils'\n\ndirective('loading', ({ el, directive, component, cleanup }) => {\n let { targets, inverted } = getTargets(el)\n\n let [delay, abortDelay] = applyDelay(directive)\n\n let cleanupA = whenTargetsArePartOfRequest(component, targets, inverted, [\n () => delay(() => toggleBooleanStateDirective(el, directive, true)),\n () => abortDelay(() => toggleBooleanStateDirective(el, directive, false)),\n ])\n\n let cleanupB = whenTargetsArePartOfFileUpload(component, targets, [\n () => delay(() => toggleBooleanStateDirective(el, directive, true)),\n () => abortDelay(() => toggleBooleanStateDirective(el, directive, false)),\n ])\n\n cleanup(() => {\n cleanupA()\n cleanupB()\n })\n})\n\nfunction applyDelay(directive) {\n if (! directive.modifiers.includes('delay') || directive.modifiers.includes('none')) return [i => i(), i => i()]\n\n let duration = 200\n\n let delayModifiers = {\n 'shortest': 50,\n 'shorter': 100,\n 'short': 150,\n 'default': 200,\n 'long': 300,\n 'longer': 500,\n 'longest': 1000,\n }\n\n Object.keys(delayModifiers).some(key => {\n if (directive.modifiers.includes(key)) {\n duration = delayModifiers[key]\n\n return true\n }\n })\n\n let timeout\n let started = false\n\n return [\n (callback) => { // Initiate delay...\n timeout = setTimeout(() => {\n callback()\n\n started = true\n }, duration)\n },\n async (callback) => { // Execute or abort...\n if (started) {\n await callback()\n started = false\n } else {\n clearTimeout(timeout)\n }\n },\n ]\n}\n\nfunction whenTargetsArePartOfRequest(component, targets, inverted, [ startLoading, endLoading ]) {\n return on('commit', ({ component: iComponent, commit: payload, respond }) => {\n if (iComponent !== component) return\n\n if (targets.length > 0 && containsTargets(payload, targets) === inverted) return\n\n startLoading()\n\n respond(() => {\n endLoading()\n })\n })\n}\n\nfunction whenTargetsArePartOfFileUpload(component, targets, [ startLoading, endLoading ]) {\n let eventMismatch = e => {\n let { id, property } = e.detail\n\n if (id !== component.id) return true\n if (targets.length > 0 && ! targets.map(i => i.target).includes(property)) return true\n\n return false\n }\n\n let cleanupA = listen(window, 'livewire-upload-start', e => {\n if (eventMismatch(e)) return\n\n startLoading()\n })\n\n let cleanupB = listen(window, 'livewire-upload-finish', e => {\n if (eventMismatch(e)) return\n\n endLoading()\n })\n\n let cleanupC = listen(window, 'livewire-upload-error', e => {\n if (eventMismatch(e)) return\n\n endLoading()\n })\n\n return () => {\n cleanupA()\n cleanupB()\n cleanupC()\n }\n}\n\nfunction containsTargets(payload, targets) {\n let { updates, calls } = payload\n\n return targets.some(({ target, params }) => {\n if (params) {\n return calls.some(({ method, params: methodParams }) => {\n return target === method\n && params === quickHash(JSON.stringify(methodParams))\n })\n }\n\n let hasMatchingUpdate = Object.keys(updates).some(property => {\n // If the property is nested, like `foo.bar`, we need to check if the root `foo` is the target.\n if (property.includes('.')) {\n let propertyRoot = property.split('.')[0]\n\n if (propertyRoot === target) return true\n }\n\n return property === target\n })\n\n if (hasMatchingUpdate) return true\n\n if (calls.map(i => i.method).includes(target)) return true\n })\n}\n\nfunction getTargets(el) {\n let directives = getDirectives(el)\n\n let targets = []\n\n let inverted = false\n\n if (directives.has('target')) {\n let directive = directives.get('target')\n\n let raw = directive.expression\n\n if (directive.modifiers.includes(\"except\")) inverted = true\n\n if (raw.includes('(') && raw.includes(')')) {\n targets.push({ target: directive.method, params: quickHash(JSON.stringify(directive.params)) })\n } else if (raw.includes(',')) {\n raw.split(',').map(i => i.trim()).forEach(target => {\n targets.push({ target })\n })\n } else {\n targets.push({ target: raw })\n }\n } else {\n // If there is no wire:target, let's check for the existance of a wire:click=\"foo\" or something,\n // and automatically scope this loading directive to that action.\n let nonActionOrModelLivewireDirectives = [ 'init', 'dirty', 'offline', 'target', 'loading', 'poll', 'ignore', 'key', 'id' ]\n\n directives\n .all()\n .filter(i => ! nonActionOrModelLivewireDirectives.includes(i.value))\n .map(i => i.expression.split('(')[0])\n .forEach(target => targets.push({ target }))\n }\n\n return { targets, inverted }\n}\n\nfunction quickHash(subject) {\n return btoa(encodeURIComponent(subject))\n}\n", "import { contentIsFromDump } from '@/utils'\nimport { directive } from '@/directives'\nimport { on, trigger } from '@/hooks'\n\ndirective('stream', ({el, directive, cleanup }) => {\n let { expression, modifiers } = directive\n\n let off = on('stream', ({ name, content, replace }) => {\n if (name !== expression) return\n\n if (modifiers.includes('replace') || replace) {\n el.innerHTML = content\n } else {\n el.innerHTML = el.innerHTML + content\n }\n })\n\n cleanup(off)\n})\n\non('request', ({ respond }) => {\n respond(mutableObject => {\n let response = mutableObject.response\n\n if (! response.headers.has('X-Livewire-Stream')) return\n\n mutableObject.response = {\n ok: true,\n redirected: false,\n status: 200,\n\n async text() {\n let finalResponse = await interceptStreamAndReturnFinalResponse(response, streamed => {\n trigger('stream', streamed)\n })\n\n if (contentIsFromDump(finalResponse)) {\n this.ok = false\n }\n\n return finalResponse\n }\n }\n })\n})\n\nasync function interceptStreamAndReturnFinalResponse(response, callback) {\n let reader = response.body.getReader()\n let remainingResponse = ''\n\n while (true) {\n let { done, value: chunk } = await reader.read()\n\n let decoder = new TextDecoder\n let output = decoder.decode(chunk)\n\n let [ streams, remaining ] = extractStreamObjects(remainingResponse + output)\n\n streams.forEach(stream => {\n callback(stream)\n })\n\n remainingResponse = remaining\n\n if (done) return remainingResponse\n }\n}\n\nfunction extractStreamObjects(raw) {\n let regex = /({\"stream\":true.*?\"endStream\":true})/g\n\n let matches = raw.match(regex)\n\n let parsed = []\n\n if (matches) {\n for (let i = 0; i < matches.length; i++) {\n parsed.push(JSON.parse(matches[i]).body)\n }\n }\n\n let remaining = raw.replace(regex, '');\n\n return [ parsed, remaining ];\n}\n", "import { directive } from \"@/directives\"\n\ndirective('replace', ({ el, directive }) => {\n if (directive.modifiers.includes('self')) {\n el.__livewire_replace_self = true\n } else {\n el.__livewire_replace = true\n }\n})\n", "import { directive } from \"@/directives\"\n\ndirective('ignore', ({ el, directive }) => {\n if (directive.modifiers.includes('self')) {\n el.__livewire_ignore_self = true\n } else {\n el.__livewire_ignore = true\n }\n})\n", "import { toggleBooleanStateDirective } from './shared'\nimport { directive, getDirectives } from '@/directives'\nimport { dataGet, WeakBag } from '@/utils'\nimport { on } from '@/hooks'\n\nlet refreshDirtyStatesByComponent = new WeakBag\n\non('commit', ({ component, respond }) => {\n respond(() => {\n setTimeout(() => { // Doing a \"setTimeout\" to let morphdom do its thing first...\n refreshDirtyStatesByComponent.each(component, i => i(false))\n })\n })\n})\n\ndirective('dirty', ({ el, directive, component }) => {\n let targets = dirtyTargets(el)\n\n let dirty = Alpine.reactive({ state: false })\n\n let oldIsDirty = false\n\n let initialDisplay = el.style.display\n\n let refreshDirtyState = (isDirty) => {\n toggleBooleanStateDirective(el, directive, isDirty, initialDisplay)\n\n oldIsDirty = isDirty\n }\n\n refreshDirtyStatesByComponent.add(component, refreshDirtyState)\n\n Alpine.effect(() => {\n let isDirty = false\n\n if (targets.length === 0) {\n isDirty = JSON.stringify(component.canonical) !== JSON.stringify(component.reactive)\n } else {\n for (let i = 0; i < targets.length; i++) {\n if (isDirty) break;\n\n let target = targets[i]\n\n isDirty = JSON.stringify(dataGet(component.canonical, target)) !== JSON.stringify(dataGet(component.reactive, target))\n }\n }\n\n if (oldIsDirty !== isDirty) {\n refreshDirtyState(isDirty)\n }\n\n oldIsDirty = isDirty\n })\n})\n\nfunction dirtyTargets(el) {\n let directives = getDirectives(el)\n let targets = []\n\n if (directives.has('model')) {\n targets.push(directives.get('model').expression)\n }\n\n if (directives.has('target')) {\n targets = targets.concat(\n directives\n .get('target')\n .expression.split(',')\n .map(s => s.trim())\n )\n }\n\n return targets\n}\n", "import { directive } from '@/directives'\nimport { handleFileUpload } from '@/features/supportFileUploads'\nimport { closestComponent } from '@/store'\nimport { dataGet, dataSet } from '@/utils'\nimport Alpine from 'alpinejs'\n\ndirective('model', ({ el, directive, component, cleanup }) => {\n let { expression, modifiers } = directive\n\n if (! expression) {\n return console.warn('Livewire: [wire:model] is missing a value.', el)\n }\n\n if (componentIsMissingProperty(component, expression)) {\n return console.warn('Livewire: [wire:model=\"'+expression+'\"] property does not exist on component: ['+component.name+']', el)\n }\n\n // Handle file uploads differently...\n if (el.type && el.type.toLowerCase() === 'file') {\n return handleFileUpload(el, expression, component, cleanup)\n }\n\n let isLive = modifiers.includes('live')\n let isLazy = modifiers.includes('lazy') || modifiers.includes('change')\n let onBlur = modifiers.includes('blur')\n let isDebounced = modifiers.includes('debounce')\n\n // Trigger a network request (only if .live or .lazy is added to wire:model)...\n let update = expression.startsWith('$parent')\n ? () => component.$wire.$parent.$commit()\n : () => component.$wire.$commit()\n\n // If a plain wire:model is added to a text input, debounce the\n // trigerring of network requests.\n let debouncedUpdate = isTextInput(el) && ! isDebounced && isLive\n ? debounce(update, 150)\n : update\n\n Alpine.bind(el, {\n ['@change']() {\n isLazy && update()\n },\n ['@blur']() {\n onBlur && update()\n },\n ['x-model' + getModifierTail(modifiers)]() {\n return {\n get() {\n return dataGet(component.$wire, expression)\n },\n set(value) {\n dataSet(component.$wire, expression, value)\n\n isLive && (! isLazy) && (! onBlur) && debouncedUpdate()\n },\n }\n }\n })\n})\n\nfunction getModifierTail(modifiers) {\n modifiers = modifiers.filter(i => ! [\n 'lazy', 'defer'\n ].includes(i))\n\n if (modifiers.length === 0) return ''\n\n return '.' + modifiers.join('.')\n}\n\nfunction isTextInput(el) {\n return (\n ['INPUT', 'TEXTAREA'].includes(el.tagName.toUpperCase()) &&\n !['checkbox', 'radio'].includes(el.type)\n )\n}\n\nfunction isDirty(subject, dirty) {\n // Check for exact match: wire:model=\"bob\" in ['bob']\n if (dirty.includes(subject)) return true\n\n // Check case of parent: wire:model=\"bob.1\" in ['bob']\n return dirty.some(i => subject.startsWith(i))\n}\n\nfunction componentIsMissingProperty(component, property) {\n if (property.startsWith('$parent')) {\n let parent = closestComponent(component.el.parentElement, false)\n\n if (! parent) return true\n\n return componentIsMissingProperty(parent, property.split('$parent.')[1])\n }\n\n let baseProperty = property.split('.')[0]\n\n return ! Object.keys(component.canonical).includes(baseProperty)\n}\n\nfunction debounce(func, wait) {\n var timeout;\n\n return function() {\n var context = this, args = arguments;\n\n var later = function() {\n timeout = null\n\n func.apply(context, args)\n }\n\n clearTimeout(timeout)\n\n timeout = setTimeout(later, wait)\n }\n}\n", "import { directive } from \"@/directives\"\nimport Alpine from 'alpinejs'\n\ndirective('init', ({ el, directive }) => {\n let fullMethod = directive.expression ?? '$refresh'\n\n Alpine.evaluate(el, `$wire.${fullMethod}`)\n})\n\n", "import { directive, getDirectives } from \"@/directives\"\nimport Alpine from 'alpinejs'\n\ndirective('poll', ({ el, directive }) => {\n let interval = extractDurationFrom(directive.modifiers, 2000)\n\n let { start, pauseWhile, throttleWhile, stopWhen } = poll(() => {\n triggerComponentRequest(el, directive)\n }, interval)\n\n start()\n\n throttleWhile(() => theTabIsInTheBackground() && theDirectiveIsMissingKeepAlive(directive))\n pauseWhile(() => theDirectiveHasVisible(directive) && theElementIsNotInTheViewport(el))\n pauseWhile(() => theDirectiveIsOffTheElement(el))\n pauseWhile(() => livewireIsOffline())\n stopWhen(() => theElementIsDisconnected(el))\n})\n\nfunction triggerComponentRequest(el, directive) {\n Alpine.evaluate(el,\n directive.expression ? '$wire.' + directive.expression : '$wire.$commit()'\n )\n}\n\nfunction poll(callback, interval = 2000) {\n let pauseConditions = []\n let throttleConditions = []\n let stopConditions = []\n\n return {\n start() {\n let clear = syncronizedInterval(interval, () => {\n if (stopConditions.some(i => i())) return clear()\n if (pauseConditions.some(i => i())) return\n if (throttleConditions.some(i => i()) && Math.random() < .95) return\n\n callback()\n })\n },\n pauseWhile(condition) {\n pauseConditions.push(condition)\n },\n throttleWhile(condition) {\n throttleConditions.push(condition)\n },\n stopWhen(condition) {\n stopConditions.push(condition)\n }\n }\n}\n\nlet clocks = []\n\nfunction syncronizedInterval(ms, callback) {\n if (! clocks[ms]) {\n let clock = {\n timer: setInterval(() => clock.callbacks.forEach(i => i()), ms),\n callbacks: new Set,\n }\n\n clocks[ms] = clock\n }\n\n clocks[ms].callbacks.add(callback)\n\n return () => {\n clocks[ms].callbacks.delete(callback)\n\n if (clocks[ms].callbacks.size === 0) {\n clearInterval(clocks[ms].timer)\n delete clocks[ms]\n }\n }\n}\n\nlet isOffline = false\n\nwindow.addEventListener('offline', () => isOffline = true)\nwindow.addEventListener('online', () => isOffline = false)\n\nfunction livewireIsOffline() {\n return isOffline\n}\n\nlet inBackground = false\n\ndocument.addEventListener('visibilitychange', () => { inBackground = document.hidden }, false)\n\nfunction theTabIsInTheBackground() {\n return inBackground\n}\n\nfunction theDirectiveIsOffTheElement(el) {\n return ! getDirectives(el).has('poll')\n}\n\nfunction theDirectiveIsMissingKeepAlive(directive) {\n return ! directive.modifiers.includes('keep-alive')\n}\n\nfunction theDirectiveHasVisible(directive) {\n return directive.modifiers.includes('visible')\n}\n\nfunction theElementIsNotInTheViewport(el) {\n let bounding = el.getBoundingClientRect()\n\n return ! (\n bounding.top < (window.innerHeight || document.documentElement.clientHeight) &&\n bounding.left < (window.innerWidth || document.documentElement.clientWidth) &&\n bounding.bottom > 0 &&\n bounding.right > 0\n )\n}\n\nfunction theElementIsDisconnected(el) {\n return el.isConnected === false\n}\n\nfunction extractDurationFrom(modifiers, defaultDuration) {\n let durationInMilliSeconds\n let durationInMilliSecondsString = modifiers.find(mod => mod.match(/([0-9]+)ms/))\n let durationInSecondsString = modifiers.find(mod => mod.match(/([0-9]+)s/))\n\n if (durationInMilliSecondsString) {\n durationInMilliSeconds = Number(durationInMilliSecondsString.replace('ms', ''))\n } else if (durationInSecondsString) {\n durationInMilliSeconds = Number(durationInSecondsString.replace('s', '')) * 1000\n }\n\n return durationInMilliSeconds || defaultDuration\n}\n", "import { dispatchGlobal as dispatch, dispatchTo, on } from './events'\nimport { find, first, getByName, all } from './store'\nimport { start } from './lifecycle'\nimport { on as hook, trigger, triggerAsync } from './hooks'\nimport { directive } from './directives'\nimport Alpine from 'alpinejs'\n\nlet Livewire = {\n directive,\n dispatchTo,\n start,\n first,\n find,\n getByName,\n all,\n hook,\n trigger,\n triggerAsync,\n dispatch,\n on,\n get navigate() {\n return Alpine.navigate\n }\n}\n\nlet warnAboutMultipleInstancesOf = entity => console.warn(`Detected multiple instances of ${entity} running`)\n\nif (window.Livewire) warnAboutMultipleInstancesOf('Livewire')\nif (window.Alpine) warnAboutMultipleInstancesOf('Alpine')\n\n// Register features...\nimport './features/index'\n\n// Register directives...\nimport './directives/index'\n\n// Make globals...\nwindow.Livewire = Livewire\nwindow.Alpine = Alpine\n\nif (window.livewireScriptConfig === undefined) {\n window.Alpine.__fromLivewire = true\n\n document.addEventListener('DOMContentLoaded', () => {\n if (window.Alpine.__fromLivewire === undefined) {\n // If this is undefined, we know that an outside Alpine bundle\n // has been included on the page and will cause problems...\n warnAboutMultipleInstancesOf('Alpine')\n }\n\n // Start Livewire...\n Livewire.start()\n })\n}\n\nexport { Livewire, Alpine }\n"],
|
|
"mappings": "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",
|
|
"names": []
|
|
}
|