Commit Graph
100 Commits
Author SHA1 Message Date
OliverandGitHub a954555eb7 Fix for table filtering logic (#9949)
* Fix for table filtering logic

- Disable table filters if custom filters supplied
- Handle search term better

* Logic Fix

* Tweak unit test
2025-07-04 10:24:02 +10:00
OliverandGitHub 4307e6d170 Allocation search by IPN (#9944)
* Fix for "has_ipn" filter

* Enable filtering and sorting by IPN in SalesOrderAllocation table

* Bump API version
2025-07-03 16:53:46 +10:00
OliverandGitHub d9f71ca20f [UI] Refactor stock adjustment actions (#9937)
* Refactor stock actions into a hook

* Cleanup hooks

* Allow transfer of "incomplete" outputs

* Simplify even further

* Enable transfer of stock allocated to build order

* Remove StockItemBriefSerializer entirely

* stock actions for items allocated to sales order

* Refactor <PartDetail> page

* Refactor <StockDetail>

* Refactor <LocationDetail>

* Bump API version

* Control serializer arguments
2025-07-03 16:15:06 +10:00
OliverandGitHub 5e9a8f7cb2 [UI] Sales order button (#9938)
* Refactor stock actions into a hook

* Cleanup hooks

* Allow transfer of "incomplete" outputs

* Simplify even further

* Enable transfer of stock allocated to build order

* Remove StockItemBriefSerializer entirely

* stock actions for items allocated to sales order

* Refactor <PartDetail> page

* Refactor <StockDetail>

* Refactor <LocationDetail>

* Bump API version

* SO button text

- Observe the "SALESORDER_SHIP_COMPLETE" value

* Fix palywright tests
2025-07-03 15:22:23 +10:00
OliverandGitHub 7ceee940d3 [UI Order detail tweaks (#9947)
* Build detail tweak

- Display clearer information about assembled part

* Tweak subtitle for PO

* Update SalesOrder

* Tweak return order
2025-07-03 14:25:21 +10:00
OliverandGitHub cdd977abaa Tweak "auto_allocate" serial numbers (#9942)
- Allow "in production" items
- Enables allocation of child builds
2025-07-03 14:25:02 +10:00
OliverandGitHub 8e330868f6 [UI] Notification Drawer (#9940)
- Handle error case
- Visual updates
2025-07-03 13:33:05 +10:00
OliverandGitHub 305b253417 [UI] Fix table column ordering (#9945)
* Fix table column ordering

- Ensure that table columns are always rendererd in the correct order

* Cleanup code

* Adjust col order
2025-07-03 13:32:53 +10:00
OliverandGitHub ededeeee00 Bug fix for build output table (#9946)
- Ensure records are cleared after bulk operation
2025-07-03 13:32:41 +10:00
OliverandGitHub ee3a574029 [UI] Build order visual enhancements (#9931)
* Adjust UI wording

- Separation between "items" and "stock"

* Add info panel if build order has no required items

* Fixes for playwright testing

- Ensure cookies are completely cleaned  between sessions
- Fix base URL based on vite command
- Fix samesite cookie mode
- Prevent /static/ files being served by web server on :8000

* Remove gunicorn option

* Fix unit test

* Readjust base URL

* Simplify doCachedLogin

* Adjust text

* Ensure translations are extracted

- Otherwise, playwright will not find the right strings...

* Make admin test more reliable

* Remove asynciness

* Fix <AttachmentLink>

- Allow null "attachment" value

* Better implementation

* Cleanup
2025-07-03 12:15:22 +10:00
OliverandGitHub ccc62255c4 Additional filters for incomplete build outputs (#9943) 2025-07-03 10:57:15 +10:00
OliverandGitHub 8b74a40ad5 [UI] Sales Order tweak (#9935)
* Allow report generation from sales order allocation view

* Fix model target
2025-07-02 23:18:47 +10:00
OliverandGitHub 3f14ae3f7d [bug] Playwright fixes (#9933)
* Fixes for playwright testing

- Ensure cookies are completely cleaned  between sessions
- Fix base URL based on vite command
- Fix samesite cookie mode
- Prevent /static/ files being served by web server on :8000

* Remove gunicorn option

* Readjust base URL

* Simplify doCachedLogin

* Fix logic func

* Revert webserver cmd

* Set base URL in playwrightconfig file

* Fix URL checks

* Fix URL definitions

* adjust playwright base URL

* Tweak for URL helper

* Further login tweaks

* Tweak test

* wait for API before starting tests

* Handle error

* Adjust login functions

* Don't use gunicorn

- But still use the webserver to serve static files in CI

* Enhanced login functions

* Tweak login tests

* Fix broken test

* Flipped the flippies
2025-07-02 22:12:17 +10:00
OliverandGitHub e6f91517c3 Log errors during tree rebuild (#9927)
* Log errors during tree rebuild

* Ensure stock tree is rebuilt

* Update models.py

Fix call to rebuild_stock_tree

* Update models.py

style fixes
2025-07-02 00:07:54 +10:00
OliverandGitHub e693c93c08 [UI] Reduce flicker when reloading detail instance (#9926)
* UI improvement for column selection in tables

- Limit max height of dropdown

* Allow retry for instance query

* Prevent flickering when reloading instance

- Don't hide the children
- Just put a loading overlay on top

* Enhanced rendering for <InstanceDetail>

* Refactor other pages

* remove unused attributes
2025-07-01 23:03:45 +10:00
OliverandGitHub 0683140278 UI improvement for column selection in tables (#9925)
- Limit max height of dropdown
2025-07-01 22:03:22 +10:00
OliverandGitHub 803b688ed7 Prevent dashboard updates if tab not visible (#9924)
* Prevent dashboard updates if tab not visible

* Uncomment code
2025-07-01 21:59:53 +10:00
OliverandGitHub 2d03d1d7eb Tweak thumbnail hover (#9923)
- Adjust positioning
- Slower to open
- Quicker to close
2025-07-01 21:42:06 +10:00
OliverandGitHub 2ee00c80f5 Enhance "path" columns (#9918)
* Enhance "path" columns

- Show "short" version
- Hovercard for full "pathstring"

* Remove old code

* adjust unit tests
2025-07-01 21:31:25 +10:00
OliverandGitHub a38f1803a9 Fix vertical scrolling for table filter select (#9920) 2025-07-01 16:09:43 +10:00
OliverandGitHub 6a7d04d0e6 Load calendar on first render (#9916)
Ensure that calendar views submit an API request on first load
2025-07-01 12:25:04 +10:00
OliverandGitHub 038337b17d Dashboard widgets refresh automatically (#9917) 2025-07-01 01:58:36 +00:00
OliverandGitHub 7c00bd7df3 Add part info to "Build Order Allocations" table (#9915) 2025-07-01 11:51:59 +10:00
OliverandGitHub e96e78cf0d Fix for URL redirect (#9914)
- Need leading / to ensure absolute path
2025-07-01 11:22:11 +10:00
OliverandGitHub 83b524f808 Negative annotations (#9909)
* Fix for "annotated_scheduled_to_build_quantity"

* Further annotation updates

* Add unit testing for annotation

* Tweak unit test

* Cast annotated expression

* Specific fields required to work

* Refactor other instances

* Update API docs
2025-07-01 08:57:27 +10:00
OliverandGitHub 67a5e4880e Remove unused field (#9908) 2025-06-30 13:49:52 +10:00
OliverandGitHub 1abf9b30dd [UI] Hover image (#9907)
* Add "hover image" for part display in tables

* Refactor company column
2025-06-30 13:49:43 +10:00
OliverandGitHub 8c6cacae66 Tweak expand icon for panels (#9905)
- Better layout
- Add tooltip
- Add divider
2025-06-30 13:14:37 +10:00
OliverandGitHub 52997d022a [UI] Dashboard Update (#9904)
* Prevent clicks when editing dashboard items

* Tweak playwright test
2025-06-30 12:30:09 +10:00
OliverandGitHub 41b0490071 [UI] Build test results fix (#9906)
* Fix event handler

* Make icon more clickable
2025-06-30 11:56:27 +10:00
OliverandGitHub f3072b804e [UI] Stored table state (#9902)
* Add useStoredTableState zustand

* Store table page size in the zustand state

* Store tablesorting data in zustand state

* Actually provide records...

* Transfer table names state

* Store hidden columns too
2025-06-30 08:13:04 +10:00
OliverandGitHub a8b805cdec [UI] Refactor useQuery hooks (#9894)
* Improvements for table loading

- Retry table queries on failure
- Properly store failure modes
- Increasing standoff time on query failure

* Add error messages

* Better error extraction

* Simplify error handling

* Update NotesEditor

* Update dashboard items

* Tweak table refetch

* Refactor notifications query

* Fix for calendar querty

* Other fixes

* Allow retry for search query

* Further adjustments

* Improved dashboard

* Upate more useQuery hooks

* Fix broken URL (was used for testing)

* Remove custom delay

* Revert change to noRecordsText
2025-06-29 22:07:06 +10:00
OliverandGitHub ae653e5649 Fix for invoke dev.translate task (#9900)
- This task is used for syncing translations with crowdin
- However, it has been broken for some time, and does not *extract* translations
- Thus, no *new* translations have been uploaded to crowdin recently
2025-06-29 22:06:52 +10:00
OliverandGitHub 741efd78af Fix for caching table options (#9898)
- The sync: false option does not perform properly
- Sometimes, the data is simply not loaded from localStorage at all
2025-06-29 20:18:34 +10:00
OliverandGitHub ab5765685a Add title when creating child build (#9893) 2025-06-28 12:09:26 +10:00
OliverandGitHub 5ccf7a6e45 Fix for stock item form (#9892) 2025-06-28 12:09:19 +10:00
OliverandGitHub 4b70a6e4ca Error tweaks (#9891)
* Wrap model import in try/except

* Fix circular imports

* Adjust exception handling
2025-06-28 10:25:24 +10:00
OliverandGitHub ff6d4bfb8f [Bug] Report fix (#9887)
* Improved mechanisms for data output

- Log errors against output
- Properly catch rendering errors

* Updated error handling

* Fix "render_date" tag

* Update default report template

- Make sure the helper is used

* Bug fixes
2025-06-28 08:23:12 +10:00
OliverandGitHub 486838b7e7 Tweaks to fix circular imports (#9888) 2025-06-27 17:10:06 +10:00
OliverandGitHub aa4927ddb6 Add divider to dashboard (#9884)
* Add divider to dashboard

* Tweak unit test
2025-06-27 16:55:57 +10:00
OliverandGitHub 5bf7a8ea31 Data table tweaks (#9886)
- Remove skeleton which hid table
- Updated hooks
2025-06-27 14:15:07 +10:00
OliverandGitHub 1e8d9bd571 Better handling of initial state fetching (#9881)
- Wait for states properly
- Order of operations (await)
2025-06-27 09:52:44 +10:00
OliverandGitHub 55a019c054 Simplify dashboard items (#9882) 2025-06-27 09:52:34 +10:00
OliverandGitHub 9a8d2a6a2e Prevent multiple fetch of settings stage (#9878)
* Prevent multiple fetch of settings stage

- Cached in the useSettingsState hook already

* Error handling
2025-06-27 09:16:01 +10:00
9a2097ddd0 Plugin install errors (#9876)
* Log plugin install errors

* Log more errors

* Format pip errors

* Update error messages

* Control if plugins file gets installed

* Error handling

* Fix typo

* Logic fix for loading plugins

* Adjust unit test

---------

Co-authored-by: Matthias Mair <code@mjmair.com>
2025-06-27 07:56:22 +10:00
OliverandGitHub e73823800b [UI] Fix thumbnail rendering (#9875)
- Fix typo which caused full image to be rendered
- This could cause significant network loading time
2025-06-26 23:40:12 +10:00
OliverandGitHub db59b5a7a0 De-sync useLocalStorage (#9873) 2025-06-26 21:03:17 +10:00
OliverandGitHub 791f7797cb [UI] About tweak (#9874)
* Cleanup server info modal

* Sort package info
2025-06-26 20:53:23 +10:00
OliverandGitHub d4024af64c Tweaks for config path checks (#9869) 2025-06-26 16:29:25 +10:00
OliverandGitHub 73e2532058 Clear data tweak (#9870)
* Tweaks for config path checks

* Update delete-data task
2025-06-26 16:29:12 +10:00
OliverandGitHub c283beedb3 Table default cols (#9868)
* Work in progress

- Seems to reset the columns on page refresh
- Probably related to the useLocalStorage hook

* Do not overwrite until the tablestate is loaded

* Prevent table fetch until data has been loaded from localStorage

* Improved persistance

* Adjust default column visibility

* Adjust playwright test
2025-06-26 15:27:26 +10:00
OliverandGitHub 81113dcd99 Remove sleep call (#9866) 2025-06-26 09:52:35 +10:00
OliverandGitHub fd9eeb4184 Update README.md (#9867)
Update sponsors list
2025-06-26 09:29:13 +10:00
OliverandGitHub 1b0de3610f Tweak for tracing setup (#9865)
- DB_ENGINE is of the form "django.db.backends.postgresql", not "postgesql"
2025-06-26 09:29:03 +10:00
OliverandGitHub bc2dbfa0c2 [bug] Custom state fix (#9858)
* Set status correctly when returning from customer

* Fix for stock item status change

- Reduced set of changes from #9781

* Handle API updates

* Fix variable shadowing

* More intelligent comparison

* Remove debug statement
2025-06-26 07:42:06 +10:00
OliverandGitHub 1a51c4a3dd Fix for tracing init (#9860)
- Circular include means that settings.DB_ENGINE may not be available
2025-06-26 07:41:44 +10:00
OliverandGitHub cd223116b5 [UI] Description col tweaks (#9859)
* Refactoring

* More refactoring

* Remove debug msg
2025-06-26 01:12:38 +10:00
OliverandGitHub be99b645ad [API] Return stock item list when creating multiple items (#9857)
* Return stock item information when serializing an existing item

* Handle stock item creation

* Commonize response

* Provide build items in response

* Formalize returned data type

* Fix unit test
2025-06-26 00:43:42 +10:00
OliverandGitHub 6915ed52c9 Enable 'units' field for plugin settings (#9856)
* Enable 'units' field for plugin settings

* Bump API version
2025-06-25 20:30:39 +10:00
OliverandGitHub 73d463d84e Adjust "child_items" annotation for stockitem (#9842)
* Adjust "child_items" annotation for stockitem

- Show the direct children only

* Remove unused func
2025-06-25 18:34:57 +10:00
OliverandGitHub 590c41169e Enable printing and report actions (#9853) 2025-06-25 17:35:57 +10:00
OliverandGitHub 8e8b61033c Fix for stock item duplication bug (#9846)
* Omit "serial" field

* Ignore 'serial' field on item creation
2025-06-25 06:54:12 +10:00
OliverandGitHub f1482aaa28 Prevent query returning undefined value (#9847) 2025-06-25 06:53:39 +10:00
OliverandGitHub 0b451dc085 Tweak plugin load error messages (#9839)
* Tweak plugin load error messages

* Update unit tests
2025-06-24 21:01:06 +10:00
OliverandGitHub 5bb6db704b Plugin url fix (#9833)
* Handle error when loading plugin URLs

- Error separation between plugins
- Format plugin URLs outside the plugin code
- Add "catch-all" URL

* Attempt to resolve URL

* Accept 404 error

* Cleanup

* Tweak unit tests
2025-06-24 19:31:37 +10:00
OliverandGitHub 4d029b0d54 [bug] Fixes for plugin loading mechanism (#9826)
* Fix logic for registry mutex lock

* Handle potential errors during UsersConfig launch

* Remove debug statement

* Revert to_raise value

* Clear plugin errors on reload

* Better method of avoiding duplicates
2025-06-22 12:40:07 +10:00
OliverandGitHub 785bda26c4 Refactor mixin_enabled calls (#9825)
- Ensure the enumerated values are used
2025-06-22 11:28:48 +10:00
OliverandGitHub cc40af6199 Fix missing context items (#9819)
* Fix missing context items

* Fix typo in docstring
2025-06-21 17:27:39 +10:00
OliverandGitHub 499e48cdd8 Company reports (#9817)
* Support report generation against company

* Add "print report" to Company table

* Add printing button to Company detail page

* Bump API version
2025-06-20 17:52:07 +10:00
OliverandGitHub 6229d2e8c8 Small UI improvement to SecurityContext (#9818)
* Small UI improvement to SecurityContext

* Fix translated string
2025-06-20 17:35:03 +10:00
OliverandGitHub b4f3fd46f9 [Breaking] Remove part scheduling feature (#9811)
* Remove frontend code

* Remove references to setting

* Remove API endpoint

* Docs updates

* Bump API version

* Remove check for old tab
2025-06-20 17:17:44 +10:00
OliverandGitHub c90fc2feda Improve handling of plugin metadata reading (#9816)
* Improve handling of plugin metadata reading

* Accessor fix
2025-06-20 15:15:40 +10:00
OliverandGitHub 6a23341f2a Expose ModelInformationDict to plugins (#9810)
* Expose ModelInformationDict to plugins

* Expose internal modal dict

* Add comment

* Fix import string
2025-06-19 21:42:34 +10:00
OliverandGitHub 8346318f7d Bump UI version (#9805)
- To match latest version published
2025-06-18 17:13:50 +10:00
OliverandGitHub 62aef238f0 [UI] Add "can build" part info (#9798)
* Add proper serializer to PartRequirements API endpoint

* Add API endpoint

* Display "can_build" quantity

* Add simple playwright tests

* Bump API version

* Updated docs

* Fix formatting

* Consolidate field names

- Match field names to the PartSerializer

* Adjust frontend

* Add "can_build" to BuildDetail page

* Tweak BuildDetail

* Hide until load

* serializer fixes
2025-06-18 10:17:39 +10:00
OliverandGitHub 130eb32f88 [UI] Enhanced number formatting (#9799)
* Enhanced number formatting

* Support part units
2025-06-17 22:51:28 +10:00
OliverandGitHub 92667876fe [UI] Query Improvements (#9791)
* Fix for stockOperationModal

* Re-check when opened status changes

* rename stockOperationModal -> useStockOperationModal

* Fix enabled status of query

* Add option to specify modalId

* Track modal state when open / close

* Prevent generators from running until forms are open

* Prevent double loading of tables

* Fix useQuery

* Fix queryKey

* Revert API change
2025-06-17 22:16:19 +10:00
OliverandGitHub af3c5b5711 Enhance docs for devcontainer / frontend development (#9792)
* Enhance docs for devcontainer / frontend development

* Update

* Linkify
2025-06-16 22:22:02 +10:00
OliverandGitHub 53514c5890 Add extra context to "invoke version" (#9785)
* Add extra context to "invoke version"

* Reorder

* Simplify

* not specified

* Revert spacing
2025-06-15 13:40:59 +10:00
OliverandGitHub 3bc1e7f9f0 Cleanup panel groups (#9783)
- Hide label if panel is not expanded
- Add a visual divider
2025-06-15 11:17:44 +10:00
OliverandGitHub 26b5f0ae4c Documentation fix (#9782) 2025-06-14 19:31:35 +10:00
OliverandGitHub b02bc3842e Remove function call from translated string (#9778) 2025-06-14 12:15:20 +10:00
OliverandGitHub ba4a23757e Fix task group (#9777)
* Fix group for offload_task

* Add group labels
2025-06-14 12:15:02 +10:00
OliverandGitHub c027a7cf7d [Plugin] Auto-create builds (#9574)
* Remove existing "create child builds" functionality

- Remove API fields
- Remove background task definition

* Basic plugin structure

* Bump API version

* Bump API version

* Bug fix

* working on plugin event handling

* Add new stub method

* Implement functionality

* Fix conflicts in api_version

* Docs

* Fix docs

* Fix event type
2025-06-14 11:26:48 +10:00
OliverandGitHub b465900344 [UI] Fix serial and batch code generators (#9772)
* Tweak stock item form

- Fix batch code placeholder
- Fix serial number placeholder

* Tweak build output form

* More cleanup

* Fix for PurchaseOrderForm

* Refactoring placeholder values
2025-06-13 20:02:30 +10:00
OliverandGitHub 5bf94acc1a Fix error handling for template editor (#9770)
* Fix error handling for template editor

* Remove logging
2025-06-13 12:50:05 +10:00
OliverandGitHub c6848b8e87 [Feature] External build order (#9312)
* Add BuildOrder reference to PurchaseOrderLineItem

* Add setting to enable / disable external build orders

* Fix for supplier part detail

* Update forms

* Filter build list by "external" status

* Add "external" attribute to BuildOrder

* Filter by external build when selecting against purchase order line item

* Add frontend elements

* Prevent creation of build outputs

* Tweak related model field

- Send filters when fetching initial data

* Fix migrations

* Fix some existing typos

* Add build info when receiving line items

* Logic fix

* Bump API version

* Updated relationship

* Add external orders tab for order

* Display table of external purchase orders against a build order

* Fix permissions

* Tweak field definition

* Add unit tests

* Tweak api_version.py

* Playwright testing

* Fix discrepancy in 'building' filter

* Add basic documentation

( more work required )

* Tweak docs macros

* Migration fix

* Adjust build page tabs

* Fix imports

* Fix broken import

* Update playywright tests

* Bump API version

* Handle DB issues

* Improve filter

* Cleaner code

* Fix column ordering bug

* Add filters to build output table

* Documentation

* Tweak unit test

* Add "scheduled_for_production" field

* Add helper function to part model

* Cleanup
2025-06-12 18:27:15 +10:00
OliverandGitHub 5389d8dc07 Fix for yarn.lock (#9767) 2025-06-12 15:16:21 +10:00
OliverandGitHub e30c4e7cdd Part copy test (#9764)
* Add functionality to copy part test templates when duplicating a part instance

* Bug fixes

* Tweak part duplication fields

* Add simple playwright test

* Updated unit test for part duplication

* Bump API version
2025-06-12 12:56:16 +10:00
OliverandGitHub c81d0eb628 Table col fix (#9762)
* Update mantine-datatable

* Improve table hook

* Fix for table name

- Table names must be unique
- Otherwise stored column data gets corrupted

* Click through on table

* Tweak unit tests
2025-06-12 12:18:14 +10:00
OliverandGitHub a3c3c142f7 Optionally exclude session information when exporting data (#9763)
* Optionally exclude session information when exporting data

* Add sessions.session table
2025-06-12 12:04:28 +10:00
OliverandGitHub 62552918d0 Add devcontainer flag (#9758) 2025-06-12 08:40:50 +10:00
OliverandGitHub faec2e2050 Expose devcontainer ports (#9757)
- Allow external connection to DB
2025-06-11 16:23:21 +10:00
OliverandGitHub 6b261e122d Param filters 2 (#9749)
* Filter updates

- Split code
- Allow multiple simultaneous filters against a given parameter
- Bug fixes

* Refactoring

* Cleanup

* fix for operator selection

* Backend fix

* Additional filtering options

* Updated documentation

* Impove filtering logic

* Tweak playwright tests

* Remove debug statements

* Tweak for login test
2025-06-08 22:03:50 +10:00
OliverandGitHub 026904b361 Render whole stock location path (#9747)
* Render whole stock location path

- Render location pathstring, not just name
- Brings tables into line with how location is displayed elsewhere
- Closes https://github.com/inventree/InvenTree/issues/9627

* Handle error on worker boot
2025-06-08 11:17:09 +10:00
OliverandGitHub 4b71130ebe [Feature] Override global settings (#9718)
* Provide mechanism for config to override global settings

* Ensure overrides are observed on save

* Refactor

* Add "read_only" field to serializer

* Prevent editing for read_only settings

* Bump API version

* Update docs

* Secure logs

* Override applies to default_value

* override get_setting method

* Add unit test

* Utilize new approach to override SITE_URL

* Docs updates

* Docs tweaks

* Shortcut for get_global_setting

* Remove previous change

- Allow validation to be performed within the InvenTreeSetting class

* Override INVENTREE_BASE_URL setting

* Handle error on worker boot

* Tweak unit test
2025-06-07 20:08:34 +10:00
OliverandGitHub 12677ccf22 Add barcode actions for SalesOrderShipment (#9746)
* Add barcode actions for SalesOrderShipment

* Handle error on worker boot
2025-06-07 20:08:20 +10:00
OliverandGitHub 4660b9477b [UI] Adjustable column width (#9744)
* Add prop to column def

* Enable resizable columns

* Enable cell wrapping if required

* Tweak CompanyTable

* Remove old setting

* Tweak for PartTable
2025-06-07 19:15:33 +10:00
OliverandGitHub 638cb23923 Rearrange UI menu (#9743)
- Better grouping
2025-06-07 18:41:37 +10:00
66db58bb36 Add barcode to salesordershipment (#9745)
* Add InvenTreeBarcodeMixin to SalesOrderShipment

* Barcode model type code method added for SalesOrderShipment class

* Add barcode data to SalesOrderShipment serializer

* Bump API version

---------

Co-authored-by: meenaraj22 <meena@blaze.ws>
Co-authored-by: Matthias Mair <code@mjmair.com>
2025-06-07 15:51:05 +10:00