Packages
phoenix_kit
1.7.90
1.7.207
1.7.206
1.7.205
1.7.204
1.7.203
1.7.202
1.7.201
1.7.200
1.7.199
1.7.198
1.7.197
1.7.196
1.7.194
1.7.193
1.7.192
1.7.191
1.7.190
1.7.189
1.7.187
1.7.186
1.7.185
1.7.184
1.7.183
1.7.182
1.7.181
1.7.180
1.7.179
1.7.178
1.7.177
1.7.176
1.7.175
1.7.174
1.7.173
1.7.172
1.7.171
1.7.170
1.7.169
1.7.168
1.7.167
1.7.166
1.7.165
1.7.164
1.7.162
1.7.161
1.7.160
1.7.159
1.7.157
1.7.156
1.7.155
1.7.154
1.7.153
1.7.152
1.7.151
1.7.150
1.7.149
1.7.146
1.7.145
1.7.144
1.7.143
1.7.138
1.7.133
1.7.132
1.7.131
1.7.130
1.7.128
1.7.126
1.7.125
1.7.121
1.7.120
1.7.119
1.7.118
1.7.117
1.7.116
1.7.115
1.7.114
1.7.113
1.7.112
1.7.111
1.7.110
1.7.109
1.7.108
1.7.107
1.7.106
1.7.105
1.7.104
1.7.103
1.7.102
1.7.101
1.7.100
1.7.99
1.7.98
1.7.97
1.7.96
1.7.95
1.7.94
1.7.93
1.7.92
1.7.91
1.7.90
1.7.89
1.7.88
1.7.87
1.7.86
1.7.85
1.7.84
1.7.83
1.7.82
1.7.81
1.7.80
1.7.79
1.7.78
1.7.77
1.7.76
1.7.75
1.7.74
1.7.71
1.7.70
1.7.69
1.7.66
1.7.65
1.7.64
1.7.63
1.7.62
1.7.61
1.7.59
1.7.58
1.7.57
1.7.56
1.7.55
1.7.54
1.7.53
1.7.52
1.7.51
1.7.49
1.7.44
1.7.43
1.7.42
1.7.41
1.7.39
1.7.38
1.7.37
1.7.36
1.7.34
1.7.33
1.7.31
1.7.30
1.7.29
1.7.28
1.7.27
1.7.26
1.7.25
1.7.24
1.7.23
1.7.22
1.7.21
1.7.20
1.7.19
1.7.18
1.7.17
1.7.16
1.7.15
1.7.14
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.20
1.6.19
1.6.18
1.6.17
1.6.16
1.6.15
1.6.14
1.6.13
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.5.2
1.5.1
1.5.0
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.10
1.2.9
1.2.8
1.2.7
1.2.5
1.2.4
1.2.2
1.2.1
1.2.0
1.1.0
1.0.0
A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more
Current section
221 Versions
Jump to
Current section
221 Versions
Compare versions
47
files changed
+4121
additions
-571
deletions
| @@ -1,15 +1,26 @@ | |
| 1 | - ## 1.7.89 - 2026-04-04 |
| 1 | + ## 1.7.90 - 2026-04-04 |
| 2 2 | |
| 3 3 | ### Added |
| 4 | + - Add organization accounts support with person/organization user types |
| 5 | + - Add organization invitations system with token-based invite flow |
| 4 6 | - Add V91 locations migration: location types, locations, and type assignments tables |
| 7 | + - Add V92 organization accounts migration (invitations, user type fields) |
| 5 8 | - Add JS hooks integration for parent app install and update workflows |
| 6 | - - Add organization accounts with person/organization user type and invitation flow |
| 7 | - - Add tax configuration consolidated into CountryData |
| 9 | + - Add LLMText module for AI/LLM-friendly content generation |
| 10 | + - Add auth logo from settings to admin header |
| 11 | + - Add billing tabs component |
| 8 12 | |
| 9 13 | ### Changed |
| 14 | + - Move tax rate and CountryData from Billing to core PhoenixKit |
| 10 15 | - Remove hardcoded Billing and E-Commerce module cards in favor of auto-discovery |
| 11 16 | - Update AGENTS.md with severity level definitions and JS hooks documentation |
| 12 17 | |
| 18 | + ### Fixed |
| 19 | + - Fix double sidebar for core modules and improve struct compatibility |
| 20 | + - Hide hamburger menu button when sidebar is permanently visible |
| 21 | + - Fix token security, gettext, and validation issues in organization invitations |
| 22 | + - Fix tax data loss, invitation status guard, and IbanData safety |
| 23 | + |
| 13 24 | ## 1.7.88 - 2026-04-02 |
| 14 25 | |
| 15 26 | ### Changed |
| @@ -1,6 +1,6 @@ | |
| 1 1 | {<<"links">>,[{<<"GitHub">>,<<"https://github.com/BeamLabEU/phoenix_kit">>}]}. |
| 2 2 | {<<"name">>,<<"phoenix_kit">>}. |
| 3 | - {<<"version">>,<<"1.7.89">>}. |
| 3 | + {<<"version">>,<<"1.7.90">>}. |
| 4 4 | {<<"description">>, |
| 5 5 | <<65,32,102,111,117,110,100,97,116,105,111,110,32,102,111,114,32,98,117,105, |
| 6 6 | 108,100,105,110,103,32,69,108,105,120,105,114,32,80,104,111,101,110,105, |
| @@ -13,6 +13,7 @@ | |
| 13 13 | {<<"licenses">>,[<<"MIT">>]}. |
| 14 14 | {<<"files">>, |
| 15 15 | [<<"lib">>,<<"lib/phoenix_kit_web">>,<<"lib/phoenix_kit_web/components">>, |
| 16 | + <<"lib/phoenix_kit_web/components/invitation_banner.ex">>, |
| 16 17 | <<"lib/phoenix_kit_web/components/layout_wrapper.ex">>, |
| 17 18 | <<"lib/phoenix_kit_web/components/layouts">>, |
| 18 19 | <<"lib/phoenix_kit_web/components/layouts/dashboard.html.heex">>, |
| @@ -29,6 +30,7 @@ | |
| 29 30 | <<"lib/phoenix_kit_web/components/core/table_default.ex">>, |
| 30 31 | <<"lib/phoenix_kit_web/components/core/file_display.ex">>, |
| 31 32 | <<"lib/phoenix_kit_web/components/core/email_activity_badges.ex">>, |
| 33 | + <<"lib/phoenix_kit_web/components/core/nav_tabs.ex">>, |
| 32 34 | <<"lib/phoenix_kit_web/components/core/theme_switcher.ex">>, |
| 33 35 | <<"lib/phoenix_kit_web/components/core/select.ex">>, |
| 34 36 | <<"lib/phoenix_kit_web/components/core/user_info.ex">>, |
| @@ -188,7 +190,9 @@ | |
| 188 190 | <<"lib/phoenix_kit_web/router.ex">>, |
| 189 191 | <<"lib/phoenix_kit_web/auth_router.ex">>,<<"lib/phoenix_kit_web/routes">>, |
| 190 192 | <<"lib/phoenix_kit_web/routes/referrals.ex">>, |
| 191 | - <<"lib/phoenix_kit_web/routes/customer_service.ex">>,<<"lib/mix">>, |
| 193 | + <<"lib/phoenix_kit_web/routes/customer_service.ex">>, |
| 194 | + <<"lib/phoenix_kit_web/hooks">>, |
| 195 | + <<"lib/phoenix_kit_web/hooks/invitation_hook.ex">>,<<"lib/mix">>, |
| 192 196 | <<"lib/mix/tasks">>,<<"lib/mix/tasks/compile.phoenix_kit_css_sources.ex">>, |
| 193 197 | <<"lib/mix/tasks/phoenix_kit_templates.ex">>, |
| 194 198 | <<"lib/mix/tasks/phoenix_kit.status.ex">>, |
| @@ -269,6 +273,7 @@ | |
| 269 273 | <<"lib/phoenix_kit/migrations/postgres/v02.ex">>, |
| 270 274 | <<"lib/phoenix_kit/migrations/postgres/v15.ex">>, |
| 271 275 | <<"lib/phoenix_kit/migrations/postgres/v65.ex">>, |
| 276 | + <<"lib/phoenix_kit/migrations/postgres/v92.ex">>, |
| 272 277 | <<"lib/phoenix_kit/migrations/postgres/v48.ex">>, |
| 273 278 | <<"lib/phoenix_kit/migrations/postgres/v17.ex">>, |
| 274 279 | <<"lib/phoenix_kit/migrations/postgres/v90.ex">>, |
| @@ -281,6 +286,7 @@ | |
| 281 286 | <<"lib/phoenix_kit/migrations/postgres/v71.ex">>, |
| 282 287 | <<"lib/phoenix_kit/migrations/postgres/v66.ex">>, |
| 283 288 | <<"lib/phoenix_kit/migrations/postgres/v39.ex">>, |
| 289 | + <<"lib/phoenix_kit/migrations/postgres/v91.ex">>, |
| 284 290 | <<"lib/phoenix_kit/migrations/postgres/v16.ex">>, |
| 285 291 | <<"lib/phoenix_kit/migrations/postgres/v49.ex">>, |
| 286 292 | <<"lib/phoenix_kit/migrations/postgres/v08.ex">>, |
| @@ -342,6 +348,7 @@ | |
| 342 348 | <<"lib/phoenix_kit/users/oauth_provider.ex">>, |
| 343 349 | <<"lib/phoenix_kit/users/rate_limiter.ex">>, |
| 344 350 | <<"lib/phoenix_kit/users/table_columns.ex">>, |
| 351 | + <<"lib/phoenix_kit/users/invitations.ex">>, |
| 345 352 | <<"lib/phoenix_kit/users/admin_note.ex">>, |
| 346 353 | <<"lib/phoenix_kit/users/oauth_config.ex">>, |
| 347 354 | <<"lib/phoenix_kit/users/custom_fields.ex">>, |
| @@ -353,6 +360,7 @@ | |
| 353 360 | <<"lib/phoenix_kit/users/permissions.ex">>, |
| 354 361 | <<"lib/phoenix_kit/users/oauth.ex">>, |
| 355 362 | <<"lib/phoenix_kit/users/role_permission.ex">>, |
| 363 | + <<"lib/phoenix_kit/users/organization_invitation.ex">>, |
| 356 364 | <<"lib/phoenix_kit/users/auth.ex">>,<<"lib/phoenix_kit/users/role.ex">>, |
| 357 365 | <<"lib/phoenix_kit/users/oauth_availability.ex">>, |
| 358 366 | <<"lib/phoenix_kit/users/sessions.ex">>,<<"lib/phoenix_kit/users/auth">>, |
| @@ -388,6 +396,7 @@ | |
| 388 396 | <<"lib/phoenix_kit/install/runtime_detector.ex">>, |
| 389 397 | <<"lib/phoenix_kit/install/igniter_compat.ex">>, |
| 390 398 | <<"lib/phoenix_kit/install/basic_configuration.ex">>, |
| 399 | + <<"lib/phoenix_kit/install/js_integration.ex">>, |
| 391 400 | <<"lib/phoenix_kit/install/endpoint_integration.ex">>, |
| 392 401 | <<"lib/phoenix_kit/install/mailer_config.ex">>, |
| 393 402 | <<"lib/phoenix_kit/install/db_connection_check.ex">>, |
| @@ -445,8 +454,18 @@ | |
| 445 454 | <<"lib/modules/customer_service/ticket_status_history.ex">>, |
| 446 455 | <<"lib/modules/customer_service/ticket.ex">>, |
| 447 456 | <<"lib/modules/customer_service/customer_service.ex">>, |
| 448 | - <<"lib/modules/referrals">>,<<"lib/modules/referrals/web">>, |
| 449 | - <<"lib/modules/referrals/web/list.ex">>, |
| 457 | + <<"lib/modules/llm_text">>,<<"lib/modules/llm_text/sources">>, |
| 458 | + <<"lib/modules/llm_text/sources/publishing.ex">>, |
| 459 | + <<"lib/modules/llm_text/sources/source.ex">>,<<"lib/modules/llm_text/web">>, |
| 460 | + <<"lib/modules/llm_text/web/settings.ex">>, |
| 461 | + <<"lib/modules/llm_text/web/controller.ex">>, |
| 462 | + <<"lib/modules/llm_text/llm_text.ex">>, |
| 463 | + <<"lib/modules/llm_text/file_storage.ex">>, |
| 464 | + <<"lib/modules/llm_text/publishing_subscriber.ex">>, |
| 465 | + <<"lib/modules/llm_text/workers">>, |
| 466 | + <<"lib/modules/llm_text/workers/generate_llm_text_job.ex">>, |
| 467 | + <<"lib/modules/llm_text/generator.ex">>,<<"lib/modules/referrals">>, |
| 468 | + <<"lib/modules/referrals/web">>,<<"lib/modules/referrals/web/list.ex">>, |
| 450 469 | <<"lib/modules/referrals/web/form.html.heex">>, |
| 451 470 | <<"lib/modules/referrals/web/list.html.heex">>, |
| 452 471 | <<"lib/modules/referrals/web/settings.html.heex">>, |
| @@ -506,8 +525,10 @@ | |
| 506 525 | <<"lib/modules/languages/dialect_mapper.ex">>, |
| 507 526 | <<"lib/modules/languages/language.ex">>, |
| 508 527 | <<"lib/modules/languages/languages.ex">>, |
| 509 | - <<"lib/modules/languages/README.md">>,<<"lib/modules/maintenance">>, |
| 510 | - <<"lib/modules/maintenance/maintenance.ex">>, |
| 528 | + <<"lib/modules/languages/README.md">>,<<"lib/modules/billing">>, |
| 529 | + <<"lib/modules/billing/web">>,<<"lib/modules/billing/web/components">>, |
| 530 | + <<"lib/modules/billing/web/components/billing_tabs.ex">>, |
| 531 | + <<"lib/modules/maintenance">>,<<"lib/modules/maintenance/maintenance.ex">>, |
| 511 532 | <<"lib/modules/maintenance/web">>, |
| 512 533 | <<"lib/modules/maintenance/web/components">>, |
| 513 534 | <<"lib/modules/maintenance/web/components/maintenance_page.ex">>, |
| @@ -55,6 +55,7 @@ if Code.ensure_loaded?(Igniter.Mix.Task) do | |
| 55 55 | DbConnectionCheck, |
| 56 56 | DemoFiles, |
| 57 57 | EndpointIntegration, |
| 58 | + JsIntegration, |
| 58 59 | LayoutConfig, |
| 59 60 | MailerConfig, |
| 60 61 | MigrationStrategy, |
| @@ -103,6 +104,7 @@ if Code.ensure_loaded?(Igniter.Mix.Task) do | |
| 103 104 | |> ObanConfig.add_oban_supervisor() |
| 104 105 | |> LayoutConfig.add_layout_integration_configuration() |
| 105 106 | |> CssIntegration.add_automatic_css_integration() |
| 107 | + |> JsIntegration.add_js_integration() |
| 106 108 | |> DemoFiles.copy_test_demo_files() |
| 107 109 | |> RouterIntegration.add_router_integration(opts[:router_path]) |
| 108 110 | |> BrowserPipelineIntegration.add_integration_to_browser_pipeline() |
| @@ -90,6 +90,7 @@ if Code.ensure_loaded?(Igniter.Mix.Task) do | |
| 90 90 | CssIntegration, |
| 91 91 | DbConnectionCheck, |
| 92 92 | IgniterHelpers, |
| 93 | + JsIntegration, |
| 93 94 | ObanConfig, |
| 94 95 | RateLimiterConfig |
| 95 96 | } |
| @@ -582,6 +583,9 @@ if Code.ensure_loaded?(Igniter.Mix.Task) do | |
| 582 583 | # Update CSS integration (enables daisyUI themes if disabled) |
| 583 584 | update_css_integration() |
| 584 585 | |
| 586 | + # Update JS hooks file |
| 587 | + JsIntegration.update_js_file() |
| 588 | + |
| 585 589 | # Always rebuild assets unless explicitly skipped |
| 586 590 | unless Keyword.get(opts, :skip_assets, false) do |
| 587 591 | AssetRebuild.check_and_rebuild(verbose: true) |
| @@ -0,0 +1,45 @@ | |
| 1 | + defmodule PhoenixKit.Modules.Billing.Web.Components.BillingTabs do |
| 2 | + @moduledoc """ |
| 3 | + Billing-specific tab configuration for settings pages. |
| 4 | + |
| 5 | + Wraps the generic `nav_tabs` component with billing tab definitions. |
| 6 | + """ |
| 7 | + |
| 8 | + use Phoenix.Component |
| 9 | + |
| 10 | + import PhoenixKitWeb.Components.Core.NavTabs, only: [nav_tabs: 1] |
| 11 | + |
| 12 | + @billing_tabs [ |
| 13 | + %{id: "general", label: "General", icon: "hero-cog-6-tooth", path: "/admin/settings/billing"}, |
| 14 | + %{ |
| 15 | + id: "providers", |
| 16 | + label: "Payment Providers", |
| 17 | + icon: "hero-credit-card", |
| 18 | + path: "/admin/settings/billing/providers" |
| 19 | + }, |
| 20 | + %{ |
| 21 | + id: "currencies", |
| 22 | + label: "Currencies", |
| 23 | + icon: "hero-currency-dollar", |
| 24 | + path: "/admin/billing/currencies" |
| 25 | + }, |
| 26 | + %{ |
| 27 | + id: "subscription_types", |
| 28 | + label: "Subscription Types", |
| 29 | + icon: "hero-clipboard-document-list", |
| 30 | + path: "/admin/billing/subscription-types" |
| 31 | + } |
| 32 | + ] |
| 33 | + |
| 34 | + attr :active_tab, :string, |
| 35 | + required: true, |
| 36 | + values: ~w(general providers currencies subscription_types) |
| 37 | + |
| 38 | + def billing_settings_tabs(assigns) do |
| 39 | + assigns = assign(assigns, :tabs, @billing_tabs) |
| 40 | + |
| 41 | + ~H""" |
| 42 | + <.nav_tabs active_tab={@active_tab} tabs={@tabs} class="mb-6" /> |
| 43 | + """ |
| 44 | + end |
| 45 | + end |
Loading more files…