diff --git a/app/controllers/inertia_controller.rb b/app/controllers/inertia_controller.rb index 8f676d0..11f756a 100644 --- a/app/controllers/inertia_controller.rb +++ b/app/controllers/inertia_controller.rb @@ -58,7 +58,7 @@ class InertiaController < ApplicationController links << inertia_link("Projects", my_projects_path, active: helpers.current_page?(my_projects_path)) links << inertia_link("Docs", docs_path, active: helpers.current_page?(docs_path) || request.path.start_with?("/docs")) links << inertia_link("Extensions", extensions_path, active: helpers.current_page?(extensions_path)) - links << inertia_link("Settings", my_settings_path, active: helpers.current_page?(my_settings_path)) + links << inertia_link("Settings", my_settings_path, active: request.path.start_with?("/my/settings")) links << inertia_link("My OAuth Apps", oauth_applications_path, active: helpers.current_page?(oauth_applications_path) || request.path.start_with?("/oauth/applications")) links << { label: "Logout", action: "logout" } else diff --git a/app/controllers/settings/access_controller.rb b/app/controllers/settings/access_controller.rb new file mode 100644 index 0000000..39faa4f --- /dev/null +++ b/app/controllers/settings/access_controller.rb @@ -0,0 +1,43 @@ +class Settings::AccessController < Settings::BaseController + def show + render_access + end + + def update + if @user.update(access_params) + PosthogService.capture(@user, "settings_updated", { fields: access_params.keys }) + redirect_to my_settings_access_path, notice: "Settings updated successfully" + else + flash.now[:error] = @user.errors.full_messages.to_sentence.presence || "Failed to update settings" + render_access(status: :unprocessable_entity) + end + end + + def rotate_api_key + @user.api_keys.transaction do + @user.api_keys.destroy_all + + new_api_key = @user.api_keys.create!(name: "Hackatime key") + + PosthogService.capture(@user, "api_key_rotated") + render json: { token: new_api_key.token }, status: :ok + end + rescue => e + Rails.logger.error("error rotate #{e.class.name} #{e.message}") + render json: { error: "cant rotate" }, status: :unprocessable_entity + end + + private + + def render_access(status: :ok) + render_settings_page( + active_section: "access", + settings_update_path: my_settings_access_path, + status: status + ) + end + + def access_params + params.require(:user).permit(:hackatime_extension_text_type) + end +end diff --git a/app/controllers/settings/admin_controller.rb b/app/controllers/settings/admin_controller.rb new file mode 100644 index 0000000..20f1184 --- /dev/null +++ b/app/controllers/settings/admin_controller.rb @@ -0,0 +1,18 @@ +class Settings::AdminController < Settings::BaseController + before_action :require_admin_section_access + + def show + render_settings_page( + active_section: "admin", + settings_update_path: my_settings_profile_path + ) + end + + private + + def require_admin_section_access + unless current_user.admin_level.in?(%w[admin superadmin]) + redirect_to my_settings_profile_path, alert: "You are not authorized to access this page" + end + end +end diff --git a/app/controllers/settings/badges_controller.rb b/app/controllers/settings/badges_controller.rb new file mode 100644 index 0000000..74e5c2f --- /dev/null +++ b/app/controllers/settings/badges_controller.rb @@ -0,0 +1,8 @@ +class Settings::BadgesController < Settings::BaseController + def show + render_settings_page( + active_section: "badges", + settings_update_path: my_settings_profile_path + ) + end +end diff --git a/app/controllers/settings/base_controller.rb b/app/controllers/settings/base_controller.rb new file mode 100644 index 0000000..ee48a5b --- /dev/null +++ b/app/controllers/settings/base_controller.rb @@ -0,0 +1,229 @@ +class Settings::BaseController < InertiaController + layout "inertia" + + include ActionView::Helpers::DateHelper + include ActionView::Helpers::NumberHelper + + before_action :set_user + before_action :require_current_user + before_action :prepare_settings_page + + private + + def render_settings_page(active_section:, settings_update_path:, status: :ok) + render inertia: settings_component_for(active_section), props: settings_page_props( + active_section: active_section, + settings_update_path: settings_update_path + ), status: status + end + + def settings_component_for(active_section) + { + "profile" => "Users/Settings/Profile", + "integrations" => "Users/Settings/Integrations", + "access" => "Users/Settings/Access", + "badges" => "Users/Settings/Badges", + "data" => "Users/Settings/Data", + "admin" => "Users/Settings/Admin" + }.fetch(active_section.to_s, "Users/Settings/Profile") + end + + def prepare_settings_page + @is_own_settings = is_own_settings? + @can_enable_slack_status = @user.slack_access_token.present? && @user.slack_scopes.include?("users.profile:write") + + @enabled_sailors_logs = SailorsLogNotificationPreference.where( + slack_uid: @user.slack_uid, + enabled: true, + ).where.not(slack_channel_id: SailorsLog::DEFAULT_CHANNELS) + + @heartbeats_migration_jobs = @user.data_migration_jobs + + @projects = @user.project_repo_mappings.distinct.pluck(:project_name) + @work_time_stats_base_url = @user.slack_uid.present? ? "https://hackatime-badge.hackclub.com/#{@user.slack_uid}/" : nil + @work_time_stats_url = if @work_time_stats_base_url.present? + "#{@work_time_stats_base_url}#{@projects.first || 'example'}" + end + + @general_badge_url = GithubReadmeStats.new(@user.id, "darcula").generate_badge_url + @latest_api_key_token = @user.api_keys.last&.token + @mirrors = current_user.wakatime_mirrors.order(created_at: :desc) + end + + def settings_page_props(active_section:, settings_update_path:) + heartbeats_last_7_days = @user.heartbeats.where("time >= ?", 7.days.ago.to_f).count + channel_ids = @enabled_sailors_logs.pluck(:slack_channel_id) + + { + active_section: active_section, + section_paths: { + profile: my_settings_profile_path, + integrations: my_settings_integrations_path, + access: my_settings_access_path, + badges: my_settings_badges_path, + data: my_settings_data_path, + admin: my_settings_admin_path + }, + page_title: (@is_own_settings ? "My Settings" : "Settings | #{@user.display_name}"), + heading: (@is_own_settings ? "Settings" : "Settings for #{@user.display_name}"), + subheading: "Manage your profile, integrations, API access, and data tools.", + settings_update_path: settings_update_path, + username_max_length: User::USERNAME_MAX_LENGTH, + user: { + id: @user.id, + display_name: @user.display_name, + timezone: @user.timezone, + country_code: @user.country_code, + username: @user.username, + uses_slack_status: @user.uses_slack_status, + hackatime_extension_text_type: @user.hackatime_extension_text_type, + allow_public_stats_lookup: @user.allow_public_stats_lookup, + trust_level: @user.trust_level, + can_request_deletion: @user.can_request_deletion?, + github_uid: @user.github_uid, + github_username: @user.github_username, + slack_uid: @user.slack_uid + }, + paths: { + settings_path: settings_update_path, + wakatime_setup_path: my_wakatime_setup_path, + slack_auth_path: slack_auth_path, + github_auth_path: github_auth_path, + github_unlink_path: github_unlink_path, + add_email_path: add_email_auth_path, + unlink_email_path: unlink_email_auth_path, + rotate_api_key_path: my_settings_rotate_api_key_path, + migrate_heartbeats_path: my_settings_migrate_heartbeats_path, + export_all_heartbeats_path: export_my_heartbeats_path(format: :json, all_data: "true"), + export_range_heartbeats_path: export_my_heartbeats_path(format: :json), + import_heartbeats_path: import_my_heartbeats_path, + create_deletion_path: create_deletion_path, + user_wakatime_mirrors_path: user_wakatime_mirrors_path(current_user) + }, + options: { + countries: ISO3166::Country.all.map { |country| + { + label: country.common_name, + value: country.alpha2 + } + }.sort_by { |country| country[:label] }, + timezones: TZInfo::Timezone.all_identifiers.sort.map { |timezone| + { label: timezone, value: timezone } + }, + extension_text_types: User.hackatime_extension_text_types.keys.map { |key| + { + label: key.humanize, + value: key + } + }, + badge_themes: GithubReadmeStats.themes + }, + slack: { + can_enable_status: @can_enable_slack_status, + notification_channels: channel_ids.map { |channel_id| + { + id: channel_id, + label: "##{channel_id}", + url: "https://hackclub.slack.com/archives/#{channel_id}" + } + } + }, + github: { + connected: @user.github_uid.present?, + username: @user.github_username, + profile_url: (@user.github_username.present? ? "https://github.com/#{@user.github_username}" : nil) + }, + emails: @user.email_addresses.map { |email| + { + email: email.email, + source: email.source&.humanize || "Unknown", + can_unlink: @user.can_delete_email_address?(email) + } + }, + badges: { + general_badge_url: @general_badge_url, + project_badge_url: @work_time_stats_url, + project_badge_base_url: @work_time_stats_base_url, + projects: @projects, + profile_url: (@user.username.present? ? "https://hackati.me/#{@user.username}" : nil), + markscribe_template: '{{ wakatimeDoubleCategoryBar "Languages:" wakatimeData.Languages "Projects:" wakatimeData.Projects 5 }}', + markscribe_reference_url: "https://github.com/taciturnaxolotl/markscribe#your-wakatime-languages-formated-as-a-bar", + markscribe_preview_image_url: "https://cdn.fluff.pw/slackcdn/524e293aa09bc5f9115c0c29c18fb4bc.png" + }, + config_file: { + content: generated_wakatime_config(@latest_api_key_token), + has_api_key: @latest_api_key_token.present?, + empty_message: "No API key is available yet. Migrate heartbeats or rotate your API key to generate one.", + api_key: @latest_api_key_token, + api_url: "https://#{request.host_with_port}/api/hackatime/v1" + }, + migration: { + jobs: @heartbeats_migration_jobs.map { |job| + { + id: job.id, + status: job.status + } + } + }, + data_export: { + total_heartbeats: number_with_delimiter(@user.heartbeats.count), + total_coding_time: @user.heartbeats.duration_simple, + heartbeats_last_7_days: number_with_delimiter(heartbeats_last_7_days), + is_restricted: (@user.trust_level == "red") + }, + admin_tools: { + visible: current_user.admin_level.in?(%w[admin superadmin]), + mirrors: @mirrors.map { |mirror| + { + id: mirror.id, + endpoint_url: mirror.endpoint_url, + last_synced_ago: (mirror.last_synced_at ? "#{time_ago_in_words(mirror.last_synced_at)} ago" : "Never"), + destroy_path: user_wakatime_mirror_path(current_user, mirror) + } + } + }, + ui: { + show_dev_import: Rails.env.development? + }, + errors: { + full_messages: @user.errors.full_messages, + username: @user.errors[:username] + } + } + end + + def generated_wakatime_config(api_key) + return nil if api_key.blank? + + <<~CFG + # put this in your ~/.wakatime.cfg file + + [settings] + api_url = https://#{request.host_with_port}/api/hackatime/v1 + api_key = #{api_key} + heartbeat_rate_limit_seconds = 30 + + # any other wakatime configs you want to add: https://github.com/wakatime/wakatime-cli/blob/develop/USAGE.md#ini-config-file + CFG + end + + def set_user + @user = if params["id"].present? && params["id"] != "my" + User.find(params["id"]) + else + current_user + end + + redirect_to root_path, alert: "You need to log in!" if @user.nil? + end + + def require_current_user + unless @user == current_user + redirect_to root_path, alert: "You are not authorized to access this page" + end + end + + def is_own_settings? + params["id"] == "my" || params["id"]&.blank? + end +end diff --git a/app/controllers/settings/data_controller.rb b/app/controllers/settings/data_controller.rb new file mode 100644 index 0000000..f4d7167 --- /dev/null +++ b/app/controllers/settings/data_controller.rb @@ -0,0 +1,20 @@ +class Settings::DataController < Settings::BaseController + def show + render_data + end + + def migrate_heartbeats + MigrateUserFromHackatimeJob.perform_later(@user.id) + redirect_to my_settings_data_path, notice: "Heartbeats & api keys migration started" + end + + private + + def render_data(status: :ok) + render_settings_page( + active_section: "data", + settings_update_path: my_settings_profile_path, + status: status + ) + end +end diff --git a/app/controllers/settings/integrations_controller.rb b/app/controllers/settings/integrations_controller.rb new file mode 100644 index 0000000..b4d890f --- /dev/null +++ b/app/controllers/settings/integrations_controller.rb @@ -0,0 +1,30 @@ +class Settings::IntegrationsController < Settings::BaseController + def show + render_integrations + end + + def update + if @user.update(integrations_params) + @user.update_slack_status if @user.uses_slack_status? + PosthogService.capture(@user, "settings_updated", { fields: integrations_params.keys }) + redirect_to my_settings_integrations_path, notice: "Settings updated successfully" + else + flash.now[:error] = @user.errors.full_messages.to_sentence.presence || "Failed to update settings" + render_integrations(status: :unprocessable_entity) + end + end + + private + + def render_integrations(status: :ok) + render_settings_page( + active_section: "integrations", + settings_update_path: my_settings_integrations_path, + status: status + ) + end + + def integrations_params + params.require(:user).permit(:uses_slack_status) + end +end diff --git a/app/controllers/settings/profile_controller.rb b/app/controllers/settings/profile_controller.rb new file mode 100644 index 0000000..0799906 --- /dev/null +++ b/app/controllers/settings/profile_controller.rb @@ -0,0 +1,34 @@ +class Settings::ProfileController < Settings::BaseController + def show + render_profile + end + + def update + if @user.update(profile_params) + PosthogService.capture(@user, "settings_updated", { fields: profile_params.keys }) + redirect_to my_settings_profile_path, notice: "Settings updated successfully" + else + flash.now[:error] = @user.errors.full_messages.to_sentence.presence || "Failed to update settings" + render_profile(status: :unprocessable_entity) + end + end + + private + + def render_profile(status: :ok) + render_settings_page( + active_section: "profile", + settings_update_path: my_settings_profile_path, + status: status + ) + end + + def profile_params + params.require(:user).permit( + :timezone, + :country_code, + :allow_public_stats_lookup, + :username, + ) + end +end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 598aa09..e436ae2 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,58 +1,9 @@ class UsersController < InertiaController - layout :resolve_layout + layout "inertia", only: %i[wakatime_setup wakatime_setup_step_2 wakatime_setup_step_3 wakatime_setup_step_4] - include ActionView::Helpers::NumberHelper - - before_action :set_user - before_action :require_current_user, except: [ :update_trust_level ] + before_action :ensure_current_user_for_setup, only: %i[wakatime_setup wakatime_setup_step_2 wakatime_setup_step_3 wakatime_setup_step_4] before_action :require_admin, only: [ :update_trust_level ] - def edit - prepare_settings_page - end - - def update - # Handle regular user settings updates - if params[:user].present? - if @user.update(user_params) - if @user.uses_slack_status? - @user.update_slack_status - end - PosthogService.capture(@user, "settings_updated", { fields: user_params.keys }) - redirect_to is_own_settings? ? my_settings_path : settings_user_path(@user), - notice: "Settings updated successfully" - else - flash.now[:error] = @user.errors.full_messages.to_sentence.presence || "Failed to update settings" - prepare_settings_page - render :edit, status: :unprocessable_entity - end - else - redirect_to is_own_settings? ? my_settings_path : settings_user_path(@user), - notice: "Settings updated successfully!" - end - end - - def migrate_heartbeats - MigrateUserFromHackatimeJob.perform_later(@user.id) - - redirect_to is_own_settings? ? my_settings_path : settings_user_path(@user), - notice: "Heartbeats & api keys migration started" - end - - def rotate_api_key - @user.api_keys.transaction do - @user.api_keys.destroy_all - - new_api_key = @user.api_keys.create!(name: "Hackatime key") - - PosthogService.capture(@user, "api_key_rotated") - render json: { token: new_api_key.token }, status: :ok - end - rescue => e - Rails.logger.error("error rotate #{e.class.name} #{e.message}") - render json: { error: "cant rotate" }, status: :unprocessable_entity - end - def wakatime_setup api_key = current_user&.api_keys&.last api_key ||= current_user.api_keys.create!(name: "Wakatime API Key") @@ -134,10 +85,8 @@ class UsersController < InertiaController private - def resolve_layout - return "application" if %w[edit update migrate_heartbeats].include?(action_name) - - "inertia" + def ensure_current_user_for_setup + redirect_to root_path, alert: "You need to log in!" if current_user.nil? end def require_admin @@ -159,44 +108,4 @@ class UsersController < InertiaController :mac_linux end - - def prepare_settings_page - @is_own_settings = is_own_settings? - @can_enable_slack_status = @user.slack_access_token.present? && @user.slack_scopes.include?("users.profile:write") - - @enabled_sailors_logs = SailorsLogNotificationPreference.where( - slack_uid: @user.slack_uid, - enabled: true, - ).where.not(slack_channel_id: SailorsLog::DEFAULT_CHANNELS) - - @heartbeats_migration_jobs = @user.data_migration_jobs - - @projects = @user.project_repo_mappings.distinct.pluck(:project_name) - @work_time_stats_url = "https://hackatime-badge.hackclub.com/#{@user.slack_uid}/#{@projects.first || 'example'}" - end - - def set_user - @user = if params["id"].present? - User.find(params["id"]) - else - current_user - end - - redirect_to root_path, alert: "You need to log in!" if @user.nil? - end - - def is_own_settings? - @is_own_settings ||= params["id"] == "my" || params["id"]&.blank? - end - - def user_params - params.require(:user).permit( - :uses_slack_status, - :hackatime_extension_text_type, - :timezone, - :country_code, - :allow_public_stats_lookup, - :username, - ) - end end diff --git a/app/javascript/entrypoints/inertia.ts b/app/javascript/entrypoints/inertia.ts index d2a280c..f52dcfb 100644 --- a/app/javascript/entrypoints/inertia.ts +++ b/app/javascript/entrypoints/inertia.ts @@ -36,11 +36,5 @@ createInertiaApp({ form: { forceIndicesArrayFormatInFormData: false, }, - future: { - useScriptElementForInitialPage: true, - useDataInertiaHeadAttribute: true, - useDialogForErrorModal: true, - preserveEqualProps: true, - }, }, }) diff --git a/app/javascript/layouts/AppLayout.svelte b/app/javascript/layouts/AppLayout.svelte index c7cc1cb..a167f8e 100644 --- a/app/javascript/layouts/AppLayout.svelte +++ b/app/javascript/layouts/AppLayout.svelte @@ -1,6 +1,6 @@ +
@@ -5,7 +9,7 @@

What does this mean? Your account was convicted for fraud or abuse of Hackatime, such as using methods to gain an unfair advantage on the leaderboards or attempting to manipulate your coding time in any way. This restricts your access to participate in public leaderboards, but Hackatime will still track and display your time. This may also affect your ability to participate in current and future Hack Club events.

-

What can I do? Account bans are non-negotiable, and will not be removed unless determined to have been issued incorrectly. In that case, it will automatically be removed. We take fraud very seriously and have a zero-tolerance policy for abuse. If you believe this was a mistake, please DM the Fraud Department on Slack. We do not respond in any other channel, DM or thread.

+

What can I do? Account bans are non-negotiable, and will not be removed unless determined to have been issued incorrectly. In that case, it will automatically be removed. We take fraud very seriously and have a zero-tolerance policy for abuse. If you believe this was a mistake, please DM the Fraud Department on Slack. We do not respond in any other channel, DM or thread.

Can I know what caused this? No. We do not disclose the patterns that were detected. Releasing this information would only benefit fraudsters. The fraud team regularly investigates claims of false bans to increase the effectiveness of our detection systems to combat fraud.

diff --git a/app/javascript/pages/Home/signedIn/GitHubLinkBanner.svelte b/app/javascript/pages/Home/signedIn/GitHubLinkBanner.svelte index 8b5fd59..e131a17 100644 --- a/app/javascript/pages/Home/signedIn/GitHubLinkBanner.svelte +++ b/app/javascript/pages/Home/signedIn/GitHubLinkBanner.svelte @@ -1,4 +1,6 @@ @@ -21,10 +23,10 @@ working on, and qualify for leaderboards! - Connect GitHubConnect GitHub diff --git a/app/javascript/pages/Home/signedIn/SetupNotice.svelte b/app/javascript/pages/Home/signedIn/SetupNotice.svelte index fd8e791..c4a499b 100644 --- a/app/javascript/pages/Home/signedIn/SetupNotice.svelte +++ b/app/javascript/pages/Home/signedIn/SetupNotice.svelte @@ -1,4 +1,5 @@ + + +
+
+

Time Tracking Setup

+

+ Use the setup guide if you are configuring a new editor or device. +

+ + Open setup guide + +
+ +
+

Extension Display

+

+ Choose how coding time appears in the extension status text. +

+
+ + + +
+ + +
+ + +
+
+ +
+

API Key

+

+ Rotate your API key if you think it has been exposed. +

+ + + {#if rotatedApiKeyError} +

+ {rotatedApiKeyError} +

+ {/if} + + {#if rotatedApiKey} +
+

+ New API key +

+ {rotatedApiKey} + +
+ {/if} +
+ +
+

WakaTime Config File

+

+ Copy this into your ~/.wakatime.cfg file. +

+ + {#if config_file.has_api_key && config_file.content} +
{config_file.content}
+ {:else} +

+ {config_file.empty_message} +

+ {/if} +
+
+
diff --git a/app/javascript/pages/Users/Settings/Admin.svelte b/app/javascript/pages/Users/Settings/Admin.svelte new file mode 100644 index 0000000..7cda40f --- /dev/null +++ b/app/javascript/pages/Users/Settings/Admin.svelte @@ -0,0 +1,117 @@ + + + + {#if admin_tools.visible} +
+
+

WakaTime Mirrors

+

+ Mirror heartbeats to external WakaTime-compatible endpoints. +

+ + {#if admin_tools.mirrors.length > 0} +
+ {#each admin_tools.mirrors as mirror} +
+

+ {mirror.endpoint_url} +

+

Last synced: {mirror.last_synced_ago}

+
{ + if (!window.confirm("Delete this mirror endpoint?")) { + event.preventDefault(); + } + }} + > + + + +
+
+ {/each} +
+ {/if} + +
+ +
+ + +
+
+ + +
+ +
+
+
+ {:else} +

+ You are not authorized to access this section. +

+ {/if} +
diff --git a/app/javascript/pages/Users/Settings/Badges.svelte b/app/javascript/pages/Users/Settings/Badges.svelte new file mode 100644 index 0000000..6258908 --- /dev/null +++ b/app/javascript/pages/Users/Settings/Badges.svelte @@ -0,0 +1,143 @@ + + + +
+
+

Stats Badges

+

+ Generate links for profile badges that display your coding stats. +

+ +
+
+ + +
+ +
+ General coding stats badge preview +
{badgeUrl()}
+
+
+ + {#if badges.projects.length > 0 && badges.project_badge_base_url} +
+ + +
+ Project stats badge preview +
{projectBadgeUrl()}
+
+
+ {/if} +
+ +
+

Markscribe Template

+

+ Use this snippet with markscribe to include your coding stats in a + README. +

+
+
{badges.markscribe_template}
+
+

+ Reference: + + markscribe template docs + +

+ Example markscribe output +
+
+
diff --git a/app/javascript/pages/Users/Settings/Data.svelte b/app/javascript/pages/Users/Settings/Data.svelte new file mode 100644 index 0000000..7d6978b --- /dev/null +++ b/app/javascript/pages/Users/Settings/Data.svelte @@ -0,0 +1,201 @@ + + + +
+
+

Migration Assistant

+

+ Queue migration of heartbeats and API keys from legacy Hackatime. +

+
+ + +
+ + {#if migration.jobs.length > 0} +
+ {#each migration.jobs as job} +
+ Job {job.id}: {job.status} +
+ {/each} +
+ {/if} +
+ +
+

Download Data

+ + {#if data_export.is_restricted} +

+ Data export is currently restricted for this account. +

+ {:else} +

+ Download your coding history as JSON for backups or analysis. +

+ +
+
+

Total heartbeats

+

+ {data_export.total_heartbeats} +

+
+
+

Total coding time

+

+ {data_export.total_coding_time} +

+
+
+

Last 7 days

+

+ {data_export.heartbeats_last_7_days} +

+
+
+ +
+ + Export all heartbeats + + +
+ + + +
+
+ + {#if ui.show_dev_import} +
+ + + + +
+ {/if} + {/if} +
+ +
+

Account Deletion

+ {#if user.can_request_deletion} +

+ Request permanent deletion. The account enters a waiting period + before final removal. +

+
{ + if ( + !window.confirm( + "Submit account deletion request? This action starts the deletion process.", + ) + ) { + event.preventDefault(); + } + }} + > + + +
+ {:else} +

+ Deletion request is unavailable for this account right now. +

+ {/if} +
+
+
diff --git a/app/javascript/pages/Users/Settings/Integrations.svelte b/app/javascript/pages/Users/Settings/Integrations.svelte new file mode 100644 index 0000000..2a81a86 --- /dev/null +++ b/app/javascript/pages/Users/Settings/Integrations.svelte @@ -0,0 +1,215 @@ + + + +
+
+

Slack Status Sync

+

+ Keep your Slack status updated while you are actively coding. +

+ + {#if !slack.can_enable_status} + + Re-authorize with Slack + + {/if} + +
+ + + + + + +
+
+ +
+

Slack Channel Notifications

+

+ Enable notifications in any channel by running + + /sailorslog on + + in that channel. +

+ + {#if slack.notification_channels.length > 0} +
    + {#each slack.notification_channels as channel} +
  • + {channel.label} +
  • + {/each} +
+ {:else} +

+ No channel notifications are enabled. +

+ {/if} +
+ +
+

Connected GitHub Account

+

+ Connect GitHub to show project links in dashboards and leaderboards. +

+ + {#if github.connected && github.username} +
+ Connected as + + @{github.username} + +
+
+ + Reconnect GitHub + +
{ + if ( + !window.confirm( + "Unlink this GitHub account? GitHub-based features will stop until relinked.", + ) + ) { + event.preventDefault(); + } + }} + > + + + +
+
+ {:else} + + Connect GitHub + + {/if} +
+ +
+

Email Addresses

+

+ Add or remove email addresses used for sign-in and verification. +

+ +
+ {#if emails.length > 0} + {#each emails as email} +
+
+

{email.email}

+

{email.source}

+
+ {#if email.can_unlink} +
+ + + + +
+ {/if} +
+ {/each} + {:else} +

+ No email addresses are linked. +

+ {/if} +
+ +
+ + + +
+
+
+
diff --git a/app/javascript/pages/Users/Settings/Profile.svelte b/app/javascript/pages/Users/Settings/Profile.svelte new file mode 100644 index 0000000..4538951 --- /dev/null +++ b/app/javascript/pages/Users/Settings/Profile.svelte @@ -0,0 +1,172 @@ + + + +
+
+

Region and Timezone

+

+ Use your local region and timezone for accurate dashboards and + leaderboards. +

+
+ + + +
+ + +
+ +
+ + +
+ + +
+
+ +
+

Username

+

+ This username is used in links and public profile pages. +

+
+ + + +
+ + + {#if errors.username.length > 0} +

{errors.username[0]}

+ {/if} +
+ + +
+ + {#if badges.profile_url} +

+ Public profile: + + {badges.profile_url} + +

+ {/if} +
+ +
+

Privacy

+

+ Control whether your coding stats can be used by public APIs. +

+
+ + + + + + +
+
+
+
diff --git a/app/javascript/pages/Users/Settings/Shell.svelte b/app/javascript/pages/Users/Settings/Shell.svelte new file mode 100644 index 0000000..30a7750 --- /dev/null +++ b/app/javascript/pages/Users/Settings/Shell.svelte @@ -0,0 +1,81 @@ + + + + {page_title} + + +
+
+

{heading}

+

{subheading}

+
+ + {#if errors.full_messages.length > 0} +
+

Some changes could not be saved:

+ +
+ {/if} + +
+ + +
+ {@render children?.()} +
+
+
diff --git a/app/javascript/pages/Users/Settings/types.ts b/app/javascript/pages/Users/Settings/types.ts new file mode 100644 index 0000000..84deed5 --- /dev/null +++ b/app/javascript/pages/Users/Settings/types.ts @@ -0,0 +1,248 @@ +export type SectionId = + | "profile" + | "integrations" + | "access" + | "badges" + | "data" + | "admin"; + +export type SectionPaths = Record; + +export type Option = { + label: string; + value: string; +}; + +export type UserProps = { + id: number; + display_name: string; + timezone: string; + country_code?: string | null; + username?: string | null; + uses_slack_status: boolean; + hackatime_extension_text_type: string; + allow_public_stats_lookup: boolean; + trust_level: string; + can_request_deletion: boolean; + github_uid?: string | null; + github_username?: string | null; + slack_uid?: string | null; +}; + +export type PathsProps = { + settings_path: string; + wakatime_setup_path: string; + slack_auth_path: string; + github_auth_path: string; + github_unlink_path: string; + add_email_path: string; + unlink_email_path: string; + rotate_api_key_path: string; + migrate_heartbeats_path: string; + export_all_heartbeats_path: string; + export_range_heartbeats_path: string; + import_heartbeats_path: string; + create_deletion_path: string; + user_wakatime_mirrors_path: string; +}; + +export type OptionsProps = { + countries: Option[]; + timezones: Option[]; + extension_text_types: Option[]; + badge_themes: string[]; +}; + +export type SlackProps = { + can_enable_status: boolean; + notification_channels: { + id: string; + label: string; + url: string; + }[]; +}; + +export type GithubProps = { + connected: boolean; + username?: string | null; + profile_url?: string | null; +}; + +export type EmailProps = { + email: string; + source: string; + can_unlink: boolean; +}; + +export type BadgesProps = { + general_badge_url: string; + project_badge_url?: string | null; + project_badge_base_url?: string | null; + projects: string[]; + profile_url?: string | null; + markscribe_template: string; + markscribe_reference_url: string; + markscribe_preview_image_url: string; +}; + +export type ConfigFileProps = { + content?: string | null; + has_api_key: boolean; + empty_message: string; + api_key?: string | null; + api_url: string; +}; + +export type MigrationProps = { + jobs: { id: string; status: string }[]; +}; + +export type DataExportProps = { + total_heartbeats: string; + total_coding_time: string; + heartbeats_last_7_days: string; + is_restricted: boolean; +}; + +export type AdminToolsProps = { + visible: boolean; + mirrors: { + id: number; + endpoint_url: string; + last_synced_ago: string; + destroy_path: string; + }[]; +}; + +export type UiProps = { + show_dev_import: boolean; +}; + +export type ErrorsProps = { + full_messages: string[]; + username: string[]; +}; + +export type SettingsCommonProps = { + active_section: SectionId; + section_paths: SectionPaths; + page_title: string; + heading: string; + subheading: string; + errors: ErrorsProps; + admin_tools: AdminToolsProps; +}; + +export type ProfilePageProps = SettingsCommonProps & { + settings_update_path: string; + username_max_length: number; + user: UserProps; + options: OptionsProps; + badges: BadgesProps; +}; + +export type IntegrationsPageProps = SettingsCommonProps & { + settings_update_path: string; + user: UserProps; + slack: SlackProps; + github: GithubProps; + emails: EmailProps[]; + paths: PathsProps; +}; + +export type AccessPageProps = SettingsCommonProps & { + settings_update_path: string; + user: UserProps; + options: OptionsProps; + paths: PathsProps; + config_file: ConfigFileProps; +}; + +export type BadgesPageProps = SettingsCommonProps & { + options: OptionsProps; + badges: BadgesProps; +}; + +export type DataPageProps = SettingsCommonProps & { + user: UserProps; + paths: PathsProps; + migration: MigrationProps; + data_export: DataExportProps; + ui: UiProps; +}; + +export type AdminPageProps = SettingsCommonProps & { + admin_tools: AdminToolsProps; + paths: PathsProps; +}; + +export const buildSections = (sectionPaths: SectionPaths, adminVisible: boolean) => { + const sections = [ + { + id: "profile" as SectionId, + label: "Profile", + blurb: "Username, region, timezone, and privacy.", + path: sectionPaths.profile, + }, + { + id: "integrations" as SectionId, + label: "Integrations", + blurb: "Slack status, GitHub link, and email sign-in addresses.", + path: sectionPaths.integrations, + }, + { + id: "access" as SectionId, + label: "Access", + blurb: "Time tracking setup, extension options, and API key access.", + path: sectionPaths.access, + }, + { + id: "badges" as SectionId, + label: "Badges", + blurb: "Shareable badges and profile snippets.", + path: sectionPaths.badges, + }, + { + id: "data" as SectionId, + label: "Data", + blurb: "Exports, migration jobs, and account deletion controls.", + path: sectionPaths.data, + }, + ]; + + if (adminVisible) { + sections.push({ + id: "admin", + label: "Admin", + blurb: "WakaTime mirror endpoints.", + path: sectionPaths.admin, + }); + } + + return sections; +}; + +const hashSectionMap: Record = { + user_region: "profile", + user_timezone: "profile", + user_username: "profile", + user_privacy: "profile", + user_hackatime_extension: "access", + user_api_key: "access", + user_config_file: "access", + user_slack_status: "integrations", + user_slack_notifications: "integrations", + user_github_account: "integrations", + user_email_addresses: "integrations", + user_stats_badges: "badges", + user_markscribe: "badges", + user_migration_assistant: "data", + download_user_data: "data", + delete_account: "data", + wakatime_mirror: "admin", +}; + +export const sectionFromHash = (hash: string): SectionId | null => { + const cleanHash = hash.replace(/^#/, ""); + return hashSectionMap[cleanHash] || null; +}; diff --git a/app/javascript/pages/WakatimeSetup/Index.svelte b/app/javascript/pages/WakatimeSetup/Index.svelte index 0b4e066..52e7a1f 100644 --- a/app/javascript/pages/WakatimeSetup/Index.svelte +++ b/app/javascript/pages/WakatimeSetup/Index.svelte @@ -116,12 +116,12 @@ Heartbeat detected {heartbeatTimeAgo}.

- Continue to Step 2 → - + {/if} @@ -357,10 +357,10 @@ heartbeat_rate_limit_seconds = 30 - Skip to next stepSkip to next step diff --git a/app/javascript/pages/WakatimeSetup/Step2.svelte b/app/javascript/pages/WakatimeSetup/Step2.svelte index 635c656..4514f8a 100644 --- a/app/javascript/pages/WakatimeSetup/Step2.svelte +++ b/app/javascript/pages/WakatimeSetup/Step2.svelte @@ -30,7 +30,7 @@
{#each editors as editor} -
@@ -41,7 +41,7 @@ {/if}
{editor.name} -
+ {/each}
diff --git a/app/javascript/pages/WakatimeSetup/Step3.svelte b/app/javascript/pages/WakatimeSetup/Step3.svelte index 52a1cfa..c3cbfea 100644 --- a/app/javascript/pages/WakatimeSetup/Step3.svelte +++ b/app/javascript/pages/WakatimeSetup/Step3.svelte @@ -175,11 +175,11 @@ Open VS Code, go to Extensions (squares icon), search for WakaTime, and click Install. - View on MarketplaceView on Marketplace

@@ -279,21 +279,21 @@ : "VS Code"}.

- Continue → - + {/if}
- Skip to finishSkip to finish
@@ -331,7 +331,7 @@ - Next Step - + {:else if editor === "jetbrains"}
@@ -399,11 +399,11 @@

Search for WakaTime in the marketplace and click Install. - View on MarketplaceView on Marketplace

@@ -459,12 +459,12 @@
- Next Step - + {:else if editor === "sublime"}
@@ -492,11 +492,11 @@

Install Package Control

If you don't have Package Control installed, install it at - packagecontrol.iopackagecontrol.io to set it up first.

@@ -512,11 +512,11 @@

Install WakaTime Plugin

Open the Command Palette (Ctrl+Shift+P on Windows/Linux, Command+Shift+P on macOS), type Package Control: Install Package, and press Enter. Then type WakaTime and press Enter to install. - View on Package ControlView on Package Control

@@ -566,12 +566,12 @@ - Next Step - + {:else if editorData[editor]}
@@ -615,12 +615,12 @@
- Next Step - + {:else} - Next Step - + {/if} diff --git a/app/javascript/pages/WakatimeSetup/Step4.svelte b/app/javascript/pages/WakatimeSetup/Step4.svelte index 5cef8f5..48b11aa 100644 --- a/app/javascript/pages/WakatimeSetup/Step4.svelte +++ b/app/javascript/pages/WakatimeSetup/Step4.svelte @@ -58,14 +58,14 @@ diff --git a/app/views/users/edit.html.erb b/app/views/users/edit.html.erb deleted file mode 100644 index e34930a..0000000 --- a/app/views/users/edit.html.erb +++ /dev/null @@ -1,523 +0,0 @@ -<% content_for :title do %> - <%= @is_own_settings ? 'My Settings' : "Settings | #{@user.display_name}" %> -<% end %> - -
-
-

- <%= @is_own_settings ? 'My Settings' : "Settings for #{@user.display_name}" %> -

-

Change your Hackatime experience and preferences

-
- -
-
-
-

Time Tracking Wizard

-
-

Get started with tracking your coding time in just a few minutes.

- <%= link_to 'Set up time tracking', my_wakatime_setup_path, class: 'inline-flex items-center gap-2 px-4 py-2 bg-primary text-white hover:bg-primary/75 font-medium rounded transition-colors duration-200' %> -
- -
-
-

Region

-
- <%= form_with model: @user, - url: @is_own_settings ? my_settings_path : settings_user_path(@user), - method: :patch, local: false, - class: "space-y-4" do |f| %> -
- <%= f.label :country_code, 'Country flag', class: 'block text-sm font-medium text-gray-200 mb-2' %> - <%= f.select :country_code, ISO3166::Country.all.map { |c| [c.common_name, c.alpha2] }.sort_by(&:first), { include_blank: 'Select a country' }, { class: 'w-full px-3 py-2 h-10 bg-darkless rounded text-white focus:border-primary focus:ring-1 focus:ring-primary' } %> -
-

Your country flag will be displayed on your profile and leaderboards.

-
- <%= f.label :timezone, 'Timezone', class: 'block text-sm font-medium text-gray-200 mb-2' %> - <%= f.select :timezone, TZInfo::Timezone.all.map(&:identifier).sort, { include_blank: @user.timezone.blank? }, { class: 'w-full px-3 py-2 h-10 bg-darkless rounded text-white focus:border-primary focus:ring-1 focus:ring-primary' } %> -
-

This affects how your activity graph and other time-based features are displayed.

- <%= f.submit 'Save Settings', class: 'w-full px-4 py-2 bg-primary text-white hover:bg-primary/75 font-medium rounded transition-colors duration-200 cursor-pointer' %> - <% end %> -
- -
-
-

Extension Settings

-
- <%= form_with model: @user, - url: @is_own_settings ? my_settings_path : settings_user_path(@user), - method: :patch, local: false, - class: "space-y-4" do |f| %> -
- <%= f.label :hackatime_extension_text_type, 'Status bar text style', class: 'block text-sm font-medium text-gray-200 mb-2' %> - <%= f.select :hackatime_extension_text_type, User.hackatime_extension_text_types.keys.map { |key| [key.humanize, key] }, {}, { class: 'w-full px-3 py-2 h-10 bg-darkless rounded text-white focus:border-primary focus:ring-1 focus:ring-primary' } %> -
- <%= f.submit 'Save Settings', class: 'w-full px-4 py-2 bg-primary text-white hover:bg-primary/75 font-medium rounded transition-colors duration-200 cursor-pointer' %> - <% end %> -
- -
-
-

Username

-
- <%= form_with model: @user, - url: @is_own_settings ? my_settings_path : settings_user_path(@user), - method: :patch, local: false, - class: "space-y-4" do |f| %> -
- <%= f.label :username, 'Custom username', class: 'block text-sm font-medium text-gray-200 mb-2' %> - <%= f.text_field :username, class: 'w-full px-3 py-2 bg-darkless rounded text-white focus:border-primary focus:ring-1 focus:ring-primary', placeholder: 'HackClubber', maxlength: User::USERNAME_MAX_LENGTH %> - <% if @user.errors[:username].present? %> -

<%= @user.errors[:username].to_sentence %>

- <% end %> -
-

Choose a name to use in Hackatime. Only letters, numbers, "-" and "_" are allowed, max <%= User::USERNAME_MAX_LENGTH %> characters.

- <% if @user.username.present? %> -

Your profile is currently live at <%= link_to "hackati.me/#{@user.username}", "https://hackati.me/#{@user.username}", target: '_blank', class: 'underline' %>

- <% end %> - <%= f.submit 'Save Settings', class: 'w-full px-4 py-2 bg-primary text-white hover:bg-primary/75 font-medium rounded transition-colors duration-200 cursor-pointer' %> - <% end %> -
- -
-
-

Slack Integration

-
- -
-
-

Status Updates

-

When you're hacking on a project, Hackatime can update your Slack status so you can show it off!

- <% unless @can_enable_slack_status %> - <%= link_to 'Re-authorize with Slack', slack_auth_path, class: 'inline-flex items-center gap-2 px-3 py-2 bg-darkless hover:bg-dark text-gray-200 text-sm font-medium rounded transition-colors duration-200 mb-3' %> - <% end %> - <%= form_with model: @user, - url: @is_own_settings ? my_settings_path : settings_user_path(@user), - method: :patch, local: false do |f| %> -
- <%= f.check_box :uses_slack_status, class: 'w-4 h-4 text-primary border-darkless rounded focus:ring-primary bg-darkless' %> - <%= f.label :uses_slack_status, 'Update my Slack status automatically', class: 'text-sm text-gray-200' %> -
- <%= f.submit 'Save', class: 'mt-3 px-4 py-2 bg-primary text-white hover:bg-primary/75 font-medium rounded transition-colors duration-200 cursor-pointer' %> - <% end %> -
- -
-

Channel Notifications

- <% if @enabled_sailors_logs.any? %> -

You have notifications enabled for the following channels:

-
    - <% @enabled_sailors_logs.each do |sl| %> -
  • - <%= render 'shared/slack_channel_mention', channel_id: sl.slack_channel_id %> -
  • - <% end %> -
- <% else %> -

You have no notifications enabled.

- <% end %> -

You can enable notifications for specific channels by running /sailorslog on in the Slack channel.

-
-
-
- -
-
-

Privacy Settings

-
- <%= form_with model: @user, - url: @is_own_settings ? my_settings_path : settings_user_path(@user), - method: :patch, local: false, - class: "space-y-4" do |f| %> -
- <%= f.check_box :allow_public_stats_lookup, class: 'w-4 h-4 text-primary border-darkless rounded focus:ring-primary bg-darkless' %> - <%= f.label :allow_public_stats_lookup, 'Allow public stats lookup', class: 'text-sm text-gray-200' %> -
-

When enabled, others can view your coding statistics through public APIs. Many Hack Club YSWS programs use this to track your progress. Disabling this can prevent you from participating in some programs.

- <%= f.submit 'Save Settings', class: 'w-full px-4 py-2 bg-primary text-white hover:bg-primary/75 font-medium rounded transition-colors duration-200 cursor-pointer' %> - <% end %> - -
-
-

Delete Account

-
- - <% if @user.can_request_deletion? %> -

Permanently delete your account and all associated data. This action cannot be undone after the 30-day grace period.

- - <% else %> -

Due to your account standing, you cannot request account deletion at this time. Reach out in #hackatime-v2 if this is a mistake.

- <% end %> -
-
- -
-
-

API Key

-
- -
-

Your API key is used to authenticate requests from your code editor. If your key has been compromised, you can rotate it to generate a new one. Rotating your API key will immediately invalidate your old key. You'll need to update the key in all of your code editors and IDEs.

- - -
-
- -
-
-

Connected Accounts

-
- -
-
-

GitHub Account

-

This is used to show your active projects on the leaderboard & current hacking activity on the dashboard.

- <% if @user.github_uid.present? %> -
- - Connected: <%= link_to "@#{h(@user.github_username)}", "https://github.com/#{h(@user.github_username)}", target: '_blank', class: 'text-primary hover:text-primary/80 underline' %> -
-
- <%= link_to 'Relink GitHub Account', github_auth_path, data: { turbo: 'false' }, class: 'inline-flex items-center gap-2 px-3 py-2 bg-primary text-white hover:bg-primary/75 text-sm font-medium rounded transition-colors duration-200 cursor-pointer' %> - <%= button_to 'Unlink', github_unlink_path, method: :delete, data: { turbo_confirm: 'Are you sure you want to unlink your GitHub account? This will remove your GitHub connection and you may need to re-link to use GitHub-dependent features.' }, class: 'inline-flex items-center gap-2 px-3 py-2 bg-darkless hover:bg-darkless/50 text-white hover:text-white/80 text-sm font-medium rounded transition-colors duration-200 cursor-pointer' %> -
- <% else %> - <%= link_to 'Link GitHub Account', github_auth_path, data: { turbo: 'false' }, class: 'inline-flex items-center gap-2 px-4 py-2 bg-primary text-white hover:bg-primary/75 font-medium rounded transition-colors duration-200 cursor-pointer' %> - <% end %> -
- -
-

Email Addresses

-

These are the email addresses associated with your account.

- <% if @user.email_addresses.any? %> -
- <% @user.email_addresses.each do |email| %> -
-
- <%= email.email %> - - <%= email.source&.humanize || 'Unknown' %> - -
- <% if @user.can_delete_email_address?(email) %> - <%= form_with url: unlink_email_auth_path, - method: :delete, - class: "space-y-4" do |f| %> - <%= f.hidden_field :email, value: email.email %> - <%= f.submit 'Unlink!', class: 'w-full px-4 py-2 bg-primary text-white hover:bg-primary/75 font-medium rounded transition-colors duration-200 cursor-pointer' %> - <% end %> - <% end %> -
- <% end %> -
- <% else %> -

No email addresses found.

- <% end %> - <%= form_tag add_email_auth_path, data: { turbo: false }, class: "space-y-2" do %> - <%= email_field_tag :email, nil, placeholder: 'Add another email address', required: true, class: 'w-full px-3 py-2 bg-darkless border border-darkless rounded text-white focus:border-primary focus:ring-1 focus:ring-primary text-sm' %> - <%= submit_tag 'Add Email', class: 'w-full px-3 py-2 bg-primary hover:bg-primary/75 text-white text-sm font-medium rounded transition-colors duration-200 cursor-pointer' %> - <% end %> -
-
-
- -
-
-

Stats Badges

-
- -
-
-

General Stats Badge

-

Show your coding stats on your GitHub profile with beautiful badges.

- -
-
- - -
- - <% gh_badge = GithubReadmeStats.new(current_user.id, 'darcula') %> -
- -
<%= gh_badge.generate_badge_url %>
-
-
-
- - <% if @projects.any? && @user.slack_uid.present? %> -
-

Project Stats Badge

-
- - -
- -
<%= @work_time_stats_url %>
-
-
-
- <% end %> -
- - -
- -
-
-
-

Config File

-
-

Your Wakatime configuration file for tracking coding time.

- -
- <%= render 'wakatime_config_display' %> -
-

This configuration file is automatically generated and updated when you make changes to your settings.

-
- -
-
-

Migration Assistant

-
-

This will migrate your heartbeats from waka.hackclub.com to this platform.

- - <%= button_to 'Migrate heartbeats', my_settings_migrate_heartbeats_path, method: :post, class: 'w-full px-4 py-2 bg-primary text-white hover:bg-primary/75 font-medium rounded transition-colors duration-200 cursor-pointer' %> - - <% if @heartbeats_migration_jobs.any? %> -
-

Migration Status

- <% @heartbeats_migration_jobs.each do |job| %> -
Job ID: <%= job.id %> - Status: <%= job.status %>
- <% end %> -
- <% end %> -
-
- -
-
-

Markscribe Templates

-
-

Use markscribe to create beautiful GitHub profile READMEs with your coding stats.

- -
-
-
-
{{ wakatimeDoubleCategoryBar "💾 Languages:" wakatimeData.Languages "💼 Projects:" wakatimeData.Projects 5 }}
-
-

Add this to your GitHub profile README template to display your top languages and projects.

-

See the markscribe documentation for more template options.

-
-
- Example of markscribe output showing coding language and project statistics -
-
-
- - <%# This is copied from the github thingie blog, Im not good at UI so I copied :) %> - -
- <% if @user.trust_level == "red" %> -
-

Download Your Data

-
-
-
- ⚠️ Export Restricted -
-

Sorry, due to your account standing, you are unable to perform this action.

-
- <% else %> -
-

Download Your Data

-
- -
-
-

Your Data Overview

-
-
-
-
<%= number_with_delimiter(@user.heartbeats.count) %>
-
Total Heartbeats
-
-
-
-
-
<%= number_with_delimiter(@user.heartbeats.duration_simple) %>
-
Total Coding Time
-
-
-
-
-
<%= @user.heartbeats.where('time >= ?', 7.days.ago.to_f).count %>
-
Heartbeats in the Last 7 Days
-
-
-
-
- -
-

Export Options

- -
-
- - - -

Heartbeat Data

-
-

Export your coding activity as JSON with detailed information about each coding session.

- -
- <%= link_to export_my_heartbeats_path(format: :json, all_data: "true"), - class: "w-full bg-primary hover:bg-primary/75 text-white px-4 py-2 rounded font-medium transition-colors inline-flex items-center justify-center gap-2", - method: :get do %> - - - - Export All Heartbeats - <% end %> - - -
- -
-

All Heartbeats: Downloads your complete coding history, from the very start to your last heartbeat

-

Date Range: Choose specific dates to export

-
-
- - <% dev_tool do %> -
-
-
- - - -
-

Import Heartbeat Data

-
-

Import ur data from real hackatime to test stuff with.

- <%= form_with url: import_my_heartbeats_path, method: :post, multipart: true, local: true, class: "space-y-4" do |form| %> -
- <%= form.file_field :heartbeat_file, accept: '.json,application/json', class: 'w-full px-3 py-2 bg-dark border border-darkless rounded text-white file:mr-4 file:py-2 file:px-4 file:rounded file:border-0 file:text-sm file:font-semibold file:bg-primary file:text-white hover:file:bg-primary/75 transition-colors cursor-pointer', required: true %> -
- -
- <%= form.submit 'Import Heartbeats', class: 'w-full px-3 py-2 bg-primary hover:bg-primary/75 text-white text-md font-medium rounded transition-colors duration-200 cursor-pointer', data: { confirm: 'Are you sure you want to import heartbeats? This will add new data to your account.' } %> -
- <% end %> -
- <% end %> -
-
- <% end %> -
- - <% admin_tool do %> -
-
-
- 🔧 -
-

WakaTime Mirrors

-
- - <% if current_user.wakatime_mirrors.any? %> - <% grid_cols = current_user.wakatime_mirrors.size > 1 ? 'md:grid-cols-2' : '' %> -
- <% current_user.wakatime_mirrors.each do |mirror| %> -
-

<%= mirror.endpoint_url %>

-

Last synced: <%= mirror.last_synced_at ? time_ago_in_words(mirror.last_synced_at) + ' ago' : 'Never' %>

-
- <% end %> -
- <% end %> - - <%= form_with(model: [current_user, WakatimeMirror.new], local: true, class: "space-y-4") do |f| %> -
-
- <%= f.label :endpoint_url, class: 'block text-sm font-medium text-gray-200 mb-2' %> - <%= f.url_field :endpoint_url, value: 'https://wakatime.com/api/v1', class: 'w-full px-3 py-2 bg-darkless border border-darkless rounded text-white focus:border-primary focus:ring-1 focus:ring-primary' %> -
-
- <%= f.label :encrypted_api_key, 'WakaTime API Key', class: 'block text-sm font-medium text-gray-200 mb-2' %> - <%= f.password_field :encrypted_api_key, placeholder: 'Enter your WakaTime API key', class: 'w-full px-3 py-2 bg-darkless border border-darkless rounded text-white focus:border-primary focus:ring-1 focus:ring-primary' %> -
-
- <%= f.submit 'Add Mirror', class: 'px-4 py-2 bg-primary text-white font-medium rounded transition-colors duration-200' %> - <% end %> -
- <% end %> -
-
- -
- <%= render 'shared/modal', modal_id: 'api-key-confirm-modal', title: 'Rotate API Key?', description: "Your old key will be immediately invalidated and you'll need to update it in all your applications.", icon_svg: '', icon_color: 'text-primary', buttons: [{ text: 'Cancel', class: 'bg-dark hover:bg-darkless border border-darkless text-gray-300', action: 'click->modal#close' }, { text: 'Rotate Now', class: 'bg-primary hover:bg-primary/75 text-white font-medium', action: 'click->api-key-rotation#rotate' }] %> - - <%= render 'shared/modal', modal_id: 'api-key-success-modal', title: 'New API Key Generated', description: 'Your old API key has been invalidated. Update your editor configuration with this new key:', icon_svg: '', icon_color: 'text-green-500', max_width: 'max-w-lg', buttons: [{ text: 'Close', class: 'bg-dark hover:bg-darkless border border-darkless text-gray-300', action: 'click->modal#close' }, { text: 'Copy Key', class: 'bg-primary hover:bg-primary/75 text-white font-medium', action: 'click->api-key-rotation#copyKey' }], custom: '
' %> -
- -<% if @user.can_request_deletion? %> -
- <%= render 'shared/modal', modal_id: 'account-deletion-confirm-modal', title: 'Delete Your Account?', description: "This will permanently delete your account after a 30 day waiting period. During this time, you won't be able to use your account for any Hack Club programs.", icon_svg: '', icon_color: 'text-primary', buttons: [{ text: 'Cancel', class: 'bg-dark hover:bg-darkless border border-darkless text-gray-300', action: 'click->modal#close' }, { text: 'Delete My Account', class: 'bg-primary hover:bg-primary/75 text-white font-medium', form: true, url: create_deletion_path, method: 'post' }] %> -
-<% end %> - -<%= - render 'shared/modal', - modal_id: 'export-date-range-modal', - title: 'Export Date Range', - description: 'Choose specific dates to export your coding activity.', - icon_svg: '', - icon_color: 'text-primary', - max_width: 'max-w-lg', - custom: - ' -
-
- - -
-
- - -
-
', - buttons: [{ text: 'Cancel', class: 'bg-dark hover:bg-darkless border border-darkless text-gray-300', action: 'click->modal#close' }, { text: 'Export', class: 'bg-primary hover:bg-primary/75 text-white font-medium', form: true, form_id: 'export-date-range-form' }] -%> diff --git a/bun.lock b/bun.lock index 7a7aa26..d2c476d 100644 --- a/bun.lock +++ b/bun.lock @@ -5,22 +5,24 @@ "": { "dependencies": { "@fontsource/inter": "^5.2.8", - "@inertiajs/svelte": "^2.3.13", + "@inertiajs/core": "file:vendor/inertia/packages/core", + "@inertiajs/svelte": "file:vendor/inertia/packages/svelte", "@sveltejs/vite-plugin-svelte": "^6.2.4", "@tailwindcss/forms": "^0.5.11", "@tailwindcss/typography": "^0.5.19", "@tailwindcss/vite": "^4.1.18", - "@tsconfig/svelte": "5", + "@tsconfig/svelte": "^5.0.7", + "axios": "^1.13.2", "d3-scale": "^4.0.2", "layerchart": "^1.0.13", "plur": "^6.0.0", - "svelte": "5", - "svelte-check": "^4.3.6", + "svelte": "^5.51.2", + "svelte-check": "^4.4.0", "tailwindcss": "^4.1.18", "tslib": "^2.8.1", "typescript": "^5.9.3", "vite": "^7.3.1", - "vite-plugin-ruby": "^5.1.1", + "vite-plugin-ruby": "^5.1.2", }, }, }, @@ -91,9 +93,9 @@ "@fontsource/inter": ["@fontsource/inter@5.2.8", "", {}, "sha512-P6r5WnJoKiNVV+zvW2xM13gNdFhAEpQ9dQJHt3naLvfg+LkF2ldgSLiF4T41lf1SQCM9QmkqPTn4TH568IRagg=="], - "@inertiajs/core": ["@inertiajs/core@2.3.15", "", { "dependencies": { "@types/lodash-es": "^4.17.12", "axios": "^1.13.5", "laravel-precognition": "^1.0.2", "lodash-es": "^4.17.23", "qs": "^6.14.2" } }, "sha512-C/x5w2/VhPpzfCg7SCtOxRrC8yKM7zIMvwpberMLrvSLMqPqGTFxYTJH+0E//G03RXzb+Q3+eatepbSq6tpZGw=="], + "@inertiajs/core": ["@inertiajs/core@file:vendor/inertia/packages/core", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.31", "@types/lodash-es": "^4.17.12", "laravel-precognition": "2.0.0-beta.0", "lodash-es": "^4.17.23" }, "peerDependencies": { "axios": "^1.13.2" }, "optionalPeers": ["axios"] }], - "@inertiajs/svelte": ["@inertiajs/svelte@2.3.15", "", { "dependencies": { "@inertiajs/core": "2.3.15", "@types/lodash-es": "^4.17.12", "laravel-precognition": "^1.0.2", "lodash-es": "^4.17.23" }, "peerDependencies": { "svelte": "^4.0.0 || ^5.0.0" } }, "sha512-RFQYtVa1uZzzeh7c3nuHUQPj5fwCR138ShhXeoOYLj6tB4zXycIzuRmTKOSabwcgTGXHxfCkg77YfrCUb5Snig=="], + "@inertiajs/svelte": ["@inertiajs/svelte@file:vendor/inertia/packages/svelte", { "dependencies": { "@inertiajs/core": "file:../core", "@types/lodash-es": "^4.17.12", "laravel-precognition": "2.0.0-beta.0", "lodash-es": "^4.17.23" }, "peerDependencies": { "svelte": "^5.0.0" } }], "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], @@ -241,8 +243,6 @@ "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], - "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], - "camelcase-css": ["camelcase-css@2.0.1", "", {}, "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="], "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], @@ -395,7 +395,7 @@ "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], - "laravel-precognition": ["laravel-precognition@1.0.2", "", { "dependencies": { "axios": "^1.4.0", "lodash-es": "^4.17.21" } }, "sha512-0H08JDdMWONrL/N314fvsO3FATJwGGlFKGkMF3nNmizVFJaWs17816iM+sX7Rp8d5hUjYCx6WLfsehSKfaTxjg=="], + "laravel-precognition": ["laravel-precognition@2.0.0-beta.0", "", { "dependencies": { "lodash-es": "^4.17.21" }, "peerDependencies": { "axios": "^1.4.0" }, "optionalPeers": ["axios"] }, "sha512-em+Ke1x4ovACh2G0ed7DSxIegFy44OphZ8HpTDX6NH/L94N/Wuh4yIvoJeBMzdNz2HVurfSRJVHDkWlkIDwDYg=="], "layercake": ["layercake@8.4.3", "", { "dependencies": { "d3-array": "^3.2.4", "d3-color": "^3.1.0", "d3-scale": "^4.0.2", "d3-shape": "^3.2.0" }, "peerDependencies": { "svelte": "3 - 5 || >=5.0.0-next.120", "typescript": "^5.0.2" } }, "sha512-PZDduaPFxgHHkxlmsz5MVBECf6ZCT39DI3LgMVvuMwrmlrtlXwXUM/elJp46zHYzCE1j+cGyDuBDxnANv94tOQ=="], @@ -461,8 +461,6 @@ "object-hash": ["object-hash@3.0.0", "", {}, "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="], - "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], - "obug": ["obug@2.1.1", "", {}, "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ=="], "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], @@ -493,8 +491,6 @@ "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], - "qs": ["qs@6.14.2", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q=="], - "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], "read-cache": ["read-cache@1.0.0", "", { "dependencies": { "pify": "^2.3.0" } }, "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA=="], @@ -517,21 +513,13 @@ "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], - "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], - - "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], - - "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], - - "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], - "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], "sucrase": ["sucrase@3.35.1", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "tinyglobby": "^0.2.11", "ts-interface-checker": "^0.1.9" }, "bin": { "sucrase": "bin/sucrase", "sucrase-node": "bin/sucrase-node" } }, "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw=="], "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], - "svelte": ["svelte@5.51.1", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", "@types/trusted-types": "^2.0.7", "acorn": "^8.12.1", "aria-query": "^5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", "devalue": "^5.6.2", "esm-env": "^1.2.1", "esrap": "^2.2.2", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", "zimmerframe": "^1.1.2" } }, "sha512-r8r6p+NFC2ckAkxW4lqpGs1AZWBi5Y+TbJMmAglqSbokN5UWkDsKKkybfGBKXd8yYMri7KJ2L78fO9SO+NOelA=="], + "svelte": ["svelte@5.51.2", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", "@types/trusted-types": "^2.0.7", "acorn": "^8.12.1", "aria-query": "^5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", "devalue": "^5.6.2", "esm-env": "^1.2.1", "esrap": "^2.2.2", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", "zimmerframe": "^1.1.2" } }, "sha512-AqApqNOxVS97V4Ko9UHTHeSuDJrwauJhZpLDs1gYD8Jk48ntCSWD7NxKje+fnGn5Ja1O3u2FzQZHPdifQjXe3w=="], "svelte-check": ["svelte-check@4.4.0", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "chokidar": "^4.0.1", "fdir": "^6.2.0", "picocolors": "^1.0.0", "sade": "^1.7.4" }, "peerDependencies": { "svelte": "^4.0.0 || ^5.0.0-next.0", "typescript": ">=5.0.0" }, "bin": { "svelte-check": "bin/svelte-check" } }, "sha512-gB3FdEPb8tPO3Y7Dzc6d/Pm/KrXAhK+0Fk+LkcysVtupvAh6Y/IrBCEZNupq57oh0hcwlxCUamu/rq7GtvfSEg=="], @@ -567,6 +555,8 @@ "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + "@inertiajs/svelte/@inertiajs/core": ["@inertiajs/core@file:vendor/inertia/packages/core", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.31", "@types/lodash-es": "^4.17.12", "laravel-precognition": "2.0.0-beta.0", "lodash-es": "^4.17.23" }, "peerDependencies": { "axios": "^1.13.2" }, "optionalPeers": ["axios"] }], + "@layerstack/tailwind/tailwindcss": ["tailwindcss@3.4.19", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.6.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.3.2", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", "jiti": "^1.21.7", "lilconfig": "^3.1.3", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.1.1", "postcss": "^8.4.47", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", "postcss-nested": "^6.2.0", "postcss-selector-parser": "^6.1.2", "resolve": "^1.22.8", "sucrase": "^3.35.0" }, "bin": { "tailwind": "lib/cli.js", "tailwindcss": "lib/cli.js" } }, "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ=="], "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="], @@ -587,8 +577,6 @@ "d3-sankey/d3-shape": ["d3-shape@1.3.7", "", { "dependencies": { "d3-path": "1" } }, "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw=="], - "laravel-precognition/axios": ["axios@1.13.4", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, "sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg=="], - "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "postcss-nested/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], diff --git a/config/initializers/inertia_rails.rb b/config/initializers/inertia_rails.rb index 4349da9..06e1f8f 100644 --- a/config/initializers/inertia_rails.rb +++ b/config/initializers/inertia_rails.rb @@ -2,7 +2,7 @@ InertiaRails.configure do |config| config.version = ViteRuby.digest - config.encrypt_history = true + config.encrypt_history = Rails.env.production? config.always_include_errors_hash = true config.use_script_element_for_initial_page = true config.use_data_inertia_head_attribute = true diff --git a/config/routes.rb b/config/routes.rb index 1ca540d..081c067 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -121,8 +121,8 @@ Rails.application.routes.draw do # Nested under users for admin access resources :users, only: [] do - get "settings", on: :member, to: "users#edit" - patch "settings", on: :member, to: "users#update" + get "settings", on: :member, to: "settings/profile#show" + patch "settings", on: :member, to: "settings/profile#update" member do patch :update_trust_level end @@ -133,10 +133,19 @@ Rails.application.routes.draw do get "my/projects", to: "my/project_repo_mappings#index", as: :my_projects # Namespace for current user actions - get "my/settings", to: "users#edit", as: :my_settings - patch "my/settings", to: "users#update" - post "my/settings/migrate_heartbeats", to: "users#migrate_heartbeats", as: :my_settings_migrate_heartbeats - post "my/settings/rotate_api_key", to: "users#rotate_api_key", as: :my_settings_rotate_api_key + get "my/settings", to: "settings/profile#show", as: :my_settings + patch "my/settings", to: "settings/profile#update" + get "my/settings/profile", to: "settings/profile#show", as: :my_settings_profile + patch "my/settings/profile", to: "settings/profile#update" + get "my/settings/integrations", to: "settings/integrations#show", as: :my_settings_integrations + patch "my/settings/integrations", to: "settings/integrations#update" + get "my/settings/access", to: "settings/access#show", as: :my_settings_access + patch "my/settings/access", to: "settings/access#update" + get "my/settings/badges", to: "settings/badges#show", as: :my_settings_badges + get "my/settings/data", to: "settings/data#show", as: :my_settings_data + get "my/settings/admin", to: "settings/admin#show", as: :my_settings_admin + post "my/settings/migrate_heartbeats", to: "settings/data#migrate_heartbeats", as: :my_settings_migrate_heartbeats + post "my/settings/rotate_api_key", to: "settings/access#rotate_api_key", as: :my_settings_rotate_api_key namespace :my do resources :project_repo_mappings, param: :project_name, only: [ :edit, :update ], constraints: { project_name: /.+/ } do diff --git a/package-lock.json b/package-lock.json index c2640ba..04379c9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,22 +6,24 @@ "": { "dependencies": { "@fontsource/inter": "^5.2.8", - "@inertiajs/svelte": "^2.3.13", + "@inertiajs/core": "file:vendor/inertia/packages/core", + "@inertiajs/svelte": "file:vendor/inertia/packages/svelte", "@sveltejs/vite-plugin-svelte": "^6.2.4", "@tailwindcss/forms": "^0.5.11", "@tailwindcss/typography": "^0.5.19", "@tailwindcss/vite": "^4.1.18", - "@tsconfig/svelte": "5", + "@tsconfig/svelte": "^5.0.7", + "axios": "^1.13.2", "d3-scale": "^4.0.2", "layerchart": "^1.0.13", "plur": "^6.0.0", - "svelte": "5", - "svelte-check": "^4.3.6", + "svelte": "^5.51.2", + "svelte-check": "^4.4.0", "tailwindcss": "^4.1.18", "tslib": "^2.8.1", "typescript": "^5.9.3", "vite": "^7.3.1", - "vite-plugin-ruby": "^5.1.1" + "vite-plugin-ruby": "^5.1.2" } }, "node_modules/@alloc/quick-lru": { @@ -55,9 +57,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", - "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", "cpu": [ "ppc64" ], @@ -71,9 +73,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", - "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", "cpu": [ "arm" ], @@ -87,9 +89,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", - "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", "cpu": [ "arm64" ], @@ -103,9 +105,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", - "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", "cpu": [ "x64" ], @@ -119,7 +121,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.2", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", "cpu": [ "arm64" ], @@ -133,9 +137,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", - "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", "cpu": [ "x64" ], @@ -149,9 +153,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", - "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", "cpu": [ "arm64" ], @@ -165,9 +169,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", - "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", "cpu": [ "x64" ], @@ -181,9 +185,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", - "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", "cpu": [ "arm" ], @@ -197,9 +201,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", - "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", "cpu": [ "arm64" ], @@ -213,9 +217,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", - "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", "cpu": [ "ia32" ], @@ -229,9 +233,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", - "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", "cpu": [ "loong64" ], @@ -245,9 +249,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", - "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", "cpu": [ "mips64el" ], @@ -261,9 +265,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", - "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", "cpu": [ "ppc64" ], @@ -277,9 +281,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", - "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", "cpu": [ "riscv64" ], @@ -293,9 +297,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", - "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", "cpu": [ "s390x" ], @@ -309,9 +313,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", - "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", "cpu": [ "x64" ], @@ -325,9 +329,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", - "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", "cpu": [ "arm64" ], @@ -341,9 +345,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", - "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", "cpu": [ "x64" ], @@ -357,9 +361,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", - "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", "cpu": [ "arm64" ], @@ -373,9 +377,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", - "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", "cpu": [ "x64" ], @@ -389,9 +393,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", - "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", "cpu": [ "arm64" ], @@ -405,9 +409,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", - "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", "cpu": [ "x64" ], @@ -421,9 +425,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", - "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", "cpu": [ "arm64" ], @@ -437,9 +441,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", - "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", "cpu": [ "ia32" ], @@ -453,9 +457,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", - "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", "cpu": [ "x64" ], @@ -503,27 +507,36 @@ } }, "node_modules/@inertiajs/core": { - "version": "2.3.13", + "version": "2.3.14", + "resolved": "file:vendor/inertia/packages/core", "license": "MIT", "dependencies": { + "@jridgewell/trace-mapping": "^0.3.31", "@types/lodash-es": "^4.17.12", - "axios": "^1.13.2", - "laravel-precognition": "^1.0.1", - "lodash-es": "^4.17.23", - "qs": "^6.14.1" - } - }, - "node_modules/@inertiajs/svelte": { - "version": "2.3.13", - "license": "MIT", - "dependencies": { - "@inertiajs/core": "2.3.13", - "@types/lodash-es": "^4.17.12", - "laravel-precognition": "^1.0.1", + "laravel-precognition": "2.0.0-beta.0", "lodash-es": "^4.17.23" }, "peerDependencies": { - "svelte": "^4.0.0 || ^5.0.0" + "axios": "^1.13.2" + }, + "peerDependenciesMeta": { + "axios": { + "optional": true + } + } + }, + "node_modules/@inertiajs/svelte": { + "version": "2.3.14", + "resolved": "file:vendor/inertia/packages/svelte", + "license": "MIT", + "dependencies": { + "@inertiajs/core": "file:../core", + "@types/lodash-es": "^4.17.12", + "laravel-precognition": "2.0.0-beta.0", + "lodash-es": "^4.17.23" + }, + "peerDependencies": { + "svelte": "^5.0.0" } }, "node_modules/@jridgewell/gen-mapping": { @@ -1421,6 +1434,12 @@ "@types/lodash": "*" } }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT" + }, "node_modules/acorn": { "version": "8.15.0", "license": "MIT", @@ -1477,14 +1496,18 @@ }, "node_modules/asynckit": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "license": "MIT" }, "node_modules/axios": { - "version": "1.13.4", + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", + "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==", "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, @@ -1521,6 +1544,8 @@ }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -1530,20 +1555,6 @@ "node": ">= 0.4" } }, - "node_modules/call-bound": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/camelcase-css": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", @@ -1575,6 +1586,8 @@ }, "node_modules/combined-stream": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" @@ -1960,6 +1973,8 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "license": "MIT", "engines": { "node": ">=0.4.0" @@ -1990,6 +2005,8 @@ }, "node_modules/dunder-proto": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -2013,6 +2030,8 @@ }, "node_modules/es-define-property": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -2020,6 +2039,8 @@ }, "node_modules/es-errors": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -2027,6 +2048,8 @@ }, "node_modules/es-object-atoms": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -2037,6 +2060,8 @@ }, "node_modules/es-set-tostringtag": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -2049,7 +2074,9 @@ } }, "node_modules/esbuild": { - "version": "0.27.2", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -2059,32 +2086,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.2", - "@esbuild/android-arm": "0.27.2", - "@esbuild/android-arm64": "0.27.2", - "@esbuild/android-x64": "0.27.2", - "@esbuild/darwin-arm64": "0.27.2", - "@esbuild/darwin-x64": "0.27.2", - "@esbuild/freebsd-arm64": "0.27.2", - "@esbuild/freebsd-x64": "0.27.2", - "@esbuild/linux-arm": "0.27.2", - "@esbuild/linux-arm64": "0.27.2", - "@esbuild/linux-ia32": "0.27.2", - "@esbuild/linux-loong64": "0.27.2", - "@esbuild/linux-mips64el": "0.27.2", - "@esbuild/linux-ppc64": "0.27.2", - "@esbuild/linux-riscv64": "0.27.2", - "@esbuild/linux-s390x": "0.27.2", - "@esbuild/linux-x64": "0.27.2", - "@esbuild/netbsd-arm64": "0.27.2", - "@esbuild/netbsd-x64": "0.27.2", - "@esbuild/openbsd-arm64": "0.27.2", - "@esbuild/openbsd-x64": "0.27.2", - "@esbuild/openharmony-arm64": "0.27.2", - "@esbuild/sunos-x64": "0.27.2", - "@esbuild/win32-arm64": "0.27.2", - "@esbuild/win32-ia32": "0.27.2", - "@esbuild/win32-x64": "0.27.2" + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" } }, "node_modules/esm-env": { @@ -2164,6 +2191,8 @@ }, "node_modules/follow-redirects": { "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", "funding": [ { "type": "individual", @@ -2182,6 +2211,8 @@ }, "node_modules/form-data": { "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", @@ -2214,6 +2245,8 @@ }, "node_modules/get-intrinsic": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -2236,6 +2269,8 @@ }, "node_modules/get-proto": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -2259,6 +2294,8 @@ }, "node_modules/gopd": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -2273,6 +2310,8 @@ }, "node_modules/has-symbols": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -2283,6 +2322,8 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -2419,11 +2460,20 @@ } }, "node_modules/laravel-precognition": { - "version": "1.0.2", + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/laravel-precognition/-/laravel-precognition-2.0.0-beta.0.tgz", + "integrity": "sha512-em+Ke1x4ovACh2G0ed7DSxIegFy44OphZ8HpTDX6NH/L94N/Wuh4yIvoJeBMzdNz2HVurfSRJVHDkWlkIDwDYg==", "license": "MIT", "dependencies": { - "axios": "^1.4.0", "lodash-es": "^4.17.21" + }, + "peerDependencies": { + "axios": "^1.4.0" + }, + "peerDependenciesMeta": { + "axios": { + "optional": true + } } }, "node_modules/layercake": { @@ -2760,6 +2810,8 @@ }, "node_modules/math-intrinsics": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -2801,6 +2853,8 @@ }, "node_modules/mime-db": { "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -2808,6 +2862,8 @@ }, "node_modules/mime-types": { "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", "dependencies": { "mime-db": "1.52.0" @@ -2890,16 +2946,6 @@ "node": ">= 6" } }, - "node_modules/object-inspect": { - "version": "1.13.4", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/obug": { "version": "2.1.1", "funding": [ @@ -3128,21 +3174,10 @@ }, "node_modules/proxy-from-env": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "license": "MIT" }, - "node_modules/qs": { - "version": "6.14.1", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -3306,70 +3341,6 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, - "node_modules/side-channel": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/source-map-js": { "version": "1.2.1", "license": "BSD-3-Clause", @@ -3421,13 +3392,16 @@ } }, "node_modules/svelte": { - "version": "5.49.2", + "version": "5.51.2", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.51.2.tgz", + "integrity": "sha512-AqApqNOxVS97V4Ko9UHTHeSuDJrwauJhZpLDs1gYD8Jk48ntCSWD7NxKje+fnGn5Ja1O3u2FzQZHPdifQjXe3w==", "license": "MIT", "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", + "@types/trusted-types": "^2.0.7", "acorn": "^8.12.1", "aria-query": "^5.3.1", "axobject-query": "^4.1.0", @@ -3445,7 +3419,9 @@ } }, "node_modules/svelte-check": { - "version": "4.3.6", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.4.0.tgz", + "integrity": "sha512-gB3FdEPb8tPO3Y7Dzc6d/Pm/KrXAhK+0Fk+LkcysVtupvAh6Y/IrBCEZNupq57oh0hcwlxCUamu/rq7GtvfSEg==", "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", diff --git a/package.json b/package.json index f1df5b0..b31b798 100644 --- a/package.json +++ b/package.json @@ -6,16 +6,18 @@ }, "dependencies": { "@fontsource/inter": "^5.2.8", - "@inertiajs/svelte": "^2.3.15", + "@inertiajs/core": "file:vendor/inertia/packages/core", + "@inertiajs/svelte": "file:vendor/inertia/packages/svelte", "@sveltejs/vite-plugin-svelte": "^6.2.4", "@tailwindcss/forms": "^0.5.11", "@tailwindcss/typography": "^0.5.19", "@tailwindcss/vite": "^4.1.18", "@tsconfig/svelte": "^5.0.7", + "axios": "^1.13.2", "d3-scale": "^4.0.2", "layerchart": "^1.0.13", "plur": "^6.0.0", - "svelte": "^5.51.1", + "svelte": "^5.51.2", "svelte-check": "^4.4.0", "tailwindcss": "^4.1.18", "tslib": "^2.8.1", diff --git a/vendor/inertia/packages/core/dist/index.js b/vendor/inertia/packages/core/dist/index.js new file mode 100644 index 0000000..fa92e44 --- /dev/null +++ b/vendor/inertia/packages/core/dist/index.js @@ -0,0 +1,4668 @@ +// src/router.ts +import { cloneDeep as cloneDeep3, get as get3, isEqual as isEqual3, set as set4 } from "lodash-es"; + +// src/config.ts +import { get, has, set } from "lodash-es"; +var Config = class { + constructor(defaults) { + this.config = {}; + this.defaults = defaults; + } + extend(defaults) { + if (defaults) { + this.defaults = { ...this.defaults, ...defaults }; + } + return this; + } + replace(newConfig) { + this.config = newConfig; + } + get(key) { + return has(this.config, key) ? get(this.config, key) : get(this.defaults, key); + } + set(keyOrValues, value) { + if (typeof keyOrValues === "string") { + set(this.config, keyOrValues, value); + } else { + Object.entries(keyOrValues).forEach(([key, val]) => { + set(this.config, key, val); + }); + } + } +}; +var config = new Config({ + form: { + recentlySuccessfulDuration: 2e3, + forceIndicesArrayFormatInFormData: true, + withAllErrors: false + }, + prefetch: { + cacheFor: 3e4, + hoverDelay: 75 + } +}); + +// src/debounce.ts +function debounce(fn, delay) { + let timeoutID; + return function(...args) { + clearTimeout(timeoutID); + timeoutID = setTimeout(() => fn.apply(this, args), delay); + }; +} + +// src/events.ts +function fireEvent(name, options) { + return document.dispatchEvent(new CustomEvent(`inertia:${name}`, options)); +} +var fireBeforeEvent = (visit) => { + return fireEvent("before", { cancelable: true, detail: { visit } }); +}; +var fireErrorEvent = (errors) => { + return fireEvent("error", { detail: { errors } }); +}; +var fireNetworkErrorEvent = (exception) => { + return fireEvent("networkError", { cancelable: true, detail: { exception } }); +}; +var fireFinishEvent = (visit) => { + return fireEvent("finish", { detail: { visit } }); +}; +var fireHttpExceptionEvent = (response) => { + return fireEvent("httpException", { cancelable: true, detail: { response } }); +}; +var fireBeforeUpdateEvent = (page2) => { + return fireEvent("beforeUpdate", { detail: { page: page2 } }); +}; +var fireNavigateEvent = (page2) => { + return fireEvent("navigate", { detail: { page: page2 } }); +}; +var fireProgressEvent = (progress3) => { + return fireEvent("progress", { detail: { progress: progress3 } }); +}; +var fireStartEvent = (visit) => { + return fireEvent("start", { detail: { visit } }); +}; +var fireSuccessEvent = (page2) => { + return fireEvent("success", { detail: { page: page2 } }); +}; +var firePrefetchedEvent = (response, visit) => { + return fireEvent("prefetched", { detail: { fetchedAt: Date.now(), response, visit } }); +}; +var firePrefetchingEvent = (visit) => { + return fireEvent("prefetching", { detail: { visit } }); +}; +var fireFlashEvent = (flash) => { + return fireEvent("flash", { detail: { flash } }); +}; + +// src/history.ts +import { cloneDeep as cloneDeep2, isEqual } from "lodash-es"; + +// src/sessionStorage.ts +var SessionStorage = class { + static set(key, value) { + if (typeof window !== "undefined") { + window.sessionStorage.setItem(key, JSON.stringify(value)); + } + } + static get(key) { + if (typeof window !== "undefined") { + return JSON.parse(window.sessionStorage.getItem(key) || "null"); + } + } + static merge(key, value) { + const existing = this.get(key); + if (existing === null) { + this.set(key, value); + } else { + this.set(key, { ...existing, ...value }); + } + } + static remove(key) { + if (typeof window !== "undefined") { + window.sessionStorage.removeItem(key); + } + } + static removeNested(key, nestedKey) { + const existing = this.get(key); + if (existing !== null) { + delete existing[nestedKey]; + this.set(key, existing); + } + } + static exists(key) { + try { + return this.get(key) !== null; + } catch (error) { + return false; + } + } + static clear() { + if (typeof window !== "undefined") { + window.sessionStorage.clear(); + } + } +}; +SessionStorage.locationVisitKey = "inertiaLocationVisit"; + +// src/encryption.ts +var encryptHistory = async (data) => { + if (typeof window === "undefined") { + throw new Error("Unable to encrypt history"); + } + const iv = getIv(); + const storedKey = await getKeyFromSessionStorage(); + const key = await getOrCreateKey(storedKey); + if (!key) { + throw new Error("Unable to encrypt history"); + } + const encrypted = await encryptData(iv, key, data); + return encrypted; +}; +var historySessionStorageKeys = { + key: "historyKey", + iv: "historyIv" +}; +var decryptHistory = async (data) => { + const iv = getIv(); + const storedKey = await getKeyFromSessionStorage(); + if (!storedKey) { + throw new Error("Unable to decrypt history"); + } + return await decryptData(iv, storedKey, data); +}; +var encryptData = async (iv, key, data) => { + if (typeof window === "undefined") { + throw new Error("Unable to encrypt history"); + } + if (typeof window.crypto.subtle === "undefined") { + console.warn("Encryption is not supported in this environment. SSL is required."); + return Promise.resolve(data); + } + const textEncoder = new TextEncoder(); + const str = JSON.stringify(data); + const encoded = new Uint8Array(str.length * 3); + const result = textEncoder.encodeInto(str, encoded); + return window.crypto.subtle.encrypt( + { + name: "AES-GCM", + iv + }, + key, + encoded.subarray(0, result.written) + ); +}; +var decryptData = async (iv, key, data) => { + if (typeof window.crypto.subtle === "undefined") { + console.warn("Decryption is not supported in this environment. SSL is required."); + return Promise.resolve(data); + } + const decrypted = await window.crypto.subtle.decrypt( + { + name: "AES-GCM", + iv + }, + key, + data + ); + return JSON.parse(new TextDecoder().decode(decrypted)); +}; +var getIv = () => { + const ivString = SessionStorage.get(historySessionStorageKeys.iv); + if (ivString) { + return new Uint8Array(ivString); + } + const iv = window.crypto.getRandomValues(new Uint8Array(12)); + SessionStorage.set(historySessionStorageKeys.iv, Array.from(iv)); + return iv; +}; +var createKey = async () => { + if (typeof window.crypto.subtle === "undefined") { + console.warn("Encryption is not supported in this environment. SSL is required."); + return Promise.resolve(null); + } + return window.crypto.subtle.generateKey( + { + name: "AES-GCM", + length: 256 + }, + true, + ["encrypt", "decrypt"] + ); +}; +var saveKey = async (key) => { + if (typeof window.crypto.subtle === "undefined") { + console.warn("Encryption is not supported in this environment. SSL is required."); + return Promise.resolve(); + } + const keyData = await window.crypto.subtle.exportKey("raw", key); + SessionStorage.set(historySessionStorageKeys.key, Array.from(new Uint8Array(keyData))); +}; +var getOrCreateKey = async (key) => { + if (key) { + return key; + } + const newKey = await createKey(); + if (!newKey) { + return null; + } + await saveKey(newKey); + return newKey; +}; +var getKeyFromSessionStorage = async () => { + const stringKey = SessionStorage.get(historySessionStorageKeys.key); + if (!stringKey) { + return null; + } + const key = await window.crypto.subtle.importKey( + "raw", + new Uint8Array(stringKey), + { + name: "AES-GCM", + length: 256 + }, + true, + ["encrypt", "decrypt"] + ); + return key; +}; + +// src/prefetched.ts +import { cloneDeep } from "lodash-es"; + +// src/objectUtils.ts +var objectsAreEqual = (obj1, obj2, excludeKeys) => { + if (obj1 === obj2) { + return true; + } + for (const key in obj1) { + if (excludeKeys.includes(key)) { + continue; + } + if (obj1[key] === obj2[key]) { + continue; + } + if (!compareValues(obj1[key], obj2[key])) { + return false; + } + } + for (const key in obj2) { + if (excludeKeys.includes(key)) { + continue; + } + if (!(key in obj1)) { + return false; + } + } + return true; +}; +var compareValues = (value1, value2) => { + switch (typeof value1) { + case "object": + return objectsAreEqual(value1, value2, []); + case "function": + return value1.toString() === value2.toString(); + default: + return value1 === value2; + } +}; + +// src/time.ts +var conversionMap = { + ms: 1, + s: 1e3, + m: 1e3 * 60, + h: 1e3 * 60 * 60, + d: 1e3 * 60 * 60 * 24 +}; +var timeToMs = (time) => { + if (typeof time === "number") { + return time; + } + for (const [unit, conversion] of Object.entries(conversionMap)) { + if (time.endsWith(unit)) { + return parseFloat(time) * conversion; + } + } + return parseInt(time); +}; + +// src/prefetched.ts +var PrefetchedRequests = class { + constructor() { + this.cached = []; + this.inFlightRequests = []; + this.removalTimers = []; + this.currentUseId = null; + } + add(params, sendFunc, { cacheFor, cacheTags }) { + const inFlight = this.findInFlight(params); + if (inFlight) { + return Promise.resolve(); + } + const existing = this.findCached(params); + if (!params.fresh && existing && existing.staleTimestamp > Date.now()) { + return Promise.resolve(); + } + const [stale, prefetchExpiresIn] = this.extractStaleValues(cacheFor); + const promise = new Promise((resolve, reject) => { + sendFunc({ + ...params, + onCancel: () => { + this.remove(params); + params.onCancel(); + reject(); + }, + onError: (error) => { + this.remove(params); + params.onError(error); + reject(); + }, + onPrefetching(visitParams) { + params.onPrefetching(visitParams); + }, + onPrefetched(response, visit) { + params.onPrefetched(response, visit); + }, + onPrefetchResponse(response) { + resolve(response); + }, + onPrefetchError(error) { + prefetchedRequests.removeFromInFlight(params); + reject(error); + } + }); + }).then((response) => { + this.remove(params); + const pageResponse = response.getPageResponse(); + page.mergeOncePropsIntoResponse(pageResponse); + this.cached.push({ + params: { ...params }, + staleTimestamp: Date.now() + stale, + expiresAt: Date.now() + prefetchExpiresIn, + response: promise, + singleUse: prefetchExpiresIn === 0, + timestamp: Date.now(), + inFlight: false, + tags: Array.isArray(cacheTags) ? cacheTags : [cacheTags] + }); + const oncePropExpiresIn = this.getShortestOncePropTtl(pageResponse); + this.scheduleForRemoval( + params, + oncePropExpiresIn ? Math.min(prefetchExpiresIn, oncePropExpiresIn) : prefetchExpiresIn + ); + this.removeFromInFlight(params); + response.handlePrefetch(); + return response; + }); + this.inFlightRequests.push({ + params: { ...params }, + response: promise, + staleTimestamp: null, + inFlight: true + }); + return promise; + } + removeAll() { + this.cached = []; + this.removalTimers.forEach((removalTimer) => { + clearTimeout(removalTimer.timer); + }); + this.removalTimers = []; + } + removeByTags(tags) { + this.cached = this.cached.filter((prefetched) => { + return !prefetched.tags.some((tag) => tags.includes(tag)); + }); + } + remove(params) { + this.cached = this.cached.filter((prefetched) => { + return !this.paramsAreEqual(prefetched.params, params); + }); + this.clearTimer(params); + } + removeFromInFlight(params) { + this.inFlightRequests = this.inFlightRequests.filter((prefetching) => { + return !this.paramsAreEqual(prefetching.params, params); + }); + } + extractStaleValues(cacheFor) { + const [stale, expires] = this.cacheForToStaleAndExpires(cacheFor); + return [timeToMs(stale), timeToMs(expires)]; + } + cacheForToStaleAndExpires(cacheFor) { + if (!Array.isArray(cacheFor)) { + return [cacheFor, cacheFor]; + } + switch (cacheFor.length) { + case 0: + return [0, 0]; + case 1: + return [cacheFor[0], cacheFor[0]]; + default: + return [cacheFor[0], cacheFor[1]]; + } + } + clearTimer(params) { + const timer = this.removalTimers.find((removalTimer) => { + return this.paramsAreEqual(removalTimer.params, params); + }); + if (timer) { + clearTimeout(timer.timer); + this.removalTimers = this.removalTimers.filter((removalTimer) => removalTimer !== timer); + } + } + scheduleForRemoval(params, expiresIn) { + if (typeof window === "undefined") { + return; + } + this.clearTimer(params); + if (expiresIn > 0) { + const timer = window.setTimeout(() => this.remove(params), expiresIn); + this.removalTimers.push({ + params, + timer + }); + } + } + get(params) { + return this.findCached(params) || this.findInFlight(params); + } + use(prefetched, params) { + const id = `${params.url.pathname}-${Date.now()}-${Math.random().toString(36).substring(7)}`; + this.currentUseId = id; + return prefetched.response.then((response) => { + if (this.currentUseId !== id) { + return; + } + response.mergeParams({ ...params, onPrefetched: () => { + } }); + this.removeSingleUseItems(params); + return response.handle(); + }); + } + removeSingleUseItems(params) { + this.cached = this.cached.filter((prefetched) => { + if (!this.paramsAreEqual(prefetched.params, params)) { + return true; + } + return !prefetched.singleUse; + }); + } + findCached(params) { + return this.cached.find((prefetched) => { + return this.paramsAreEqual(prefetched.params, params); + }) || null; + } + findInFlight(params) { + return this.inFlightRequests.find((prefetched) => { + return this.paramsAreEqual(prefetched.params, params); + }) || null; + } + withoutPurposePrefetchHeader(params) { + const newParams = cloneDeep(params); + if (newParams.headers["Purpose"] === "prefetch") { + delete newParams.headers["Purpose"]; + } + return newParams; + } + paramsAreEqual(params1, params2) { + return objectsAreEqual( + this.withoutPurposePrefetchHeader(params1), + this.withoutPurposePrefetchHeader(params2), + [ + "showProgress", + "replace", + "prefetch", + "preserveScroll", + "preserveState", + "onBefore", + "onBeforeUpdate", + "onStart", + "onProgress", + "onFinish", + "onCancel", + "onSuccess", + "onError", + "onFlash", + "onPrefetched", + "onCancelToken", + "onPrefetching", + "async", + "viewTransition", + "optimistic" + ] + ); + } + updateCachedOncePropsFromCurrentPage() { + this.cached.forEach((prefetched) => { + prefetched.response.then((response) => { + const pageResponse = response.getPageResponse(); + page.mergeOncePropsIntoResponse(pageResponse, { force: true }); + for (const [group, deferredProps] of Object.entries(pageResponse.deferredProps ?? {})) { + const remaining = deferredProps.filter((prop) => pageResponse.props[prop] === void 0); + if (remaining.length > 0) { + pageResponse.deferredProps[group] = remaining; + } else { + delete pageResponse.deferredProps[group]; + } + } + const oncePropExpiresIn = this.getShortestOncePropTtl(pageResponse); + if (oncePropExpiresIn === null) { + return; + } + const prefetchExpiresIn = prefetched.expiresAt - Date.now(); + const expiresIn = Math.min(prefetchExpiresIn, oncePropExpiresIn); + if (expiresIn > 0) { + this.scheduleForRemoval(prefetched.params, expiresIn); + } else { + this.remove(prefetched.params); + } + }); + }); + } + getShortestOncePropTtl(page2) { + const expiryTimestamps = Object.values(page2.onceProps ?? {}).map((onceProp) => onceProp.expiresAt).filter((expiresAt) => !!expiresAt); + if (expiryTimestamps.length === 0) { + return null; + } + return Math.min(...expiryTimestamps) - Date.now(); + } +}; +var prefetchedRequests = new PrefetchedRequests(); + +// src/domUtils.ts +var elementInViewport = (el) => { + if (el.offsetParent === null) { + return false; + } + const rect = el.getBoundingClientRect(); + const verticallyVisible = rect.top < window.innerHeight && rect.bottom >= 0; + const horizontallyVisible = rect.left < window.innerWidth && rect.right >= 0; + return verticallyVisible && horizontallyVisible; +}; +var getScrollableParent = (element) => { + const allowsVerticalScroll = (el) => { + const computedStyle = window.getComputedStyle(el); + if (["scroll", "overlay"].includes(computedStyle.overflowY)) { + return true; + } + if (computedStyle.overflowY !== "auto") { + return false; + } + if (["visible", "clip"].includes(computedStyle.overflowX)) { + return true; + } + return hasDimensionConstraint(computedStyle.maxHeight, el.style.height) || isConstrainedByLayout(el, "height"); + }; + const allowsHorizontalScroll = (el) => { + const computedStyle = window.getComputedStyle(el); + if (["scroll", "overlay"].includes(computedStyle.overflowX)) { + return true; + } + if (computedStyle.overflowX !== "auto") { + return false; + } + if (["visible", "clip"].includes(computedStyle.overflowY)) { + return true; + } + return hasDimensionConstraint(computedStyle.maxWidth, el.style.width) || isConstrainedByLayout(el, "width"); + }; + const hasDimensionConstraint = (computedMaxDimension, inlineStyleDimension) => { + if (computedMaxDimension && computedMaxDimension !== "none" && computedMaxDimension !== "0px") { + return true; + } + if (inlineStyleDimension && inlineStyleDimension !== "auto" && inlineStyleDimension !== "0") { + return true; + } + return false; + }; + const isConstrainedByLayout = (el, dimension) => { + const parent2 = el.parentElement; + if (!parent2) { + return false; + } + const parentStyle = window.getComputedStyle(parent2); + if (["flex", "inline-flex"].includes(parentStyle.display)) { + const isColumnLayout = ["column", "column-reverse"].includes(parentStyle.flexDirection); + return dimension === "height" ? isColumnLayout : !isColumnLayout; + } + return ["grid", "inline-grid"].includes(parentStyle.display); + }; + let parent = element?.parentElement; + while (parent) { + const allowsScroll = allowsVerticalScroll(parent) || allowsHorizontalScroll(parent); + if (window.getComputedStyle(parent).display !== "contents" && allowsScroll) { + return parent; + } + parent = parent.parentElement; + } + return null; +}; +var getElementsInViewportFromCollection = (elements, referenceElement) => { + if (!referenceElement) { + return elements.filter((element) => elementInViewport(element)); + } + const referenceIndex = elements.indexOf(referenceElement); + const upwardElements = []; + const downwardElements = []; + for (let i = referenceIndex; i >= 0; i--) { + const element = elements[i]; + if (elementInViewport(element)) { + upwardElements.push(element); + } else { + break; + } + } + for (let i = referenceIndex + 1; i < elements.length; i++) { + const element = elements[i]; + if (elementInViewport(element)) { + downwardElements.push(element); + } else { + break; + } + } + return [...upwardElements.reverse(), ...downwardElements]; +}; +var requestAnimationFrame = (cb, times = 1) => { + window.requestAnimationFrame(() => { + if (times > 1) { + requestAnimationFrame(cb, times - 1); + } else { + cb(); + } + }); +}; +var getInitialPageFromDOM = (id) => { + if (typeof window === "undefined") { + return null; + } + const scriptEl = document.querySelector(`script[data-page="${id}"][type="application/json"]`); + if (scriptEl?.textContent) { + return JSON.parse(scriptEl.textContent); + } + return null; +}; + +// src/scroll.ts +var isServer = typeof window === "undefined"; +var isFirefox = !isServer && /Firefox/i.test(window.navigator.userAgent); +var Scroll = class { + static save() { + history.saveScrollPositions(this.getScrollRegions()); + } + static getScrollRegions() { + return Array.from(this.regions()).map((region) => ({ + top: region.scrollTop, + left: region.scrollLeft + })); + } + static regions() { + return document.querySelectorAll("[scroll-region]"); + } + static scrollToTop() { + if (isFirefox && getComputedStyle(document.documentElement).scrollBehavior === "smooth") { + return requestAnimationFrame(() => window.scrollTo(0, 0), 2); + } + window.scrollTo(0, 0); + } + static reset() { + const anchorHash = isServer ? null : window.location.hash; + if (!anchorHash) { + this.scrollToTop(); + } + this.regions().forEach((region) => { + if (typeof region.scrollTo === "function") { + region.scrollTo(0, 0); + } else { + region.scrollTop = 0; + region.scrollLeft = 0; + } + }); + this.save(); + this.scrollToAnchor(); + } + static scrollToAnchor() { + const anchorHash = isServer ? null : window.location.hash; + if (anchorHash) { + setTimeout(() => { + const anchorElement = document.getElementById(anchorHash.slice(1)); + anchorElement ? anchorElement.scrollIntoView() : this.scrollToTop(); + }); + } + } + static restore(scrollRegions) { + if (isServer) { + return; + } + window.requestAnimationFrame(() => { + this.restoreDocument(); + this.restoreScrollRegions(scrollRegions); + }); + } + static restoreScrollRegions(scrollRegions) { + if (isServer) { + return; + } + this.regions().forEach((region, index) => { + const scrollPosition = scrollRegions[index]; + if (!scrollPosition) { + return; + } + if (typeof region.scrollTo === "function") { + region.scrollTo(scrollPosition.left, scrollPosition.top); + } else { + region.scrollTop = scrollPosition.top; + region.scrollLeft = scrollPosition.left; + } + }); + } + static restoreDocument() { + const scrollPosition = history.getDocumentScrollPosition(); + window.scrollTo(scrollPosition.left, scrollPosition.top); + } + static onScroll(event) { + const target = event.target; + if (typeof target.hasAttribute === "function" && target.hasAttribute("scroll-region")) { + this.save(); + } + } + static onWindowScroll() { + history.saveDocumentScrollPosition({ + top: window.scrollY, + left: window.scrollX + }); + } +}; + +// src/files.ts +var isFile = (value) => typeof File !== "undefined" && value instanceof File || value instanceof Blob || typeof FileList !== "undefined" && value instanceof FileList && value.length > 0; +function hasFiles(data) { + return isFile(data) || data instanceof FormData && Array.from(data.values()).some((value) => hasFiles(value)) || typeof data === "object" && data !== null && Object.values(data).some((value) => hasFiles(value)); +} + +// src/formData.ts +var isFormData = (value) => value instanceof FormData; +function objectToFormData(source, form = new FormData(), parentKey = null, queryStringArrayFormat = "brackets") { + source = source || {}; + for (const key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + append(form, composeKey(parentKey, key, "indices"), source[key], queryStringArrayFormat); + } + } + return form; +} +function composeKey(parent, key, format) { + if (!parent) { + return key; + } + return format === "brackets" ? `${parent}[]` : `${parent}[${key}]`; +} +function append(form, key, value, format) { + if (Array.isArray(value)) { + return Array.from(value.keys()).forEach( + (index) => append(form, composeKey(key, index.toString(), format), value[index], format) + ); + } else if (value instanceof Date) { + return form.append(key, value.toISOString()); + } else if (value instanceof File) { + return form.append(key, value, value.name); + } else if (value instanceof Blob) { + return form.append(key, value); + } else if (typeof value === "boolean") { + return form.append(key, value ? "1" : "0"); + } else if (typeof value === "string") { + return form.append(key, value); + } else if (typeof value === "number") { + return form.append(key, `${value}`); + } else if (value === null || value === void 0) { + return form.append(key, ""); + } + objectToFormData(value, form, key, format); +} + +// src/queryString.ts +function hasIndices(url) { + return /\[\d+\]/.test(decodeURIComponent(url.search)); +} +function parse(query) { + if (!query || query === "?") { + return {}; + } + const result = {}; + query.replace(/^\?/, "").split("&").filter(Boolean).forEach((segment) => { + const [rawKey, rawValue] = splitPair(segment); + set2(result, decode(rawKey), decode(rawValue)); + }); + return result; +} +function stringify(data, arrayFormat) { + const pairs = []; + build(data, "", pairs, arrayFormat); + return pairs.length ? "?" + pairs.join("&") : ""; +} +function splitPair(pair) { + const index = pair.indexOf("="); + return index === -1 ? [pair, ""] : [pair.substring(0, index), pair.substring(index + 1)]; +} +function decode(value) { + return decodeURIComponent(value.replace(/\+/g, " ")); +} +function set2(target, key, value) { + const keys = parseKey(key); + let current = target; + while (keys.length > 1) { + const segment = keys.shift(); + const nextIsArrayPush = keys[0] === ""; + if (typeof current[segment] !== "object" || current[segment] === null) { + current[segment] = nextIsArrayPush ? [] : {}; + } + current = current[segment]; + } + const final = keys.shift(); + if (final === "" && Array.isArray(current)) { + current.push(value); + } else { + current[final] = value; + } +} +function parseKey(key) { + const segments = []; + const base = key.split("[")[0]; + if (base) { + segments.push(base); + } + let match; + const pattern = /\[([^\]]*)\]/g; + while ((match = pattern.exec(key)) !== null) { + segments.push(match[1]); + } + return segments; +} +function build(value, prefix, pairs, arrayFormat) { + if (value === void 0) { + return; + } + if (value === null) { + pairs.push(`${prefix}=`); + return; + } + if (Array.isArray(value)) { + value.forEach((item, index) => { + const key = arrayFormat === "indices" ? `${prefix}[${index}]` : `${prefix}[]`; + build(item, key, pairs, arrayFormat); + }); + return; + } + if (typeof value === "object") { + Object.keys(value).forEach((key) => { + build(value[key], prefix ? `${prefix}[${key}]` : key, pairs, arrayFormat); + }); + return; + } + pairs.push(`${prefix}=${encodeURIComponent(String(value))}`); +} + +// src/url.ts +function hrefToUrl(href) { + return new URL(href.toString(), typeof window === "undefined" ? void 0 : window.location.toString()); +} +var transformUrlAndData = (href, data, method, forceFormData, queryStringArrayFormat) => { + let url = typeof href === "string" ? hrefToUrl(href) : href; + if ((hasFiles(data) || forceFormData) && !isFormData(data)) { + if (config.get("form.forceIndicesArrayFormatInFormData")) { + queryStringArrayFormat = "indices"; + } + data = objectToFormData(data, new FormData(), null, queryStringArrayFormat); + } + if (isFormData(data)) { + return [url, data]; + } + const [_href, _data] = mergeDataIntoQueryString(method, url, data, queryStringArrayFormat); + return [hrefToUrl(_href), _data]; +}; +function mergeDataIntoQueryString(method, href, data, qsArrayFormat = "brackets") { + const hasDataForQueryString = method === "get" && !isFormData(data) && Object.keys(data).length > 0; + const hasHost = urlHasProtocol(href.toString()); + const hasAbsolutePath = hasHost || href.toString().startsWith("/") || href.toString() === ""; + const hasRelativePath = !hasAbsolutePath && !href.toString().startsWith("#") && !href.toString().startsWith("?"); + const hasRelativePathWithDotPrefix = /^[.]{1,2}([/]|$)/.test(href.toString()); + const hasSearch = href.toString().includes("?") || hasDataForQueryString; + const hasHash = href.toString().includes("#"); + const url = new URL(href.toString(), typeof window === "undefined" ? "http://localhost" : window.location.toString()); + if (hasDataForQueryString) { + const arrayFormat = hasIndices(url) ? "indices" : qsArrayFormat; + url.search = stringify({ ...parse(url.search), ...data }, arrayFormat); + } + return [ + [ + hasHost ? `${url.protocol}//${url.host}` : "", + hasAbsolutePath ? url.pathname : "", + hasRelativePath ? url.pathname.substring(hasRelativePathWithDotPrefix ? 0 : 1) : "", + hasSearch ? url.search : "", + hasHash ? url.hash : "" + ].join(""), + hasDataForQueryString ? {} : data + ]; +} +function urlWithoutHash(url) { + url = new URL(url.href); + url.hash = ""; + return url; +} +var setHashIfSameUrl = (originUrl, destinationUrl) => { + if (originUrl.hash && !destinationUrl.hash && urlWithoutHash(originUrl).href === destinationUrl.href) { + destinationUrl.hash = originUrl.hash; + } +}; +var isSameUrlWithoutHash = (url1, url2) => { + return urlWithoutHash(url1).href === urlWithoutHash(url2).href; +}; +var isSameUrlWithoutQueryOrHash = (url1, url2) => { + return url1.origin === url2.origin && url1.pathname === url2.pathname; +}; +function isUrlMethodPair(href) { + return href !== null && typeof href === "object" && href !== void 0 && "url" in href && "method" in href; +} +function urlHasProtocol(url) { + return /^([a-z][a-z0-9+.-]*:)?\/\/[^/]/i.test(url); +} +function urlToString(url, absolute) { + const urlObj = typeof url === "string" ? hrefToUrl(url) : url; + return absolute ? `${urlObj.protocol}//${urlObj.host}${urlObj.pathname}${urlObj.search}${urlObj.hash}` : `${urlObj.pathname}${urlObj.search}${urlObj.hash}`; +} + +// src/page.ts +var CurrentPage = class { + constructor() { + this.componentId = {}; + this.listeners = []; + this.isFirstPageLoad = true; + this.cleared = false; + this.pendingDeferredProps = null; + this.historyQuotaExceeded = false; + } + init({ + initialPage, + swapComponent, + resolveComponent, + onFlash + }) { + this.page = { ...initialPage, flash: initialPage.flash ?? {} }; + this.swapComponent = swapComponent; + this.resolveComponent = resolveComponent; + this.onFlashCallback = onFlash; + eventHandler.on("historyQuotaExceeded", () => { + this.historyQuotaExceeded = true; + }); + return this; + } + set(page2, { + replace = false, + preserveScroll = false, + preserveState = false, + viewTransition = false + } = {}) { + if (Object.keys(page2.deferredProps || {}).length) { + this.pendingDeferredProps = { + deferredProps: page2.deferredProps, + component: page2.component, + url: page2.url + }; + if (page2.initialDeferredProps === void 0) { + page2.initialDeferredProps = page2.deferredProps; + } + } + this.componentId = {}; + const componentId = this.componentId; + if (page2.clearHistory) { + history.clear(); + } + return this.resolve(page2.component, page2).then((component) => { + if (componentId !== this.componentId) { + return; + } + page2.rememberedState ?? (page2.rememberedState = {}); + const isServer3 = typeof window === "undefined"; + const location = !isServer3 ? window.location : new URL(page2.url); + const scrollRegions = !isServer3 && preserveScroll ? Scroll.getScrollRegions() : []; + replace = replace || isSameUrlWithoutHash(hrefToUrl(page2.url), location); + const pageForHistory = { ...page2, flash: {} }; + return new Promise( + (resolve) => replace ? history.replaceState(pageForHistory, resolve) : history.pushState(pageForHistory, resolve) + ).then(() => { + const isNewComponent = !this.isTheSame(page2); + if (!isNewComponent && Object.keys(page2.props.errors || {}).length > 0) { + viewTransition = false; + } + this.page = page2; + this.cleared = false; + if (this.hasOnceProps()) { + prefetchedRequests.updateCachedOncePropsFromCurrentPage(); + } + if (isNewComponent) { + this.fireEventsFor("newComponent"); + } + if (this.isFirstPageLoad) { + this.fireEventsFor("firstLoad"); + } + this.isFirstPageLoad = false; + if (this.historyQuotaExceeded) { + this.historyQuotaExceeded = false; + return; + } + return this.swap({ + component, + page: page2, + preserveState, + viewTransition + }).then(() => { + if (preserveScroll) { + window.requestAnimationFrame(() => Scroll.restoreScrollRegions(scrollRegions)); + } else { + Scroll.reset(); + } + if (this.pendingDeferredProps && this.pendingDeferredProps.component === page2.component && this.pendingDeferredProps.url === page2.url) { + eventHandler.fireInternalEvent("loadDeferredProps", this.pendingDeferredProps.deferredProps); + } + this.pendingDeferredProps = null; + if (!replace) { + fireNavigateEvent(page2); + } + }); + }); + }); + } + setQuietly(page2, { + preserveState = false + } = {}) { + return this.resolve(page2.component, page2).then((component) => { + this.page = page2; + this.cleared = false; + history.setCurrent(page2); + return this.swap({ component, page: page2, preserveState, viewTransition: false }); + }); + } + clear() { + this.cleared = true; + } + isCleared() { + return this.cleared; + } + get() { + return this.page; + } + getWithoutFlashData() { + return { ...this.page, flash: {} }; + } + hasOnceProps() { + return Object.keys(this.page.onceProps ?? {}).length > 0; + } + merge(data) { + this.page = { ...this.page, ...data }; + } + setPropsQuietly(props) { + this.page = { ...this.page, props }; + return this.resolve(this.page.component, this.page).then((component) => { + return this.swap({ component, page: this.page, preserveState: true, viewTransition: false }); + }); + } + setFlash(flash) { + this.page = { ...this.page, flash }; + this.onFlashCallback?.(flash); + } + setUrlHash(hash) { + if (!this.page.url.includes(hash)) { + this.page.url += hash; + } + } + remember(data) { + this.page.rememberedState = data; + } + swap({ + component, + page: page2, + preserveState, + viewTransition + }) { + const doSwap = () => this.swapComponent({ component, page: page2, preserveState }); + if (!viewTransition || !document?.startViewTransition) { + return doSwap(); + } + const viewTransitionCallback = typeof viewTransition === "boolean" ? () => null : viewTransition; + return new Promise((resolve) => { + const transitionResult = document.startViewTransition(() => doSwap().then(resolve)); + viewTransitionCallback(transitionResult); + }); + } + resolve(component, page2) { + return Promise.resolve(this.resolveComponent(component, page2)); + } + isTheSame(page2) { + return this.page.component === page2.component; + } + on(event, callback) { + this.listeners.push({ event, callback }); + return () => { + this.listeners = this.listeners.filter((listener) => listener.event !== event && listener.callback !== callback); + }; + } + fireEventsFor(event) { + this.listeners.filter((listener) => listener.event === event).forEach((listener) => listener.callback()); + } + mergeOncePropsIntoResponse(response, { force = false } = {}) { + Object.entries(response.onceProps ?? {}).forEach(([key, onceProp]) => { + const existingOnceProp = this.page.onceProps?.[key]; + if (existingOnceProp === void 0) { + return; + } + if (force || response.props[onceProp.prop] === void 0) { + response.props[onceProp.prop] = this.page.props[existingOnceProp.prop]; + response.onceProps[key].expiresAt = existingOnceProp.expiresAt; + } + }); + } +}; +var page = new CurrentPage(); + +// src/queue.ts +var Queue = class { + constructor() { + this.items = []; + this.processingPromise = null; + } + add(item) { + this.items.push(item); + return this.process(); + } + process() { + this.processingPromise ?? (this.processingPromise = this.processNext().finally(() => { + this.processingPromise = null; + })); + return this.processingPromise; + } + processNext() { + const next = this.items.shift(); + if (next) { + return Promise.resolve(next()).then(() => this.processNext()); + } + return Promise.resolve(); + } +}; + +// src/history.ts +var isServer2 = typeof window === "undefined"; +var queue = new Queue(); +var isChromeIOS = !isServer2 && /CriOS/.test(window.navigator.userAgent); +var History = class { + constructor() { + this.rememberedState = "rememberedState"; + this.scrollRegions = "scrollRegions"; + this.preserveUrl = false; + this.current = {}; + // We need initialState for `restore` + this.initialState = null; + } + remember(data, key) { + this.replaceState({ + ...page.getWithoutFlashData(), + rememberedState: { + ...page.get()?.rememberedState ?? {}, + [key]: data + } + }); + } + restore(key) { + if (!isServer2) { + return this.current[this.rememberedState]?.[key] !== void 0 ? this.current[this.rememberedState]?.[key] : this.initialState?.[this.rememberedState]?.[key]; + } + } + pushState(page2, cb = null) { + if (isServer2) { + return; + } + if (this.preserveUrl) { + cb && cb(); + return; + } + this.current = page2; + queue.add(() => { + return this.getPageData(page2).then((data) => { + const doPush = () => this.doPushState({ page: data }, page2.url).then(() => cb?.()); + if (isChromeIOS) { + return new Promise((resolve) => { + setTimeout(() => doPush().then(resolve)); + }); + } + return doPush(); + }); + }); + } + clonePageProps(page2) { + try { + structuredClone(page2.props); + return page2; + } catch { + return { + ...page2, + props: cloneDeep2(page2.props) + }; + } + } + getPageData(page2) { + const pageWithClonedProps = this.clonePageProps(page2); + return new Promise((resolve) => { + return page2.encryptHistory ? encryptHistory(pageWithClonedProps).then(resolve) : resolve(pageWithClonedProps); + }); + } + processQueue() { + return queue.process(); + } + decrypt(page2 = null) { + if (isServer2) { + return Promise.resolve(page2 ?? page.get()); + } + const pageData = page2 ?? window.history.state?.page; + return this.decryptPageData(pageData).then((data) => { + if (!data) { + throw new Error("Unable to decrypt history"); + } + if (this.initialState === null) { + this.initialState = data ?? void 0; + } else { + this.current = data ?? {}; + } + return data; + }); + } + decryptPageData(pageData) { + return pageData instanceof ArrayBuffer ? decryptHistory(pageData) : Promise.resolve(pageData); + } + saveScrollPositions(scrollRegions) { + queue.add(() => { + return Promise.resolve().then(() => { + if (!window.history.state?.page) { + return; + } + if (isEqual(this.getScrollRegions(), scrollRegions)) { + return; + } + return this.doReplaceState({ + page: window.history.state.page, + scrollRegions + }); + }); + }); + } + saveDocumentScrollPosition(scrollRegion) { + queue.add(() => { + return Promise.resolve().then(() => { + if (!window.history.state?.page) { + return; + } + if (isEqual(this.getDocumentScrollPosition(), scrollRegion)) { + return; + } + return this.doReplaceState({ + page: window.history.state.page, + documentScrollPosition: scrollRegion + }); + }); + }); + } + getScrollRegions() { + return window.history.state?.scrollRegions || []; + } + getDocumentScrollPosition() { + return window.history.state?.documentScrollPosition || { top: 0, left: 0 }; + } + replaceState(page2, cb = null) { + if (isEqual(this.current, page2)) { + cb && cb(); + return; + } + const { flash, ...pageWithoutFlash } = page2; + page.merge(pageWithoutFlash); + if (isServer2) { + return; + } + if (this.preserveUrl) { + cb && cb(); + return; + } + this.current = page2; + queue.add(() => { + return this.getPageData(page2).then((data) => { + const doReplace = () => this.doReplaceState({ page: data }, page2.url).then(() => cb?.()); + if (isChromeIOS) { + return new Promise((resolve) => { + setTimeout(() => doReplace().then(resolve)); + }); + } + return doReplace(); + }); + }); + } + isHistoryThrottleError(error) { + return error instanceof Error && error.name === "SecurityError" && (error.message.includes("history.pushState") || error.message.includes("history.replaceState")); + } + isQuotaExceededError(error) { + return error instanceof Error && error.name === "QuotaExceededError"; + } + withThrottleProtection(cb) { + return Promise.resolve().then(() => { + try { + return cb(); + } catch (error) { + if (!this.isHistoryThrottleError(error)) { + throw error; + } + console.error(error.message); + } + }); + } + doReplaceState(data, url) { + return this.withThrottleProtection(() => { + window.history.replaceState( + { + ...data, + scrollRegions: data.scrollRegions ?? window.history.state?.scrollRegions, + documentScrollPosition: data.documentScrollPosition ?? window.history.state?.documentScrollPosition + }, + "", + url + ); + }); + } + doPushState(data, url) { + return this.withThrottleProtection(() => { + try { + window.history.pushState(data, "", url); + } catch (error) { + if (!this.isQuotaExceededError(error)) { + throw error; + } + eventHandler.fireInternalEvent("historyQuotaExceeded", url); + } + }); + } + getState(key, defaultValue) { + return this.current?.[key] ?? defaultValue; + } + deleteState(key) { + if (this.current[key] !== void 0) { + delete this.current[key]; + this.replaceState(this.current); + } + } + clearInitialState(key) { + if (this.initialState && this.initialState[key] !== void 0) { + delete this.initialState[key]; + } + } + browserHasHistoryEntry() { + return !isServer2 && !!window.history.state?.page; + } + clear() { + SessionStorage.remove(historySessionStorageKeys.key); + SessionStorage.remove(historySessionStorageKeys.iv); + } + setCurrent(page2) { + this.current = page2; + } + isValidState(state) { + return !!state.page; + } + getAllState() { + return this.current; + } +}; +if (typeof window !== "undefined" && window.history.scrollRestoration) { + window.history.scrollRestoration = "manual"; +} +var history = new History(); + +// src/eventHandler.ts +var EventHandler = class { + constructor() { + this.internalListeners = []; + } + init() { + if (typeof window !== "undefined") { + window.addEventListener("popstate", this.handlePopstateEvent.bind(this)); + window.addEventListener("pageshow", this.handlePageshowEvent.bind(this)); + window.addEventListener("scroll", debounce(Scroll.onWindowScroll.bind(Scroll), 100), true); + } + if (typeof document !== "undefined") { + document.addEventListener("scroll", debounce(Scroll.onScroll.bind(Scroll), 100), true); + } + } + onGlobalEvent(type, callback) { + const listener = ((event) => { + const response = callback(event); + if (event.cancelable && !event.defaultPrevented && response === false) { + event.preventDefault(); + } + }); + return this.registerListener(`inertia:${type}`, listener); + } + on(event, callback) { + this.internalListeners.push({ event, listener: callback }); + return () => { + this.internalListeners = this.internalListeners.filter((listener) => listener.listener !== callback); + }; + } + onMissingHistoryItem() { + page.clear(); + this.fireInternalEvent("missingHistoryItem"); + } + fireInternalEvent(event, ...args) { + this.internalListeners.filter((listener) => listener.event === event).forEach((listener) => listener.listener(...args)); + } + registerListener(type, listener) { + document.addEventListener(type, listener); + return () => document.removeEventListener(type, listener); + } + // bfcache restores pages without firing `popstate`, so we use `pageshow` to + // re-validate encrypted history entries after `clearHistory` removed the keys. + // https://web.dev/articles/bfcache + handlePageshowEvent(event) { + if (event.persisted) { + history.decrypt().catch(() => this.onMissingHistoryItem()); + } + } + handlePopstateEvent(event) { + const state = event.state || null; + if (state === null) { + const url = hrefToUrl(page.get().url); + url.hash = window.location.hash; + history.replaceState({ ...page.getWithoutFlashData(), url: url.href }); + Scroll.reset(); + return; + } + if (!history.isValidState(state)) { + return this.onMissingHistoryItem(); + } + history.decrypt(state.page).then((data) => { + if (page.get().version !== data.version) { + this.onMissingHistoryItem(); + return; + } + router.cancelAll({ prefetch: false }); + page.setQuietly(data, { preserveState: false }).then(() => { + Scroll.restore(history.getScrollRegions()); + fireNavigateEvent(page.get()); + const pendingDeferred = {}; + const pageProps = page.get().props; + for (const [group, props] of Object.entries(data.initialDeferredProps ?? data.deferredProps ?? {})) { + const missing = props.filter((prop) => pageProps[prop] === void 0); + if (missing.length > 0) { + pendingDeferred[group] = missing; + } + } + if (Object.keys(pendingDeferred).length > 0) { + this.fireInternalEvent("loadDeferredProps", pendingDeferred); + } + }); + }).catch(() => { + this.onMissingHistoryItem(); + }); + } +}; +var eventHandler = new EventHandler(); + +// src/navigationType.ts +var NavigationType = class { + constructor() { + this.type = this.resolveType(); + } + resolveType() { + if (typeof window === "undefined") { + return "navigate"; + } + if (window.performance && window.performance.getEntriesByType && window.performance.getEntriesByType("navigation").length > 0) { + return window.performance.getEntriesByType("navigation")[0].type; + } + return "navigate"; + } + get() { + return this.type; + } + isBackForward() { + return this.type === "back_forward"; + } + isReload() { + return this.type === "reload"; + } +}; +var navigationType = new NavigationType(); + +// src/initialVisit.ts +var InitialVisit = class { + static handle() { + this.clearRememberedStateOnReload(); + const scenarios = [this.handleBackForward, this.handleLocation, this.handleDefault]; + scenarios.find((handler) => handler.bind(this)()); + } + static clearRememberedStateOnReload() { + if (navigationType.isReload()) { + history.deleteState(history.rememberedState); + history.clearInitialState(history.rememberedState); + } + } + static handleBackForward() { + if (!navigationType.isBackForward() || !history.browserHasHistoryEntry()) { + return false; + } + const scrollRegions = history.getScrollRegions(); + history.decrypt().then((data) => { + page.set(data, { preserveScroll: true, preserveState: true }).then(() => { + Scroll.restore(scrollRegions); + fireNavigateEvent(page.get()); + }); + }).catch(() => { + eventHandler.onMissingHistoryItem(); + }); + return true; + } + /** + * @link https://inertiajs.com/redirects#external-redirects + */ + static handleLocation() { + if (!SessionStorage.exists(SessionStorage.locationVisitKey)) { + return false; + } + const locationVisit = SessionStorage.get(SessionStorage.locationVisitKey) || {}; + SessionStorage.remove(SessionStorage.locationVisitKey); + if (typeof window !== "undefined") { + page.setUrlHash(window.location.hash); + } + history.decrypt(page.get()).then(() => { + const rememberedState = history.getState(history.rememberedState, {}); + const scrollRegions = history.getScrollRegions(); + page.remember(rememberedState); + page.set(page.get(), { + preserveScroll: locationVisit.preserveScroll, + preserveState: true + }).then(() => { + if (locationVisit.preserveScroll) { + Scroll.restore(scrollRegions); + } + fireNavigateEvent(page.get()); + }); + }).catch(() => { + eventHandler.onMissingHistoryItem(); + }); + return true; + } + static handleDefault() { + if (typeof window !== "undefined") { + page.setUrlHash(window.location.hash); + } + page.set(page.get(), { preserveScroll: true, preserveState: true }).then(() => { + if (navigationType.isReload()) { + Scroll.restore(history.getScrollRegions()); + } else { + Scroll.scrollToAnchor(); + } + const page2 = page.get(); + fireNavigateEvent(page2); + const flash = page2.flash; + if (Object.keys(flash).length > 0) { + queueMicrotask(() => fireFlashEvent(flash)); + } + }); + } +}; + +// src/poll.ts +var Poll = class { + constructor(interval, cb, options) { + this.id = null; + this.throttle = false; + this.keepAlive = false; + this.cbCount = 0; + this.keepAlive = options.keepAlive ?? false; + this.cb = cb; + this.interval = interval; + if (options.autoStart ?? true) { + this.start(); + } + } + stop() { + if (this.id) { + clearInterval(this.id); + } + } + start() { + if (typeof window === "undefined") { + return; + } + this.stop(); + this.id = window.setInterval(() => { + if (!this.throttle || this.cbCount % 10 === 0) { + this.cb(); + } + if (this.throttle) { + this.cbCount++; + } + }, this.interval); + } + isInBackground(hidden) { + this.throttle = this.keepAlive ? false : hidden; + if (this.throttle) { + this.cbCount = 0; + } + } +}; + +// src/polls.ts +var Polls = class { + constructor() { + this.polls = []; + this.setupVisibilityListener(); + } + add(interval, cb, options) { + const poll = new Poll(interval, cb, options); + this.polls.push(poll); + return { + stop: () => poll.stop(), + start: () => poll.start() + }; + } + clear() { + this.polls.forEach((poll) => poll.stop()); + this.polls = []; + } + setupVisibilityListener() { + if (typeof document === "undefined") { + return; + } + document.addEventListener( + "visibilitychange", + () => { + this.polls.forEach((poll) => poll.isInBackground(document.hidden)); + }, + false + ); + } +}; +var polls = new Polls(); + +// src/http.ts +import { client as precognitionClient } from "laravel-precognition"; + +// src/httpHandlers.ts +var HttpHandlers = class { + constructor() { + this.requestHandlers = []; + this.responseHandlers = []; + this.errorHandlers = []; + } + onRequest(handler) { + this.requestHandlers.push(handler); + return () => { + this.requestHandlers = this.requestHandlers.filter((h) => h !== handler); + }; + } + onResponse(handler) { + this.responseHandlers.push(handler); + return () => { + this.responseHandlers = this.responseHandlers.filter((h) => h !== handler); + }; + } + onError(handler) { + this.errorHandlers.push(handler); + return () => { + this.errorHandlers = this.errorHandlers.filter((h) => h !== handler); + }; + } + async processRequest(config2) { + let result = config2; + for (const handler of this.requestHandlers) { + result = await handler(result); + } + return result; + } + async processResponse(response) { + let result = response; + for (const handler of this.responseHandlers) { + result = await handler(result); + } + return result; + } + async processError(error) { + for (const handler of this.errorHandlers) { + await handler(error); + } + } +}; +var httpHandlers = new HttpHandlers(); + +// src/httpErrors.ts +var HttpResponseError = class extends Error { + constructor(message, response, url) { + super(url ? `${message} (${url})` : message); + this.name = "HttpResponseError"; + this.response = response; + this.url = url; + } +}; +var HttpCancelledError = class extends Error { + constructor(message = "Request was cancelled", url) { + super(url ? `${message} (${url})` : message); + this.name = "HttpCancelledError"; + this.url = url; + } +}; +var HttpNetworkError = class extends Error { + constructor(message, url, cause) { + super(url ? `${message} (${url})` : message); + this.code = "ERR_NETWORK"; + this.name = "HttpNetworkError"; + this.url = url; + this.cause = cause; + } +}; + +// src/xhrHttpClient.ts +function getCookie(name) { + const match = document.cookie.match(new RegExp("(^|;\\s*)(" + name + ")=([^;]*)")); + return match ? decodeURIComponent(match[3]) : null; +} +function parseHeaders(xhr) { + const headers = {}; + xhr.getAllResponseHeaders().split("\r\n").forEach((line) => { + const index = line.indexOf(":"); + if (index > 0) { + headers[line.slice(0, index).toLowerCase().trim()] = line.slice(index + 1).trim(); + } + }); + return headers; +} +function setHeaders(xhr, config2) { + if (!config2.headers) { + return; + } + const isFormData2 = config2.data instanceof FormData; + Object.entries(config2.headers).forEach(([key, value]) => { + if (key.toLowerCase() !== "content-type" || !isFormData2) { + xhr.setRequestHeader(key, String(value)); + } + }); +} +function buildUrlWithParams(url, params) { + if (!params || Object.keys(params).length === 0) { + return url; + } + const [urlWithParams] = mergeDataIntoQueryString("get", url, params); + return urlWithParams; +} +var XhrHttpClient = class { + constructor(options = {}) { + this.xsrfCookieName = options.xsrfCookieName ?? "XSRF-TOKEN"; + this.xsrfHeaderName = options.xsrfHeaderName ?? "X-XSRF-TOKEN"; + } + async request(config2) { + const processedConfig = await httpHandlers.processRequest(config2); + try { + const response = await this.doRequest(processedConfig); + return await httpHandlers.processResponse(response); + } catch (error) { + if (error instanceof HttpResponseError || error instanceof HttpNetworkError || error instanceof HttpCancelledError) { + await httpHandlers.processError(error); + } + throw error; + } + } + doRequest(config2) { + return new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest(); + const url = buildUrlWithParams(config2.url, config2.params); + xhr.open(config2.method.toUpperCase(), url, true); + const xsrfToken = getCookie(this.xsrfCookieName); + if (xsrfToken) { + xhr.setRequestHeader(this.xsrfHeaderName, xsrfToken); + } + let body = null; + if (config2.data !== null && config2.data !== void 0) { + if (config2.data instanceof FormData) { + body = config2.data; + } else if (typeof config2.data === "object") { + body = JSON.stringify(config2.data); + if (!config2.headers?.["Content-Type"] && !config2.headers?.["content-type"]) { + xhr.setRequestHeader("Content-Type", "application/json"); + } + } else { + body = String(config2.data); + } + } + setHeaders(xhr, config2); + if (config2.onUploadProgress) { + xhr.upload.onprogress = (event) => { + config2.onUploadProgress({ + progress: event.lengthComputable ? event.loaded / event.total : void 0, + loaded: event.loaded, + total: event.lengthComputable ? event.total : void 0 + }); + }; + } + if (config2.signal) { + config2.signal.addEventListener("abort", () => xhr.abort()); + } + xhr.onabort = () => reject(new HttpCancelledError("Request was cancelled", config2.url)); + xhr.onerror = () => reject(new HttpNetworkError("Network error", config2.url)); + xhr.onload = () => { + const response = { + status: xhr.status, + data: xhr.responseText, + headers: parseHeaders(xhr) + }; + if (xhr.status >= 400) { + reject(new HttpResponseError(`Request failed with status ${xhr.status}`, response, config2.url)); + } else { + resolve(response); + } + }; + xhr.send(body); + }); + } +}; +var xhrHttpClient = new XhrHttpClient(); + +// src/http.ts +var httpClient = xhrHttpClient; +function isHttpClientOptions(client) { + return !("request" in client); +} +var http = { + /** + * Get the current HTTP client + */ + getClient() { + return httpClient; + }, + /** + * Set the HTTP client to use for all Inertia requests + */ + setClient(clientOrOptions) { + if (!isHttpClientOptions(clientOrOptions)) { + httpClient = clientOrOptions; + return; + } + httpClient = new XhrHttpClient(clientOrOptions); + if (clientOrOptions.xsrfCookieName) { + precognitionClient.withXsrfCookieName(clientOrOptions.xsrfCookieName); + } + if (clientOrOptions.xsrfHeaderName) { + precognitionClient.withXsrfHeaderName(clientOrOptions.xsrfHeaderName); + } + }, + /** + * Register a request handler that runs before each request + */ + onRequest: httpHandlers.onRequest.bind(httpHandlers), + /** + * Register a response handler that runs after each successful response + */ + onResponse: httpHandlers.onResponse.bind(httpHandlers), + /** + * Register an error handler that runs when a request fails + */ + onError: httpHandlers.onError.bind(httpHandlers), + /** + * Process a request config through all registered request handlers. + * For use by custom HttpClient implementations. + */ + processRequest: httpHandlers.processRequest.bind(httpHandlers), + /** + * Process a response through all registered response handlers. + * For use by custom HttpClient implementations. + */ + processResponse: httpHandlers.processResponse.bind(httpHandlers), + /** + * Process an error through all registered error handlers. + * For use by custom HttpClient implementations. + */ + processError: httpHandlers.processError.bind(httpHandlers) +}; + +// src/requestParams.ts +var RequestParams = class _RequestParams { + constructor(params) { + this.callbacks = []; + if (!params.prefetch) { + this.params = params; + } else { + const wrappedCallbacks = { + onBefore: this.wrapCallback(params, "onBefore"), + onBeforeUpdate: this.wrapCallback(params, "onBeforeUpdate"), + onStart: this.wrapCallback(params, "onStart"), + onProgress: this.wrapCallback(params, "onProgress"), + onFinish: this.wrapCallback(params, "onFinish"), + onCancel: this.wrapCallback(params, "onCancel"), + onSuccess: this.wrapCallback(params, "onSuccess"), + onError: this.wrapCallback(params, "onError"), + onHttpException: this.wrapCallback(params, "onHttpException"), + onNetworkError: this.wrapCallback(params, "onNetworkError"), + onFlash: this.wrapCallback(params, "onFlash"), + onCancelToken: this.wrapCallback(params, "onCancelToken"), + onPrefetched: this.wrapCallback(params, "onPrefetched"), + onPrefetching: this.wrapCallback(params, "onPrefetching") + }; + this.params = { + ...params, + ...wrappedCallbacks, + onPrefetchResponse: params.onPrefetchResponse || (() => { + }), + onPrefetchError: params.onPrefetchError || (() => { + }) + }; + } + } + static create(params) { + return new _RequestParams(params); + } + data() { + return this.params.method === "get" ? null : this.params.data; + } + queryParams() { + return this.params.method === "get" ? this.params.data : {}; + } + isPartial() { + return this.params.only.length > 0 || this.params.except.length > 0 || this.params.reset.length > 0; + } + isPrefetch() { + return this.params.prefetch === true; + } + isDeferredPropsRequest() { + return this.params.deferredProps === true; + } + onCancelToken(cb) { + this.params.onCancelToken({ + cancel: cb + }); + } + markAsFinished() { + this.params.completed = true; + this.params.cancelled = false; + this.params.interrupted = false; + } + markAsCancelled({ cancelled = true, interrupted = false }) { + this.params.onCancel(); + this.params.completed = false; + this.params.cancelled = cancelled; + this.params.interrupted = interrupted; + } + wasCancelledAtAll() { + return this.params.cancelled || this.params.interrupted; + } + onFinish() { + this.params.onFinish(this.params); + } + onStart() { + this.params.onStart(this.params); + } + onPrefetching() { + this.params.onPrefetching(this.params); + } + onPrefetchResponse(response) { + if (this.params.onPrefetchResponse) { + this.params.onPrefetchResponse(response); + } + } + onPrefetchError(error) { + if (this.params.onPrefetchError) { + this.params.onPrefetchError(error); + } + } + all() { + return this.params; + } + headers() { + const headers = { + ...this.params.headers + }; + if (this.isPartial()) { + headers["X-Inertia-Partial-Component"] = page.get().component; + } + const only = this.params.only.concat(this.params.reset); + if (only.length > 0) { + headers["X-Inertia-Partial-Data"] = only.join(","); + } + if (this.params.except.length > 0) { + headers["X-Inertia-Partial-Except"] = this.params.except.join(","); + } + if (this.params.reset.length > 0) { + headers["X-Inertia-Reset"] = this.params.reset.join(","); + } + if (this.params.errorBag && this.params.errorBag.length > 0) { + headers["X-Inertia-Error-Bag"] = this.params.errorBag; + } + return headers; + } + setPreserveOptions(page2) { + this.params.preserveScroll = _RequestParams.resolvePreserveOption(this.params.preserveScroll, page2); + this.params.preserveState = _RequestParams.resolvePreserveOption(this.params.preserveState, page2); + } + runCallbacks() { + this.callbacks.forEach(({ name, args }) => { + this.params[name](...args); + }); + } + merge(toMerge) { + this.params = { + ...this.params, + ...toMerge + }; + } + wrapCallback(params, name) { + return (...args) => { + this.recordCallback(name, args); + params[name](...args); + }; + } + recordCallback(name, args) { + this.callbacks.push({ name, args }); + } + static resolvePreserveOption(value, page2) { + if (typeof value === "function") { + return value(page2); + } + if (value === "errors") { + return Object.keys(page2.props.errors || {}).length > 0; + } + return value; + } +}; + +// src/response.ts +import { get as get2, isEqual as isEqual2, set as set3 } from "lodash-es"; + +// src/dialog.ts +var dialog_default = { + createIframeAndPage(html) { + if (typeof html === "object") { + html = `All Inertia requests must receive a valid Inertia response, however a plain JSON response was received.
${JSON.stringify( + html + )}`; + } + const page2 = document.createElement("html"); + page2.innerHTML = html; + page2.querySelectorAll("a").forEach((a) => a.setAttribute("target", "_top")); + const iframe = document.createElement("iframe"); + iframe.style.backgroundColor = "white"; + iframe.style.borderRadius = "5px"; + iframe.style.width = "100%"; + iframe.style.height = "100%"; + return { iframe, page: page2 }; + }, + show(html) { + const { iframe, page: page2 } = this.createIframeAndPage(html); + iframe.style.boxSizing = "border-box"; + iframe.style.display = "block"; + const dialog = document.createElement("dialog"); + dialog.id = "inertia-error-dialog"; + Object.assign(dialog.style, { + width: "calc(100vw - 100px)", + height: "calc(100vh - 100px)", + padding: "0", + margin: "auto", + border: "none", + backgroundColor: "transparent" + }); + const dialogStyleElement = document.createElement("style"); + dialogStyleElement.textContent = ` + dialog#inertia-error-dialog::backdrop { + background-color: rgba(0, 0, 0, 0.6); + } + + dialog#inertia-error-dialog:focus { + outline: none; + } + `; + document.head.appendChild(dialogStyleElement); + dialog.addEventListener("click", (event) => { + if (event.target === dialog) { + dialog.close(); + } + }); + dialog.addEventListener("close", () => { + dialogStyleElement.remove(); + dialog.remove(); + }); + dialog.appendChild(iframe); + document.body.prepend(dialog); + dialog.showModal(); + dialog.focus(); + if (!iframe.contentWindow) { + throw new Error("iframe not yet ready."); + } + iframe.contentWindow.document.open(); + iframe.contentWindow.document.write(page2.outerHTML); + iframe.contentWindow.document.close(); + } +}; + +// src/response.ts +var queue2 = new Queue(); +var Response = class _Response { + constructor(requestParams, response, originatingPage) { + this.requestParams = requestParams; + this.response = response; + this.originatingPage = originatingPage; + this.wasPrefetched = false; + } + static create(params, response, originatingPage) { + return new _Response(params, response, originatingPage); + } + async handlePrefetch() { + if (isSameUrlWithoutHash(this.requestParams.all().url, window.location)) { + this.handle(); + } + } + async handle() { + return queue2.add(() => this.process()); + } + async process() { + if (this.requestParams.all().prefetch) { + this.wasPrefetched = true; + this.requestParams.all().prefetch = false; + this.requestParams.all().onPrefetched(this.response, this.requestParams.all()); + firePrefetchedEvent(this.response, this.requestParams.all()); + return Promise.resolve(); + } + this.requestParams.runCallbacks(); + if (!this.isInertiaResponse()) { + return this.handleNonInertiaResponse(); + } + await history.processQueue(); + history.preserveUrl = this.requestParams.all().preserveUrl; + const previousFlash = page.get().flash; + await this.setPage(); + const errors = page.get().props.errors || {}; + if (Object.keys(errors).length > 0) { + const scopedErrors = this.getScopedErrors(errors); + fireErrorEvent(scopedErrors); + return this.requestParams.all().onError(scopedErrors); + } + router.flushByCacheTags(this.requestParams.all().invalidateCacheTags || []); + if (!this.wasPrefetched) { + router.flush(page.get().url); + } + const { flash } = page.get(); + if (Object.keys(flash).length > 0 && (!this.requestParams.isPartial() || !isEqual2(flash, previousFlash))) { + fireFlashEvent(flash); + this.requestParams.all().onFlash(flash); + } + fireSuccessEvent(page.get()); + await this.requestParams.all().onSuccess(page.get()); + history.preserveUrl = false; + } + mergeParams(params) { + this.requestParams.merge(params); + } + getPageResponse() { + const data = this.getDataFromResponse(this.response.data); + if (typeof data === "object") { + return this.response.data = { ...data, flash: data.flash ?? {} }; + } + return this.response.data = data; + } + async handleNonInertiaResponse() { + if (this.isLocationVisit()) { + const locationUrl = hrefToUrl(this.getHeader("x-inertia-location")); + setHashIfSameUrl(this.requestParams.all().url, locationUrl); + return this.locationVisit(locationUrl); + } + const response = { + ...this.response, + data: this.getDataFromResponse(this.response.data) + }; + if (this.requestParams.all().onHttpException(response) === false) { + return; + } + if (fireHttpExceptionEvent(response)) { + return dialog_default.show(response.data); + } + } + isInertiaResponse() { + return this.hasHeader("x-inertia"); + } + hasStatus(status2) { + return this.response.status === status2; + } + getHeader(header) { + return this.response.headers[header]; + } + hasHeader(header) { + return this.getHeader(header) !== void 0; + } + isLocationVisit() { + return this.hasStatus(409) && this.hasHeader("x-inertia-location"); + } + /** + * @link https://inertiajs.com/redirects#external-redirects + */ + locationVisit(url) { + try { + SessionStorage.set(SessionStorage.locationVisitKey, { + preserveScroll: this.requestParams.all().preserveScroll === true + }); + if (typeof window === "undefined") { + return; + } + if (isSameUrlWithoutHash(window.location, url)) { + window.location.reload(); + } else { + window.location.href = url.href; + } + } catch (error) { + return false; + } + } + async setPage() { + const pageResponse = this.getPageResponse(); + if (!this.shouldSetPage(pageResponse)) { + return Promise.resolve(); + } + this.mergeProps(pageResponse); + page.mergeOncePropsIntoResponse(pageResponse); + this.preserveEqualProps(pageResponse); + await this.setRememberedState(pageResponse); + this.requestParams.setPreserveOptions(pageResponse); + pageResponse.url = history.preserveUrl ? page.get().url : this.pageUrl(pageResponse); + this.requestParams.all().onBeforeUpdate(pageResponse); + fireBeforeUpdateEvent(pageResponse); + return page.set(pageResponse, { + replace: this.requestParams.all().replace, + preserveScroll: this.requestParams.all().preserveScroll, + preserveState: this.requestParams.all().preserveState, + viewTransition: this.requestParams.all().viewTransition + }); + } + getDataFromResponse(response) { + if (typeof response !== "string") { + return response; + } + try { + return JSON.parse(response); + } catch (error) { + return response; + } + } + shouldSetPage(pageResponse) { + if (!this.requestParams.all().async) { + return true; + } + if (this.originatingPage.component !== pageResponse.component) { + return true; + } + if (this.originatingPage.component !== page.get().component) { + return false; + } + const originatingUrl = hrefToUrl(this.originatingPage.url); + const currentPageUrl = hrefToUrl(page.get().url); + return originatingUrl.origin === currentPageUrl.origin && originatingUrl.pathname === currentPageUrl.pathname; + } + pageUrl(pageResponse) { + const responseUrl = hrefToUrl(pageResponse.url); + setHashIfSameUrl(this.requestParams.all().url, responseUrl); + return responseUrl.pathname + responseUrl.search + responseUrl.hash; + } + preserveEqualProps(pageResponse) { + if (pageResponse.component !== page.get().component) { + return; + } + const currentPageProps = page.get().props; + Object.entries(pageResponse.props).forEach(([key, value]) => { + if (isEqual2(value, currentPageProps[key])) { + pageResponse.props[key] = currentPageProps[key]; + } + }); + } + mergeProps(pageResponse) { + if (!this.requestParams.isPartial() || pageResponse.component !== page.get().component) { + return; + } + const propsToAppend = pageResponse.mergeProps || []; + const propsToPrepend = pageResponse.prependProps || []; + const propsToDeepMerge = pageResponse.deepMergeProps || []; + const matchPropsOn = pageResponse.matchPropsOn || []; + const mergeProp = (prop, shouldAppend) => { + const currentProp = get2(page.get().props, prop); + const incomingProp = get2(pageResponse.props, prop); + if (Array.isArray(incomingProp)) { + const newArray = this.mergeOrMatchItems( + currentProp || [], + incomingProp, + prop, + matchPropsOn, + shouldAppend + ); + set3(pageResponse.props, prop, newArray); + } else if (typeof incomingProp === "object" && incomingProp !== null) { + const newObject = { + ...currentProp || {}, + ...incomingProp + }; + set3(pageResponse.props, prop, newObject); + } + }; + propsToAppend.forEach((prop) => mergeProp(prop, true)); + propsToPrepend.forEach((prop) => mergeProp(prop, false)); + propsToDeepMerge.forEach((prop) => { + const currentProp = page.get().props[prop]; + const incomingProp = pageResponse.props[prop]; + const deepMerge = (target, source, matchProp) => { + if (Array.isArray(source)) { + return this.mergeOrMatchItems(target, source, matchProp, matchPropsOn); + } + if (typeof source === "object" && source !== null) { + return Object.keys(source).reduce( + (acc, key) => { + acc[key] = deepMerge(target ? target[key] : void 0, source[key], `${matchProp}.${key}`); + return acc; + }, + { ...target } + ); + } + return source; + }; + pageResponse.props[prop] = deepMerge(currentProp, incomingProp, prop); + }); + pageResponse.props = { ...page.get().props, ...pageResponse.props }; + if (this.shouldPreserveErrors(pageResponse)) { + pageResponse.props.errors = page.get().props.errors; + } + if (page.get().scrollProps) { + pageResponse.scrollProps = { + ...page.get().scrollProps || {}, + ...pageResponse.scrollProps || {} + }; + } + if (page.hasOnceProps()) { + pageResponse.onceProps = { + ...page.get().onceProps || {}, + ...pageResponse.onceProps || {} + }; + } + pageResponse.flash = { + ...page.get().flash, + ...this.requestParams.isDeferredPropsRequest() ? {} : pageResponse.flash + }; + const currentOriginalDeferred = page.get().initialDeferredProps; + if (currentOriginalDeferred && Object.keys(currentOriginalDeferred).length > 0) { + pageResponse.initialDeferredProps = currentOriginalDeferred; + } + } + /** + * By default, the Laravel adapter shares validation errors via Inertia::always(), + * so responses always include errors, even when empty. Components like + * InfiniteScroll and WhenVisible, as well as loading deferred props, + * perform async requests that should practically never reset errors. + */ + shouldPreserveErrors(pageResponse) { + if (!this.requestParams.all().preserveErrors) { + return false; + } + const currentErrors = page.get().props.errors; + if (!currentErrors || Object.keys(currentErrors).length === 0) { + return false; + } + const responseErrors = pageResponse.props.errors; + if (responseErrors && Object.keys(responseErrors).length > 0) { + return false; + } + return true; + } + mergeOrMatchItems(existingItems, newItems, matchProp, matchPropsOn, shouldAppend = true) { + const items = Array.isArray(existingItems) ? existingItems : []; + const matchingKey = matchPropsOn.find((key) => { + const keyPath = key.split(".").slice(0, -1).join("."); + return keyPath === matchProp; + }); + if (!matchingKey) { + return shouldAppend ? [...items, ...newItems] : [...newItems, ...items]; + } + const uniqueProperty = matchingKey.split(".").pop() || ""; + const newItemsMap = /* @__PURE__ */ new Map(); + newItems.forEach((item) => { + if (this.hasUniqueProperty(item, uniqueProperty)) { + newItemsMap.set(item[uniqueProperty], item); + } + }); + return shouldAppend ? this.appendWithMatching(items, newItems, newItemsMap, uniqueProperty) : this.prependWithMatching(items, newItems, newItemsMap, uniqueProperty); + } + appendWithMatching(existingItems, newItems, newItemsMap, uniqueProperty) { + const updatedExisting = existingItems.map((item) => { + if (this.hasUniqueProperty(item, uniqueProperty) && newItemsMap.has(item[uniqueProperty])) { + return newItemsMap.get(item[uniqueProperty]); + } + return item; + }); + const newItemsToAdd = newItems.filter((item) => { + if (!this.hasUniqueProperty(item, uniqueProperty)) { + return true; + } + return !existingItems.some( + (existing) => this.hasUniqueProperty(existing, uniqueProperty) && existing[uniqueProperty] === item[uniqueProperty] + ); + }); + return [...updatedExisting, ...newItemsToAdd]; + } + prependWithMatching(existingItems, newItems, newItemsMap, uniqueProperty) { + const untouchedExisting = existingItems.filter((item) => { + if (this.hasUniqueProperty(item, uniqueProperty)) { + return !newItemsMap.has(item[uniqueProperty]); + } + return true; + }); + return [...newItems, ...untouchedExisting]; + } + hasUniqueProperty(item, property) { + return item && typeof item === "object" && property in item; + } + async setRememberedState(pageResponse) { + const rememberedState = await history.getState(history.rememberedState, {}); + if (this.requestParams.all().preserveState && rememberedState && pageResponse.component === page.get().component) { + pageResponse.rememberedState = rememberedState; + } + } + getScopedErrors(errors) { + if (!this.requestParams.all().errorBag) { + return errors; + } + return errors[this.requestParams.all().errorBag || ""] || {}; + } +}; + +// src/request.ts +var Request = class _Request { + constructor(params, page2) { + this.page = page2; + this.requestHasFinished = false; + this.requestParams = RequestParams.create(params); + this.cancelToken = new AbortController(); + } + static create(params, page2) { + return new _Request(params, page2); + } + isPrefetch() { + return this.requestParams.isPrefetch(); + } + async send() { + this.requestParams.onCancelToken(() => this.cancel({ cancelled: true })); + fireStartEvent(this.requestParams.all()); + this.requestParams.onStart(); + if (this.requestParams.all().prefetch) { + this.requestParams.onPrefetching(); + firePrefetchingEvent(this.requestParams.all()); + } + const originallyPrefetch = this.requestParams.all().prefetch; + return http.getClient().request({ + method: this.requestParams.all().method, + url: urlWithoutHash(this.requestParams.all().url).href, + data: this.requestParams.data(), + signal: this.cancelToken.signal, + headers: this.getHeaders(), + onUploadProgress: this.onProgress.bind(this) + }).then((response) => { + this.response = Response.create(this.requestParams, response, this.page); + return this.response.handle(); + }).catch((error) => { + if (error instanceof HttpResponseError) { + this.response = Response.create(this.requestParams, error.response, this.page); + return this.response.handle(); + } + return Promise.reject(error); + }).catch((error) => { + if (error instanceof HttpCancelledError) { + return; + } + if (this.requestParams.all().onNetworkError(error) === false) { + return; + } + if (fireNetworkErrorEvent(error)) { + if (originallyPrefetch) { + this.requestParams.onPrefetchError(error); + } + return Promise.reject(error); + } + }).finally(() => { + this.finish(); + if (originallyPrefetch && this.response) { + this.requestParams.onPrefetchResponse(this.response); + } + }); + } + finish() { + if (this.requestParams.wasCancelledAtAll()) { + return; + } + this.requestParams.markAsFinished(); + this.fireFinishEvents(); + } + fireFinishEvents() { + if (this.requestHasFinished) { + return; + } + this.requestHasFinished = true; + fireFinishEvent(this.requestParams.all()); + this.requestParams.onFinish(); + } + cancel({ cancelled = false, interrupted = false }) { + if (this.requestHasFinished) { + return; + } + this.cancelToken.abort(); + this.requestParams.markAsCancelled({ cancelled, interrupted }); + this.fireFinishEvents(); + } + onProgress(progress3) { + if (this.requestParams.data() instanceof FormData) { + progress3.percentage = progress3.progress ? Math.round(progress3.progress * 100) : 0; + fireProgressEvent(progress3); + this.requestParams.all().onProgress(progress3); + } + } + getHeaders() { + const headers = { + ...this.requestParams.headers(), + Accept: "text/html, application/xhtml+xml", + "X-Requested-With": "XMLHttpRequest", + "X-Inertia": true + }; + const page2 = page.get(); + if (page2.version) { + headers["X-Inertia-Version"] = page2.version; + } + const onceProps = Object.entries(page2.onceProps || {}).filter(([, onceProp]) => { + if (page2.props[onceProp.prop] === void 0) { + return false; + } + return !onceProp.expiresAt || onceProp.expiresAt > Date.now(); + }).map(([key]) => key); + if (onceProps.length > 0) { + headers["X-Inertia-Except-Once-Props"] = onceProps.join(","); + } + return headers; + } +}; + +// src/requestStream.ts +var RequestStream = class { + constructor({ maxConcurrent, interruptible }) { + this.requests = []; + this.maxConcurrent = maxConcurrent; + this.interruptible = interruptible; + } + send(request) { + this.requests.push(request); + request.send().then(() => { + this.requests = this.requests.filter((r) => r !== request); + }); + } + interruptInFlight() { + this.cancel({ interrupted: true }, false); + } + cancelInFlight({ prefetch = true } = {}) { + this.requests.filter((request) => prefetch || !request.isPrefetch()).forEach((request) => request.cancel({ cancelled: true })); + } + cancel({ cancelled = false, interrupted = false } = {}, force = false) { + if (!force && !this.shouldCancel()) { + return; + } + const request = this.requests.shift(); + request?.cancel({ cancelled, interrupted }); + } + shouldCancel() { + return this.interruptible && this.requests.length >= this.maxConcurrent; + } +}; + +// src/router.ts +var Router = class { + constructor() { + this.syncRequestStream = new RequestStream({ + maxConcurrent: 1, + interruptible: true + }); + this.asyncRequestStream = new RequestStream({ + maxConcurrent: Infinity, + interruptible: false + }); + this.clientVisitQueue = new Queue(); + this.pendingOptimisticCallback = null; + } + init({ + initialPage, + resolveComponent, + swapComponent, + onFlash + }) { + page.init({ + initialPage, + resolveComponent, + swapComponent, + onFlash + }); + InitialVisit.handle(); + eventHandler.init(); + eventHandler.on("missingHistoryItem", () => { + if (typeof window !== "undefined") { + this.visit(window.location.href, { preserveState: true, preserveScroll: true, replace: true }); + } + }); + eventHandler.on("loadDeferredProps", (deferredProps) => { + this.loadDeferredProps(deferredProps); + }); + eventHandler.on("historyQuotaExceeded", (url) => { + window.location.href = url; + }); + } + optimistic(callback) { + this.pendingOptimisticCallback = callback; + return this; + } + get(url, data = {}, options = {}) { + return this.visit(url, { ...options, method: "get", data }); + } + post(url, data = {}, options = {}) { + return this.visit(url, { preserveState: true, ...options, method: "post", data }); + } + put(url, data = {}, options = {}) { + return this.visit(url, { preserveState: true, ...options, method: "put", data }); + } + patch(url, data = {}, options = {}) { + return this.visit(url, { preserveState: true, ...options, method: "patch", data }); + } + delete(url, options = {}) { + return this.visit(url, { preserveState: true, ...options, method: "delete" }); + } + reload(options = {}) { + return this.doReload(options); + } + doReload(options = {}) { + if (typeof window === "undefined") { + return; + } + return this.visit(window.location.href, { + ...options, + preserveScroll: true, + preserveState: true, + async: true, + headers: { + ...options.headers || {}, + "Cache-Control": "no-cache" + } + }); + } + remember(data, key = "default") { + history.remember(data, key); + } + restore(key = "default") { + return history.restore(key); + } + on(type, callback) { + if (typeof window === "undefined") { + return () => { + }; + } + return eventHandler.onGlobalEvent(type, callback); + } + /** + * @deprecated Use cancelAll() instead. + */ + cancel() { + this.syncRequestStream.cancelInFlight(); + } + cancelAll({ async = true, prefetch = true, sync = true } = {}) { + if (async) { + this.asyncRequestStream.cancelInFlight({ prefetch }); + } + if (sync) { + this.syncRequestStream.cancelInFlight(); + } + } + poll(interval, requestOptions = {}, options = {}) { + return polls.add(interval, () => this.reload({ preserveErrors: true, ...requestOptions }), { + autoStart: options.autoStart ?? true, + keepAlive: options.keepAlive ?? false + }); + } + visit(href, options = {}) { + const visit = this.getPendingVisit(href, { + ...options, + showProgress: options.showProgress ?? !options.async + }); + const events = this.getVisitEvents(options); + if (events.onBefore(visit) === false || !fireBeforeEvent(visit)) { + this.pendingOptimisticCallback = null; + return; + } + const currentPageUrl = hrefToUrl(page.get().url); + const isPartialReload = visit.only.length > 0 || visit.except.length > 0 || visit.reset.length > 0; + const isSamePage = isPartialReload ? isSameUrlWithoutQueryOrHash(visit.url, currentPageUrl) : isSameUrlWithoutHash(visit.url, currentPageUrl); + if (!isSamePage) { + this.asyncRequestStream.cancelInFlight({ prefetch: false }); + } + if (!visit.async) { + this.syncRequestStream.interruptInFlight(); + } + options.optimistic = options.optimistic ?? this.pendingOptimisticCallback ?? void 0; + this.pendingOptimisticCallback = null; + if (options.optimistic) { + this.applyOptimisticUpdate(options.optimistic, events); + } + if (!page.isCleared() && !visit.preserveUrl) { + Scroll.save(); + } + const requestParams = { + ...visit, + ...events + }; + const prefetched = prefetchedRequests.get(requestParams); + if (prefetched) { + progress.reveal(prefetched.inFlight); + prefetchedRequests.use(prefetched, requestParams); + } else { + progress.reveal(true); + const requestStream = visit.async ? this.asyncRequestStream : this.syncRequestStream; + requestStream.send(Request.create(requestParams, page.get())); + } + } + getCached(href, options = {}) { + return prefetchedRequests.findCached(this.getPrefetchParams(href, options)); + } + flush(href, options = {}) { + prefetchedRequests.remove(this.getPrefetchParams(href, options)); + } + flushAll() { + prefetchedRequests.removeAll(); + } + flushByCacheTags(tags) { + prefetchedRequests.removeByTags(Array.isArray(tags) ? tags : [tags]); + } + getPrefetching(href, options = {}) { + return prefetchedRequests.findInFlight(this.getPrefetchParams(href, options)); + } + prefetch(href, options = {}, prefetchOptions = {}) { + const method = options.method ?? (isUrlMethodPair(href) ? href.method : "get"); + if (method !== "get") { + throw new Error("Prefetch requests must use the GET method"); + } + const visit = this.getPendingVisit(href, { + ...options, + async: true, + showProgress: false, + prefetch: true, + viewTransition: false + }); + const visitUrl = visit.url.origin + visit.url.pathname + visit.url.search; + const currentUrl = window.location.origin + window.location.pathname + window.location.search; + if (visitUrl === currentUrl) { + return; + } + const events = this.getVisitEvents(options); + if (events.onBefore(visit) === false || !fireBeforeEvent(visit)) { + return; + } + progress.hide(); + this.asyncRequestStream.interruptInFlight(); + const requestParams = { + ...visit, + ...events + }; + const ensureCurrentPageIsSet = () => { + return new Promise((resolve) => { + const checkIfPageIsDefined = () => { + if (page.get()) { + resolve(); + } else { + setTimeout(checkIfPageIsDefined, 50); + } + }; + checkIfPageIsDefined(); + }); + }; + ensureCurrentPageIsSet().then(() => { + prefetchedRequests.add( + requestParams, + (params) => { + this.asyncRequestStream.send(Request.create(params, page.get())); + }, + { + cacheFor: config.get("prefetch.cacheFor"), + cacheTags: [], + ...prefetchOptions + } + ); + }); + } + clearHistory() { + history.clear(); + } + decryptHistory() { + return history.decrypt(); + } + resolveComponent(component, page2) { + return page.resolve(component, page2); + } + replace(params) { + this.clientVisit(params, { replace: true }); + } + replaceProp(name, value, options) { + this.replace({ + preserveScroll: true, + preserveState: true, + props(currentProps) { + const newValue = typeof value === "function" ? value(get3(currentProps, name), currentProps) : value; + return set4(cloneDeep3(currentProps), name, newValue); + }, + ...options || {} + }); + } + appendToProp(name, value, options) { + this.replaceProp( + name, + (currentValue, currentProps) => { + const newValue = typeof value === "function" ? value(currentValue, currentProps) : value; + if (!Array.isArray(currentValue)) { + currentValue = currentValue !== void 0 ? [currentValue] : []; + } + return [...currentValue, newValue]; + }, + options + ); + } + prependToProp(name, value, options) { + this.replaceProp( + name, + (currentValue, currentProps) => { + const newValue = typeof value === "function" ? value(currentValue, currentProps) : value; + if (!Array.isArray(currentValue)) { + currentValue = currentValue !== void 0 ? [currentValue] : []; + } + return [newValue, ...currentValue]; + }, + options + ); + } + push(params) { + this.clientVisit(params); + } + flash(keyOrData, value) { + const current = page.get().flash; + let flash; + if (typeof keyOrData === "function") { + flash = keyOrData(current); + } else if (typeof keyOrData === "string") { + flash = { ...current, [keyOrData]: value }; + } else if (keyOrData && Object.keys(keyOrData).length) { + flash = { ...current, ...keyOrData }; + } else { + return; + } + page.setFlash(flash); + if (Object.keys(flash).length) { + fireFlashEvent(flash); + } + } + clientVisit(params, { replace = false } = {}) { + this.clientVisitQueue.add(() => this.performClientVisit(params, { replace })); + } + performClientVisit(params, { replace = false } = {}) { + const current = page.get(); + const onceProps = typeof params.props === "function" ? Object.fromEntries( + Object.values(current.onceProps ?? {}).map((onceProp) => [onceProp.prop, current.props[onceProp.prop]]) + ) : {}; + const props = typeof params.props === "function" ? params.props(current.props, onceProps) : params.props ?? current.props; + const flash = typeof params.flash === "function" ? params.flash(current.flash) : params.flash; + const { viewTransition, onError, onFinish, onFlash, onSuccess, ...pageParams } = params; + const page2 = { + ...current, + ...pageParams, + flash: flash ?? {}, + props + }; + const preserveScroll = RequestParams.resolvePreserveOption(params.preserveScroll ?? false, page2); + const preserveState = RequestParams.resolvePreserveOption(params.preserveState ?? false, page2); + return page.set(page2, { + replace, + preserveScroll, + preserveState, + viewTransition + }).then(() => { + const currentFlash = page.get().flash; + if (Object.keys(currentFlash).length > 0) { + fireFlashEvent(currentFlash); + onFlash?.(currentFlash); + } + const errors = page.get().props.errors || {}; + if (Object.keys(errors).length === 0) { + onSuccess?.(page.get()); + return; + } + const scopedErrors = params.errorBag ? errors[params.errorBag || ""] || {} : errors; + onError?.(scopedErrors); + }).finally(() => onFinish?.(params)); + } + getPrefetchParams(href, options) { + return { + ...this.getPendingVisit(href, { + ...options, + async: true, + showProgress: false, + prefetch: true, + viewTransition: false + }), + ...this.getVisitEvents(options) + }; + } + getPendingVisit(href, options) { + if (isUrlMethodPair(href)) { + const urlMethodPair = href; + href = urlMethodPair.url; + options.method = options.method ?? urlMethodPair.method; + } + const defaultVisitOptionsCallback = config.get("visitOptions"); + const configuredOptions = defaultVisitOptionsCallback ? defaultVisitOptionsCallback(href.toString(), cloneDeep3(options)) || {} : {}; + const mergedOptions = { + method: "get", + data: {}, + replace: false, + preserveScroll: false, + preserveState: false, + only: [], + except: [], + headers: {}, + errorBag: "", + forceFormData: false, + queryStringArrayFormat: "brackets", + async: false, + showProgress: true, + fresh: false, + reset: [], + preserveUrl: false, + preserveErrors: false, + prefetch: false, + invalidateCacheTags: [], + viewTransition: false, + ...options, + ...configuredOptions + }; + const [url, _data] = transformUrlAndData( + href, + mergedOptions.data, + mergedOptions.method, + mergedOptions.forceFormData, + mergedOptions.queryStringArrayFormat + ); + const visit = { + cancelled: false, + completed: false, + interrupted: false, + ...mergedOptions, + url, + data: _data + }; + if (visit.prefetch) { + visit.headers["Purpose"] = "prefetch"; + } + return visit; + } + getVisitEvents(options) { + return { + onCancelToken: options.onCancelToken || (() => { + }), + onBefore: options.onBefore || (() => { + }), + onBeforeUpdate: options.onBeforeUpdate || (() => { + }), + onStart: options.onStart || (() => { + }), + onProgress: options.onProgress || (() => { + }), + onFinish: options.onFinish || (() => { + }), + onCancel: options.onCancel || (() => { + }), + onSuccess: options.onSuccess || (() => { + }), + onError: options.onError || (() => { + }), + onHttpException: options.onHttpException || (() => { + }), + onNetworkError: options.onNetworkError || (() => { + }), + onFlash: options.onFlash || (() => { + }), + onPrefetched: options.onPrefetched || (() => { + }), + onPrefetching: options.onPrefetching || (() => { + }) + }; + } + applyOptimisticUpdate(optimistic, events) { + const optimisticProps = optimistic(cloneDeep3(page.get().props)); + if (!optimisticProps) { + return; + } + const currentProps = cloneDeep3(page.get().props); + const propsSnapshot = {}; + for (const key of Object.keys(optimisticProps)) { + if (!isEqual3(currentProps[key], optimisticProps[key])) { + propsSnapshot[key] = cloneDeep3(currentProps[key]); + } + } + if (Object.keys(propsSnapshot).length === 0) { + return; + } + page.setPropsQuietly({ ...currentProps, ...optimisticProps }); + let shouldRestore = true; + const originalOnSuccess = events.onSuccess; + events.onSuccess = (page2) => { + shouldRestore = false; + return originalOnSuccess(page2); + }; + const originalOnFinish = events.onFinish; + events.onFinish = (visit) => { + if (shouldRestore) { + page.setPropsQuietly({ ...page.get().props, ...propsSnapshot }); + } + return originalOnFinish(visit); + }; + } + loadDeferredProps(deferred) { + if (deferred) { + Object.entries(deferred).forEach(([_, group]) => { + this.doReload({ only: group, deferredProps: true, preserveErrors: true }); + }); + } + } +}; + +// src/useFormUtils.ts +var UseFormUtils = class { + /** + * Creates a callback that returns a UrlMethodPair. + * + * createWayfinderCallback(urlMethodPair) + * createWayfinderCallback(method, url) + * createWayfinderCallback(() => urlMethodPair) + * createWayfinderCallback(() => method, () => url) + */ + static createWayfinderCallback(...args) { + return () => { + if (args.length === 1) { + return isUrlMethodPair(args[0]) ? args[0] : args[0](); + } + return { + method: typeof args[0] === "function" ? args[0]() : args[0], + url: typeof args[1] === "function" ? args[1]() : args[1] + }; + }; + } + /** + * Parses all useForm() arguments into { rememberKey, data, precognitionEndpoint }. + * + * useForm() + * useForm(data) + * useForm(rememberKey, data) + * useForm(method, url, data) + * useForm(urlMethodPair, data) + * + */ + static parseUseFormArguments(...args) { + if (args.length === 0) { + return { + rememberKey: null, + data: {}, + precognitionEndpoint: null + }; + } + if (args.length === 1) { + return { + rememberKey: null, + data: args[0], + precognitionEndpoint: null + }; + } + if (args.length === 2) { + if (typeof args[0] === "string") { + return { + rememberKey: args[0], + data: args[1], + precognitionEndpoint: null + }; + } + return { + rememberKey: null, + data: args[1], + precognitionEndpoint: this.createWayfinderCallback(args[0]) + }; + } + return { + rememberKey: null, + data: args[2], + precognitionEndpoint: this.createWayfinderCallback(args[0], args[1]) + }; + } + /** + * Parses all submission arguments into { method, url, options }. + * It uses the Precognition endpoint if no explicit method/url are provided. + * + * form.submit(method, url) + * form.submit(method, url, options) + * form.submit(urlMethodPair) + * form.submit(urlMethodPair, options) + * form.submit() + * form.submit(options) + */ + static parseSubmitArguments(args, precognitionEndpoint) { + if (args.length === 3 || args.length === 2 && typeof args[0] === "string") { + return { method: args[0], url: args[1], options: args[2] ?? {} }; + } + if (isUrlMethodPair(args[0])) { + return { ...args[0], options: args[1] ?? {} }; + } + return { ...precognitionEndpoint(), options: args[0] ?? {} }; + } + /** + * Merges headers into the Precognition validate() arguments. + */ + static mergeHeadersForValidation(field, config2, headers) { + const merge = (config3) => { + config3.headers = { + ...headers ?? {}, + ...config3.headers ?? {} + }; + return config3; + }; + if (field && typeof field === "object" && !("target" in field)) { + field = merge(field); + } else if (config2 && typeof config2 === "object") { + config2 = merge(config2); + } else if (typeof field === "string") { + config2 = merge(config2 ?? {}); + } else { + field = merge(field ?? {}); + } + return [field, config2]; + } +}; + +// src/axiosHttpClient.ts +import axios from "axios"; +function normalizeHeaders(headers) { + if (!headers || typeof headers !== "object") { + return {}; + } + const normalized = {}; + const entries = typeof headers.entries === "function" ? Array.from(headers.entries()) : Object.entries(headers); + for (const [key, value] of entries) { + if (typeof value === "string") { + normalized[key.toLowerCase()] = value; + } else if (Array.isArray(value)) { + normalized[key.toLowerCase()] = value.join(", "); + } + } + return normalized; +} +function toHttpProgressEvent(axiosEvent) { + return { + progress: axiosEvent.progress, + loaded: axiosEvent.loaded, + total: axiosEvent.total + }; +} +var AxiosHttpClient = class { + constructor(instance) { + this.axios = instance; + } + async getAxios() { + if (!this.axios) { + return this.axios = axios; + } + return this.axios; + } + async request(config2) { + const processedConfig = await httpHandlers.processRequest(config2); + try { + const response = await this.doRequest(processedConfig); + return await httpHandlers.processResponse(response); + } catch (error) { + if (error instanceof HttpResponseError || error instanceof HttpNetworkError || error instanceof HttpCancelledError) { + await httpHandlers.processError(error); + } + throw error; + } + } + async doRequest(config2) { + const axios2 = await this.getAxios(); + try { + const response = await axios2({ + method: config2.method, + url: config2.url, + data: config2.data, + params: config2.params, + headers: config2.headers, + signal: config2.signal, + responseType: "text", + onUploadProgress: config2.onUploadProgress ? (event) => config2.onUploadProgress(toHttpProgressEvent(event)) : void 0 + }); + return { + status: response.status, + data: response.data, + headers: normalizeHeaders(response.headers) + }; + } catch (error) { + const axiosModule = await import("axios"); + if (axiosModule.default.isCancel(error)) { + throw new HttpCancelledError("Request was cancelled", config2.url); + } + if (error && typeof error === "object" && "response" in error) { + const axiosError = error; + const httpResponse = { + status: axiosError.response.status, + data: axiosError.response.data, + headers: normalizeHeaders(axiosError.response.headers) + }; + throw new HttpResponseError( + `Request failed with status ${axiosError.response.status}`, + httpResponse, + config2.url + ); + } + throw new HttpNetworkError( + error instanceof Error ? error.message : "Network error", + config2.url, + error instanceof Error ? error : void 0 + ); + } + } +}; +function axiosAdapter(instance) { + return new AxiosHttpClient(instance); +} + +// src/formObject.ts +import { get as get4, set as set5 } from "lodash-es"; +function undotKey(key) { + if (!key.includes(".")) { + return key; + } + const transformSegment = (segment) => { + if (segment.startsWith("[") && segment.endsWith("]")) { + return segment; + } + return segment.split(".").reduce((result, part, index) => index === 0 ? part : `${result}[${part}]`); + }; + return key.replace(/\\\./g, "__ESCAPED_DOT__").split(/(\[[^\]]*\])/).filter(Boolean).map(transformSegment).join("").replace(/__ESCAPED_DOT__/g, "."); +} +function parseKey2(key) { + const path = []; + const pattern = /([^\[\]]+)|\[(\d*)\]/g; + let match; + while ((match = pattern.exec(key)) !== null) { + if (match[1] !== void 0) { + path.push(match[1]); + } else if (match[2] !== void 0) { + path.push(match[2] === "" ? "" : Number(match[2])); + } + } + return path; +} +function setNestedObject(obj, path, value) { + let current = obj; + for (let i = 0; i < path.length - 1; i++) { + if (!(path[i] in current)) { + current[path[i]] = {}; + } + current = current[path[i]]; + } + current[path[path.length - 1]] = value; +} +function objectHasSequentialNumericKeys(value) { + const keys = Object.keys(value); + const numericKeys = keys.filter((k) => /^\d+$/.test(k)).map(Number).sort((a, b) => a - b); + return keys.length === numericKeys.length && numericKeys.length > 0 && numericKeys[0] === 0 && numericKeys.every((n, i) => n === i); +} +function convertSequentialObjectsToArrays(value) { + if (Array.isArray(value)) { + return value.map(convertSequentialObjectsToArrays); + } + if (typeof value !== "object" || value === null || isFile(value)) { + return value; + } + if (objectHasSequentialNumericKeys(value)) { + const result2 = []; + for (let i = 0; i < Object.keys(value).length; i++) { + result2[i] = convertSequentialObjectsToArrays(value[i]); + } + return result2; + } + const result = {}; + for (const key in value) { + result[key] = convertSequentialObjectsToArrays(value[key]); + } + return result; +} +function formDataToObject(source) { + const form = {}; + for (const [key, value] of source.entries()) { + if (value instanceof File && value.size === 0 && value.name === "") { + continue; + } + const path = parseKey2(undotKey(key)); + if (path[path.length - 1] === "") { + const arrayPath = path.slice(0, -1); + const existing = get4(form, arrayPath); + if (Array.isArray(existing)) { + existing.push(value); + } else if (existing && typeof existing === "object" && !isFile(existing)) { + const numericKeys = Object.keys(existing).filter((k) => /^\d+$/.test(k)).map(Number).sort((a, b) => a - b); + set5(form, arrayPath, numericKeys.length > 0 ? [...numericKeys.map((k) => existing[k]), value] : [value]); + } else { + set5(form, arrayPath, [value]); + } + continue; + } + setNestedObject(form, path.map(String), value); + } + return convertSequentialObjectsToArrays(form); +} + +// src/head.ts +var Renderer = { + buildDOMElement(tag) { + const template = document.createElement("template"); + template.innerHTML = tag; + const node = template.content.firstChild; + if (!tag.startsWith("
${html}
`\n}\n", "import { Config } from './config'\nimport { Router } from './router'\n\nexport { UseFormUtils } from './useFormUtils'\n\nexport { axiosAdapter } from './axiosHttpClient'\nexport { config } from './config'\nexport { getInitialPageFromDOM, getScrollableParent } from './domUtils'\nexport { hasFiles } from './files'\nexport { objectToFormData } from './formData'\nexport { formDataToObject } from './formObject'\nexport { default as createHeadManager } from './head'\nexport { http } from './http'\nexport { HttpCancelledError, HttpNetworkError, HttpResponseError } from './httpErrors'\nexport { default as useInfiniteScroll } from './infiniteScroll'\nexport {\n createLayoutPropsStore,\n mergeLayoutProps,\n normalizeLayouts,\n type LayoutDefinition,\n type LayoutPropsStore,\n} from './layout'\nexport { shouldIntercept, shouldNavigate } from './navigationEvents'\nexport { progress, default as setupProgress } from './progress'\nexport { FormComponentResetSymbol, resetFormFields } from './resetFormFields'\nexport { buildSSRBody } from './ssrUtils'\nexport * from './types'\nexport {\n hrefToUrl,\n isSameUrlWithoutQueryOrHash,\n isUrlMethodPair,\n mergeDataIntoQueryString,\n urlHasProtocol,\n urlToString,\n urlWithoutHash,\n} from './url'\nexport { XhrHttpClient, xhrHttpClient } from './xhrHttpClient'\nexport { type Config, type Router }\n\nexport const router = new Router()\n"], + "mappings": "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", + "names": ["cloneDeep", "get", "isEqual", "set", "page", "progress", "cloneDeep", "page", "parent", "set", "page", "isServer", "isServer", "page", "cloneDeep", "page", "config", "config", "isFormData", "page", "get", "isEqual", "set", "page", "queue", "isEqual", "status", "get", "set", "page", "progress", "page", "get", "set", "cloneDeep", "isEqual", "config", "config", "axios", "get", "set", "parseKey", "result", "get", "set", "element", "isServer", "elements", "title", "page", "page", "queue", "page", "page", "isEqual", "progress", "set", "queue", "status", "page"] +} diff --git a/vendor/inertia/packages/core/dist/server.js b/vendor/inertia/packages/core/dist/server.js new file mode 100644 index 0000000..2e6b43c --- /dev/null +++ b/vendor/inertia/packages/core/dist/server.js @@ -0,0 +1,283 @@ +// src/server.ts +import { originalPositionFor, TraceMap } from "@jridgewell/trace-mapping"; +import { createServer } from "http"; +import cluster from "node:cluster"; +import { existsSync, readFileSync } from "node:fs"; +import { availableParallelism } from "node:os"; +import path from "node:path"; +import * as process2 from "process"; + +// src/ssrErrors.ts +var sourceMapResolver = null; +function setSourceMapResolver(resolver) { + sourceMapResolver = resolver; +} +var BROWSER_APIS = { + // Global objects + window: "The global window object", + document: "The DOM document object", + navigator: "The navigator object", + location: "The location object", + history: "The browser history API", + screen: "The screen object", + localStorage: "Browser local storage", + sessionStorage: "Browser session storage", + // Viewport properties (accessed via window.X) + innerWidth: "Browser viewport width", + innerHeight: "Browser viewport height", + outerWidth: "Browser window width", + outerHeight: "Browser window height", + scrollX: "Horizontal scroll position", + scrollY: "Vertical scroll position", + devicePixelRatio: "The device pixel ratio", + matchMedia: "The matchMedia function", + // Observers (commonly instantiated at module level) + IntersectionObserver: "The IntersectionObserver API", + ResizeObserver: "The ResizeObserver API", + MutationObserver: "The MutationObserver API", + // Timing functions (commonly called at module level) + requestAnimationFrame: "The requestAnimationFrame function", + requestIdleCallback: "The requestIdleCallback function", + // Constructors that might be used at module level + Image: "The Image constructor", + Audio: "The Audio constructor", + Worker: "The Worker constructor", + BroadcastChannel: "The BroadcastChannel constructor", + // Network (older Node.js versions) + fetch: "The fetch API", + XMLHttpRequest: "The XMLHttpRequest API" +}; +function detectBrowserApi(error) { + const message = error.message.toLowerCase(); + for (const api of Object.keys(BROWSER_APIS)) { + const patterns = [ + `${api.toLowerCase()} is not defined`, + `'${api.toLowerCase()}' is not defined`, + `"${api.toLowerCase()}" is not defined`, + `cannot read properties of undefined (reading '${api.toLowerCase()}')` + ]; + if (patterns.some((pattern) => message.includes(pattern))) { + return api; + } + } + return null; +} +function isComponentResolutionError(error) { + const message = error.message.toLowerCase(); + return message.includes("cannot find module") || message.includes("failed to resolve") || message.includes("module not found") || message.includes("could not resolve"); +} +function getBrowserApiHint(api) { + const apiDescription = BROWSER_APIS[api] || `The "${api}" object`; + return `${apiDescription} doesn't exist in Node.js. Wrap browser-specific code in a onMounted/useEffect/onMount lifecycle hook, or check "typeof ${api} !== 'undefined'" before using it.`; +} +function extractSourceLocation(stack) { + if (!stack) { + return void 0; + } + for (const line of stack.split("\n")) { + if (!line.includes("at ")) { + continue; + } + if (line.includes("node_modules") || line.includes("node:")) { + continue; + } + let match = line.match(/\(([^)]+):(\d+):(\d+)\)/); + if (!match) { + match = line.match(/at\s+(?:file:\/\/)?(.+):(\d+):(\d+)\s*$/); + } + if (match) { + const file = match[1].replace(/^file:\/\//, ""); + const lineNum = parseInt(match[2], 10); + const colNum = parseInt(match[3], 10); + if (sourceMapResolver) { + const resolved = sourceMapResolver(file, lineNum, colNum); + if (resolved) { + return `${resolved.file}:${resolved.line}:${resolved.column}`; + } + } + return `${file}:${lineNum}:${colNum}`; + } + } + return void 0; +} +function classifySSRError(error, component, url) { + const timestamp = (/* @__PURE__ */ new Date()).toISOString(); + const base = { + error: error.message, + component, + url, + stack: error.stack, + sourceLocation: extractSourceLocation(error.stack), + timestamp + }; + const browserApi = detectBrowserApi(error); + if (browserApi) { + return { + ...base, + type: "browser-api", + browserApi, + hint: getBrowserApiHint(browserApi) + }; + } + if (isComponentResolutionError(error)) { + return { + ...base, + type: "component-resolution", + hint: `Could not resolve component${component ? ` "${component}"` : ""}. Check that the file exists and the path is correct.` + }; + } + return { + ...base, + type: "render", + hint: "An error occurred while rendering. Check for browser-specific code that runs during initialization." + }; +} +var colors = { + reset: "\x1B[0m", + red: "\x1B[31m", + yellow: "\x1B[33m", + cyan: "\x1B[36m", + dim: "\x1B[2m", + bold: "\x1B[1m", + bgRed: "\x1B[41m", + white: "\x1B[37m" +}; +function makeRelative(path2) { + const cwd = process.cwd(); + if (path2.startsWith(cwd + "/")) { + return path2.slice(cwd.length + 1); + } + return path2; +} +function formatConsoleError(classified) { + const componentPart = classified.component ? ` ${colors.cyan}${classified.component}${colors.reset}` : ""; + const lines = [ + "", + ` ${colors.bgRed}${colors.white}${colors.bold} SSR ERROR ${colors.reset}${componentPart}`, + "", + ` ${classified.error}` + ]; + if (classified.sourceLocation) { + const relativePath = makeRelative(classified.sourceLocation); + lines.push(` ${colors.dim}Source: ${relativePath}${colors.reset}`); + } + if (classified.url) { + lines.push(` ${colors.dim}URL: ${classified.url}${colors.reset}`); + } + lines.push("", ` ${colors.yellow}Hint${colors.reset} ${classified.hint}`, ""); + return lines.join("\n"); +} + +// src/server.ts +var sourceMaps = /* @__PURE__ */ new Map(); +setSourceMapResolver((file, line, column) => { + if (!file.includes("/ssr/") || !file.endsWith(".js")) { + return null; + } + const mapFile = file + ".map"; + if (!existsSync(mapFile)) { + return null; + } + let traceMap = sourceMaps.get(mapFile); + if (!traceMap) { + try { + const mapContent = readFileSync(mapFile, "utf-8"); + traceMap = new TraceMap(mapContent); + sourceMaps.set(mapFile, traceMap); + } catch { + return null; + } + } + const original = originalPositionFor(traceMap, { line, column }); + if (original.source) { + const mapDir = path.dirname(mapFile); + const resolvedPath = path.resolve(mapDir, original.source); + return { + file: resolvedPath, + line: original.line ?? line, + column: original.column ?? column + }; + } + return null; +}); +var readableToString = (readable) => new Promise((resolve, reject) => { + let data = ""; + readable.on("data", (chunk) => data += chunk); + readable.on("end", () => resolve(data)); + readable.on("error", (err) => reject(err)); +}); +var server_default = (render, options) => { + const opts = typeof options === "number" ? { port: options } : options; + const { port = 13714, cluster: useCluster = false, handleErrors = true } = opts ?? {}; + const log = (message) => { + console.log( + useCluster && !cluster.isPrimary ? `[${cluster.worker?.id ?? "N/A"} / ${cluster.worker?.process?.pid ?? "N/A"}] ${message}` : message + ); + }; + if (useCluster && cluster.isPrimary) { + log("Primary Inertia SSR server process started..."); + for (let i = 0; i < availableParallelism(); i++) { + cluster.fork(); + } + cluster.on("message", (_worker, message) => { + if (message === "shutdown") { + for (const id in cluster.workers) { + cluster.workers[id]?.kill(); + } + process2.exit(); + } + }); + return render; + } + const handleRender = async (request, response) => { + const page = JSON.parse(await readableToString(request)); + const originalWarn = console.warn; + if (handleErrors) { + console.warn = () => { + }; + } + try { + const result = await render(page); + response.writeHead(200, { "Content-Type": "application/json", Server: "Inertia.js SSR" }); + response.write(JSON.stringify(result)); + } catch (e) { + const error = e; + if (!handleErrors) { + throw error; + } + const classified = classifySSRError(error, page.component, page.url); + console.error(formatConsoleError(classified)); + response.writeHead(500, { "Content-Type": "application/json", Server: "Inertia.js SSR" }); + response.write(JSON.stringify(classified)); + } finally { + console.warn = originalWarn; + } + }; + const routes = { + "/health": async () => ({ status: "OK", timestamp: Date.now() }), + "/shutdown": async () => { + if (cluster.isWorker) { + process2.send?.("shutdown"); + } + process2.exit(); + }, + "/render": handleRender, + "/404": async () => ({ status: "NOT_FOUND", timestamp: Date.now() }) + }; + createServer(async (request, response) => { + const dispatchRoute = routes[request.url] ?? routes["/404"]; + const result = await dispatchRoute(request, response); + if (!response.headersSent) { + response.writeHead(200, { "Content-Type": "application/json", Server: "Inertia.js SSR" }); + response.write(JSON.stringify(result)); + } + response.end(); + }).listen(port, () => log("Inertia SSR server started.")); + log(`Starting SSR server on port ${port}...`); + return render; +}; +export { + BROWSER_APIS, + server_default as default +}; +//# sourceMappingURL=server.js.map diff --git a/vendor/inertia/packages/core/dist/server.js.map b/vendor/inertia/packages/core/dist/server.js.map new file mode 100644 index 0000000..a1d091b --- /dev/null +++ b/vendor/inertia/packages/core/dist/server.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../src/server.ts", "../src/ssrErrors.ts"], + "sourcesContent": ["import { originalPositionFor, TraceMap } from '@jridgewell/trace-mapping'\nimport { createServer, IncomingMessage, ServerResponse } from 'http'\nimport cluster from 'node:cluster'\nimport { existsSync, readFileSync } from 'node:fs'\nimport { availableParallelism } from 'node:os'\nimport path from 'node:path'\nimport * as process from 'process'\nimport { classifySSRError, formatConsoleError, setSourceMapResolver } from './ssrErrors'\nimport { InertiaAppResponse, Page } from './types'\n\n// Re-export SSR error utilities for use by @inertiajs/vite\nexport { BROWSER_APIS, type ClassifiedSSRError, type SSRErrorType } from './ssrErrors'\n\n// Cache parsed sourcemaps for performance\nconst sourceMaps = new Map()\n\nsetSourceMapResolver((file: string, line: number, column: number) => {\n // Only resolve for bundled SSR files\n if (!file.includes('/ssr/') || !file.endsWith('.js')) {\n return null\n }\n\n const mapFile = file + '.map'\n\n if (!existsSync(mapFile)) {\n return null\n }\n\n let traceMap = sourceMaps.get(mapFile)\n\n if (!traceMap) {\n try {\n const mapContent = readFileSync(mapFile, 'utf-8')\n traceMap = new TraceMap(mapContent)\n sourceMaps.set(mapFile, traceMap)\n } catch {\n return null\n }\n }\n\n const original = originalPositionFor(traceMap, { line, column })\n\n if (original.source) {\n // Resolve the source path relative to the sourcemap location\n const mapDir = path.dirname(mapFile)\n const resolvedPath = path.resolve(mapDir, original.source)\n\n return {\n file: resolvedPath,\n line: original.line ?? line,\n column: original.column ?? column,\n }\n }\n\n return null\n})\n\ntype AppCallback = (page: Page) => InertiaAppResponse\ntype RouteHandler = (request: IncomingMessage, response: ServerResponse) => Promise\ntype ServerOptions = {\n port?: number\n cluster?: boolean\n handleErrors?: boolean\n}\ntype Port = number\n\nconst readableToString: (readable: IncomingMessage) => Promise = (readable) =>\n new Promise((resolve, reject) => {\n let data = ''\n readable.on('data', (chunk) => (data += chunk))\n readable.on('end', () => resolve(data))\n readable.on('error', (err) => reject(err))\n })\n\nexport default (render: AppCallback, options?: Port | ServerOptions): AppCallback => {\n const opts = typeof options === 'number' ? { port: options } : options\n const { port = 13714, cluster: useCluster = false, handleErrors = true } = opts ?? {}\n\n const log = (message: string) => {\n console.log(\n useCluster && !cluster.isPrimary\n ? `[${cluster.worker?.id ?? 'N/A'} / ${cluster.worker?.process?.pid ?? 'N/A'}] ${message}`\n : message,\n )\n }\n\n if (useCluster && cluster.isPrimary) {\n log('Primary Inertia SSR server process started...')\n\n for (let i = 0; i < availableParallelism(); i++) {\n cluster.fork()\n }\n\n cluster.on('message', (_worker, message) => {\n if (message === 'shutdown') {\n for (const id in cluster.workers) {\n cluster.workers[id]?.kill()\n }\n\n process.exit()\n }\n })\n\n return render\n }\n\n const handleRender = async (request: IncomingMessage, response: ServerResponse) => {\n const page: Page = JSON.parse(await readableToString(request))\n\n // Suppress framework warnings during render (they clutter the output)\n const originalWarn = console.warn\n\n if (handleErrors) {\n console.warn = () => {}\n }\n\n try {\n const result = await render(page)\n\n response.writeHead(200, { 'Content-Type': 'application/json', Server: 'Inertia.js SSR' })\n response.write(JSON.stringify(result))\n } catch (e) {\n const error = e as Error\n\n if (!handleErrors) {\n throw error\n }\n\n const classified = classifySSRError(error, page.component, page.url)\n console.error(formatConsoleError(classified))\n\n response.writeHead(500, { 'Content-Type': 'application/json', Server: 'Inertia.js SSR' })\n response.write(JSON.stringify(classified))\n } finally {\n console.warn = originalWarn\n }\n }\n\n const routes: Record = {\n '/health': async () => ({ status: 'OK', timestamp: Date.now() }),\n '/shutdown': async () => {\n if (cluster.isWorker) {\n process.send?.('shutdown')\n }\n\n process.exit()\n },\n '/render': handleRender,\n '/404': async () => ({ status: 'NOT_FOUND', timestamp: Date.now() }),\n }\n\n createServer(async (request, response) => {\n const dispatchRoute = routes[request.url as string] ?? routes['/404']\n const result = await dispatchRoute(request, response)\n\n if (!response.headersSent) {\n response.writeHead(200, { 'Content-Type': 'application/json', Server: 'Inertia.js SSR' })\n response.write(JSON.stringify(result))\n }\n\n response.end()\n }).listen(port, () => log('Inertia SSR server started.'))\n\n log(`Starting SSR server on port ${port}...`)\n\n // Return the render callback so it can be exported for Vite SSR dev mode\n return render\n}\n", "/**\n * SSR Error Classification for Production Server\n *\n * This module detects common SSR errors and provides helpful hints\n * to developers on how to fix them.\n */\n\nexport type SSRErrorType = 'browser-api' | 'component-resolution' | 'render' | 'unknown'\n\ntype SourceMapResolver = (\n file: string,\n line: number,\n column: number,\n) => { file: string; line: number; column: number } | null\n\nlet sourceMapResolver: SourceMapResolver | null = null\n\nexport function setSourceMapResolver(resolver: SourceMapResolver | null): void {\n sourceMapResolver = resolver\n}\n\nexport interface ClassifiedSSRError {\n error: string\n type: SSRErrorType\n component?: string\n url?: string\n browserApi?: string\n hint: string\n stack?: string\n sourceLocation?: string\n timestamp: string\n}\n\nexport const BROWSER_APIS: Record = {\n // Global objects\n window: 'The global window object',\n document: 'The DOM document object',\n navigator: 'The navigator object',\n location: 'The location object',\n history: 'The browser history API',\n screen: 'The screen object',\n localStorage: 'Browser local storage',\n sessionStorage: 'Browser session storage',\n\n // Viewport properties (accessed via window.X)\n innerWidth: 'Browser viewport width',\n innerHeight: 'Browser viewport height',\n outerWidth: 'Browser window width',\n outerHeight: 'Browser window height',\n scrollX: 'Horizontal scroll position',\n scrollY: 'Vertical scroll position',\n devicePixelRatio: 'The device pixel ratio',\n matchMedia: 'The matchMedia function',\n\n // Observers (commonly instantiated at module level)\n IntersectionObserver: 'The IntersectionObserver API',\n ResizeObserver: 'The ResizeObserver API',\n MutationObserver: 'The MutationObserver API',\n\n // Timing functions (commonly called at module level)\n requestAnimationFrame: 'The requestAnimationFrame function',\n requestIdleCallback: 'The requestIdleCallback function',\n\n // Constructors that might be used at module level\n Image: 'The Image constructor',\n Audio: 'The Audio constructor',\n Worker: 'The Worker constructor',\n BroadcastChannel: 'The BroadcastChannel constructor',\n\n // Network (older Node.js versions)\n fetch: 'The fetch API',\n XMLHttpRequest: 'The XMLHttpRequest API',\n}\n\nfunction detectBrowserApi(error: Error): string | null {\n const message = error.message.toLowerCase()\n\n for (const api of Object.keys(BROWSER_APIS)) {\n const patterns = [\n `${api.toLowerCase()} is not defined`,\n `'${api.toLowerCase()}' is not defined`,\n `\"${api.toLowerCase()}\" is not defined`,\n `cannot read properties of undefined (reading '${api.toLowerCase()}')`,\n ]\n\n if (patterns.some((pattern) => message.includes(pattern))) {\n return api\n }\n }\n\n return null\n}\n\nfunction isComponentResolutionError(error: Error): boolean {\n const message = error.message.toLowerCase()\n\n return (\n message.includes('cannot find module') ||\n message.includes('failed to resolve') ||\n message.includes('module not found') ||\n message.includes('could not resolve')\n )\n}\n\nfunction getBrowserApiHint(api: string): string {\n const apiDescription = BROWSER_APIS[api] || `The \"${api}\" object`\n\n return (\n `${apiDescription} doesn't exist in Node.js. ` +\n `Wrap browser-specific code in a onMounted/useEffect/onMount lifecycle hook, ` +\n `or check \"typeof ${api} !== 'undefined'\" before using it.`\n )\n}\n\nfunction extractSourceLocation(stack?: string): string | undefined {\n if (!stack) {\n return undefined\n }\n\n for (const line of stack.split('\\n')) {\n if (!line.includes('at ')) {\n continue\n }\n\n if (line.includes('node_modules') || line.includes('node:')) {\n continue\n }\n\n let match = line.match(/\\(([^)]+):(\\d+):(\\d+)\\)/)\n\n if (!match) {\n match = line.match(/at\\s+(?:file:\\/\\/)?(.+):(\\d+):(\\d+)\\s*$/)\n }\n\n if (match) {\n const file = match[1].replace(/^file:\\/\\//, '')\n const lineNum = parseInt(match[2], 10)\n const colNum = parseInt(match[3], 10)\n\n // Try to resolve through sourcemap\n if (sourceMapResolver) {\n const resolved = sourceMapResolver(file, lineNum, colNum)\n\n if (resolved) {\n return `${resolved.file}:${resolved.line}:${resolved.column}`\n }\n }\n\n return `${file}:${lineNum}:${colNum}`\n }\n }\n\n return undefined\n}\n\nexport function classifySSRError(error: Error, component?: string, url?: string): ClassifiedSSRError {\n const timestamp = new Date().toISOString()\n const base = {\n error: error.message,\n component,\n url,\n stack: error.stack,\n sourceLocation: extractSourceLocation(error.stack),\n timestamp,\n }\n\n const browserApi = detectBrowserApi(error)\n\n if (browserApi) {\n return {\n ...base,\n type: 'browser-api',\n browserApi,\n hint: getBrowserApiHint(browserApi),\n }\n }\n\n if (isComponentResolutionError(error)) {\n return {\n ...base,\n type: 'component-resolution',\n hint: `Could not resolve component${component ? ` \"${component}\"` : ''}. Check that the file exists and the path is correct.`,\n }\n }\n\n return {\n ...base,\n type: 'render',\n hint: 'An error occurred while rendering. Check for browser-specific code that runs during initialization.',\n }\n}\n\nconst colors = {\n reset: '\\x1b[0m',\n red: '\\x1b[31m',\n yellow: '\\x1b[33m',\n cyan: '\\x1b[36m',\n dim: '\\x1b[2m',\n bold: '\\x1b[1m',\n bgRed: '\\x1b[41m',\n white: '\\x1b[37m',\n}\n\nfunction makeRelative(path: string): string {\n const cwd = process.cwd()\n\n if (path.startsWith(cwd + '/')) {\n return path.slice(cwd.length + 1)\n }\n\n return path\n}\n\nexport function formatConsoleError(classified: ClassifiedSSRError): string {\n const componentPart = classified.component ? ` ${colors.cyan}${classified.component}${colors.reset}` : ''\n\n const lines = [\n '',\n ` ${colors.bgRed}${colors.white}${colors.bold} SSR ERROR ${colors.reset}${componentPart}`,\n '',\n ` ${classified.error}`,\n ]\n\n if (classified.sourceLocation) {\n const relativePath = makeRelative(classified.sourceLocation)\n lines.push(` ${colors.dim}Source: ${relativePath}${colors.reset}`)\n }\n\n if (classified.url) {\n lines.push(` ${colors.dim}URL: ${classified.url}${colors.reset}`)\n }\n\n lines.push('', ` ${colors.yellow}Hint${colors.reset} ${classified.hint}`, '')\n\n return lines.join('\\n')\n}\n"], + "mappings": "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", + "names": ["process", "path"] +} diff --git a/vendor/inertia/packages/core/package.json b/vendor/inertia/packages/core/package.json new file mode 100644 index 0000000..09852a2 --- /dev/null +++ b/vendor/inertia/packages/core/package.json @@ -0,0 +1,59 @@ +{ + "name": "@inertiajs/core", + "version": "2.3.14", + "license": "MIT", + "description": "A framework for creating server-driven single page apps.", + "contributors": [ + "Jonathan Reinink ", + "Claudio Dekker ", + "Sebastian De Deyne " + ], + "homepage": "https://inertiajs.com/", + "repository": { + "type": "git", + "url": "git+https://github.com/inertiajs/inertia.git", + "directory": "packages/inertia" + }, + "bugs": { + "url": "https://github.com/inertiajs/inertia/issues" + }, + "files": [ + "dist", + "types" + ], + "type": "module", + "main": "dist/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "import": "./dist/index.js" + }, + "./server": { + "types": "./types/server.d.ts", + "import": "./dist/server.js" + } + }, + "typesVersions": { + "*": { + "server": [ + "types/server.d.ts" + ] + } + }, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.31", + "@types/lodash-es": "^4.17.12", + "laravel-precognition": "2.0.0-beta.0", + "lodash-es": "^4.17.23" + }, + "peerDependencies": { + "axios": "^1.13.2" + }, + "peerDependenciesMeta": { + "axios": { + "optional": true + } + }, + "x-inertia-source": "https://github.com/inertiajs/inertia/tree/504fa085db13066c48d447a00b1c9f80d91ef7b6" +} diff --git a/vendor/inertia/packages/core/types/axiosHttpClient.d.ts b/vendor/inertia/packages/core/types/axiosHttpClient.d.ts new file mode 100644 index 0000000..8b186bf --- /dev/null +++ b/vendor/inertia/packages/core/types/axiosHttpClient.d.ts @@ -0,0 +1,16 @@ +import type { AxiosInstance } from 'axios'; +import { HttpClient, HttpRequestConfig, HttpResponse } from './types'; +/** + * HTTP client implementation using Axios + */ +export declare class AxiosHttpClient implements HttpClient { + private axios?; + constructor(instance?: AxiosInstance); + private getAxios; + request(config: HttpRequestConfig): Promise; + protected doRequest(config: HttpRequestConfig): Promise; +} +/** + * Create an Axios HTTP client adapter + */ +export declare function axiosAdapter(instance?: AxiosInstance): HttpClient; diff --git a/vendor/inertia/packages/core/types/config.d.ts b/vendor/inertia/packages/core/types/config.d.ts new file mode 100644 index 0000000..e7f1756 --- /dev/null +++ b/vendor/inertia/packages/core/types/config.d.ts @@ -0,0 +1,24 @@ +import { InertiaAppConfig } from './types'; +type ConfigKeys = T extends Function ? never : string extends keyof T ? string : Extract | { + [Key in Extract]: T[Key] extends object ? `${Key}.${ConfigKeys & string}` : never; +}[Extract]; +type ConfigValue> = K extends `${infer P}.${infer Rest}` ? P extends keyof T ? Rest extends ConfigKeys ? ConfigValue : never : never : K extends keyof T ? T[K] : never; +type ConfigSetObject = { + [K in ConfigKeys]?: ConfigValue; +}; +type FirstLevelOptional = { + [K in keyof T]?: T[K] extends object ? { + [P in keyof T[K]]?: T[K][P]; + } : T[K]; +}; +export declare class Config { + protected config: FirstLevelOptional; + protected defaults: TConfig; + constructor(defaults: TConfig); + extend(defaults?: TExtension): Config; + replace(newConfig: FirstLevelOptional): void; + get>(key: K): ConfigValue; + set>(keyOrValues: K | Partial>, value?: ConfigValue): void; +} +export declare const config: Config; +export {}; diff --git a/vendor/inertia/packages/core/types/debounce.d.ts b/vendor/inertia/packages/core/types/debounce.d.ts new file mode 100644 index 0000000..2b17c39 --- /dev/null +++ b/vendor/inertia/packages/core/types/debounce.d.ts @@ -0,0 +1 @@ +export default function debounce ReturnType>(fn: F, delay: number): F; diff --git a/vendor/inertia/packages/core/types/debug.d.ts b/vendor/inertia/packages/core/types/debug.d.ts new file mode 100644 index 0000000..1cccbd0 --- /dev/null +++ b/vendor/inertia/packages/core/types/debug.d.ts @@ -0,0 +1 @@ +export declare const stackTrace: (autolog?: boolean) => string | undefined; diff --git a/vendor/inertia/packages/core/types/dialog.d.ts b/vendor/inertia/packages/core/types/dialog.d.ts new file mode 100644 index 0000000..fe159df --- /dev/null +++ b/vendor/inertia/packages/core/types/dialog.d.ts @@ -0,0 +1,8 @@ +declare const _default: { + createIframeAndPage(html: Record | string): { + iframe: HTMLIFrameElement; + page: HTMLElement; + }; + show(html: Record | string): void; +}; +export default _default; diff --git a/vendor/inertia/packages/core/types/domUtils.d.ts b/vendor/inertia/packages/core/types/domUtils.d.ts new file mode 100644 index 0000000..b0af864 --- /dev/null +++ b/vendor/inertia/packages/core/types/domUtils.d.ts @@ -0,0 +1,4 @@ +export declare const getScrollableParent: (element: HTMLElement | null) => HTMLElement | null; +export declare const getElementsInViewportFromCollection: (elements: HTMLElement[], referenceElement?: HTMLElement) => HTMLElement[]; +export declare const requestAnimationFrame: (cb: () => void, times?: number) => void; +export declare const getInitialPageFromDOM: (id: string) => T | null; diff --git a/vendor/inertia/packages/core/types/encryption.d.ts b/vendor/inertia/packages/core/types/encryption.d.ts new file mode 100644 index 0000000..8b01a61 --- /dev/null +++ b/vendor/inertia/packages/core/types/encryption.d.ts @@ -0,0 +1,6 @@ +export declare const encryptHistory: (data: any) => Promise; +export declare const historySessionStorageKeys: { + key: string; + iv: string; +}; +export declare const decryptHistory: (data: any) => Promise; diff --git a/vendor/inertia/packages/core/types/eventHandler.d.ts b/vendor/inertia/packages/core/types/eventHandler.d.ts new file mode 100644 index 0000000..febf80f --- /dev/null +++ b/vendor/inertia/packages/core/types/eventHandler.d.ts @@ -0,0 +1,17 @@ +import { GlobalEvent, GlobalEventNames, GlobalEventResult, InternalEvent } from './types'; +declare class EventHandler { + protected internalListeners: { + event: InternalEvent; + listener: (...args: any[]) => void; + }[]; + init(): void; + onGlobalEvent(type: TEventName, callback: (event: GlobalEvent) => GlobalEventResult): VoidFunction; + on(event: InternalEvent, callback: (...args: any[]) => void): VoidFunction; + onMissingHistoryItem(): void; + fireInternalEvent(event: InternalEvent, ...args: any[]): void; + protected registerListener(type: string, listener: EventListener): VoidFunction; + protected handlePageshowEvent(event: PageTransitionEvent): void; + protected handlePopstateEvent(event: PopStateEvent): void; +} +export declare const eventHandler: EventHandler; +export {}; diff --git a/vendor/inertia/packages/core/types/events.d.ts b/vendor/inertia/packages/core/types/events.d.ts new file mode 100644 index 0000000..82d93a7 --- /dev/null +++ b/vendor/inertia/packages/core/types/events.d.ts @@ -0,0 +1,14 @@ +import { GlobalEventTrigger } from './types'; +export declare const fireBeforeEvent: GlobalEventTrigger<'before'>; +export declare const fireErrorEvent: GlobalEventTrigger<'error'>; +export declare const fireNetworkErrorEvent: GlobalEventTrigger<'networkError'>; +export declare const fireFinishEvent: GlobalEventTrigger<'finish'>; +export declare const fireHttpExceptionEvent: GlobalEventTrigger<'httpException'>; +export declare const fireBeforeUpdateEvent: GlobalEventTrigger<'beforeUpdate'>; +export declare const fireNavigateEvent: GlobalEventTrigger<'navigate'>; +export declare const fireProgressEvent: GlobalEventTrigger<'progress'>; +export declare const fireStartEvent: GlobalEventTrigger<'start'>; +export declare const fireSuccessEvent: GlobalEventTrigger<'success'>; +export declare const firePrefetchedEvent: GlobalEventTrigger<'prefetched'>; +export declare const firePrefetchingEvent: GlobalEventTrigger<'prefetching'>; +export declare const fireFlashEvent: GlobalEventTrigger<'flash'>; diff --git a/vendor/inertia/packages/core/types/files.d.ts b/vendor/inertia/packages/core/types/files.d.ts new file mode 100644 index 0000000..1f7342f --- /dev/null +++ b/vendor/inertia/packages/core/types/files.d.ts @@ -0,0 +1,3 @@ +import { FormDataConvertible, RequestPayload } from './types'; +export declare const isFile: (value: unknown) => boolean; +export declare function hasFiles(data: RequestPayload | FormDataConvertible): boolean; diff --git a/vendor/inertia/packages/core/types/formData.d.ts b/vendor/inertia/packages/core/types/formData.d.ts new file mode 100644 index 0000000..a84ce54 --- /dev/null +++ b/vendor/inertia/packages/core/types/formData.d.ts @@ -0,0 +1,3 @@ +import type { FormDataConvertible, QueryStringArrayFormatOption } from './types'; +export declare const isFormData: (value: any) => value is FormData; +export declare function objectToFormData(source: Record, form?: FormData, parentKey?: string | null, queryStringArrayFormat?: QueryStringArrayFormatOption): FormData; diff --git a/vendor/inertia/packages/core/types/formObject.d.ts b/vendor/inertia/packages/core/types/formObject.d.ts new file mode 100644 index 0000000..d7eead8 --- /dev/null +++ b/vendor/inertia/packages/core/types/formObject.d.ts @@ -0,0 +1,5 @@ +import { FormDataConvertible } from './types'; +/** + * Convert a FormData instance into an object structure. + */ +export declare function formDataToObject(source: FormData): Record; diff --git a/vendor/inertia/packages/core/types/head.d.ts b/vendor/inertia/packages/core/types/head.d.ts new file mode 100644 index 0000000..47d2654 --- /dev/null +++ b/vendor/inertia/packages/core/types/head.d.ts @@ -0,0 +1,2 @@ +import { HeadManager, HeadManagerOnUpdateCallback, HeadManagerTitleCallback } from '.'; +export default function createHeadManager(isServer: boolean, titleCallback: HeadManagerTitleCallback, onUpdate: HeadManagerOnUpdateCallback): HeadManager; diff --git a/vendor/inertia/packages/core/types/history.d.ts b/vendor/inertia/packages/core/types/history.d.ts new file mode 100644 index 0000000..251a86e --- /dev/null +++ b/vendor/inertia/packages/core/types/history.d.ts @@ -0,0 +1,48 @@ +import { Page, ScrollRegion } from './types'; +declare class History { + rememberedState: "rememberedState"; + scrollRegions: "scrollRegions"; + preserveUrl: boolean; + protected current: Partial; + protected initialState: Partial | null; + remember(data: unknown, key: string): void; + restore(key: string): unknown; + pushState(page: Page, cb?: (() => void) | null): void; + protected clonePageProps(page: Page): Page; + protected getPageData(page: Page): Promise; + processQueue(): Promise; + decrypt(page?: Page | null): Promise; + protected decryptPageData(pageData: ArrayBuffer | Page | null): Promise; + saveScrollPositions(scrollRegions: ScrollRegion[]): void; + saveDocumentScrollPosition(scrollRegion: ScrollRegion): void; + getScrollRegions(): ScrollRegion[]; + getDocumentScrollPosition(): ScrollRegion; + replaceState(page: Page, cb?: (() => void) | null): void; + protected isHistoryThrottleError(error: unknown): error is Error & { + name: 'SecurityError'; + }; + protected isQuotaExceededError(error: unknown): error is Error & { + name: 'QuotaExceededError'; + }; + protected withThrottleProtection(cb: () => T): Promise; + protected doReplaceState(data: { + page: Page | ArrayBuffer; + scrollRegions?: ScrollRegion[]; + documentScrollPosition?: ScrollRegion; + }, url?: string): Promise; + protected doPushState(data: { + page: Page | ArrayBuffer; + scrollRegions?: ScrollRegion[]; + documentScrollPosition?: ScrollRegion; + }, url: string): Promise; + getState(key: keyof Page, defaultValue?: T): any; + deleteState(key: keyof Page): void; + clearInitialState(key: keyof Page): void; + browserHasHistoryEntry(): boolean; + clear(): void; + setCurrent(page: Page): void; + isValidState(state: any): boolean; + getAllState(): Page; +} +export declare const history: History; +export {}; diff --git a/vendor/inertia/packages/core/types/http.d.ts b/vendor/inertia/packages/core/types/http.d.ts new file mode 100644 index 0000000..9c51cf2 --- /dev/null +++ b/vendor/inertia/packages/core/types/http.d.ts @@ -0,0 +1,38 @@ +import { HttpClient, HttpClientOptions } from './types'; +export declare const http: { + /** + * Get the current HTTP client + */ + getClient(): HttpClient; + /** + * Set the HTTP client to use for all Inertia requests + */ + setClient(clientOrOptions: HttpClient | HttpClientOptions): void; + /** + * Register a request handler that runs before each request + */ + onRequest: (handler: import("./types").HttpRequestHandler) => () => void; + /** + * Register a response handler that runs after each successful response + */ + onResponse: (handler: import("./types").HttpResponseHandler) => () => void; + /** + * Register an error handler that runs when a request fails + */ + onError: (handler: import("./types").HttpErrorHandler) => () => void; + /** + * Process a request config through all registered request handlers. + * For use by custom HttpClient implementations. + */ + processRequest: (config: import("./types").HttpRequestConfig) => Promise; + /** + * Process a response through all registered response handlers. + * For use by custom HttpClient implementations. + */ + processResponse: (response: import("./types").HttpResponse) => Promise; + /** + * Process an error through all registered error handlers. + * For use by custom HttpClient implementations. + */ + processError: (error: import("./httpErrors").HttpResponseError | import("./httpErrors").HttpNetworkError | import("./httpErrors").HttpCancelledError) => Promise; +}; diff --git a/vendor/inertia/packages/core/types/httpErrors.d.ts b/vendor/inertia/packages/core/types/httpErrors.d.ts new file mode 100644 index 0000000..72720ae --- /dev/null +++ b/vendor/inertia/packages/core/types/httpErrors.d.ts @@ -0,0 +1,16 @@ +import { HttpResponse } from './types'; +export declare class HttpResponseError extends Error { + readonly response: HttpResponse; + readonly url?: string; + constructor(message: string, response: HttpResponse, url?: string); +} +export declare class HttpCancelledError extends Error { + readonly url?: string; + constructor(message?: string, url?: string); +} +export declare class HttpNetworkError extends Error { + readonly cause?: Error; + readonly code = "ERR_NETWORK"; + readonly url?: string; + constructor(message: string, url?: string, cause?: Error); +} diff --git a/vendor/inertia/packages/core/types/httpHandlers.d.ts b/vendor/inertia/packages/core/types/httpHandlers.d.ts new file mode 100644 index 0000000..82ece24 --- /dev/null +++ b/vendor/inertia/packages/core/types/httpHandlers.d.ts @@ -0,0 +1,15 @@ +import { HttpCancelledError, HttpNetworkError, HttpResponseError } from './httpErrors'; +import { HttpErrorHandler, HttpRequestConfig, HttpRequestHandler, HttpResponse, HttpResponseHandler } from './types'; +declare class HttpHandlers { + protected requestHandlers: HttpRequestHandler[]; + protected responseHandlers: HttpResponseHandler[]; + protected errorHandlers: HttpErrorHandler[]; + onRequest(handler: HttpRequestHandler): () => void; + onResponse(handler: HttpResponseHandler): () => void; + onError(handler: HttpErrorHandler): () => void; + processRequest(config: HttpRequestConfig): Promise; + processResponse(response: HttpResponse): Promise; + processError(error: HttpResponseError | HttpNetworkError | HttpCancelledError): Promise; +} +export declare const httpHandlers: HttpHandlers; +export {}; diff --git a/vendor/inertia/packages/core/types/index.d.ts b/vendor/inertia/packages/core/types/index.d.ts new file mode 100644 index 0000000..132d822 --- /dev/null +++ b/vendor/inertia/packages/core/types/index.d.ts @@ -0,0 +1,23 @@ +import { Config } from './config'; +import { Router } from './router'; +export { UseFormUtils } from './useFormUtils'; +export { axiosAdapter } from './axiosHttpClient'; +export { config } from './config'; +export { getInitialPageFromDOM, getScrollableParent } from './domUtils'; +export { hasFiles } from './files'; +export { objectToFormData } from './formData'; +export { formDataToObject } from './formObject'; +export { default as createHeadManager } from './head'; +export { http } from './http'; +export { HttpCancelledError, HttpNetworkError, HttpResponseError } from './httpErrors'; +export { default as useInfiniteScroll } from './infiniteScroll'; +export { createLayoutPropsStore, mergeLayoutProps, normalizeLayouts, type LayoutDefinition, type LayoutPropsStore, } from './layout'; +export { shouldIntercept, shouldNavigate } from './navigationEvents'; +export { progress, default as setupProgress } from './progress'; +export { FormComponentResetSymbol, resetFormFields } from './resetFormFields'; +export { buildSSRBody } from './ssrUtils'; +export * from './types'; +export { hrefToUrl, isSameUrlWithoutQueryOrHash, isUrlMethodPair, mergeDataIntoQueryString, urlHasProtocol, urlToString, urlWithoutHash, } from './url'; +export { XhrHttpClient, xhrHttpClient } from './xhrHttpClient'; +export { type Config, type Router }; +export declare const router: Router; diff --git a/vendor/inertia/packages/core/types/infiniteScroll.d.ts b/vendor/inertia/packages/core/types/infiniteScroll.d.ts new file mode 100644 index 0000000..13ab25a --- /dev/null +++ b/vendor/inertia/packages/core/types/infiniteScroll.d.ts @@ -0,0 +1,12 @@ +import { UseInfiniteScrollOptions, UseInfiniteScrollProps } from './types'; +/** + * Core infinite scroll composable that orchestrates data fetching, DOM management, + * scroll preservation, and URL synchronization. + * + * This is the main entry point that coordinates four sub-systems: + * - Data management: Handles pagination state and server requests + * - Element management: DOM observation and intersection detection + * - Query string sync: Updates URL as user scrolls through pages + * - Scroll preservation: Maintains scroll position during content updates + */ +export default function useInfiniteScroll(options: UseInfiniteScrollOptions): UseInfiniteScrollProps; diff --git a/vendor/inertia/packages/core/types/infiniteScroll/data.d.ts b/vendor/inertia/packages/core/types/infiniteScroll/data.d.ts new file mode 100644 index 0000000..eb8c608 --- /dev/null +++ b/vendor/inertia/packages/core/types/infiniteScroll/data.d.ts @@ -0,0 +1,10 @@ +import { UseInfiniteScrollDataManager } from '../types'; +export declare const useInfiniteScrollData: (options: { + getPropName: () => string; + onBeforeUpdate: () => void; + onBeforePreviousRequest: () => void; + onBeforeNextRequest: () => void; + onCompletePreviousRequest: (loadedPage: string | number | null) => void; + onCompleteNextRequest: (loadedPage: string | number | null) => void; + onReset?: () => void; +}) => UseInfiniteScrollDataManager; diff --git a/vendor/inertia/packages/core/types/infiniteScroll/elements.d.ts b/vendor/inertia/packages/core/types/infiniteScroll/elements.d.ts new file mode 100644 index 0000000..1d9e51f --- /dev/null +++ b/vendor/inertia/packages/core/types/infiniteScroll/elements.d.ts @@ -0,0 +1,15 @@ +import { UseInfiniteScrollElementManager } from '../types'; +export declare const getPageFromElement: (element: HTMLElement) => string | undefined; +export declare const useInfiniteScrollElementManager: (options: { + shouldFetchNext: () => boolean; + shouldFetchPrevious: () => boolean; + getTriggerMargin: () => number; + getStartElement: () => HTMLElement; + getEndElement: () => HTMLElement; + getItemsElement: () => HTMLElement; + getScrollableParent: () => HTMLElement | null; + onPreviousTriggered: () => void; + onNextTriggered: () => void; + onItemIntersected: (element: HTMLElement) => void; + getPropName: () => string; +}) => UseInfiniteScrollElementManager; diff --git a/vendor/inertia/packages/core/types/infiniteScroll/queryString.d.ts b/vendor/inertia/packages/core/types/infiniteScroll/queryString.d.ts new file mode 100644 index 0000000..eaed9e7 --- /dev/null +++ b/vendor/inertia/packages/core/types/infiniteScroll/queryString.d.ts @@ -0,0 +1,13 @@ +/** + * As users scroll through infinite content, this system updates the URL to reflect + * which page they're currently viewing. It uses a "most visible page" calculation + * so that the URL reflects whichever page has the most visible items. + */ +export declare const useInfiniteScrollQueryString: (options: { + getPageName: () => string; + getItemsElement: () => HTMLElement; + shouldPreserveUrl: () => boolean; +}) => { + onItemIntersected: (itemElement: HTMLElement) => void; + cancel: () => boolean; +}; diff --git a/vendor/inertia/packages/core/types/infiniteScroll/scrollPreservation.d.ts b/vendor/inertia/packages/core/types/infiniteScroll/scrollPreservation.d.ts new file mode 100644 index 0000000..dc850df --- /dev/null +++ b/vendor/inertia/packages/core/types/infiniteScroll/scrollPreservation.d.ts @@ -0,0 +1,18 @@ +/** + * When loading content "before" the current viewport (e.g. loading page 1 when viewing page 2), + * new content is prepended to the DOM, which naturally pushes existing content down and + * disrupts the user's scroll position. This system maintains visual stability by: + * + * 1. Capturing a reference element and its position before the update + * 2. After new content is added, calculating how far that reference element moved + * 3. Adjusting scroll position to keep the reference element in the same visual location + */ +export declare const useInfiniteScrollPreservation: (options: { + getScrollableParent: () => HTMLElement | null; + getItemsElement: () => HTMLElement; +}) => { + createCallbacks: () => { + captureScrollPosition: () => void; + restoreScrollPosition: () => void; + }; +}; diff --git a/vendor/inertia/packages/core/types/initialVisit.d.ts b/vendor/inertia/packages/core/types/initialVisit.d.ts new file mode 100644 index 0000000..38f5554 --- /dev/null +++ b/vendor/inertia/packages/core/types/initialVisit.d.ts @@ -0,0 +1,10 @@ +export declare class InitialVisit { + static handle(): void; + protected static clearRememberedStateOnReload(): void; + protected static handleBackForward(): boolean; + /** + * @link https://inertiajs.com/redirects#external-redirects + */ + protected static handleLocation(): boolean; + protected static handleDefault(): void; +} diff --git a/vendor/inertia/packages/core/types/intersectionObservers.d.ts b/vendor/inertia/packages/core/types/intersectionObservers.d.ts new file mode 100644 index 0000000..2b3baa7 --- /dev/null +++ b/vendor/inertia/packages/core/types/intersectionObservers.d.ts @@ -0,0 +1,7 @@ +type IntersectionObserverCallback = (entry: IntersectionObserverEntry) => void; +interface IntersectionObserverManager { + new: (callback: IntersectionObserverCallback, options?: IntersectionObserverInit) => IntersectionObserver; + flushAll: () => void; +} +export declare const useIntersectionObservers: () => IntersectionObserverManager; +export {}; diff --git a/vendor/inertia/packages/core/types/layout.d.ts b/vendor/inertia/packages/core/types/layout.d.ts new file mode 100644 index 0000000..1dd522c --- /dev/null +++ b/vendor/inertia/packages/core/types/layout.d.ts @@ -0,0 +1,38 @@ +export interface LayoutDefinition { + component: Component; + props: Record; + name?: string; +} +export interface LayoutPropsStore { + set(props: Record): void; + setFor(name: string, props: Record): void; + get(): { + shared: Record; + named: Record>; + }; + reset(): void; + subscribe(callback: () => void): () => void; +} +export declare function createLayoutPropsStore(): LayoutPropsStore; +/** + * Merges layout props from three sources with priority: dynamic > static > defaults. + * Only keys present in `defaults` are included in the result. + * + * @example + * ```ts + * mergeLayoutProps( + * { title: 'Default', showSidebar: true }, // defaults declared in useLayoutProps() + * { title: 'My Page', color: 'blue' }, // static props from layout definition + * { showSidebar: false, fontSize: 16 }, // dynamic props from setLayoutProps() + * ) + * // => { title: 'My Page', showSidebar: false } + * // 'color' and 'fontSize' are excluded because they're not declared in defaults + * ``` + */ +export declare function mergeLayoutProps>(defaults: T, staticProps: Record, dynamicProps: Record): T; +type ComponentCheck = (value: unknown) => value is T; +/** + * Normalizes layout definitions into a consistent structure. + */ +export declare function normalizeLayouts(layout: unknown, isComponent: ComponentCheck, isRenderFunction?: (value: unknown) => boolean): LayoutDefinition[]; +export {}; diff --git a/vendor/inertia/packages/core/types/navigationEvents.d.ts b/vendor/inertia/packages/core/types/navigationEvents.d.ts new file mode 100644 index 0000000..a182dfc --- /dev/null +++ b/vendor/inertia/packages/core/types/navigationEvents.d.ts @@ -0,0 +1,15 @@ +type MouseNavigationEvent = Pick; +type KeyboardNavigationEvent = Pick; +/** + * Determine if this mouse event should be intercepted for navigation purposes. + * Links with modifier keys or non-left clicks should not be intercepted. + * Content editable elements and prevented events are ignored. + */ +export declare function shouldIntercept(event: MouseNavigationEvent): boolean; +/** + * Determine if this keyboard event should trigger a navigation request. + * Enter triggers navigation for both links and buttons currently. + * Space only triggers navigation for buttons specifically. + */ +export declare function shouldNavigate(event: KeyboardNavigationEvent): boolean; +export {}; diff --git a/vendor/inertia/packages/core/types/navigationType.d.ts b/vendor/inertia/packages/core/types/navigationType.d.ts new file mode 100644 index 0000000..39a35f4 --- /dev/null +++ b/vendor/inertia/packages/core/types/navigationType.d.ts @@ -0,0 +1,10 @@ +declare class NavigationType { + protected type: NavigationTimingType; + constructor(); + protected resolveType(): NavigationTimingType; + get(): NavigationTimingType; + isBackForward(): boolean; + isReload(): boolean; +} +export declare const navigationType: NavigationType; +export {}; diff --git a/vendor/inertia/packages/core/types/objectUtils.d.ts b/vendor/inertia/packages/core/types/objectUtils.d.ts new file mode 100644 index 0000000..c92ed59 --- /dev/null +++ b/vendor/inertia/packages/core/types/objectUtils.d.ts @@ -0,0 +1 @@ +export declare const objectsAreEqual: >(obj1: T, obj2: T, excludeKeys: { [K in keyof T]: K; }[keyof T][]) => boolean; diff --git a/vendor/inertia/packages/core/types/page.d.ts b/vendor/inertia/packages/core/types/page.d.ts new file mode 100644 index 0000000..a877cb1 --- /dev/null +++ b/vendor/inertia/packages/core/types/page.d.ts @@ -0,0 +1,51 @@ +import { Component, FlashData, Page, PageEvent, PageHandler, PageResolver, RouterInitParams, Visit } from './types'; +declare class CurrentPage { + protected page: Page; + protected swapComponent: PageHandler; + protected resolveComponent: PageResolver; + protected onFlashCallback?: (flash: Page['flash']) => void; + protected componentId: {}; + protected listeners: { + event: PageEvent; + callback: VoidFunction; + }[]; + protected isFirstPageLoad: boolean; + protected cleared: boolean; + protected pendingDeferredProps: Pick | null; + protected historyQuotaExceeded: boolean; + init({ initialPage, swapComponent, resolveComponent, onFlash, }: RouterInitParams): this; + set(page: Page, { replace, preserveScroll, preserveState, viewTransition, }?: { + replace?: boolean; + preserveScroll?: boolean; + preserveState?: boolean; + viewTransition?: Visit['viewTransition']; + }): Promise; + setQuietly(page: Page, { preserveState, }?: { + preserveState?: boolean; + }): Promise; + clear(): void; + isCleared(): boolean; + get(): Page; + getWithoutFlashData(): Page; + hasOnceProps(): boolean; + merge(data: Partial): void; + setPropsQuietly(props: Page['props']): Promise; + setFlash(flash: FlashData): void; + setUrlHash(hash: string): void; + remember(data: Page['rememberedState']): void; + swap({ component, page, preserveState, viewTransition, }: { + component: Component; + page: Page; + preserveState: boolean; + viewTransition: Visit['viewTransition']; + }): Promise; + resolve(component: string, page?: Page): Promise; + isTheSame(page: Page): boolean; + on(event: PageEvent, callback: VoidFunction): VoidFunction; + fireEventsFor(event: PageEvent): void; + mergeOncePropsIntoResponse(response: Page, { force }?: { + force?: boolean; + }): void; +} +export declare const page: CurrentPage; +export {}; diff --git a/vendor/inertia/packages/core/types/poll.d.ts b/vendor/inertia/packages/core/types/poll.d.ts new file mode 100644 index 0000000..0374ba9 --- /dev/null +++ b/vendor/inertia/packages/core/types/poll.d.ts @@ -0,0 +1,13 @@ +import { PollOptions } from './types'; +export declare class Poll { + protected id: number | null; + protected throttle: boolean; + protected keepAlive: boolean; + protected cb: VoidFunction; + protected interval: number; + protected cbCount: number; + constructor(interval: number, cb: VoidFunction, options: PollOptions); + stop(): void; + start(): void; + isInBackground(hidden: boolean): void; +} diff --git a/vendor/inertia/packages/core/types/polls.d.ts b/vendor/inertia/packages/core/types/polls.d.ts new file mode 100644 index 0000000..e47aa41 --- /dev/null +++ b/vendor/inertia/packages/core/types/polls.d.ts @@ -0,0 +1,14 @@ +import { Poll } from './poll'; +import { PollOptions } from './types'; +declare class Polls { + protected polls: Poll[]; + constructor(); + add(interval: number, cb: VoidFunction, options: PollOptions): { + stop: VoidFunction; + start: VoidFunction; + }; + clear(): void; + protected setupVisibilityListener(): void; +} +export declare const polls: Polls; +export {}; diff --git a/vendor/inertia/packages/core/types/prefetched.d.ts b/vendor/inertia/packages/core/types/prefetched.d.ts new file mode 100644 index 0000000..dd00ac0 --- /dev/null +++ b/vendor/inertia/packages/core/types/prefetched.d.ts @@ -0,0 +1,28 @@ +import { Response } from './response'; +import { ActiveVisit, CacheForOption, InFlightPrefetch, InternalActiveVisit, Page, PrefetchedResponse, PrefetchOptions, PrefetchRemovalTimer } from './types'; +declare class PrefetchedRequests { + protected cached: PrefetchedResponse[]; + protected inFlightRequests: InFlightPrefetch[]; + protected removalTimers: PrefetchRemovalTimer[]; + protected currentUseId: string | null; + add(params: ActiveVisit, sendFunc: (params: InternalActiveVisit) => void, { cacheFor, cacheTags }: PrefetchOptions): Promise | Promise; + removeAll(): void; + removeByTags(tags: string[]): void; + remove(params: ActiveVisit): void; + protected removeFromInFlight(params: ActiveVisit): void; + protected extractStaleValues(cacheFor: PrefetchOptions['cacheFor']): [number, number]; + protected cacheForToStaleAndExpires(cacheFor: PrefetchOptions['cacheFor']): [CacheForOption, CacheForOption]; + protected clearTimer(params: ActiveVisit): void; + protected scheduleForRemoval(params: ActiveVisit, expiresIn: number): void; + get(params: ActiveVisit): InFlightPrefetch | PrefetchedResponse | null; + use(prefetched: PrefetchedResponse | InFlightPrefetch, params: ActiveVisit): Promise; + protected removeSingleUseItems(params: ActiveVisit): void; + findCached(params: ActiveVisit): PrefetchedResponse | null; + findInFlight(params: ActiveVisit): InFlightPrefetch | null; + protected withoutPurposePrefetchHeader(params: ActiveVisit): ActiveVisit; + protected paramsAreEqual(params1: ActiveVisit, params2: ActiveVisit): boolean; + updateCachedOncePropsFromCurrentPage(): void; + protected getShortestOncePropTtl(page: Page): number | null; +} +export declare const prefetchedRequests: PrefetchedRequests; +export {}; diff --git a/vendor/inertia/packages/core/types/progress-component.d.ts b/vendor/inertia/packages/core/types/progress-component.d.ts new file mode 100644 index 0000000..3355be5 --- /dev/null +++ b/vendor/inertia/packages/core/types/progress-component.d.ts @@ -0,0 +1,13 @@ +import { ProgressSettings } from './types'; +declare const _default: { + configure: (options: Partial) => void; + isStarted: () => boolean; + done: (force?: boolean) => void; + set: (n: number) => void; + remove: () => void; + start: () => void; + status: null; + show: () => void; + hide: () => void; +}; +export default _default; diff --git a/vendor/inertia/packages/core/types/progress.d.ts b/vendor/inertia/packages/core/types/progress.d.ts new file mode 100644 index 0000000..d3495f8 --- /dev/null +++ b/vendor/inertia/packages/core/types/progress.d.ts @@ -0,0 +1,20 @@ +declare class Progress { + hideCount: number; + start(): void; + reveal(force?: boolean): void; + hide(): void; + set(status: number): void; + finish(): void; + reset(): void; + remove(): void; + isStarted(): boolean; + getStatus(): number | null; +} +export declare const progress: Progress; +export default function setupProgress({ delay, color, includeCSS, showSpinner, }?: { + delay?: number | undefined; + color?: string | undefined; + includeCSS?: boolean | undefined; + showSpinner?: boolean | undefined; +}): void; +export {}; diff --git a/vendor/inertia/packages/core/types/queryString.d.ts b/vendor/inertia/packages/core/types/queryString.d.ts new file mode 100644 index 0000000..ba9afe3 --- /dev/null +++ b/vendor/inertia/packages/core/types/queryString.d.ts @@ -0,0 +1,13 @@ +import type { QueryStringArrayFormatOption } from './types'; +/** + * Returns true if the given URL query string contains indexed array parameters. + */ +export declare function hasIndices(url: URL): boolean; +/** + * Parse a query string into a nested object. + */ +export declare function parse(query: string): Record; +/** + * Convert an object to a query string. + */ +export declare function stringify(data: Record, arrayFormat: QueryStringArrayFormatOption): string; diff --git a/vendor/inertia/packages/core/types/queue.d.ts b/vendor/inertia/packages/core/types/queue.d.ts new file mode 100644 index 0000000..6dd8e65 --- /dev/null +++ b/vendor/inertia/packages/core/types/queue.d.ts @@ -0,0 +1,7 @@ +export default class Queue { + protected items: (() => T)[]; + protected processingPromise: Promise | null; + add(item: () => T): Promise; + process(): Promise; + protected processNext(): Promise; +} diff --git a/vendor/inertia/packages/core/types/request.d.ts b/vendor/inertia/packages/core/types/request.d.ts new file mode 100644 index 0000000..bf195ac --- /dev/null +++ b/vendor/inertia/packages/core/types/request.d.ts @@ -0,0 +1,23 @@ +import { RequestParams } from './requestParams'; +import { Response } from './response'; +import type { ActiveVisit, Page } from './types'; +import { HttpProgressEvent, HttpRequestHeaders } from './types'; +export declare class Request { + protected page: Page; + protected response: Response; + protected cancelToken: AbortController; + protected requestParams: RequestParams; + protected requestHasFinished: boolean; + constructor(params: ActiveVisit, page: Page); + static create(params: ActiveVisit, page: Page): Request; + isPrefetch(): boolean; + send(): Promise; + protected finish(): void; + protected fireFinishEvents(): void; + cancel({ cancelled, interrupted }: { + cancelled?: boolean; + interrupted?: boolean; + }): void; + protected onProgress(progress: HttpProgressEvent): void; + protected getHeaders(): HttpRequestHeaders; +} diff --git a/vendor/inertia/packages/core/types/requestParams.d.ts b/vendor/inertia/packages/core/types/requestParams.d.ts new file mode 100644 index 0000000..b46bc86 --- /dev/null +++ b/vendor/inertia/packages/core/types/requestParams.d.ts @@ -0,0 +1,36 @@ +import { Response } from './response'; +import { ActiveVisit, HttpRequestHeaders, InternalActiveVisit, Page, PreserveStateOption, VisitCallbacks } from './types'; +export declare class RequestParams { + protected callbacks: { + name: keyof VisitCallbacks; + args: any[]; + }[]; + protected params: InternalActiveVisit; + constructor(params: InternalActiveVisit); + static create(params: ActiveVisit): RequestParams; + data(): import("./types").RequestPayload | null; + queryParams(): import("./types").RequestPayload; + isPartial(): boolean; + isPrefetch(): boolean; + isDeferredPropsRequest(): boolean; + onCancelToken(cb: VoidFunction): void; + markAsFinished(): void; + markAsCancelled({ cancelled, interrupted }: { + cancelled?: boolean | undefined; + interrupted?: boolean | undefined; + }): void; + wasCancelledAtAll(): boolean; + onFinish(): void; + onStart(): void; + onPrefetching(): void; + onPrefetchResponse(response: Response): void; + onPrefetchError(error: Error): void; + all(): InternalActiveVisit; + headers(): HttpRequestHeaders; + setPreserveOptions(page: Page): void; + runCallbacks(): void; + merge(toMerge: Partial): void; + protected wrapCallback(params: ActiveVisit, name: keyof VisitCallbacks): (...args: any[]) => void; + protected recordCallback(name: keyof VisitCallbacks, args: any[]): void; + static resolvePreserveOption(value: PreserveStateOption, page: Page): boolean; +} diff --git a/vendor/inertia/packages/core/types/requestStream.d.ts b/vendor/inertia/packages/core/types/requestStream.d.ts new file mode 100644 index 0000000..fb9cfe7 --- /dev/null +++ b/vendor/inertia/packages/core/types/requestStream.d.ts @@ -0,0 +1,20 @@ +import { Request } from './request'; +export declare class RequestStream { + protected requests: Request[]; + protected maxConcurrent: number; + protected interruptible: boolean; + constructor({ maxConcurrent, interruptible }: { + maxConcurrent: number; + interruptible: boolean; + }); + send(request: Request): void; + interruptInFlight(): void; + cancelInFlight({ prefetch }?: { + prefetch?: boolean | undefined; + }): void; + protected cancel({ cancelled, interrupted }?: { + cancelled?: boolean | undefined; + interrupted?: boolean | undefined; + }, force?: boolean): void; + protected shouldCancel(): boolean; +} diff --git a/vendor/inertia/packages/core/types/resetFormFields.d.ts b/vendor/inertia/packages/core/types/resetFormFields.d.ts new file mode 100644 index 0000000..ee5a497 --- /dev/null +++ b/vendor/inertia/packages/core/types/resetFormFields.d.ts @@ -0,0 +1,2 @@ +export declare const FormComponentResetSymbol: unique symbol; +export declare function resetFormFields(formElement: HTMLFormElement, defaults: FormData, fieldNames?: string[]): void; diff --git a/vendor/inertia/packages/core/types/response.d.ts b/vendor/inertia/packages/core/types/response.d.ts new file mode 100644 index 0000000..c50981d --- /dev/null +++ b/vendor/inertia/packages/core/types/response.d.ts @@ -0,0 +1,44 @@ +import { RequestParams } from './requestParams'; +import { ActiveVisit, ErrorBag, Errors, HttpResponse, Page } from './types'; +export declare class Response { + protected requestParams: RequestParams; + protected response: HttpResponse; + protected originatingPage: Page; + protected wasPrefetched: boolean; + constructor(requestParams: RequestParams, response: HttpResponse, originatingPage: Page); + static create(params: RequestParams, response: HttpResponse, originatingPage: Page): Response; + handlePrefetch(): Promise; + handle(): Promise; + process(): Promise; + mergeParams(params: ActiveVisit): void; + getPageResponse(): Page; + protected handleNonInertiaResponse(): Promise; + protected isInertiaResponse(): boolean; + protected hasStatus(status: number): boolean; + protected getHeader(header: string): string; + protected hasHeader(header: string): boolean; + protected isLocationVisit(): boolean; + /** + * @link https://inertiajs.com/redirects#external-redirects + */ + protected locationVisit(url: URL): boolean | void; + protected setPage(): Promise; + protected getDataFromResponse(response: any): any; + protected shouldSetPage(pageResponse: Page): boolean; + protected pageUrl(pageResponse: Page): string; + protected preserveEqualProps(pageResponse: Page): void; + protected mergeProps(pageResponse: Page): void; + /** + * By default, the Laravel adapter shares validation errors via Inertia::always(), + * so responses always include errors, even when empty. Components like + * InfiniteScroll and WhenVisible, as well as loading deferred props, + * perform async requests that should practically never reset errors. + */ + protected shouldPreserveErrors(pageResponse: Page): boolean; + protected mergeOrMatchItems(existingItems: any[], newItems: any[], matchProp: string, matchPropsOn: string[], shouldAppend?: boolean): any[]; + protected appendWithMatching(existingItems: any[], newItems: any[], newItemsMap: Map, uniqueProperty: string): any[]; + protected prependWithMatching(existingItems: any[], newItems: any[], newItemsMap: Map, uniqueProperty: string): any[]; + protected hasUniqueProperty(item: any, property: string): boolean; + protected setRememberedState(pageResponse: Page): Promise; + protected getScopedErrors(errors: Errors & ErrorBag): Errors; +} diff --git a/vendor/inertia/packages/core/types/router.d.ts b/vendor/inertia/packages/core/types/router.d.ts new file mode 100644 index 0000000..3a6413b --- /dev/null +++ b/vendor/inertia/packages/core/types/router.d.ts @@ -0,0 +1,63 @@ +import Queue from './queue'; +import { RequestStream } from './requestStream'; +import { ActiveVisit, ClientSideVisitOptions, Component, FlashData, GlobalEvent, GlobalEventNames, GlobalEventResult, InFlightPrefetch, OptimisticCallback, Page, PageFlashData, PendingVisit, PollOptions, PrefetchedResponse, PrefetchOptions, ReloadOptions, RequestPayload, RouterInitParams, UrlMethodPair, VisitCallbacks, VisitHelperOptions, VisitOptions } from './types'; +export declare class Router { + protected syncRequestStream: RequestStream; + protected asyncRequestStream: RequestStream; + protected clientVisitQueue: Queue>; + protected pendingOptimisticCallback: OptimisticCallback | null; + init({ initialPage, resolveComponent, swapComponent, onFlash, }: RouterInitParams): void; + optimistic(callback: OptimisticCallback): this; + get(url: URL | string | UrlMethodPair, data?: T, options?: VisitHelperOptions): void; + post(url: URL | string | UrlMethodPair, data?: T, options?: VisitHelperOptions): void; + put(url: URL | string | UrlMethodPair, data?: T, options?: VisitHelperOptions): void; + patch(url: URL | string | UrlMethodPair, data?: T, options?: VisitHelperOptions): void; + delete(url: URL | string | UrlMethodPair, options?: Omit, 'method'>): void; + reload(options?: ReloadOptions): void; + protected doReload(options?: ReloadOptions & { + deferredProps?: boolean; + }): void; + remember(data: unknown, key?: string): void; + restore(key?: string): T | undefined; + on(type: TEventName, callback: (event: GlobalEvent) => GlobalEventResult): VoidFunction; + /** + * @deprecated Use cancelAll() instead. + */ + cancel(): void; + cancelAll({ async, prefetch, sync }?: { + async?: boolean | undefined; + prefetch?: boolean | undefined; + sync?: boolean | undefined; + }): void; + poll(interval: number, requestOptions?: ReloadOptions, options?: PollOptions): { + stop: VoidFunction; + start: VoidFunction; + }; + visit(href: string | URL | UrlMethodPair, options?: VisitOptions): void; + getCached(href: string | URL | UrlMethodPair, options?: VisitOptions): InFlightPrefetch | PrefetchedResponse | null; + flush(href: string | URL | UrlMethodPair, options?: VisitOptions): void; + flushAll(): void; + flushByCacheTags(tags: string | string[]): void; + getPrefetching(href: string | URL | UrlMethodPair, options?: VisitOptions): InFlightPrefetch | PrefetchedResponse | null; + prefetch(href: string | URL | UrlMethodPair, options?: VisitOptions, prefetchOptions?: Partial): void; + clearHistory(): void; + decryptHistory(): Promise; + resolveComponent(component: string, page?: Page): Promise; + replace(params: ClientSideVisitOptions): void; + replaceProp(name: string, value: unknown | ((oldValue: unknown, props: TProps) => unknown), options?: Pick): void; + appendToProp(name: string, value: unknown | unknown[] | ((oldValue: unknown, props: TProps) => unknown | unknown[]), options?: Pick): void; + prependToProp(name: string, value: unknown | unknown[] | ((oldValue: unknown, props: TProps) => unknown | unknown[]), options?: Pick): void; + push(params: ClientSideVisitOptions): void; + flash(keyOrData: string | ((flash: FlashData) => TFlash) | TFlash, value?: unknown): void; + protected clientVisit(params: ClientSideVisitOptions, { replace }?: { + replace?: boolean; + }): void; + protected performClientVisit(params: ClientSideVisitOptions, { replace }?: { + replace?: boolean; + }): Promise; + protected getPrefetchParams(href: string | URL | UrlMethodPair, options: VisitOptions): ActiveVisit; + protected getPendingVisit(href: string | URL | UrlMethodPair, options: VisitOptions): PendingVisit; + protected getVisitEvents(options: VisitOptions): VisitCallbacks; + protected applyOptimisticUpdate(optimistic: OptimisticCallback, events: VisitCallbacks): void; + protected loadDeferredProps(deferred: Page['deferredProps']): void; +} diff --git a/vendor/inertia/packages/core/types/scroll.d.ts b/vendor/inertia/packages/core/types/scroll.d.ts new file mode 100644 index 0000000..74e8437 --- /dev/null +++ b/vendor/inertia/packages/core/types/scroll.d.ts @@ -0,0 +1,14 @@ +import { ScrollRegion } from './types'; +export declare class Scroll { + static save(): void; + static getScrollRegions(): ScrollRegion[]; + protected static regions(): NodeListOf; + static scrollToTop(): void; + static reset(): void; + static scrollToAnchor(): void; + static restore(scrollRegions: ScrollRegion[]): void; + static restoreScrollRegions(scrollRegions: ScrollRegion[]): void; + static restoreDocument(): void; + static onScroll(event: Event): void; + static onWindowScroll(): void; +} diff --git a/vendor/inertia/packages/core/types/server.d.ts b/vendor/inertia/packages/core/types/server.d.ts new file mode 100644 index 0000000..da3bd49 --- /dev/null +++ b/vendor/inertia/packages/core/types/server.d.ts @@ -0,0 +1,11 @@ +import { InertiaAppResponse, Page } from './types'; +export { BROWSER_APIS, type ClassifiedSSRError, type SSRErrorType } from './ssrErrors'; +type AppCallback = (page: Page) => InertiaAppResponse; +type ServerOptions = { + port?: number; + cluster?: boolean; + handleErrors?: boolean; +}; +type Port = number; +declare const _default: (render: AppCallback, options?: Port | ServerOptions) => AppCallback; +export default _default; diff --git a/vendor/inertia/packages/core/types/sessionStorage.d.ts b/vendor/inertia/packages/core/types/sessionStorage.d.ts new file mode 100644 index 0000000..98a2b14 --- /dev/null +++ b/vendor/inertia/packages/core/types/sessionStorage.d.ts @@ -0,0 +1,10 @@ +export declare class SessionStorage { + static locationVisitKey: string; + static set(key: string, value: any): void; + static get(key: string): any; + static merge(key: string, value: any): void; + static remove(key: string): void; + static removeNested(key: string, nestedKey: string): void; + static exists(key: string): boolean; + static clear(): void; +} diff --git a/vendor/inertia/packages/core/types/ssrErrors.d.ts b/vendor/inertia/packages/core/types/ssrErrors.d.ts new file mode 100644 index 0000000..805264e --- /dev/null +++ b/vendor/inertia/packages/core/types/ssrErrors.d.ts @@ -0,0 +1,28 @@ +/** + * SSR Error Classification for Production Server + * + * This module detects common SSR errors and provides helpful hints + * to developers on how to fix them. + */ +export type SSRErrorType = 'browser-api' | 'component-resolution' | 'render' | 'unknown'; +type SourceMapResolver = (file: string, line: number, column: number) => { + file: string; + line: number; + column: number; +} | null; +export declare function setSourceMapResolver(resolver: SourceMapResolver | null): void; +export interface ClassifiedSSRError { + error: string; + type: SSRErrorType; + component?: string; + url?: string; + browserApi?: string; + hint: string; + stack?: string; + sourceLocation?: string; + timestamp: string; +} +export declare const BROWSER_APIS: Record; +export declare function classifySSRError(error: Error, component?: string, url?: string): ClassifiedSSRError; +export declare function formatConsoleError(classified: ClassifiedSSRError): string; +export {}; diff --git a/vendor/inertia/packages/core/types/ssrUtils.d.ts b/vendor/inertia/packages/core/types/ssrUtils.d.ts new file mode 100644 index 0000000..eae9dfc --- /dev/null +++ b/vendor/inertia/packages/core/types/ssrUtils.d.ts @@ -0,0 +1,2 @@ +import type { Page } from './types'; +export declare function buildSSRBody(id: string, page: Page, html: string): string; diff --git a/vendor/inertia/packages/core/types/time.d.ts b/vendor/inertia/packages/core/types/time.d.ts new file mode 100644 index 0000000..8cc36e8 --- /dev/null +++ b/vendor/inertia/packages/core/types/time.d.ts @@ -0,0 +1,2 @@ +import { CacheForOption } from './types'; +export declare const timeToMs: (time: CacheForOption) => number; diff --git a/vendor/inertia/packages/core/types/types.d.ts b/vendor/inertia/packages/core/types/types.d.ts new file mode 100644 index 0000000..3f65ac5 --- /dev/null +++ b/vendor/inertia/packages/core/types/types.d.ts @@ -0,0 +1,649 @@ +import { NamedInputEvent, ValidationConfig, Validator } from 'laravel-precognition'; +import type { HttpCancelledError, HttpNetworkError, HttpResponseError } from './httpErrors'; +import { Response } from './response'; +export type HttpRequestHeaders = Record; +export type HttpResponseHeaders = Record; +export interface HttpProgressEvent { + progress: number | undefined; + loaded: number; + total: number | undefined; + percentage?: number; +} +export interface HttpRequestConfig { + method: Method; + url: string; + data?: unknown; + params?: Record; + headers?: HttpRequestHeaders; + signal?: AbortSignal; + onUploadProgress?: (event: HttpProgressEvent) => void; +} +export interface HttpResponse { + status: number; + data: string; + headers: HttpResponseHeaders; +} +export interface HttpClient { + request(config: HttpRequestConfig): Promise; +} +export interface HttpClientOptions { + xsrfCookieName?: string; + xsrfHeaderName?: string; +} +export type HttpRequestHandler = (config: HttpRequestConfig) => HttpRequestConfig | Promise; +export type HttpResponseHandler = (response: HttpResponse) => HttpResponse | Promise; +export type HttpErrorHandler = (error: HttpResponseError | HttpNetworkError | HttpCancelledError) => void | Promise; +export interface PageFlashData { + [key: string]: unknown; +} +export type DefaultInertiaConfig = { + errorValueType: string; + flashDataType: PageFlashData; + sharedPageProps: PageProps; +}; +/** + * Designed to allow overriding of some core types using TypeScript + * interface declaration merging. + * + * @see {@link DefaultInertiaConfig} for keys to override + * @example + * ```ts + * declare module '@inertiajs/core' { + * export interface InertiaConfig { + * errorValueType: string[] + * flashDataType: { + * toast?: { type: 'success' | 'error', message: string } + * } + * sharedPageProps: { + * auth: { user: User | null } + * } + * } + * } + * ``` + */ +export interface InertiaConfig { +} +export type InertiaConfigFor = Key extends keyof InertiaConfig ? InertiaConfig[Key] : DefaultInertiaConfig[Key]; +export type ErrorValue = InertiaConfigFor<'errorValueType'>; +export type FlashData = InertiaConfigFor<'flashDataType'>; +export type SharedPageProps = InertiaConfigFor<'sharedPageProps'>; +export type Errors = Record; +export type ErrorBag = Record; +export type FormDataConvertibleValue = Blob | FormDataEntryValue | Date | boolean | number | null | undefined; +export type FormDataConvertible = Array | { + [key: string]: FormDataConvertible; +} | FormDataConvertibleValue; +export type FormDataType = { + [K in keyof T]: T[K] extends infer U ? U extends FormDataConvertibleValue ? U : U extends (...args: unknown[]) => unknown ? never : U extends object | Array ? FormDataType : never : never; +}; +/** + * Uses `0 extends 1 & T` to detect `any` type and prevent infinite recursion. + */ +export type FormDataKeys = T extends Function | FormDataConvertibleValue ? never : T extends unknown[] ? ArrayFormDataKeys : T extends object ? ObjectFormDataKeys : never; +/** + * Helper type for array form data keys + */ +type ArrayFormDataKeys = number extends T['length'] ? `${number}` | (0 extends 1 & T[number] ? never : T[number] extends FormDataConvertibleValue ? never : `${number}.${FormDataKeys}`) : Extract | { + [Key in Extract]: 0 extends 1 & T[Key] ? never : T[Key] extends FormDataConvertibleValue ? never : `${Key & string}.${FormDataKeys}`; +}[Extract]; +/** + * Helper type for object form data keys + */ +type ObjectFormDataKeys = string extends keyof T ? string : Extract | { + [Key in Extract]: 0 extends 1 & T[Key] ? never : T[Key] extends FormDataConvertibleValue ? never : T[Key] extends any[] ? `${Key}.${FormDataKeys & string}` : T[Key] extends Record ? `${Key}.${FormDataKeys & string}` : Exclude extends any[] ? never : Exclude extends Record ? `${Key}.${FormDataKeys> & string}` : never; +}[Extract]; +type PartialFormDataErrors = { + [K in string extends keyof T ? string : Extract, string>]?: ErrorValue; +}; +export type FormDataErrors = PartialFormDataErrors & { + [K in keyof PartialFormDataErrors]: NonNullable[K]>; +}; +export type FormDataValues> = K extends `${infer P}.${infer Rest}` ? T extends unknown[] ? P extends `${infer I extends number}` ? Rest extends FormDataKeys ? FormDataValues : never : never : P extends keyof T ? Rest extends FormDataKeys ? FormDataValues : never : never : K extends keyof T ? T[K] : T extends unknown[] ? T[K & number] : never; +export type FormDataError = Partial, ErrorValue>>; +export type Method = 'get' | 'post' | 'put' | 'patch' | 'delete'; +export type RequestPayload = Record | FormData; +export interface PageProps { + [key: string]: unknown; +} +export type ScrollProp = { + pageName: string; + previousPage: number | string | null; + nextPage: number | string | null; + currentPage: number | string | null; + reset: boolean; +}; +export interface Page { + component: string; + props: PageProps & SharedProps & { + errors: Errors & ErrorBag; + deferred?: Record; + }; + url: string; + version: string | null; + clearHistory: boolean; + encryptHistory: boolean; + deferredProps?: Record>; + initialDeferredProps?: Record>; + mergeProps?: string[]; + prependProps?: string[]; + deepMergeProps?: string[]; + matchPropsOn?: string[]; + scrollProps?: Record; + flash: FlashData; + onceProps?: Record; + /** @internal */ + rememberedState: Record; +} +export type ScrollRegion = { + top: number; + left: number; +}; +export interface ClientSideVisitOptions { + component?: Page['component']; + url?: Page['url']; + props?: ((props: TProps, onceProps: Partial) => PageProps) | PageProps; + flash?: ((flash: FlashData) => PageFlashData) | PageFlashData; + clearHistory?: Page['clearHistory']; + encryptHistory?: Page['encryptHistory']; + preserveScroll?: VisitOptions['preserveScroll']; + preserveState?: VisitOptions['preserveState']; + errorBag?: string | null; + viewTransition?: VisitOptions['viewTransition']; + onError?: (errors: Errors) => void; + onFinish?: (visit: ClientSideVisitOptions) => void; + onFlash?: (flash: FlashData) => void; + onSuccess?: (page: Page) => void; +} +export type PageResolver = (name: string, page?: Page) => Component; +export type PageHandler = ({ component, page, preserveState, }: { + component: ComponentType; + page: Page; + preserveState: boolean; +}) => Promise; +export type PreserveStateOption = boolean | 'errors' | ((page: Page) => boolean); +export type QueryStringArrayFormatOption = 'indices' | 'brackets'; +export type Progress = HttpProgressEvent; +export type LocationVisit = { + preserveScroll: boolean; +}; +export type CancelToken = { + cancel: VoidFunction; +}; +export type CancelTokenCallback = (cancelToken: CancelToken) => void; +export type OptimisticCallback = (props: TProps) => Partial | void; +export type Visit = { + method: Method; + data: T; + replace: boolean; + preserveScroll: PreserveStateOption; + preserveState: PreserveStateOption; + only: Array; + except: Array; + headers: Record; + errorBag: string | null; + forceFormData: boolean; + queryStringArrayFormat: QueryStringArrayFormatOption; + async: boolean; + showProgress: boolean; + prefetch: boolean; + fresh: boolean; + reset: string[]; + preserveUrl: boolean; + preserveErrors: boolean; + invalidateCacheTags: string | string[]; + viewTransition: boolean | ((viewTransition: ViewTransition) => void); + optimistic?: OptimisticCallback; +}; +export type GlobalEventsMap = { + before: { + parameters: [PendingVisit]; + details: { + visit: PendingVisit; + }; + result: boolean | void; + }; + start: { + parameters: [PendingVisit]; + details: { + visit: PendingVisit; + }; + result: void; + }; + progress: { + parameters: [Progress | undefined]; + details: { + progress: Progress | undefined; + }; + result: void; + }; + finish: { + parameters: [ActiveVisit]; + details: { + visit: ActiveVisit; + }; + result: void; + }; + cancel: { + parameters: []; + details: {}; + result: void; + }; + beforeUpdate: { + parameters: [Page]; + details: { + page: Page; + }; + result: void; + }; + navigate: { + parameters: [Page]; + details: { + page: Page; + }; + result: void; + }; + success: { + parameters: [Page]; + details: { + page: Page; + }; + result: void; + }; + error: { + parameters: [Errors]; + details: { + errors: Errors; + }; + result: void; + }; + httpException: { + parameters: [HttpResponse]; + details: { + response: HttpResponse; + }; + result: boolean | void; + }; + networkError: { + parameters: [Error]; + details: { + exception: Error; + }; + result: boolean | void; + }; + prefetched: { + parameters: [HttpResponse, ActiveVisit]; + details: { + response: HttpResponse; + fetchedAt: number; + visit: ActiveVisit; + }; + result: void; + }; + prefetching: { + parameters: [ActiveVisit]; + details: { + visit: ActiveVisit; + }; + result: void; + }; + flash: { + parameters: [Page['flash']]; + details: { + flash: Page['flash']; + }; + result: void; + }; +}; +export type PageEvent = 'newComponent' | 'firstLoad'; +export type GlobalEventNames = keyof GlobalEventsMap; +export type GlobalEvent, T extends RequestPayload = RequestPayload> = CustomEvent>; +export type GlobalEventParameters, T extends RequestPayload = RequestPayload> = GlobalEventsMap[TEventName]['parameters']; +export type GlobalEventResult, T extends RequestPayload = RequestPayload> = GlobalEventsMap[TEventName]['result']; +export type GlobalEventDetails, T extends RequestPayload = RequestPayload> = GlobalEventsMap[TEventName]['details']; +export type GlobalEventTrigger, T extends RequestPayload = RequestPayload> = (...params: GlobalEventParameters) => GlobalEventResult; +export type GlobalEventCallback, T extends RequestPayload = RequestPayload> = (...params: GlobalEventParameters) => GlobalEventResult; +export type InternalEvent = 'missingHistoryItem' | 'loadDeferredProps' | 'historyQuotaExceeded'; +export type VisitCallbacks = { + onCancelToken: CancelTokenCallback; + onBefore: GlobalEventCallback<'before', T>; + onBeforeUpdate: GlobalEventCallback<'beforeUpdate', T>; + onStart: GlobalEventCallback<'start', T>; + onProgress: GlobalEventCallback<'progress', T>; + onFinish: GlobalEventCallback<'finish', T>; + onCancel: GlobalEventCallback<'cancel', T>; + onSuccess: GlobalEventCallback<'success', T>; + onError: GlobalEventCallback<'error', T>; + onHttpException: GlobalEventCallback<'httpException', T>; + onNetworkError: GlobalEventCallback<'networkError', T>; + onFlash: GlobalEventCallback<'flash', T>; + onPrefetched: GlobalEventCallback<'prefetched', T>; + onPrefetching: GlobalEventCallback<'prefetching', T>; +}; +export type VisitOptions = Partial & VisitCallbacks>; +export type ReloadOptions = Omit, 'preserveScroll' | 'preserveState'>; +export type PollOptions = { + keepAlive?: boolean; + autoStart?: boolean; +}; +export type VisitHelperOptions = Omit, 'method' | 'data'>; +export type RouterInitParams = { + initialPage: Page; + resolveComponent: PageResolver; + swapComponent: PageHandler; + onFlash?: (flash: Page['flash']) => void; +}; +export type PendingVisitOptions = { + url: URL; + completed: boolean; + cancelled: boolean; + interrupted: boolean; +}; +export type PendingVisit = Visit & PendingVisitOptions; +export type ActiveVisit = PendingVisit & Required, 'optimistic'>>; +export type InternalActiveVisit = ActiveVisit & { + onPrefetchResponse?: (response: Response) => void; + onPrefetchError?: (error: Error) => void; + deferredProps?: boolean; +}; +export type VisitId = unknown; +export type Component = unknown; +type FirstLevelOptional = { + [K in keyof T]?: T[K] extends object ? { + [P in keyof T[K]]?: T[K][P]; + } : T[K]; +}; +type PagesOption = string | { + path: string; + extension?: string | string[]; + transform?: (name: string) => string; +}; +type ProgressOptions = { + delay?: number; + color?: string; + includeCSS?: boolean; + showSpinner?: boolean; +}; +interface BaseCreateInertiaAppOptions { + resolve: TComponentResolver; + pages?: PagesOption; + layout?: (name: string, page: Page) => unknown; + setup: (options: TSetupOptions) => TSetupReturn; + title?: HeadManagerTitleCallback; + defaults?: FirstLevelOptional; + /** HTTP client or options to use for requests. Defaults to XhrHttpClient. */ + http?: HttpClient | HttpClientOptions; +} +export interface CreateInertiaAppOptionsForCSR extends BaseCreateInertiaAppOptions { + id?: string; + page?: Page; + progress?: ProgressOptions | false; + render?: undefined; +} +export interface CreateInertiaAppOptionsForSSR extends BaseCreateInertiaAppOptions { + id?: undefined; + page: Page; + progress?: undefined; + render: unknown; +} +export type InertiaAppSSRResponse = { + head: string[]; + body: string; +}; +export type InertiaAppResponse = Promise; +export type HeadManagerTitleCallback = (title: string) => string; +export interface CreateInertiaAppOptions { + id?: string; + resolve?: TComponentResolver; + pages?: PagesOption; + layout?: (name: string, page: Page) => unknown; + setup?: (options: TSetupOptions) => TSetupReturn; + title?: HeadManagerTitleCallback; + progress?: ProgressOptions | false; + defaults?: FirstLevelOptional; + /** HTTP client or options to use for requests. Defaults to XhrHttpClient. */ + http?: HttpClient | HttpClientOptions; +} +export type HeadManagerOnUpdateCallback = (elements: string[]) => void; +export type HeadManager = { + forceUpdate: () => void; + createProvider: () => { + reconnect: () => void; + update: HeadManagerOnUpdateCallback; + disconnect: () => void; + }; +}; +export type LinkPrefetchOption = 'mount' | 'hover' | 'click'; +export type TimeUnit = 'ms' | 's' | 'm' | 'h' | 'd'; +export type CacheForOption = number | `${number}${TimeUnit}` | string; +export type PrefetchOptions = { + cacheFor: CacheForOption | CacheForOption[]; + cacheTags: string | string[]; +}; +export type InertiaAppConfig = { + form: { + recentlySuccessfulDuration: number; + forceIndicesArrayFormatInFormData: boolean; + withAllErrors: boolean; + }; + prefetch: { + cacheFor: CacheForOption | CacheForOption[]; + hoverDelay: number; + }; + visitOptions?: (href: string, options: VisitOptions) => VisitOptions; +}; +export interface LinkComponentBaseProps extends Partial, 'data' | 'method' | 'replace' | 'preserveScroll' | 'preserveState' | 'preserveUrl' | 'only' | 'except' | 'headers' | 'queryStringArrayFormat' | 'async' | 'viewTransition'> & VisitCallbacks & { + href: string | UrlMethodPair; + prefetch: boolean | LinkPrefetchOption | LinkPrefetchOption[]; + cacheFor: CacheForOption | CacheForOption[]; + cacheTags: string | string[]; +}> { +} +type PrefetchObject = { + params: ActiveVisit; + response: Promise; +}; +export type InFlightPrefetch = PrefetchObject & { + staleTimestamp: null; + inFlight: true; +}; +export type PrefetchCancellationToken = { + isCancelled: boolean; + cancel: () => void; +}; +export type PrefetchedResponse = PrefetchObject & { + staleTimestamp: number; + timestamp: number; + expiresAt: number; + singleUse: boolean; + inFlight: false; + tags: string[]; +}; +export type PrefetchRemovalTimer = { + params: ActiveVisit; + timer: number; +}; +export type ProgressSettings = { + minimum: number; + easing: string; + positionUsing: 'translate3d' | 'translate' | 'margin'; + speed: number; + trickle: boolean; + trickleSpeed: number; + showSpinner: boolean; + barSelector: string; + spinnerSelector: string; + parent: string; + template: string; + includeCSS: boolean; + color: string; +}; +export type UrlMethodPair = { + url: string; + method: Method; +}; +export type UseFormTransformCallback = (data: TForm) => object; +export type UseFormWithPrecognitionArguments = [Method | (() => Method), string | (() => string)] | [UrlMethodPair | (() => UrlMethodPair)]; +type UseFormInertiaArguments = [] | [data: TForm | (() => TForm)] | [rememberKey: string, data: TForm | (() => TForm)]; +type UseFormPrecognitionArguments = [urlMethodPair: UrlMethodPair | (() => UrlMethodPair), data: TForm | (() => TForm)] | [method: Method | (() => Method), url: string | (() => string), data: TForm | (() => TForm)]; +export type UseFormArguments = UseFormInertiaArguments | UseFormPrecognitionArguments; +export type UseFormSubmitOptions = Omit; +export type UseFormSubmitArguments = [Method, string, UseFormSubmitOptions?] | [UrlMethodPair, UseFormSubmitOptions?] | [UseFormSubmitOptions?]; +export type UseHttpSubmitArguments = [Method, string, UseHttpSubmitOptions?] | [UrlMethodPair, UseHttpSubmitOptions?] | [UseHttpSubmitOptions?]; +export type FormComponentOptions = Pick; +export type FormComponentOptimisticCallback = (props: TProps, formData: Record) => Partial | void; +export type FormComponentProps = Partial & Omit> & { + method?: Method | Uppercase; + action?: string | UrlMethodPair; + transform?: (data: Record) => Record; + optimistic?: FormComponentOptimisticCallback; + options?: FormComponentOptions; + onSubmitComplete?: (props: FormComponentonSubmitCompleteArguments) => void; + disableWhileProcessing?: boolean; + resetOnSuccess?: boolean | string[]; + resetOnError?: boolean | string[]; + setDefaultsOnSuccess?: boolean; + validateFiles?: boolean; + validationTimeout?: number; + withAllErrors?: boolean | null; +}; +export type FormComponentMethods> = { + clearErrors: >(...fields: K[]) => void; + resetAndClearErrors: >(...fields: K[]) => void; + setError: { + >(field: K, value: ErrorValue): void; + (errors: FormDataErrors): void; + }; + reset: >(...fields: K[]) => void; + submit: () => void; + defaults: () => void; + getData: () => TForm; + getFormData: () => FormData; + valid: >(field: K) => boolean; + invalid: >(field: K) => boolean; + validate: >(field?: K | NamedInputEvent | ValidationConfig, config?: ValidationConfig) => void; + touch: >(...fields: K[]) => void; + touched: >(field?: K) => boolean; + validator: () => Validator; +}; +export type FormComponentonSubmitCompleteArguments> = Pick, 'reset' | 'defaults'>; +export type FormComponentState> = { + errors: FormDataErrors; + hasErrors: boolean; + processing: boolean; + progress: Progress | null; + wasSuccessful: boolean; + recentlySuccessful: boolean; + isDirty: boolean; + validating: boolean; +}; +export type FormComponentSlotProps> = FormComponentMethods & FormComponentState; +export type FormComponentRef> = FormComponentSlotProps; +export interface UseInfiniteScrollOptions { + getPropName: () => string; + inReverseMode: () => boolean; + shouldFetchNext: () => boolean; + shouldFetchPrevious: () => boolean; + shouldPreserveUrl: () => boolean; + getReloadOptions?: () => ReloadOptions; + getTriggerMargin: () => number; + getStartElement: () => HTMLElement; + getEndElement: () => HTMLElement; + getItemsElement: () => HTMLElement; + getScrollableParent: () => HTMLElement | null; + onBeforePreviousRequest: () => void; + onBeforeNextRequest: () => void; + onCompletePreviousRequest: () => void; + onCompleteNextRequest: () => void; + onDataReset?: () => void; +} +export interface UseInfiniteScrollDataManager { + getLastLoadedPage: () => number | string | null; + getPageName: () => string; + getRequestCount: () => number; + hasPrevious: () => boolean; + hasNext: () => boolean; + fetchNext: (reloadOptions?: ReloadOptions) => void; + fetchPrevious: (reloadOptions?: ReloadOptions) => void; + removeEventListener: () => void; +} +export interface UseInfiniteScrollElementManager { + setupObservers: () => void; + enableTriggers: () => void; + disableTriggers: () => void; + refreshTriggers: () => void; + flushAll: () => void; + processManuallyAddedElements: () => void; + processServerLoadedElements: (loadedPage: string | number | null) => void; +} +export interface UseInfiniteScrollProps { + dataManager: UseInfiniteScrollDataManager; + elementManager: UseInfiniteScrollElementManager; + flush: () => void; +} +export interface InfiniteScrollSlotProps { + loading: boolean; + loadingPrevious: boolean; + loadingNext: boolean; +} +export interface InfiniteScrollActionSlotProps { + loading: boolean; + loadingPrevious: boolean; + loadingNext: boolean; + fetch: () => void; + autoMode: boolean; + manualMode: boolean; + hasMore: boolean; + hasPrevious: boolean; + hasNext: boolean; +} +export interface InfiniteScrollRef { + fetchNext: (reloadOptions?: ReloadOptions) => void; + fetchPrevious: (reloadOptions?: ReloadOptions) => void; + hasPrevious: () => boolean; + hasNext: () => boolean; +} +export interface InfiniteScrollComponentBaseProps { + data: string; + buffer?: number; + as?: string; + manual?: boolean; + manualAfter?: number; + preserveUrl?: boolean; + reverse?: boolean; + autoScroll?: boolean; + onlyNext?: boolean; + onlyPrevious?: boolean; +} +export type UseHttpOptions = { + onBefore?: () => boolean | void; + onStart?: () => void; + onProgress?: (progress: HttpProgressEvent) => void; + onSuccess?: (response: TResponse) => void; + onError?: (errors: Errors) => void; + onFinish?: () => void; + onCancel?: () => void; + onCancelToken?: (cancelToken: CancelToken) => void; +}; +export type UseHttpSubmitOptions = UseHttpOptions & { + headers?: HttpRequestHeaders; + optimistic?: (currentData: TForm) => Partial; +}; +declare global { + interface DocumentEventMap { + 'inertia:before': GlobalEvent<'before'>; + 'inertia:start': GlobalEvent<'start'>; + 'inertia:progress': GlobalEvent<'progress'>; + 'inertia:success': GlobalEvent<'success'>; + 'inertia:error': GlobalEvent<'error'>; + 'inertia:httpException': GlobalEvent<'httpException'>; + 'inertia:networkError': GlobalEvent<'networkError'>; + 'inertia:finish': GlobalEvent<'finish'>; + 'inertia:beforeUpdate': GlobalEvent<'beforeUpdate'>; + 'inertia:navigate': GlobalEvent<'navigate'>; + 'inertia:flash': GlobalEvent<'flash'>; + } +} +export {}; diff --git a/vendor/inertia/packages/core/types/url.d.ts b/vendor/inertia/packages/core/types/url.d.ts new file mode 100644 index 0000000..95f4d83 --- /dev/null +++ b/vendor/inertia/packages/core/types/url.d.ts @@ -0,0 +1,13 @@ +import type { FormDataConvertible, Method, QueryStringArrayFormatOption, RequestPayload, UrlMethodPair, VisitOptions } from './types'; +export declare function hrefToUrl(href: string | URL): URL; +export declare const transformUrlAndData: (href: string | URL, data: RequestPayload, method: Method, forceFormData: VisitOptions["forceFormData"], queryStringArrayFormat: VisitOptions["queryStringArrayFormat"]) => [URL, RequestPayload]; +type MergeDataIntoQueryStringDataReturnType = T extends Record ? Record : RequestPayload; +export declare function mergeDataIntoQueryString(method: Method, href: URL | string, data: T, qsArrayFormat?: QueryStringArrayFormatOption): [string, MergeDataIntoQueryStringDataReturnType]; +export declare function urlWithoutHash(url: URL | Location): URL; +export declare const setHashIfSameUrl: (originUrl: URL | Location, destinationUrl: URL | Location) => void; +export declare const isSameUrlWithoutHash: (url1: URL | Location, url2: URL | Location) => boolean; +export declare const isSameUrlWithoutQueryOrHash: (url1: URL | Location, url2: URL | Location) => boolean; +export declare function isUrlMethodPair(href: unknown): href is UrlMethodPair; +export declare function urlHasProtocol(url: string): boolean; +export declare function urlToString(url: URL | string, absolute: boolean): string; +export {}; diff --git a/vendor/inertia/packages/core/types/useFormUtils.d.ts b/vendor/inertia/packages/core/types/useFormUtils.d.ts new file mode 100644 index 0000000..6609f3d --- /dev/null +++ b/vendor/inertia/packages/core/types/useFormUtils.d.ts @@ -0,0 +1,48 @@ +import { NamedInputEvent, ValidationConfig } from 'laravel-precognition'; +import { FormDataType, Method, UrlMethodPair, UseFormArguments, UseFormSubmitArguments, UseFormSubmitOptions } from './types'; +export declare class UseFormUtils { + /** + * Creates a callback that returns a UrlMethodPair. + * + * createWayfinderCallback(urlMethodPair) + * createWayfinderCallback(method, url) + * createWayfinderCallback(() => urlMethodPair) + * createWayfinderCallback(() => method, () => url) + */ + static createWayfinderCallback(...args: [UrlMethodPair | (() => UrlMethodPair)] | [Method | (() => Method), string | (() => string)]): () => UrlMethodPair; + /** + * Parses all useForm() arguments into { rememberKey, data, precognitionEndpoint }. + * + * useForm() + * useForm(data) + * useForm(rememberKey, data) + * useForm(method, url, data) + * useForm(urlMethodPair, data) + * + */ + static parseUseFormArguments>(...args: UseFormArguments): { + rememberKey: string | null; + data: TForm | (() => TForm); + precognitionEndpoint: (() => UrlMethodPair) | null; + }; + /** + * Parses all submission arguments into { method, url, options }. + * It uses the Precognition endpoint if no explicit method/url are provided. + * + * form.submit(method, url) + * form.submit(method, url, options) + * form.submit(urlMethodPair) + * form.submit(urlMethodPair, options) + * form.submit() + * form.submit(options) + */ + static parseSubmitArguments(args: UseFormSubmitArguments, precognitionEndpoint: (() => UrlMethodPair) | null): { + method: Method; + url: string; + options: UseFormSubmitOptions; + }; + /** + * Merges headers into the Precognition validate() arguments. + */ + static mergeHeadersForValidation(field?: string | NamedInputEvent | ValidationConfig, config?: ValidationConfig, headers?: Record): [string | NamedInputEvent | ValidationConfig | undefined, ValidationConfig | undefined]; +} diff --git a/vendor/inertia/packages/core/types/xhrHttpClient.d.ts b/vendor/inertia/packages/core/types/xhrHttpClient.d.ts new file mode 100644 index 0000000..8a3d727 --- /dev/null +++ b/vendor/inertia/packages/core/types/xhrHttpClient.d.ts @@ -0,0 +1,12 @@ +import { HttpClient, HttpClientOptions, HttpRequestConfig, HttpResponse } from './types'; +/** + * Inertia's built-in HTTP client using XMLHttpRequest + */ +export declare class XhrHttpClient implements HttpClient { + protected xsrfCookieName: string; + protected xsrfHeaderName: string; + constructor(options?: HttpClientOptions); + request(config: HttpRequestConfig): Promise; + protected doRequest(config: HttpRequestConfig): Promise; +} +export declare const xhrHttpClient: XhrHttpClient; diff --git a/vendor/inertia/packages/svelte/dist/components/App.svelte b/vendor/inertia/packages/svelte/dist/components/App.svelte new file mode 100644 index 0000000..65db521 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/components/App.svelte @@ -0,0 +1,128 @@ + + + + + diff --git a/vendor/inertia/packages/svelte/dist/components/App.svelte.d.ts b/vendor/inertia/packages/svelte/dist/components/App.svelte.d.ts new file mode 100644 index 0000000..3cea512 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/components/App.svelte.d.ts @@ -0,0 +1,18 @@ +import type { ComponentResolver, ResolvedComponent } from '../types'; +import { type Page, type PageProps } from '@inertiajs/core'; +export interface InertiaAppProps { + initialComponent: ResolvedComponent; + initialPage: Page; + resolveComponent: ComponentResolver; + defaultLayout?: (name: string, page: Page) => unknown; +} +import type { Component } from 'svelte'; +interface Props { + initialComponent: InertiaAppProps['initialComponent']; + initialPage: InertiaAppProps['initialPage']; + resolveComponent: InertiaAppProps['resolveComponent']; + defaultLayout?: InertiaAppProps['defaultLayout']; +} +declare const App: Component; +type App = ReturnType; +export default App; diff --git a/vendor/inertia/packages/svelte/dist/components/Deferred.svelte b/vendor/inertia/packages/svelte/dist/components/Deferred.svelte new file mode 100644 index 0000000..adfc9d0 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/components/Deferred.svelte @@ -0,0 +1,72 @@ + + +{#if loaded} + {@render children?.({ reloading })} +{:else} + {@render fallback?.()} +{/if} diff --git a/vendor/inertia/packages/svelte/dist/components/Deferred.svelte.d.ts b/vendor/inertia/packages/svelte/dist/components/Deferred.svelte.d.ts new file mode 100644 index 0000000..a23f004 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/components/Deferred.svelte.d.ts @@ -0,0 +1,10 @@ +interface Props { + data: string | string[]; + fallback?: import('svelte').Snippet; + children?: import('svelte').Snippet<[{ + reloading: boolean; + }]>; +} +declare const Deferred: import("svelte").Component; +type Deferred = ReturnType; +export default Deferred; diff --git a/vendor/inertia/packages/svelte/dist/components/Form.svelte b/vendor/inertia/packages/svelte/dist/components/Form.svelte new file mode 100644 index 0000000..5352e2f --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/components/Form.svelte @@ -0,0 +1,365 @@ + + +{/* @ts-expect-error method type does not match here*/ null} +
+ {@render children?.({ + errors: slotErrors, + hasErrors: form.hasErrors, + processing: form.processing, + progress: form.progress, + wasSuccessful: form.wasSuccessful, + recentlySuccessful: form.recentlySuccessful, + clearErrors, + resetAndClearErrors, + setError, + isDirty, + submit, + defaults, + reset, + getData, + getFormData, + validator, + validate, + touch, + validating: form.validating, + valid: form.valid, + invalid: form.invalid, + touched: form.touched, + })} +
diff --git a/vendor/inertia/packages/svelte/dist/components/Form.svelte.d.ts b/vendor/inertia/packages/svelte/dist/components/Form.svelte.d.ts new file mode 100644 index 0000000..440071a --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/components/Form.svelte.d.ts @@ -0,0 +1,51 @@ +import { type FormComponentProps, type FormComponentSlotProps, type FormDataConvertible } from '@inertiajs/core'; +import { type NamedInputEvent, type ValidationConfig, type Validator } from 'laravel-precognition'; +interface Props { + action?: FormComponentProps['action']; + method?: FormComponentProps['method']; + headers?: FormComponentProps['headers']; + queryStringArrayFormat?: FormComponentProps['queryStringArrayFormat']; + errorBag?: FormComponentProps['errorBag']; + showProgress?: FormComponentProps['showProgress']; + transform?: FormComponentProps['transform']; + options?: FormComponentProps['options']; + onCancelToken?: FormComponentProps['onCancelToken']; + onBefore?: FormComponentProps['onBefore']; + onStart?: FormComponentProps['onStart']; + onProgress?: FormComponentProps['onProgress']; + onFinish?: FormComponentProps['onFinish']; + onCancel?: FormComponentProps['onCancel']; + onSuccess?: FormComponentProps['onSuccess']; + onError?: FormComponentProps['onError']; + onSubmitComplete?: FormComponentProps['onSubmitComplete']; + disableWhileProcessing?: boolean; + invalidateCacheTags?: FormComponentProps['invalidateCacheTags']; + resetOnError?: FormComponentProps['resetOnError']; + resetOnSuccess?: FormComponentProps['resetOnSuccess']; + setDefaultsOnSuccess?: FormComponentProps['setDefaultsOnSuccess']; + validateFiles?: FormComponentProps['validateFiles']; + validationTimeout?: FormComponentProps['validationTimeout']; + optimistic?: FormComponentProps['optimistic']; + withAllErrors?: FormComponentProps['withAllErrors']; + children?: import('svelte').Snippet<[FormComponentSlotProps]>; + [key: string]: any; +} +type FormSubmitter = HTMLElement | null; +declare const Form: import("svelte").Component FormData; + getData: (submitter?: FormSubmitter) => Record; + submit: (submitter?: FormSubmitter) => void; + reset: (...fields: string[]) => void; + clearErrors: (...fields: string[]) => void; + resetAndClearErrors: (...fields: string[]) => void; + setError: (fieldOrFields: string | Record, maybeValue?: string) => void; + defaults: () => void; + validate: (field?: string | NamedInputEvent | ValidationConfig, config?: ValidationConfig) => import("../useForm.svelte").InertiaFormProps> & Record & import("../useForm.svelte").InertiaFormValidationProps>; + valid: (field: string) => boolean; + invalid: (field: string) => boolean; + touch: (field: string | NamedInputEvent | string[], ...fields: string[]) => import("../useForm.svelte").InertiaFormProps> & Record & import("../useForm.svelte").InertiaFormValidationProps>; + touched: (field?: string) => boolean; + validator: () => Validator; +}, "action">; +type Form = ReturnType; +export default Form; diff --git a/vendor/inertia/packages/svelte/dist/components/InfiniteScroll.svelte b/vendor/inertia/packages/svelte/dist/components/InfiniteScroll.svelte new file mode 100644 index 0000000..5758e55 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/components/InfiniteScroll.svelte @@ -0,0 +1,255 @@ + + +{#if !startElement && !reverse} +
+ {#if previous}{@render previous({ exposedPrevious, ...exposedPrevious })}{:else if loadingPrevious} + {@render loading?.({ exposedPrevious, ...exposedPrevious })} + {/if} +
+{/if} + +{#if !endElement && reverse} +
+ {#if next}{@render next({ exposedNext, ...exposedNext })}{:else if loadingNext} + {@render loading?.({ exposedNext, ...exposedNext })} + {/if} +
+{/if} + + + {@render children?.({ exposedSlot, ...exposedSlot })} + + +{#if !startElement && reverse} +
+ {#if previous}{@render previous({ exposedPrevious, ...exposedPrevious })}{:else if loadingPrevious} + {@render loading?.({ exposedPrevious, ...exposedPrevious })} + {/if} +
+{/if} + +{#if !endElement && !reverse} +
+ {#if next}{@render next({ exposedNext, ...exposedNext })}{:else if loadingNext} + {@render loading?.({ exposedNext, ...exposedNext })} + {/if} +
+{/if} diff --git a/vendor/inertia/packages/svelte/dist/components/InfiniteScroll.svelte.d.ts b/vendor/inertia/packages/svelte/dist/components/InfiniteScroll.svelte.d.ts new file mode 100644 index 0000000..b33381b --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/components/InfiniteScroll.svelte.d.ts @@ -0,0 +1,30 @@ +import { type InfiniteScrollComponentBaseProps, type ReloadOptions } from '@inertiajs/core'; +interface Props { + data: InfiniteScrollComponentBaseProps['data']; + buffer?: InfiniteScrollComponentBaseProps['buffer']; + as?: InfiniteScrollComponentBaseProps['as']; + manual?: InfiniteScrollComponentBaseProps['manual']; + manualAfter?: InfiniteScrollComponentBaseProps['manualAfter']; + preserveUrl?: InfiniteScrollComponentBaseProps['preserveUrl']; + reverse?: InfiniteScrollComponentBaseProps['reverse']; + autoScroll?: InfiniteScrollComponentBaseProps['autoScroll']; + startElement?: string | (() => HTMLElement | null) | null; + endElement?: string | (() => HTMLElement | null) | null; + itemsElement?: string | (() => HTMLElement | null) | null; + params?: ReloadOptions; + onlyNext?: boolean; + onlyPrevious?: boolean; + previous?: import('svelte').Snippet<[any]>; + loading?: import('svelte').Snippet<[any]>; + next?: import('svelte').Snippet<[any]>; + children?: import('svelte').Snippet<[any]>; + [key: string]: any; +} +declare const InfiniteScroll: import("svelte").Component void; + fetchNext: (options?: any) => void; + hasPrevious: () => boolean; + hasNext: () => boolean; +}, "">; +type InfiniteScroll = ReturnType; +export default InfiniteScroll; diff --git a/vendor/inertia/packages/svelte/dist/components/Link.svelte b/vendor/inertia/packages/svelte/dist/components/Link.svelte new file mode 100644 index 0000000..3c7b3e4 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/components/Link.svelte @@ -0,0 +1,110 @@ + + + + + {@render children?.()} + diff --git a/vendor/inertia/packages/svelte/dist/components/Link.svelte.d.ts b/vendor/inertia/packages/svelte/dist/components/Link.svelte.d.ts new file mode 100644 index 0000000..30cb148 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/components/Link.svelte.d.ts @@ -0,0 +1,47 @@ +import type { LinkComponentBaseProps } from '@inertiajs/core'; +interface Props { + href?: LinkComponentBaseProps['href']; + as?: keyof HTMLElementTagNameMap; + data?: LinkComponentBaseProps['data']; + method?: LinkComponentBaseProps['method']; + replace?: LinkComponentBaseProps['replace']; + preserveScroll?: LinkComponentBaseProps['preserveScroll']; + preserveState?: LinkComponentBaseProps['preserveState'] | null; + preserveUrl?: LinkComponentBaseProps['preserveUrl']; + only?: LinkComponentBaseProps['only']; + except?: LinkComponentBaseProps['except']; + headers?: LinkComponentBaseProps['headers']; + queryStringArrayFormat?: LinkComponentBaseProps['queryStringArrayFormat']; + async?: LinkComponentBaseProps['async']; + prefetch?: LinkComponentBaseProps['prefetch']; + cacheFor?: LinkComponentBaseProps['cacheFor']; + cacheTags?: LinkComponentBaseProps['cacheTags']; + viewTransition?: LinkComponentBaseProps['viewTransition']; + children?: import('svelte').Snippet; + [key: string]: any; +} +type Callbacks = { + onfocus?: () => void; + onblur?: () => void; + onclick?: () => void; + ondblclick?: () => void; + onmousedown?: () => void; + onmousemove?: () => void; + onmouseout?: () => void; + onmouseover?: () => void; + onmouseup?: () => void; + 'oncancel-token'?: () => void; + onbefore?: () => void; + onstart?: () => void; + onprogress?: () => void; + onfinish?: () => void; + oncancel?: () => void; + onsuccess?: () => void; + onerror?: () => void; + onprefetching?: () => void; + onprefetched?: () => void; +}; +type $$ComponentProps = Props & Callbacks; +declare const Link: import("svelte").Component<$$ComponentProps, {}, "">; +type Link = ReturnType; +export default Link; diff --git a/vendor/inertia/packages/svelte/dist/components/Render.svelte b/vendor/inertia/packages/svelte/dist/components/Render.svelte new file mode 100644 index 0000000..2bc97ed --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/components/Render.svelte @@ -0,0 +1,75 @@ + + + + +{#if component} + {#key children?.length === 0 ? key : null} + {#if children.length > 0} + {@const SvelteComponent = component} + + {#each children as child} + + {/each} + + {:else} + {@const SvelteComponent_1 = component} + + {/if} + {/key} +{/if} diff --git a/vendor/inertia/packages/svelte/dist/components/Render.svelte.d.ts b/vendor/inertia/packages/svelte/dist/components/Render.svelte.d.ts new file mode 100644 index 0000000..2821fc2 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/components/Render.svelte.d.ts @@ -0,0 +1,18 @@ +import type { PageProps } from '@inertiajs/core'; +import type { Component } from 'svelte'; +export type RenderProps = { + component: Component; + props?: PageProps; + children?: RenderProps[]; + key?: number | null; + name?: string; +}; +export type RenderFunction = { + (component: Component, props?: PageProps, children?: RenderProps[], key?: number | null): RenderProps; + (component: Component, children?: RenderProps[], key?: number | null): RenderProps; +}; +export declare const h: RenderFunction; +import Render from './Render.svelte'; +declare const Render: Component; +type Render = ReturnType; +export default Render; diff --git a/vendor/inertia/packages/svelte/dist/components/WhenVisible.svelte b/vendor/inertia/packages/svelte/dist/components/WhenVisible.svelte new file mode 100644 index 0000000..0f1ff12 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/components/WhenVisible.svelte @@ -0,0 +1,92 @@ + + +{#if always || !loaded} + +{/if} + +{#if loaded} + {@render children?.({ fetching })} +{:else if fallback} + {@render fallback?.()} +{/if} diff --git a/vendor/inertia/packages/svelte/dist/components/WhenVisible.svelte.d.ts b/vendor/inertia/packages/svelte/dist/components/WhenVisible.svelte.d.ts new file mode 100644 index 0000000..39ae0a4 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/components/WhenVisible.svelte.d.ts @@ -0,0 +1,13 @@ +import { type ReloadOptions } from '@inertiajs/core'; +interface Props { + data?: string | string[]; + params?: ReloadOptions; + buffer?: number; + as?: keyof HTMLElementTagNameMap; + always?: boolean; + children?: import('svelte').Snippet<[any]>; + fallback?: import('svelte').Snippet; +} +declare const WhenVisible: import("svelte").Component; +type WhenVisible = ReturnType; +export default WhenVisible; diff --git a/vendor/inertia/packages/svelte/dist/components/createForm.d.ts b/vendor/inertia/packages/svelte/dist/components/createForm.d.ts new file mode 100644 index 0000000..29e84da --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/components/createForm.d.ts @@ -0,0 +1,8 @@ +import type { FormComponentSlotProps } from '@inertiajs/core'; +import type { Component, ComponentProps, Snippet } from 'svelte'; +import Form from './Form.svelte'; +type TypedFormComponent> = Component, 'children'> & { + children?: Snippet<[FormComponentSlotProps]>; +}>; +export declare function createForm = Record>(): TypedFormComponent; +export {}; diff --git a/vendor/inertia/packages/svelte/dist/components/createForm.js b/vendor/inertia/packages/svelte/dist/components/createForm.js new file mode 100644 index 0000000..ebfd397 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/components/createForm.js @@ -0,0 +1,4 @@ +import Form from './Form.svelte'; +export function createForm() { + return Form; +} diff --git a/vendor/inertia/packages/svelte/dist/components/formContext.d.ts b/vendor/inertia/packages/svelte/dist/components/formContext.d.ts new file mode 100644 index 0000000..eb8626b --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/components/formContext.d.ts @@ -0,0 +1,4 @@ +import type { FormComponentRef } from '@inertiajs/core'; +declare const setFormContext: (context: FormComponentRef) => FormComponentRef; +export declare function useFormContext>(): FormComponentRef | undefined; +export { setFormContext }; diff --git a/vendor/inertia/packages/svelte/dist/components/formContext.js b/vendor/inertia/packages/svelte/dist/components/formContext.js new file mode 100644 index 0000000..8c38bd3 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/components/formContext.js @@ -0,0 +1,11 @@ +import { createContext } from 'svelte'; +const [getFormContext, setFormContext] = createContext(); +export function useFormContext() { + try { + return getFormContext(); + } + catch { + return undefined; + } +} +export { setFormContext }; diff --git a/vendor/inertia/packages/svelte/dist/createInertiaApp.d.ts b/vendor/inertia/packages/svelte/dist/createInertiaApp.d.ts new file mode 100644 index 0000000..1220ed2 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/createInertiaApp.d.ts @@ -0,0 +1,23 @@ +import { type CreateInertiaAppOptions, type CreateInertiaAppOptionsForCSR, type InertiaAppSSRResponse, type Page, type PageProps } from '@inertiajs/core'; +import App, { type InertiaAppProps } from './components/App.svelte'; +import type { ComponentResolver, SvelteInertiaAppConfig } from './types'; +type SvelteRenderResult = { + body: string; + head: string; +}; +type SetupOptions = { + el: HTMLElement | null; + App: typeof App; + props: InertiaAppProps; +}; +type InertiaAppOptionsForCSR = CreateInertiaAppOptionsForCSR, SvelteRenderResult | void, SvelteInertiaAppConfig>; +type InertiaAppOptionsAuto = CreateInertiaAppOptions, SvelteRenderResult | void, SvelteInertiaAppConfig> & { + page?: Page; +}; +type SvelteServerRender = (component: typeof App, options: { + props: InertiaAppProps; +}) => SvelteRenderResult; +type RenderFunction = (page: Page, render: SvelteServerRender) => Promise; +export default function createInertiaApp(options: InertiaAppOptionsForCSR): Promise; +export default function createInertiaApp(options?: InertiaAppOptionsAuto): Promise>; +export {}; diff --git a/vendor/inertia/packages/svelte/dist/createInertiaApp.js b/vendor/inertia/packages/svelte/dist/createInertiaApp.js new file mode 100644 index 0000000..3bff40b --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/createInertiaApp.js @@ -0,0 +1,72 @@ +import { buildSSRBody, getInitialPageFromDOM, http as httpModule, router, setupProgress, } from '@inertiajs/core'; +import { hydrate, mount } from 'svelte'; +import App, {} from './components/App.svelte'; +import { config } from './index'; +export default async function createInertiaApp({ id = 'app', resolve, setup, progress = {}, page, defaults = {}, http, layout, } = {}) { + config.replace(defaults); + if (http) { + httpModule.setClient(http); + } + const isServer = typeof window === 'undefined'; + const resolveComponent = (name, page) => Promise.resolve(resolve(name, page)); + if (isServer && !page) { + return async (page, render) => { + const initialComponent = (await resolveComponent(page.component, page)); + const props = { + initialPage: page, + initialComponent, + resolveComponent, + defaultLayout: layout, + }; + let svelteApp; + if (setup) { + const result = await setup({ el: null, App, props }); + if (!result) { + throw new Error('Inertia SSR setup function must return a render result ({ body, head })'); + } + svelteApp = result; + } + else { + svelteApp = render(App, { props }); + } + const body = buildSSRBody(id, page, svelteApp.body); + return { + body, + head: [svelteApp.head], + }; + }; + } + const initialPage = page || getInitialPageFromDOM(id); + const [initialComponent] = await Promise.all([ + resolveComponent(initialPage.component, initialPage), + router.decryptHistory().catch(() => { }), + ]); + const props = { initialPage, initialComponent, resolveComponent, defaultLayout: layout }; + if (isServer) { + if (!setup) { + throw new Error('Inertia SSR requires a setup function that returns a render result ({ body, head })'); + } + const svelteApp = await setup({ el: null, App, props }); + if (svelteApp) { + const body = buildSSRBody(id, initialPage, svelteApp.body); + return { + body, + head: [svelteApp.head], + }; + } + return; + } + const target = document.getElementById(id); + if (setup) { + await setup({ el: target, App, props }); + } + else if (target.hasAttribute('data-server-rendered')) { + hydrate(App, { target, props }); + } + else { + mount(App, { target, props }); + } + if (progress) { + setupProgress(progress); + } +} diff --git a/vendor/inertia/packages/svelte/dist/index.d.ts b/vendor/inertia/packages/svelte/dist/index.d.ts new file mode 100644 index 0000000..ee129b4 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/index.d.ts @@ -0,0 +1,20 @@ +export { http, progress, router } from '@inertiajs/core'; +export { default as App } from './components/App.svelte'; +export { createForm } from './components/createForm'; +export { default as Deferred } from './components/Deferred.svelte'; +export { default as Form } from './components/Form.svelte'; +export { useFormContext } from './components/formContext'; +export { default as InfiniteScroll } from './components/InfiniteScroll.svelte'; +export { default as Link } from './components/Link.svelte'; +export { default as WhenVisible } from './components/WhenVisible.svelte'; +export { default as createInertiaApp } from './createInertiaApp'; +export { setLayoutProps, setLayoutPropsFor, useLayoutProps } from './layoutProps.svelte'; +export { default as inertia } from './link'; +export { default as page, usePage } from './page.svelte'; +export { type ResolvedComponent, type SvelteInertiaAppConfig } from './types'; +export { default as useForm, type InertiaForm, type InertiaFormProps, type InertiaPrecognitiveForm, } from './useForm.svelte'; +export { default as useHttp } from './useHttp.svelte'; +export { default as usePoll } from './usePoll'; +export { default as usePrefetch } from './usePrefetch.svelte'; +export { default as useRemember } from './useRemember.svelte'; +export declare const config: import("@inertiajs/core").Config; diff --git a/vendor/inertia/packages/svelte/dist/index.js b/vendor/inertia/packages/svelte/dist/index.js new file mode 100644 index 0000000..c1114a1 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/index.js @@ -0,0 +1,21 @@ +import { config as coreConfig } from '@inertiajs/core'; +export { http, progress, router } from '@inertiajs/core'; +export { default as App } from './components/App.svelte'; +export { createForm } from './components/createForm'; +export { default as Deferred } from './components/Deferred.svelte'; +export { default as Form } from './components/Form.svelte'; +export { useFormContext } from './components/formContext'; +export { default as InfiniteScroll } from './components/InfiniteScroll.svelte'; +export { default as Link } from './components/Link.svelte'; +export { default as WhenVisible } from './components/WhenVisible.svelte'; +export { default as createInertiaApp } from './createInertiaApp'; +export { setLayoutProps, setLayoutPropsFor, useLayoutProps } from './layoutProps.svelte'; +export { default as inertia } from './link'; +export { default as page, usePage } from './page.svelte'; +export {} from './types'; +export { default as useForm, } from './useForm.svelte'; +export { default as useHttp } from './useHttp.svelte'; +export { default as usePoll } from './usePoll'; +export { default as usePrefetch } from './usePrefetch.svelte'; +export { default as useRemember } from './useRemember.svelte'; +export const config = coreConfig.extend({}); diff --git a/vendor/inertia/packages/svelte/dist/layoutProps.svelte.d.ts b/vendor/inertia/packages/svelte/dist/layoutProps.svelte.d.ts new file mode 100644 index 0000000..bfe0aa1 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/layoutProps.svelte.d.ts @@ -0,0 +1,6 @@ +import { type Readable } from 'svelte/store'; +export declare function setLayoutProps(props: Record): void; +export declare function setLayoutPropsFor(name: string, props: Record): void; +export declare function resetLayoutProps(): void; +export declare const LAYOUT_CONTEXT_KEY: unique symbol; +export declare function useLayoutProps>(defaults: T): Readable; diff --git a/vendor/inertia/packages/svelte/dist/layoutProps.svelte.js b/vendor/inertia/packages/svelte/dist/layoutProps.svelte.js new file mode 100644 index 0000000..7e15acd --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/layoutProps.svelte.js @@ -0,0 +1,25 @@ +import { createLayoutPropsStore, mergeLayoutProps } from '@inertiajs/core'; +import { getContext } from 'svelte'; +import { readable } from 'svelte/store'; +const store = createLayoutPropsStore(); +export function setLayoutProps(props) { + store.set(props); +} +export function setLayoutPropsFor(name, props) { + store.setFor(name, props); +} +export function resetLayoutProps() { + store.reset(); +} +export const LAYOUT_CONTEXT_KEY = Symbol('inertia-layout'); +export function useLayoutProps(defaults) { + const context = getContext(LAYOUT_CONTEXT_KEY); + const resolve = () => { + const staticProps = context?.staticProps ?? {}; + const name = context?.name; + const { shared, named } = store.get(); + const dynamicProps = name ? { ...shared, ...named[name] } : shared; + return mergeLayoutProps(defaults, staticProps, dynamicProps); + }; + return readable(resolve(), (set) => store.subscribe(() => set(resolve()))); +} diff --git a/vendor/inertia/packages/svelte/dist/link.d.ts b/vendor/inertia/packages/svelte/dist/link.d.ts new file mode 100644 index 0000000..f6075bb --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/link.d.ts @@ -0,0 +1,16 @@ +import { type CancelToken, type GlobalEventsMap, type LinkComponentBaseProps, type VisitOptions } from '@inertiajs/core'; +import type { ActionReturn } from 'svelte/action'; +interface ActionElement extends HTMLElement { + href?: string; +} +type ActionParameters = Omit & Omit; +type SelectedEventKeys = 'start' | 'progress' | 'finish' | 'before' | 'cancel' | 'success' | 'error' | 'prefetching' | 'prefetched'; +type SelectedGlobalEventsMap = Pick; +type ActionAttributes = { + [K in keyof SelectedGlobalEventsMap as `on:${K}` | `on${K}`]?: (event: CustomEvent) => void; +} & { + 'on:cancel-token'?: (event: CustomEvent) => void; + oncanceltoken?: (event: CustomEvent) => void; +}; +declare function link(node: ActionElement, initialParams?: ActionParameters): ActionReturn; +export default link; diff --git a/vendor/inertia/packages/svelte/dist/link.js b/vendor/inertia/packages/svelte/dist/link.js new file mode 100644 index 0000000..228d424 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/link.js @@ -0,0 +1,174 @@ +import { isUrlMethodPair, mergeDataIntoQueryString, router, shouldIntercept, shouldNavigate, } from '@inertiajs/core'; +import { config } from '.'; +function link(node, initialParams = {}) { + let inFlightCount = 0; + let hoverTimeout; + let prefetchModes = []; + let cacheForValue; + let cacheTags = []; + let method; + let href; + let data; + let baseParams; + let visitParams; + const regularEvents = { + click: (event) => { + if (shouldIntercept(event)) { + event.preventDefault(); + router.visit(href, visitParams); + } + }, + }; + const prefetchHoverEvents = { + mouseenter: () => (hoverTimeout = setTimeout(() => prefetch(), config.get('prefetch.hoverDelay'))), + mouseleave: () => clearTimeout(hoverTimeout), + click: regularEvents.click, + }; + const prefetchClickEvents = { + mousedown: (event) => { + if (shouldIntercept(event)) { + event.preventDefault(); + prefetch(); + } + }, + keydown: (event) => { + if (shouldNavigate(event)) { + event.preventDefault(); + prefetch(); + } + }, + mouseup: (event) => { + if (shouldIntercept(event)) { + event.preventDefault(); + router.visit(href, visitParams); + } + }, + keyup: (event) => { + if (shouldNavigate(event)) { + event.preventDefault(); + router.visit(href, visitParams); + } + }, + click: (event) => { + if (shouldIntercept(event)) { + event.preventDefault(); + } + }, + }; + function update({ cacheFor = 0, prefetch = false, cacheTags: cacheTagValues = [], viewTransition = false, ...params }) { + prefetchModes = (() => { + if (prefetch === true) { + return ['hover']; + } + if (prefetch === false) { + return []; + } + return Array.isArray(prefetch) ? prefetch : [prefetch]; + })(); + cacheForValue = (() => { + if (cacheFor !== 0) { + return cacheFor; + } + if (prefetchModes.length === 1 && prefetchModes[0] === 'click') { + return 0; + } + return config.get('prefetch.cacheFor'); + })(); + cacheTags = Array.isArray(cacheTagValues) ? cacheTagValues : [cacheTagValues]; + method = isUrlMethodPair(params.href) ? params.href.method : params.method?.toLowerCase() || 'get'; + [href, data] = hrefAndData(method, params); + if (node.tagName === 'A') { + node.href = href; + } + baseParams = { + data, + method, + replace: params.replace || false, + preserveScroll: params.preserveScroll || false, + preserveState: params.preserveState ?? method !== 'get', + preserveUrl: params.preserveUrl || false, + only: params.only || [], + except: params.except || [], + headers: params.headers || {}, + async: params.async || false, + }; + visitParams = { + ...baseParams, + viewTransition, + onStart: (visit) => { + inFlightCount++; + updateNodeAttributes(); + return dispatchEvent('start', { detail: { visit } }); + }, + onProgress: (progress) => dispatchEvent('progress', { detail: { progress } }), + onFinish: (visit) => { + inFlightCount--; + updateNodeAttributes(); + return dispatchEvent('finish', { detail: { visit } }); + }, + onBefore: (visit) => dispatchEvent('before', { cancelable: true, detail: { visit } }), + onCancel: () => dispatchEvent('cancel'), + onSuccess: (page) => dispatchEvent('success', { detail: { page } }), + onError: (errors) => dispatchEvent('error', { detail: { errors } }), + onCancelToken: (token) => dispatchEvent('cancel-token', { detail: { token } }), + onPrefetching: (visit) => dispatchEvent('prefetching', { detail: { visit } }), + onPrefetched: (response, visit) => dispatchEvent('prefetched', { detail: { response, visit } }), + }; + updateEventListeners(); + } + function dispatchEvent(type, detail = {}) { + return node.dispatchEvent(new CustomEvent(type, detail)); + } + function hrefAndData(method, params) { + return mergeDataIntoQueryString(method, isUrlMethodPair(params.href) ? params.href.url : node.href || params.href || '', params.data || {}, params.queryStringArrayFormat || 'brackets'); + } + function prefetch() { + router.prefetch(href, { + ...baseParams, + onPrefetching: (visit) => dispatchEvent('prefetching', { detail: { visit } }), + onPrefetched: (response, visit) => dispatchEvent('prefetched', { detail: { response, visit } }), + }, { cacheFor: cacheForValue, cacheTags }); + } + function updateNodeAttributes() { + if (inFlightCount > 0) { + node.setAttribute('data-loading', ''); + return; + } + node.removeAttribute('data-loading'); + } + function updateEventListeners() { + removeEventListeners(); + if (prefetchModes.includes('hover')) { + addEventListeners(prefetchHoverEvents); + return; + } + if (prefetchModes.includes('click')) { + addEventListeners(prefetchClickEvents); + return; + } + addEventListeners(regularEvents); + } + function addEventListeners(eventHandlers) { + Object.entries(eventHandlers).forEach(([event, handler]) => { + node.addEventListener(event, handler); + }); + } + function removeEventListeners() { + ; + [prefetchHoverEvents, prefetchClickEvents, regularEvents].forEach((eventHandlers) => { + Object.entries(eventHandlers).forEach(([event, handler]) => { + node.removeEventListener(event, handler); + }); + }); + } + function destroy() { + clearTimeout(hoverTimeout); + removeEventListeners(); + } + update(initialParams); + if (prefetchModes.includes('mount')) { + prefetch(); + } + return { update, destroy }; +} +export default link; diff --git a/vendor/inertia/packages/svelte/dist/page.svelte.d.ts b/vendor/inertia/packages/svelte/dist/page.svelte.d.ts new file mode 100644 index 0000000..b45799d --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/page.svelte.d.ts @@ -0,0 +1,10 @@ +import { type Page, type PageProps, type SharedPageProps } from '@inertiajs/core'; +type SveltePage = Omit, 'props'> & { + props: Page['props'] & { + [key: string]: any; + }; +}; +declare const page: SveltePage; +export declare function setPage(newPage: SveltePage): void; +export declare function usePage(): SveltePage; +export default page; diff --git a/vendor/inertia/packages/svelte/dist/page.svelte.js b/vendor/inertia/packages/svelte/dist/page.svelte.js new file mode 100644 index 0000000..8859486 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/page.svelte.js @@ -0,0 +1,14 @@ +import {} from '@inertiajs/core'; +const page = $state({ + component: '', + props: {}, + url: '', + version: null, +}); +export function setPage(newPage) { + Object.assign(page, newPage); +} +export function usePage() { + return page; +} +export default page; diff --git a/vendor/inertia/packages/svelte/dist/server.d.ts b/vendor/inertia/packages/svelte/dist/server.d.ts new file mode 100644 index 0000000..179c5b3 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/server.d.ts @@ -0,0 +1 @@ +export { default as default } from '@inertiajs/core/server'; diff --git a/vendor/inertia/packages/svelte/dist/server.js b/vendor/inertia/packages/svelte/dist/server.js new file mode 100644 index 0000000..179c5b3 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/server.js @@ -0,0 +1 @@ +export { default as default } from '@inertiajs/core/server'; diff --git a/vendor/inertia/packages/svelte/dist/types.d.ts b/vendor/inertia/packages/svelte/dist/types.d.ts new file mode 100644 index 0000000..1fb964a --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/types.d.ts @@ -0,0 +1,17 @@ +import { type Page } from '@inertiajs/core'; +import type { Component } from 'svelte'; +import type { RenderFunction, RenderProps } from './components/Render.svelte'; +export type ComponentResolver = (name: string, page?: Page) => ResolvedComponent | Promise; +export type LayoutResolver = (h: RenderFunction, page: RenderProps) => RenderProps; +export type LayoutTuple = [Component, Record?]; +export type LayoutObject = { + component: Component; + props?: Record; +}; +export type NamedLayouts = Record; +export type LayoutType = LayoutResolver | Component | Component[] | LayoutTuple | LayoutObject | NamedLayouts | (Component | LayoutTuple | LayoutObject)[]; +export type ResolvedComponent = { + default: Component; + layout?: LayoutType; +}; +export type SvelteInertiaAppConfig = {}; diff --git a/vendor/inertia/packages/svelte/dist/types.js b/vendor/inertia/packages/svelte/dist/types.js new file mode 100644 index 0000000..6fdbf16 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/types.js @@ -0,0 +1 @@ +import {} from '@inertiajs/core'; diff --git a/vendor/inertia/packages/svelte/dist/useForm.svelte.d.ts b/vendor/inertia/packages/svelte/dist/useForm.svelte.d.ts new file mode 100644 index 0000000..7db2cdc --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/useForm.svelte.d.ts @@ -0,0 +1,65 @@ +import type { ErrorValue, FormDataErrors, FormDataKeys, FormDataType, FormDataValues, Method, OptimisticCallback, Progress, UrlMethodPair, UseFormSubmitArguments, UseFormSubmitOptions, UseFormTransformCallback, UseFormWithPrecognitionArguments } from '@inertiajs/core'; +import type { NamedInputEvent, PrecognitionPath, ValidationConfig, Validator } from 'laravel-precognition'; +type InertiaFormStore = InertiaForm; +type InertiaPrecognitiveFormStore = InertiaPrecognitiveForm; +type PrecognitionValidationConfig = ValidationConfig & { + only?: TKeys[] | Iterable | ArrayLike; +}; +export interface InertiaFormProps { + isDirty: boolean; + errors: FormDataErrors; + hasErrors: boolean; + progress: Progress | null; + wasSuccessful: boolean; + recentlySuccessful: boolean; + processing: boolean; + setStore(data: TForm): void; + setStore>(key: T, value: FormDataValues): void; + data(): TForm; + transform(callback: UseFormTransformCallback): this; + defaults(): this; + defaults(fields: Partial): this; + defaults>(field: T, value: FormDataValues): this; + reset>(...fields: K[]): this; + clearErrors>(...fields: K[]): this; + resetAndClearErrors>(...fields: K[]): this; + setError>(field: K, value: ErrorValue): this; + setError(errors: FormDataErrors): this; + submit: (...args: UseFormSubmitArguments) => void; + get(url: string, options?: UseFormSubmitOptions): void; + post(url: string, options?: UseFormSubmitOptions): void; + put(url: string, options?: UseFormSubmitOptions): void; + patch(url: string, options?: UseFormSubmitOptions): void; + delete(url: string, options?: UseFormSubmitOptions): void; + cancel(): void; + dontRemember>(...fields: K[]): this; + optimistic(callback: OptimisticCallback): this; + withPrecognition: (...args: UseFormWithPrecognitionArguments) => InertiaPrecognitiveFormStore; +} +export interface InertiaFormValidationProps { + invalid>(field: K): boolean; + setValidationTimeout(duration: number): this; + touch>(field: K | NamedInputEvent | Array, ...fields: K[]): this; + touched>(field?: K): boolean; + valid>(field: K): boolean; + validate | PrecognitionPath>(field?: K | NamedInputEvent | PrecognitionValidationConfig, config?: PrecognitionValidationConfig): this; + validateFiles(): this; + validating: boolean; + validator: () => Validator; + withAllErrors(): this; + withoutFileValidation(): this; + setErrors(errors: FormDataErrors | Record): this; + forgetError | NamedInputEvent>(field: K): this; +} +export type InertiaForm = InertiaFormProps & TForm; +export type InertiaPrecognitiveForm = InertiaForm & InertiaFormValidationProps; +type ReservedFormKeys = keyof InertiaFormProps; +type ValidateFormData = { + [K in keyof T]: K extends ReservedFormKeys ? ['Error: This field name is reserved by useForm:', K] : T[K]; +}; +export default function useForm & ValidateFormData>(method: Method | (() => Method), url: string | (() => string), data: TForm | (() => TForm)): InertiaPrecognitiveFormStore; +export default function useForm & ValidateFormData>(urlMethodPair: UrlMethodPair | (() => UrlMethodPair), data: TForm | (() => TForm)): InertiaPrecognitiveFormStore; +export default function useForm & ValidateFormData>(rememberKey: string, data: TForm | (() => TForm)): InertiaFormStore; +export default function useForm & ValidateFormData>(data: TForm | (() => TForm)): InertiaFormStore; +export default function useForm>(): InertiaFormStore; +export {}; diff --git a/vendor/inertia/packages/svelte/dist/useForm.svelte.js b/vendor/inertia/packages/svelte/dist/useForm.svelte.js new file mode 100644 index 0000000..994b75c --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/useForm.svelte.js @@ -0,0 +1,116 @@ +import { router, UseFormUtils } from '@inertiajs/core'; +import { cloneDeep } from 'lodash-es'; +import useFormState, {} from './useFormState.svelte'; +let reservedFormKeys = null; +let bootstrapping = false; +function validateFormDataKeys(data) { + if (bootstrapping) { + return; + } + if (reservedFormKeys === null) { + bootstrapping = true; + const store = useForm({}); + reservedFormKeys = new Set(Object.keys(store)); + bootstrapping = false; + } + const conflicts = Object.keys(data).filter((key) => reservedFormKeys.has(key)); + if (conflicts.length > 0) { + console.error(`[Inertia] useForm() data contains field(s) that conflict with form properties: ${conflicts.map((k) => `"${k}"`).join(', ')}. ` + + `These fields will be overwritten by form methods/properties. Please rename these fields.`); + } +} +export default function useForm(...args) { + const { rememberKey, data, precognitionEndpoint } = UseFormUtils.parseUseFormArguments(...args); + const resolvedData = typeof data === 'function' ? data() : data; + validateFormDataKeys(resolvedData); + let cancelToken = null; + let pendingOptimisticCallback = null; + const { form: baseForm, setDefaults, getTransform, getPrecognitionEndpoint, setFormState, markAsSuccessful, wasDefaultsCalledInOnSuccess, resetDefaultsCalledInOnSuccess, setRememberExcludeKeys, resetBeforeSubmit, finishProcessing, } = useFormState({ + data, + rememberKey, + precognitionEndpoint, + }); + const formWithPrecognition = () => baseForm; + const submit = (...args) => { + const { method, url, options } = UseFormUtils.parseSubmitArguments(args, getPrecognitionEndpoint()); + resetDefaultsCalledInOnSuccess(); + const transformedData = getTransform()(form.data()); + const _options = { + ...options, + onCancelToken: (token) => { + cancelToken = token; + return options.onCancelToken?.(token); + }, + onBefore: (visit) => { + resetBeforeSubmit(); + return options.onBefore?.(visit); + }, + onStart: (visit) => { + setFormState('processing', true); + return options.onStart?.(visit); + }, + onProgress: (event) => { + setFormState('progress', event || null); + return options.onProgress?.(event); + }, + onSuccess: async (page) => { + markAsSuccessful(); + const onSuccess = options.onSuccess ? await options.onSuccess(page) : null; + if (!wasDefaultsCalledInOnSuccess()) { + setDefaults(cloneDeep(form.data())); + } + return onSuccess; + }, + onError: (errors) => { + form.clearErrors().setError(errors); + return options.onError?.(errors); + }, + onCancel: () => { + return options.onCancel?.(); + }, + onFinish: (visit) => { + finishProcessing(); + cancelToken = null; + return options.onFinish?.(visit); + }, + }; + _options.optimistic = _options.optimistic ?? pendingOptimisticCallback ?? undefined; + pendingOptimisticCallback = null; + if (method === 'delete') { + router.delete(url, { ..._options, data: transformedData }); + } + else { + router[method](url, transformedData, _options); + } + }; + const cancel = () => { + cancelToken?.cancel(); + }; + const createSubmitMethod = (method) => (url, options = {}) => { + submit(method, url, options); + }; + Object.assign(baseForm, { + submit, + get: createSubmitMethod('get'), + post: createSubmitMethod('post'), + put: createSubmitMethod('put'), + patch: createSubmitMethod('patch'), + delete: createSubmitMethod('delete'), + cancel, + dontRemember(...keys) { + setRememberExcludeKeys(keys); + return form; + }, + optimistic(callback) { + pendingOptimisticCallback = callback; + return form; + }, + }); + const form = baseForm; + const originalWithPrecognition = formWithPrecognition().withPrecognition; + form.withPrecognition = (...args) => { + originalWithPrecognition(...args); + return form; + }; + return getPrecognitionEndpoint() ? form : form; +} diff --git a/vendor/inertia/packages/svelte/dist/useFormState.svelte.d.ts b/vendor/inertia/packages/svelte/dist/useFormState.svelte.d.ts new file mode 100644 index 0000000..0228b12 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/useFormState.svelte.d.ts @@ -0,0 +1,84 @@ +import type { ErrorValue, FormDataErrors, FormDataKeys, FormDataValues, Progress, UrlMethodPair, UseFormTransformCallback, UseFormWithPrecognitionArguments } from '@inertiajs/core'; +import type { NamedInputEvent, ValidationConfig, Validator } from 'laravel-precognition'; +type TransformCallback = (data: TForm) => object; +type PrecognitionValidationConfig = ValidationConfig & { + only?: TKeys[] | Iterable | ArrayLike; +}; +export interface FormStateProps { + isDirty: boolean; + errors: FormDataErrors; + hasErrors: boolean; + progress: Progress | null; + wasSuccessful: boolean; + recentlySuccessful: boolean; + processing: boolean; + setStore(data: TForm): void; + setStore>(key: T, value: FormDataValues): void; + data(): TForm; + transform(callback: UseFormTransformCallback): this; + defaults(): this; + defaults(fields: Partial): this; + defaults>(field: T, value: FormDataValues): this; + reset>(...fields: K[]): this; + clearErrors>(...fields: K[]): this; + resetAndClearErrors>(...fields: K[]): this; + setError>(field: K, value: ErrorValue): this; + setError(errors: FormDataErrors): this; + withPrecognition: (...args: UseFormWithPrecognitionArguments) => FormStateWithPrecognition; +} +export interface FormStateValidationProps { + invalid>(field: K): boolean; + setValidationTimeout(duration: number): this; + touch>(field: K | NamedInputEvent | Array, ...fields: K[]): this; + touched>(field?: K): boolean; + valid>(field: K): boolean; + validate>(field?: K | NamedInputEvent | PrecognitionValidationConfig, config?: PrecognitionValidationConfig): this; + validateFiles(): this; + validating: boolean; + validator: () => Validator; + withAllErrors(): this; + withoutFileValidation(): this; + setErrors(errors: FormDataErrors | Record): this; + forgetError | NamedInputEvent>(field: K): this; +} +export interface InternalPrecognitionState { + __touched: string[]; + __valid: string[]; +} +export interface InternalRememberState { + __rememberable: boolean; + __remember: () => { + data: TForm; + errors: FormDataErrors; + }; + __restore: (restored: { + data: TForm; + errors: FormDataErrors; + }) => void; +} +export type FormState = FormStateProps & TForm; +export type FormStateWithPrecognition = FormState & FormStateValidationProps & InternalPrecognitionState; +export interface UseFormStateOptions { + data: TForm | (() => TForm); + rememberKey?: string | null; + precognitionEndpoint?: (() => UrlMethodPair) | null; +} +export interface UseFormStateReturn { + form: FormState & InternalRememberState; + setDefaults: (newDefaults: TForm) => void; + getTransform: () => TransformCallback; + getPrecognitionEndpoint: () => (() => UrlMethodPair) | null; + setFormState: (key: K, value: any) => void; + markAsSuccessful: () => void; + wasDefaultsCalledInOnSuccess: () => boolean; + resetDefaultsCalledInOnSuccess: () => void; + setRememberExcludeKeys: (keys: FormDataKeys[]) => void; + resetBeforeSubmit: () => void; + finishProcessing: () => void; + withAllErrors: { + enabled: () => boolean; + enable: () => void; + }; +} +export default function useFormState(options: UseFormStateOptions): UseFormStateReturn; +export {}; diff --git a/vendor/inertia/packages/svelte/dist/useFormState.svelte.js b/vendor/inertia/packages/svelte/dist/useFormState.svelte.js new file mode 100644 index 0000000..5b6c71b --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/useFormState.svelte.js @@ -0,0 +1,290 @@ +import { router, UseFormUtils } from '@inertiajs/core'; +import { createValidator, resolveName, toSimpleValidationErrors } from 'laravel-precognition'; +import { cloneDeep, get, has, isEqual, set } from 'lodash-es'; +import { config } from '.'; +export default function useFormState(options) { + const { data: dataOption, rememberKey, precognitionEndpoint: initialPrecognitionEndpoint } = options; + const isDataFunction = typeof dataOption === 'function'; + const resolveData = () => (isDataFunction ? dataOption() : dataOption); + const restored = rememberKey + ? router.restore(rememberKey) + : null; + const initialData = restored?.data ?? cloneDeep(resolveData()); + let defaults = cloneDeep(initialData); + let transform = (data) => data; + let validatorRef = null; + let withAllErrors = null; + const withAllErrorsEnabled = () => withAllErrors ?? config.get('form.withAllErrors'); + let precognitionEndpoint = initialPrecognitionEndpoint ?? null; + let recentlySuccessfulTimeoutId = null; + let defaultsCalledInOnSuccess = false; + let rememberExcludeKeys = []; + let setFormStateInternal; + const tap = (value, callback) => { + callback(value); + return value; + }; + const withPrecognition = (...args) => { + precognitionEndpoint = UseFormUtils.createWayfinderCallback(...args); + const formWithPrecognition = () => form; + if (!validatorRef) { + const validator = createValidator((client) => { + const { method, url } = precognitionEndpoint(); + const f = formWithPrecognition(); + const transformedData = cloneDeep(transform(f.data())); + return client[method](url, transformedData); + }, cloneDeep(defaults)); + validatorRef = validator; + validator + .on('validatingChanged', () => { + setFormStateInternal('validating', validator.validating()); + }) + .on('validatedChanged', () => { + setFormStateInternal('__valid', validator.valid()); + }) + .on('touchedChanged', () => { + setFormStateInternal('__touched', validator.touched()); + }) + .on('errorsChanged', () => { + const validationErrors = withAllErrorsEnabled() + ? validator.errors() + : toSimpleValidationErrors(validator.errors()); + setFormStateInternal('errors', {}); + formWithPrecognition().setError(validationErrors); + setFormStateInternal('__valid', validator.valid()); + }); + } + Object.assign(form, { + ...form, + __touched: [], + __valid: [], + validating: false, + validator: () => validatorRef, + validate: (field, config) => { + const f = formWithPrecognition(); + if (typeof field === 'object' && !('target' in field)) { + config = field; + field = undefined; + } + if (field === undefined) { + validatorRef.validate(config); + } + else { + field = resolveName(field); + const transformedData = transform(f.data()); + validatorRef.validate(field, get(transformedData, field), config); + } + return f; + }, + touch: (field, ...fields) => { + const f = formWithPrecognition(); + if (Array.isArray(field)) { + validatorRef?.touch(field); + } + else if (typeof field === 'string') { + validatorRef?.touch([field, ...fields]); + } + else { + validatorRef?.touch(field); + } + return f; + }, + validateFiles: () => tap(formWithPrecognition(), () => validatorRef?.validateFiles()), + setValidationTimeout: (duration) => tap(formWithPrecognition(), () => validatorRef.setTimeout(duration)), + withAllErrors: () => tap(formWithPrecognition(), () => (withAllErrors = true)), + withoutFileValidation: () => tap(formWithPrecognition(), () => validatorRef?.withoutFileValidation()), + valid: (field) => formWithPrecognition().__valid.includes(field), + invalid: (field) => field in formWithPrecognition().errors, + touched: (field) => { + const touched = formWithPrecognition().__touched; + return typeof field === 'string' ? touched.includes(field) : touched.length > 0; + }, + setErrors: (errors) => tap(formWithPrecognition(), () => { + const f = formWithPrecognition(); + f.setError(errors); + }), + forgetError: (field) => tap(formWithPrecognition(), () => { + const f = formWithPrecognition(); + f.clearErrors(resolveName(field)); + }), + }); + return form; + }; + let form = $state({ + ...initialData, + isDirty: false, + errors: (restored?.errors ?? {}), + hasErrors: false, + progress: null, + wasSuccessful: false, + recentlySuccessful: false, + processing: false, + setStore(keyOrData, maybeValue = undefined) { + if (typeof keyOrData === 'string') { + set(form, keyOrData, maybeValue); + } + else { + Object.assign(form, keyOrData); + } + }, + data() { + return Object.keys(defaults).reduce((carry, key) => { + return set(carry, key, get(this, key)); + }, {}); + }, + transform(callback) { + transform = callback; + return this; + }, + defaults(fieldOrFields, maybeValue) { + if (isDataFunction) { + throw new Error('You cannot call `defaults()` when using a function to define your form data.'); + } + defaultsCalledInOnSuccess = true; + if (typeof fieldOrFields === 'undefined') { + defaults = cloneDeep(this.data()); + this.isDirty = false; + } + else { + defaults = + typeof fieldOrFields === 'string' + ? set(cloneDeep(defaults), fieldOrFields, maybeValue) + : Object.assign(cloneDeep(defaults), fieldOrFields); + } + validatorRef?.defaults(defaults); + return this; + }, + reset(...fields) { + const resolvedData = isDataFunction ? cloneDeep(resolveData()) : defaults; + const clonedData = cloneDeep(resolvedData); + if (fields.length === 0) { + if (isDataFunction) { + defaults = clonedData; + } + this.setStore(clonedData); + } + else { + ; + fields + .filter((key) => has(clonedData, key)) + .forEach((key) => { + if (isDataFunction) { + set(defaults, key, get(clonedData, key)); + } + set(this, key, get(clonedData, key)); + }); + } + validatorRef?.reset(...fields); + return this; + }, + setError(fieldOrFields, maybeValue) { + const errors = typeof fieldOrFields === 'string' ? { [fieldOrFields]: maybeValue } : fieldOrFields; + setFormStateInternal('errors', { + ...this.errors, + ...errors, + }); + validatorRef?.setErrors(errors); + return this; + }, + clearErrors(...fields) { + setFormStateInternal('errors', Object.keys(this.errors).reduce((carry, field) => ({ + ...carry, + ...(fields.length > 0 && !fields.includes(field) ? { [field]: this.errors[field] } : {}), + }), {})); + if (validatorRef) { + if (fields.length === 0) { + validatorRef.setErrors({}); + } + else { + fields.forEach(validatorRef.forgetError); + } + } + return this; + }, + resetAndClearErrors(...fields) { + this.reset(...fields); + this.clearErrors(...fields); + return this; + }, + withPrecognition, + __rememberable: rememberKey === null, + __remember() { + const formData = this.data(); + if (rememberExcludeKeys.length > 0) { + const filtered = { ...formData }; + rememberExcludeKeys.forEach((k) => delete filtered[k]); + return { data: filtered, errors: $state.snapshot(this.errors) }; + } + return { data: formData, errors: $state.snapshot(this.errors) }; + }, + __restore(restored) { + Object.assign(this, restored.data); + this.setError(restored.errors); + }, + }); + setFormStateInternal = (key, value) => { + form[key] = value; + }; + $effect(() => { + const newIsDirty = !isEqual(form.data(), defaults); + if (form.isDirty !== newIsDirty) { + setFormStateInternal('isDirty', newIsDirty); + } + const hasErrors = Object.keys(form.errors).length > 0; + if (form.hasErrors !== hasErrors) { + setFormStateInternal('hasErrors', hasErrors); + } + }); + $effect(() => { + if (!rememberKey) { + return; + } + const storedData = router.restore(rememberKey); + const newData = form.__remember(); + if (!isEqual(storedData, newData)) { + router.remember(newData, rememberKey); + } + }); + if (precognitionEndpoint) { + form.withPrecognition(precognitionEndpoint); + } + return { + form: form, + setDefaults: (newDefaults) => { + defaults = newDefaults; + }, + getTransform: () => transform, + getPrecognitionEndpoint: () => precognitionEndpoint, + setFormState: setFormStateInternal, + markAsSuccessful: () => { + form.clearErrors(); + setFormStateInternal('wasSuccessful', true); + setFormStateInternal('recentlySuccessful', true); + recentlySuccessfulTimeoutId = setTimeout(() => setFormStateInternal('recentlySuccessful', false), config.get('form.recentlySuccessfulDuration')); + }, + wasDefaultsCalledInOnSuccess: () => defaultsCalledInOnSuccess, + resetDefaultsCalledInOnSuccess: () => { + defaultsCalledInOnSuccess = false; + }, + setRememberExcludeKeys: (keys) => { + rememberExcludeKeys = keys; + }, + resetBeforeSubmit: () => { + setFormStateInternal('wasSuccessful', false); + setFormStateInternal('recentlySuccessful', false); + if (recentlySuccessfulTimeoutId) { + clearTimeout(recentlySuccessfulTimeoutId); + } + }, + finishProcessing: () => { + setFormStateInternal('processing', false); + setFormStateInternal('progress', null); + }, + withAllErrors: { + enabled: withAllErrorsEnabled, + enable: () => { + withAllErrors = true; + }, + }, + }; +} diff --git a/vendor/inertia/packages/svelte/dist/useHttp.svelte.d.ts b/vendor/inertia/packages/svelte/dist/useHttp.svelte.d.ts new file mode 100644 index 0000000..6330059 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/useHttp.svelte.d.ts @@ -0,0 +1,61 @@ +import type { ErrorValue, FormDataErrors, FormDataKeys, FormDataType, FormDataValues, Method, Progress, UrlMethodPair, UseFormTransformCallback, UseFormWithPrecognitionArguments, UseHttpSubmitArguments, UseHttpSubmitOptions } from '@inertiajs/core'; +import type { NamedInputEvent, ValidationConfig, Validator } from 'laravel-precognition'; +export interface UseHttpProps { + isDirty: boolean; + errors: FormDataErrors; + hasErrors: boolean; + progress: Progress | null; + wasSuccessful: boolean; + recentlySuccessful: boolean; + processing: boolean; + response: TResponse | null; + setStore(data: TForm): void; + setStore>(key: T, value: FormDataValues): void; + data(): TForm; + transform(callback: UseFormTransformCallback): this; + defaults(): this; + defaults(fields: Partial): this; + defaults>(field: T, value: FormDataValues): this; + reset>(...fields: K[]): this; + clearErrors>(...fields: K[]): this; + resetAndClearErrors>(...fields: K[]): this; + setError>(field: K, value: ErrorValue): this; + setError(errors: FormDataErrors): this; + submit(...args: UseHttpSubmitArguments): Promise; + get(url: string, options?: UseHttpSubmitOptions): Promise; + post(url: string, options?: UseHttpSubmitOptions): Promise; + put(url: string, options?: UseHttpSubmitOptions): Promise; + patch(url: string, options?: UseHttpSubmitOptions): Promise; + delete(url: string, options?: UseHttpSubmitOptions): Promise; + cancel(): void; + dontRemember>(...fields: K[]): this; + optimistic(callback: (currentData: TForm) => Partial): this; + withAllErrors(): this; + withPrecognition: (...args: UseFormWithPrecognitionArguments) => UseHttpPrecognitiveProps; +} +type PrecognitionValidationConfig = ValidationConfig & { + only?: TKeys[] | Iterable | ArrayLike; +}; +export interface UseHttpValidationProps { + invalid>(field: K): boolean; + setValidationTimeout(duration: number): this; + touch>(field: K | NamedInputEvent | Array, ...fields: K[]): this; + touched>(field?: K): boolean; + valid>(field: K): boolean; + validate>(field?: K | NamedInputEvent | PrecognitionValidationConfig, config?: PrecognitionValidationConfig): this; + validateFiles(): this; + validating: boolean; + validator: () => Validator; + withAllErrors(): this; + withoutFileValidation(): this; + setErrors(errors: FormDataErrors | Record): this; + forgetError | NamedInputEvent>(field: K): this; +} +export type UseHttp = UseHttpProps & TForm; +export type UseHttpPrecognitiveProps = UseHttp & UseHttpValidationProps; +export default function useHttp, TResponse = unknown>(method: Method | (() => Method), url: string | (() => string), data: TForm | (() => TForm)): UseHttpPrecognitiveProps; +export default function useHttp, TResponse = unknown>(urlMethodPair: UrlMethodPair | (() => UrlMethodPair), data: TForm | (() => TForm)): UseHttpPrecognitiveProps; +export default function useHttp, TResponse = unknown>(rememberKey: string, data: TForm | (() => TForm)): UseHttp; +export default function useHttp, TResponse = unknown>(data: TForm | (() => TForm)): UseHttp; +export default function useHttp, TResponse = unknown>(): UseHttp; +export {}; diff --git a/vendor/inertia/packages/svelte/dist/useHttp.svelte.js b/vendor/inertia/packages/svelte/dist/useHttp.svelte.js new file mode 100644 index 0000000..d3dd687 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/useHttp.svelte.js @@ -0,0 +1,154 @@ +import { hasFiles, http, HttpCancelledError, HttpResponseError, mergeDataIntoQueryString, objectToFormData, UseFormUtils, } from '@inertiajs/core'; +import { toSimpleValidationErrors } from 'laravel-precognition'; +import { cloneDeep } from 'lodash-es'; +import useFormState, {} from './useFormState.svelte'; +export default function useHttp(...args) { + const { rememberKey, data, precognitionEndpoint } = UseFormUtils.parseUseFormArguments(...args); + let abortController = null; + let pendingOptimisticCallback = null; + const { form: baseForm, setDefaults, getTransform, getPrecognitionEndpoint, setFormState, markAsSuccessful, wasDefaultsCalledInOnSuccess, resetDefaultsCalledInOnSuccess, setRememberExcludeKeys, resetBeforeSubmit, finishProcessing, withAllErrors, } = useFormState({ + data, + rememberKey, + precognitionEndpoint, + }); + const formWithPrecognition = () => baseForm; + setFormState('response', null); + const submit = async (method, url, options) => { + const onBefore = options.onBefore?.(); + if (onBefore === false) { + return Promise.reject(new Error('Request cancelled by onBefore')); + } + resetDefaultsCalledInOnSuccess(); + resetBeforeSubmit(); + abortController = new AbortController(); + const cancelToken = { + cancel: () => abortController?.abort(), + }; + options.onCancelToken?.(cancelToken); + options.optimistic = options.optimistic ?? pendingOptimisticCallback ?? undefined; + pendingOptimisticCallback = null; + let snapshot; + if (options.optimistic) { + snapshot = cloneDeep(form.data()); + const optimisticData = options.optimistic(cloneDeep(snapshot)); + Object.keys(optimisticData).forEach((key) => { + ; + baseForm[key] = optimisticData[key]; + }); + } + setFormState('processing', true); + options.onStart?.(); + const transformedData = getTransform()(form.data()); + const useFormData = hasFiles(transformedData); + let requestUrl = url; + let requestData; + let contentType; + if (method === 'get') { + const [urlWithParams] = mergeDataIntoQueryString(method, url, transformedData); + requestUrl = urlWithParams; + } + else { + if (useFormData) { + requestData = objectToFormData(transformedData); + } + else { + requestData = JSON.stringify(transformedData); + contentType = 'application/json'; + } + } + try { + const response = await http.getClient().request({ + method, + url: requestUrl, + data: requestData, + headers: { + Accept: 'application/json', + ...(contentType ? { 'Content-Type': contentType } : {}), + ...options.headers, + }, + signal: abortController.signal, + onUploadProgress: (event) => { + setFormState('progress', event); + options.onProgress?.(event); + }, + }); + const responseData = JSON.parse(response.data); + if (response.status >= 200 && response.status < 300) { + markAsSuccessful(); + setFormState('response', responseData); + options.onSuccess?.(responseData); + if (!wasDefaultsCalledInOnSuccess()) { + setDefaults(cloneDeep(form.data())); + } + setFormState('isDirty', false); + return responseData; + } + throw new HttpResponseError(`Request failed with status ${response.status}`, response, url); + } + catch (error) { + if (snapshot) { + Object.keys(snapshot).forEach((key) => { + ; + baseForm[key] = snapshot[key]; + }); + } + if (error instanceof HttpResponseError) { + if (error.response.status === 422) { + const responseData = JSON.parse(error.response.data); + const validationErrors = responseData.errors || {}; + const processedErrors = (withAllErrors.enabled() ? validationErrors : toSimpleValidationErrors(validationErrors)); + form.clearErrors().setError(processedErrors); + options.onError?.(processedErrors); + } + throw error; + } + if (error instanceof HttpCancelledError || (error instanceof Error && error.name === 'AbortError')) { + options.onCancel?.(); + throw new HttpCancelledError('Request was cancelled', url); + } + throw error; + } + finally { + finishProcessing(); + abortController = null; + options.onFinish?.(); + } + }; + const cancel = () => { + abortController?.abort(); + }; + const createSubmitMethod = (method) => async (url, options = {}) => { + return submit(method, url, options); + }; + Object.assign(baseForm, { + submit(...args) { + const parsed = UseFormUtils.parseSubmitArguments(args, getPrecognitionEndpoint()); + return submit(parsed.method, parsed.url, parsed.options); + }, + get: createSubmitMethod('get'), + post: createSubmitMethod('post'), + put: createSubmitMethod('put'), + patch: createSubmitMethod('patch'), + delete: createSubmitMethod('delete'), + cancel, + dontRemember(...keys) { + setRememberExcludeKeys(keys); + return form; + }, + optimistic(callback) { + pendingOptimisticCallback = callback; + return form; + }, + withAllErrors() { + withAllErrors.enable(); + return form; + }, + }); + const form = baseForm; + const originalWithPrecognition = formWithPrecognition().withPrecognition; + form.withPrecognition = (...args) => { + originalWithPrecognition(...args); + return form; + }; + return getPrecognitionEndpoint() ? form : form; +} diff --git a/vendor/inertia/packages/svelte/dist/usePoll.d.ts b/vendor/inertia/packages/svelte/dist/usePoll.d.ts new file mode 100644 index 0000000..41d3de4 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/usePoll.d.ts @@ -0,0 +1,5 @@ +import { type PollOptions, type ReloadOptions } from '@inertiajs/core'; +export default function usePoll(interval: number, requestOptions?: ReloadOptions, options?: PollOptions): { + stop: VoidFunction; + start: VoidFunction; +}; diff --git a/vendor/inertia/packages/svelte/dist/usePoll.js b/vendor/inertia/packages/svelte/dist/usePoll.js new file mode 100644 index 0000000..cfb590f --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/usePoll.js @@ -0,0 +1,20 @@ +import { router } from '@inertiajs/core'; +import { onDestroy, onMount } from 'svelte'; +export default function usePoll(interval, requestOptions = {}, options = { + keepAlive: false, + autoStart: true, +}) { + const { stop, start } = router.poll(interval, requestOptions, { + ...options, + autoStart: false, + }); + onMount(() => { + if (options.autoStart ?? true) { + start(); + } + }); + onDestroy(() => { + stop(); + }); + return { stop, start }; +} diff --git a/vendor/inertia/packages/svelte/dist/usePrefetch.svelte.d.ts b/vendor/inertia/packages/svelte/dist/usePrefetch.svelte.d.ts new file mode 100644 index 0000000..5d718f0 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/usePrefetch.svelte.d.ts @@ -0,0 +1,7 @@ +import { type VisitOptions } from '@inertiajs/core'; +export default function usePrefetch(options?: VisitOptions): { + readonly isPrefetched: boolean; + readonly isPrefetching: boolean; + readonly lastUpdatedAt: number | null; + flush(): void; +}; diff --git a/vendor/inertia/packages/svelte/dist/usePrefetch.svelte.js b/vendor/inertia/packages/svelte/dist/usePrefetch.svelte.js new file mode 100644 index 0000000..fed9782 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/usePrefetch.svelte.js @@ -0,0 +1,49 @@ +import { router } from '@inertiajs/core'; +import { onDestroy, onMount } from 'svelte'; +export default function usePrefetch(options = {}) { + let isPrefetched = $state(false); + let isPrefetching = $state(false); + let lastUpdatedAt = $state(null); + const cached = typeof window === 'undefined' ? null : router.getCached(window.location.pathname, options); + const inFlight = typeof window === 'undefined' ? null : router.getPrefetching(window.location.pathname, options); + isPrefetched = cached !== null; + isPrefetching = inFlight !== null; + lastUpdatedAt = cached?.staleTimestamp || null; + let removePrefetchedListener; + let removePrefetchingListener; + onMount(() => { + removePrefetchingListener = router.on('prefetching', ({ detail }) => { + if (detail.visit.url.pathname === window.location.pathname) { + isPrefetching = true; + } + }); + removePrefetchedListener = router.on('prefetched', ({ detail }) => { + if (detail.visit.url.pathname === window.location.pathname) { + isPrefetched = true; + isPrefetching = false; + } + }); + }); + onDestroy(() => { + if (removePrefetchedListener) { + removePrefetchedListener(); + } + if (removePrefetchingListener) { + removePrefetchingListener(); + } + }); + return { + get isPrefetched() { + return isPrefetched; + }, + get isPrefetching() { + return isPrefetching; + }, + get lastUpdatedAt() { + return lastUpdatedAt; + }, + flush() { + router.flush(window.location.pathname, options); + }, + }; +} diff --git a/vendor/inertia/packages/svelte/dist/useRemember.svelte.d.ts b/vendor/inertia/packages/svelte/dist/useRemember.svelte.d.ts new file mode 100644 index 0000000..bd8b699 --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/useRemember.svelte.d.ts @@ -0,0 +1 @@ +export default function useRemember(initialState: State, key?: string): State; diff --git a/vendor/inertia/packages/svelte/dist/useRemember.svelte.js b/vendor/inertia/packages/svelte/dist/useRemember.svelte.js new file mode 100644 index 0000000..bfaf43d --- /dev/null +++ b/vendor/inertia/packages/svelte/dist/useRemember.svelte.js @@ -0,0 +1,10 @@ +import { router } from '@inertiajs/core'; +import { cloneDeep } from 'lodash-es'; +export default function useRemember(initialState, key) { + const restored = router.restore(key); + const state = $state(restored !== undefined ? cloneDeep(restored) : initialState); + $effect(() => { + router.remember(cloneDeep($state.snapshot(state)), key); + }); + return state; +} diff --git a/vendor/inertia/packages/svelte/package.json b/vendor/inertia/packages/svelte/package.json new file mode 100644 index 0000000..0204815 --- /dev/null +++ b/vendor/inertia/packages/svelte/package.json @@ -0,0 +1,47 @@ +{ + "name": "@inertiajs/svelte", + "version": "2.3.14", + "license": "MIT", + "description": "The Svelte adapter for Inertia.js", + "contributors": [ + "Jonathan Reinink ", + "Pedro Borges " + ], + "homepage": "https://inertiajs.com/", + "repository": { + "type": "git", + "url": "git+https://github.com/inertiajs/inertia.git", + "directory": "packages/svelte" + }, + "bugs": { + "url": "https://github.com/inertiajs/inertia/issues" + }, + "files": [ + "dist", + "!dist/**/*.test.*", + "!dist/**/*.spec.*" + ], + "type": "module", + "types": "./dist/index.d.ts", + "svelte": "./dist/index.js", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "svelte": "./dist/index.js" + }, + "./server": { + "types": "./dist/server.d.ts", + "svelte": "./dist/server.js" + } + }, + "peerDependencies": { + "svelte": "^5.0.0" + }, + "dependencies": { + "@inertiajs/core": "file:../core", + "@types/lodash-es": "^4.17.12", + "laravel-precognition": "2.0.0-beta.0", + "lodash-es": "^4.17.23" + }, + "x-inertia-source": "https://github.com/inertiajs/inertia/tree/504fa085db13066c48d447a00b1c9f80d91ef7b6" +}