diff --git a/.docker/partdb-entrypoint.sh b/.docker/partdb-entrypoint.sh
index 5bfc6b48..ffd2b24a 100644
--- a/.docker/partdb-entrypoint.sh
+++ b/.docker/partdb-entrypoint.sh
@@ -42,6 +42,48 @@ fi
# Start PHP-FPM (the PHP_VERSION is replaced by the configured version in the Dockerfile)
service phpPHP_VERSION-fpm start
+
+# Run migrations if automigration is enabled via env variable DB_AUTOMIGRATE
+if [ "$DB_AUTOMIGRATE" = "true" ]; then
+ echo "Waiting for database to be ready..."
+ ATTEMPTS_LEFT_TO_REACH_DATABASE=60
+ until [ $ATTEMPTS_LEFT_TO_REACH_DATABASE -eq 0 ] || DATABASE_ERROR=$(sudo -E -u www-data php bin/console dbal:run-sql -q "SELECT 1" 2>&1); do
+ if [ $? -eq 255 ]; then
+ # If the Doctrine command exits with 255, an unrecoverable error occurred
+ ATTEMPTS_LEFT_TO_REACH_DATABASE=0
+ break
+ fi
+ sleep 1
+ ATTEMPTS_LEFT_TO_REACH_DATABASE=$((ATTEMPTS_LEFT_TO_REACH_DATABASE - 1))
+ echo "Still waiting for database to be ready... Or maybe the database is not reachable. $ATTEMPTS_LEFT_TO_REACH_DATABASE attempts left."
+ done
+
+ if [ $ATTEMPTS_LEFT_TO_REACH_DATABASE -eq 0 ]; then
+ echo "The database is not up or not reachable:"
+ echo "$DATABASE_ERROR"
+ exit 1
+ else
+ echo "The database is now ready and reachable"
+ fi
+
+ # Check if there are any available migrations to do, by executing doctrine:migrations:up-to-date
+ # and checking if the exit code is 0 (up to date) or 1 (not up to date)
+ if sudo -E -u www-data php bin/console doctrine:migrations:up-to-date --no-interaction; then
+ echo "Database is up to date, no migrations necessary."
+ else
+ echo "Migrations available..."
+ echo "Do backup of database..."
+
+ sudo -E -u www-data mkdir -p /var/www/html/uploads/.automigration-backup/
+ # Backup the database
+ sudo -E -u www-data php bin/console partdb:backup -n --database /var/www/html/uploads/.automigration-backup/backup-$(date +%Y-%m-%d_%H-%M-%S).zip
+
+ # Check if there are any migration files
+ sudo -E -u www-data php bin/console doctrine:migrations:migrate --no-interaction
+ fi
+
+fi
+
# first arg is `-f` or `--some-option` (taken from https://github.com/docker-library/php/blob/master/8.2/bullseye/apache/docker-php-entrypoint)
if [ "${1#-}" != "$1" ]; then
set -- apache2-foreground "$@"
diff --git a/.docker/symfony.conf b/.docker/symfony.conf
index 66893aee..b5229bf6 100644
--- a/.docker/symfony.conf
+++ b/.docker/symfony.conf
@@ -43,6 +43,9 @@
PassEnv PROVIDER_OCTOPART_CLIENT_ID PROVIDER_OCTOPART_SECRET PROVIDER_OCTOPART_CURRENCY PROVIDER_OCTOPART_COUNTRY PROVIDER_OCTOPART_SEARCH_LIMIT PROVIDER_OCTOPART_ONLY_AUTHORIZED_SELLERS
PassEnv PROVIDER_MOUSER_KEY PROVIDER_MOUSER_SEARCH_OPTION PROVIDER_MOUSER_SEARCH_LIMIT PROVIDER_MOUSER_SEARCH_WITH_SIGNUP_LANGUAGE
PassEnv PROVIDER_LCSC_ENABLED PROVIDER_LCSC_CURRENCY
+ PassEnv PROVIDER_OEMSECRETS_KEY PROVIDER_OEMSECRETS_COUNTRY_CODE PROVIDER_OEMSECRETS_CURRENCY PROVIDER_OEMSECRETS_ZERO_PRICE PROVIDER_OEMSECRETS_SET_PARAM PROVIDER_OEMSECRETS_SORT_CRITERIA
+ PassEnv PROVIDER_REICHELT_ENABLED PROVIDER_REICHELT_CURRENCY PROVIDER_REICHELT_COUNTRY PROVIDER_REICHELT_LANGUAGE PROVIDER_REICHELT_INCLUDE_VAT
+ PassEnv PROVIDER_POLLIN_ENABLED
PassEnv EDA_KICAD_CATEGORY_DEPTH
# For most configuration files from conf-available/, which are
diff --git a/.env b/.env
index ce2a6b03..1806e9c6 100644
--- a/.env
+++ b/.env
@@ -143,7 +143,8 @@ PROVIDER_TME_CURRENCY=EUR
PROVIDER_TME_LANGUAGE=en
# The country to get results for
PROVIDER_TME_COUNTRY=DE
-# Set this to 1 to get gross prices (including VAT) instead of net prices
+# [DEPRECATED] Set this to 1 to get gross prices (including VAT) instead of net prices
+# With private API keys, this option cannot be used anymore is ignored by Part-DB. The VAT inclusion depends on your TME account settings.
PROVIDER_TME_GET_GROSS_PRICES=1
# Octopart / Nexar Provider:
@@ -215,6 +216,27 @@ PROVIDER_OEMSECRETS_SET_PARAM=1
#If unset or set to any other value, no sorting is performed.
PROVIDER_OEMSECRETS_SORT_CRITERIA=C
+
+# Reichelt provider:
+# Reichelt.com offers no official API, so this info provider webscrapes the website to extract info
+# It could break at any time, use it at your own risk
+# We dont require an API key for Reichelt, just set this to 1 to enable Reichelt support
+PROVIDER_REICHELT_ENABLED=0
+# The country to get prices for
+PROVIDER_REICHELT_COUNTRY=DE
+# The language to get results in (en, de, fr, nl, pl, it, es)
+PROVIDER_REICHELT_LANGUAGE=en
+# Include VAT in prices (set to 1 to include VAT, 0 to exclude VAT)
+PROVIDER_REICHELT_INCLUDE_VAT=1
+# The currency to get prices in (only for countries with countries other than EUR)
+PROVIDER_REICHELT_CURRENCY=EUR
+
+# Pollin provider:
+# Pollin.de offers no official API, so this info provider webscrapes the website to extract info
+# It could break at any time, use it at your own risk
+# We dont require an API key for Pollin, just set this to 1 to enable Pollin support
+PROVIDER_POLLIN_ENABLED=0
+
##################################################################################
# EDA integration related settings
##################################################################################
diff --git a/assets/tomselect/extend_existing_selection/extend_existing_selection.js b/.env.dev
similarity index 100%
rename from assets/tomselect/extend_existing_selection/extend_existing_selection.js
rename to .env.dev
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 62bdc123..8e6ea54c 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -18,7 +18,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- php-versions: [ '8.1', '8.2', '8.3' ]
+ php-versions: [ '8.1', '8.2', '8.3', '8.4' ]
db-type: [ 'mysql', 'sqlite', 'postgres' ]
env:
@@ -126,7 +126,7 @@ jobs:
run: ./bin/phpunit --coverage-clover=coverage.xml
- name: Upload coverage
- uses: codecov/codecov-action@v4
+ uses: codecov/codecov-action@v5
with:
env_vars: PHP_VERSION,DB_TYPE
token: ${{ secrets.CODECOV_TOKEN }}
diff --git a/Dockerfile b/Dockerfile
index 15049166..0f909f16 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,5 @@
ARG BASE_IMAGE=debian:bookworm-slim
-ARG PHP_VERSION=8.2
+ARG PHP_VERSION=8.3
FROM ${BASE_IMAGE} AS base
ARG PHP_VERSION
@@ -125,6 +125,7 @@ upload_max_filesize=256M
post_max_size=300M
opcache.preload_user=www-data
opcache.preload=/var/www/html/config/preload.php
+log_limit=8096
EOF
COPY ./.docker/symfony.conf /etc/apache2/sites-available/symfony.conf
diff --git a/VERSION b/VERSION
index 850e7424..511a76e6 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.14.0
+1.17.1
diff --git a/assets/ckeditor/plugins/PartDBLabel/PartDBLabelUI.js b/assets/ckeditor/plugins/PartDBLabel/PartDBLabelUI.js
index aa29e889..37e1dcbe 100644
--- a/assets/ckeditor/plugins/PartDBLabel/PartDBLabelUI.js
+++ b/assets/ckeditor/plugins/PartDBLabel/PartDBLabelUI.js
@@ -128,6 +128,8 @@ const PLACEHOLDERS = [
['[[BARCODE_QR]]', 'QR code linking to this element'],
['[[BARCODE_C128]]', 'Code 128 barcode linking to this element'],
['[[BARCODE_C39]]', 'Code 39 barcode linking to this element'],
+ ['[[BARCODE_C93]]', 'Code 93 barcode linking to this element'],
+ ['[[BARCODE_DATAMATRIX]]', 'Datamatrix code linking to this element'],
]
},
{
diff --git a/assets/ckeditor/plugins/PartDBLabel/lang/de.js b/assets/ckeditor/plugins/PartDBLabel/lang/de.js
index 2220cc0b..748b1607 100644
--- a/assets/ckeditor/plugins/PartDBLabel/lang/de.js
+++ b/assets/ckeditor/plugins/PartDBLabel/lang/de.js
@@ -69,6 +69,8 @@ Object.assign( window.CKEDITOR_TRANSLATIONS[ 'de' ].dictionary, {
'QR code linking to this element': 'QR Code verknüpft mit diesem Element',
'Code 128 barcode linking to this element': 'Code 128 Barcode verknüpft mit diesem Element',
'Code 39 barcode linking to this element': 'Code 39 Barcode verknüpft mit diesem Element',
+ 'Code 93 barcode linking to this element': 'Code 93 Barcode verknüpft mit diesem Element',
+ 'Datamatrix code linking to this element': 'Datamatrix Code verknüpft mit diesem Element',
'Location ID': 'Lagerort ID',
'Name': 'Name',
diff --git a/assets/controllers/elements/attachment_autocomplete_controller.js b/assets/controllers/elements/attachment_autocomplete_controller.js
index fe44baee..f8bc301e 100644
--- a/assets/controllers/elements/attachment_autocomplete_controller.js
+++ b/assets/controllers/elements/attachment_autocomplete_controller.js
@@ -23,6 +23,12 @@ import "tom-select/dist/css/tom-select.bootstrap5.css";
import '../../css/components/tom-select_extensions.css';
import TomSelect from "tom-select";
+import TomSelect_click_to_edit from '../../tomselect/click_to_edit/click_to_edit'
+import TomSelect_autoselect_typed from '../../tomselect/autoselect_typed/autoselect_typed'
+
+TomSelect.define('click_to_edit', TomSelect_click_to_edit)
+TomSelect.define('autoselect_typed', TomSelect_autoselect_typed)
+
export default class extends Controller {
_tomSelect;
@@ -46,6 +52,12 @@ export default class extends Controller {
}
return '
' + escape(data.label) + '
';
}
+ },
+ plugins: {
+ 'autoselect_typed': {},
+ 'click_to_edit': {},
+ 'clear_button': {},
+ "restore_on_backspace": {}
}
};
diff --git a/assets/controllers/elements/ckeditor_controller.js b/assets/controllers/elements/ckeditor_controller.js
index f368324f..079ee2ad 100644
--- a/assets/controllers/elements/ckeditor_controller.js
+++ b/assets/controllers/elements/ckeditor_controller.js
@@ -53,6 +53,7 @@ export default class extends Controller {
const config = {
language: language,
+ licenseKey: "GPL",
}
const watchdog = new EditorWatchdog();
diff --git a/assets/controllers/elements/part_search_controller.js b/assets/controllers/elements/part_search_controller.js
index 4a70c6d2..c33cece0 100644
--- a/assets/controllers/elements/part_search_controller.js
+++ b/assets/controllers/elements/part_search_controller.js
@@ -186,5 +186,15 @@ export default class extends Controller {
];
},
});
+
+ //Try to find the input field and register a defocus handler. This is necessarry, as by default the autocomplete
+ //lib has problems when multiple inputs are present on the page. (see https://github.com/algolia/autocomplete/issues/1216)
+ const inputs = this.element.getElementsByClassName('aa-Input');
+ for (const input of inputs) {
+ input.addEventListener('blur', () => {
+ this._autocomplete.setIsOpen(false);
+ });
+ }
+
}
}
\ No newline at end of file
diff --git a/assets/controllers/elements/static_file_autocomplete_controller.js b/assets/controllers/elements/static_file_autocomplete_controller.js
index 57e48824..31ca0314 100644
--- a/assets/controllers/elements/static_file_autocomplete_controller.js
+++ b/assets/controllers/elements/static_file_autocomplete_controller.js
@@ -23,6 +23,12 @@ import "tom-select/dist/css/tom-select.bootstrap5.css";
import '../../css/components/tom-select_extensions.css';
import TomSelect from "tom-select";
+import TomSelect_click_to_edit from '../../tomselect/click_to_edit/click_to_edit'
+import TomSelect_autoselect_typed from '../../tomselect/autoselect_typed/autoselect_typed'
+
+TomSelect.define('click_to_edit', TomSelect_click_to_edit)
+TomSelect.define('autoselect_typed', TomSelect_autoselect_typed)
+
/**
* This is the frontend controller for StaticFileAutocompleteType form element.
* Basically it loads a text file from the given url (via data-url) and uses it as a source for the autocomplete.
@@ -46,7 +52,13 @@ export default class extends Controller {
orderField: 'text',
//This a an ugly solution to disable the delimiter parsing of the TomSelect plugin
- delimiter: 'VERY_L0NG_D€LIMITER_WHICH_WILL_NEVER_BE_ENCOUNTERED_IN_A_STRING'
+ delimiter: 'VERY_L0NG_D€LIMITER_WHICH_WILL_NEVER_BE_ENCOUNTERED_IN_A_STRING',
+ plugins: {
+ 'autoselect_typed': {},
+ 'click_to_edit': {},
+ 'clear_button': {},
+ 'restore_on_backspace': {}
+ }
};
if (this.element.dataset.url) {
diff --git a/assets/controllers/elements/structural_entity_select_controller.js b/assets/controllers/elements/structural_entity_select_controller.js
index 4735dd2a..a1114a97 100644
--- a/assets/controllers/elements/structural_entity_select_controller.js
+++ b/assets/controllers/elements/structural_entity_select_controller.js
@@ -24,6 +24,9 @@ import {Controller} from "@hotwired/stimulus";
import {trans, ENTITY_SELECT_GROUP_NEW_NOT_ADDED_TO_DB} from '../../translator.js'
+import TomSelect_autoselect_typed from '../../tomselect/autoselect_typed/autoselect_typed'
+TomSelect.define('autoselect_typed', TomSelect_autoselect_typed)
+
export default class extends Controller {
_tomSelect;
@@ -37,11 +40,15 @@ export default class extends Controller {
const allowAdd = this.element.getAttribute("data-allow-add") === "true";
const addHint = this.element.getAttribute("data-add-hint") ?? "";
+
+
+
let settings = {
allowEmptyOption: true,
selectOnTab: true,
maxOptions: null,
create: allowAdd ? this.createItem.bind(this) : false,
+ createFilter: this.createFilter.bind(this),
// This three options allow us to paste element names with commas: (see issue #538)
maxItems: 1,
@@ -81,8 +88,17 @@ export default class extends Controller {
//Add callbacks to update validity
onInitialize: this.updateValidity.bind(this),
onChange: this.updateValidity.bind(this),
+
+ plugins: {
+ "autoselect_typed": {},
+ }
};
+ //Add clear button plugin, if an empty option is present
+ if (this.element.querySelector("option[value='']") !== null) {
+ settings.plugins["clear_button"] = {};
+ }
+
this._tomSelect = new TomSelect(this.element, settings);
//Do not do a sync here as this breaks the initial rendering of the empty option
//this._tomSelect.sync();
@@ -113,6 +129,31 @@ export default class extends Controller {
});
}
+ createFilter(input) {
+
+ //Normalize the input (replace spacing around arrows)
+ if (input.includes("->")) {
+ const inputs = input.split("->");
+ inputs.forEach((value, index) => {
+ inputs[index] = value.trim();
+ });
+ input = inputs.join("->");
+ } else {
+ input = input.trim();
+ }
+
+ const options = this._tomSelect.options;
+ //Iterate over all options and check if the input is already present
+ for (let index in options) {
+ const option = options[index];
+ if (option.path === input) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
updateValidity() {
//Mark this input as invalid, if the selected option is disabled
diff --git a/assets/controllers/elements/tagsinput_controller.js b/assets/controllers/elements/tagsinput_controller.js
index acfcd0fa..1f10c457 100644
--- a/assets/controllers/elements/tagsinput_controller.js
+++ b/assets/controllers/elements/tagsinput_controller.js
@@ -23,14 +23,21 @@ import "tom-select/dist/css/tom-select.bootstrap5.css";
import '../../css/components/tom-select_extensions.css';
import TomSelect from "tom-select";
+import TomSelect_click_to_edit from '../../tomselect/click_to_edit/click_to_edit'
+import TomSelect_autoselect_typed from '../../tomselect/autoselect_typed/autoselect_typed'
+
+TomSelect.define('click_to_edit', TomSelect_click_to_edit)
+TomSelect.define('autoselect_typed', TomSelect_autoselect_typed)
+
export default class extends Controller {
_tomSelect;
connect() {
let settings = {
plugins: {
- remove_button:{
- }
+ remove_button:{},
+ 'autoselect_typed': {},
+ 'click_to_edit': {},
},
persistent: false,
selectOnTab: true,
diff --git a/assets/controllers/pages/barcode_scan_controller.js b/assets/controllers/pages/barcode_scan_controller.js
index 5f82a39e..368fef43 100644
--- a/assets/controllers/pages/barcode_scan_controller.js
+++ b/assets/controllers/pages/barcode_scan_controller.js
@@ -20,7 +20,7 @@
import {Controller} from "@hotwired/stimulus";
//import * as ZXing from "@zxing/library";
-import {Html5QrcodeScanner, Html5Qrcode} from "html5-qrcode";
+import {Html5QrcodeScanner, Html5Qrcode} from "@part-db/html5-qrcode";
/* stimulusFetch: 'lazy' */
export default class extends Controller {
@@ -50,7 +50,7 @@ export default class extends Controller {
});
this._scanner = new Html5QrcodeScanner(this.element.id, {
- fps: 2,
+ fps: 10,
qrbox: qrboxFunction,
experimentalFeatures: {
//This option improves reading quality on android chrome
@@ -61,6 +61,11 @@ export default class extends Controller {
this._scanner.render(this.onScanSuccess.bind(this));
}
+ disconnect() {
+ this._scanner.pause();
+ this._scanner.clear();
+ }
+
onScanSuccess(decodedText, decodedResult) {
//Put our decoded Text into the input box
document.getElementById('scan_dialog_input').value = decodedText;
diff --git a/assets/controllers/pages/latex_preview_controller.js b/assets/controllers/pages/latex_preview_controller.js
index c836faa6..6113393a 100644
--- a/assets/controllers/pages/latex_preview_controller.js
+++ b/assets/controllers/pages/latex_preview_controller.js
@@ -25,9 +25,20 @@ import "katex/dist/katex.css";
export default class extends Controller {
static targets = ["input", "preview"];
+ static values = {
+ unit: {type: Boolean, default: false} //Render as upstanding (non-italic) text, useful for units
+ }
+
updatePreview()
{
- katex.render(this.inputTarget.value, this.previewTarget, {
+ let value = "";
+ if (this.unitValue) {
+ value = "\\mathrm{" + this.inputTarget.value + "}";
+ } else {
+ value = this.inputTarget.value;
+ }
+
+ katex.render(value, this.previewTarget, {
throwOnError: false,
});
}
diff --git a/assets/controllers/pages/parameters_autocomplete_controller.js b/assets/controllers/pages/parameters_autocomplete_controller.js
index f6504990..cd82875a 100644
--- a/assets/controllers/pages/parameters_autocomplete_controller.js
+++ b/assets/controllers/pages/parameters_autocomplete_controller.js
@@ -22,6 +22,13 @@ import TomSelect from "tom-select";
import katex from "katex";
import "katex/dist/katex.css";
+
+import TomSelect_click_to_edit from '../../tomselect/click_to_edit/click_to_edit'
+import TomSelect_autoselect_typed from '../../tomselect/autoselect_typed/autoselect_typed'
+
+TomSelect.define('click_to_edit', TomSelect_click_to_edit)
+TomSelect.define('autoselect_typed', TomSelect_autoselect_typed)
+
/* stimulusFetch: 'lazy' */
export default class extends Controller
{
@@ -53,7 +60,10 @@ export default class extends Controller
connect() {
const settings = {
plugins: {
- clear_button:{}
+ 'autoselect_typed': {},
+ 'click_to_edit': {},
+ 'clear_button': {},
+ 'restore_on_backspace': {}
},
persistent: false,
maxItems: 1,
diff --git a/assets/css/app/helpers.css b/assets/css/app/helpers.css
index 2741d667..8e7b6fa3 100644
--- a/assets/css/app/helpers.css
+++ b/assets/css/app/helpers.css
@@ -111,4 +111,11 @@ ul.structural_link li a:hover {
.permission-checkbox:checked {
background-color: var(--bs-success);
border-color: var(--bs-success);
+}
+
+/***********************************************
+ * Katex rendering with same height as text
+ ***********************************************/
+.katex-same-height-as-text .katex {
+ font-size: 1.0em;
}
\ No newline at end of file
diff --git a/assets/css/app/layout.css b/assets/css/app/layout.css
index e00c823c..4be123a7 100644
--- a/assets/css/app/layout.css
+++ b/assets/css/app/layout.css
@@ -108,8 +108,8 @@ body {
.back-to-top {
cursor: pointer;
position: fixed;
- bottom: 20px;
- right: 20px;
+ bottom: 60px;
+ right: 40px;
display:none;
z-index: 1030;
}
diff --git a/assets/css/components/ckeditor.css b/assets/css/components/ckeditor.css
index f8a682a2..d6b3def4 100644
--- a/assets/css/components/ckeditor.css
+++ b/assets/css/components/ckeditor.css
@@ -24,9 +24,8 @@
/** Should be the same settings, as in label_style.css */
.ck-html-label .ck-content {
font-family: "DejaVu Sans Mono", monospace;
- font-size: 12px;
+ font-size: 12pt;
line-height: 1.0;
- font-size-adjust: 1.5;
}
.ck-html-label .ck-content p {
diff --git a/assets/js/app.js b/assets/js/app.js
index fd7db935..43acec5d 100644
--- a/assets/js/app.js
+++ b/assets/js/app.js
@@ -44,4 +44,18 @@ import "./register_events";
import "./tristate_checkboxes";
//Define jquery globally
-window.$ = window.jQuery = require("jquery")
\ No newline at end of file
+window.$ = window.jQuery = require("jquery");
+
+//Use the local WASM file for the ZXing library
+import {
+ setZXingModuleOverrides,
+} from "barcode-detector/pure";
+import wasmFile from "../../node_modules/zxing-wasm/dist/reader/zxing_reader.wasm";
+setZXingModuleOverrides({
+ locateFile: (path, prefix) => {
+ if (path.endsWith(".wasm")) {
+ return wasmFile;
+ }
+ return prefix + path;
+ },
+});
\ No newline at end of file
diff --git a/assets/js/register_events.js b/assets/js/register_events.js
index 5d2aece0..9732c0c1 100644
--- a/assets/js/register_events.js
+++ b/assets/js/register_events.js
@@ -21,6 +21,7 @@
import {Dropdown} from "bootstrap";
import ClipboardJS from "clipboard";
+import {Modal} from "bootstrap";
class RegisterEventHelper {
constructor() {
@@ -31,9 +32,11 @@ class RegisterEventHelper {
//Initialize ClipboardJS
this.registerLoadHandler(() => {
new ClipboardJS('.btn');
- })
+ });
this.registerModalDropRemovalOnFormSubmit();
+
+
}
registerModalDropRemovalOnFormSubmit() {
@@ -43,6 +46,15 @@ class RegisterEventHelper {
if (back_drop) {
back_drop.remove();
}
+
+ //Remove scroll-lock if it is still active
+ if (document.body.classList.contains('modal-open')) {
+ document.body.classList.remove('modal-open');
+
+ //Remove the padding-right and overflow:hidden from the body
+ document.body.style.paddingRight = '';
+ document.body.style.overflow = '';
+ }
});
}
diff --git a/assets/tomselect/autoselect_typed/autoselect_typed.js b/assets/tomselect/autoselect_typed/autoselect_typed.js
new file mode 100644
index 00000000..8a426be7
--- /dev/null
+++ b/assets/tomselect/autoselect_typed/autoselect_typed.js
@@ -0,0 +1,63 @@
+/**
+ * Autoselect Typed plugin for Tomselect
+ *
+ * This plugin allows automatically selecting an option matching the typed text when the Tomselect element goes out of
+ * focus (is blurred) and/or when the delimiter is typed.
+ *
+ * #select_on_blur option
+ * Tomselect natively supports the "createOnBlur" option. This option picks up any remaining text in the input field
+ * and uses it to create a new option and selects that option. It does behave a bit strangely though, in that it will
+ * not select an already existing option when the input is blurred, so if you typed something that matches an option in
+ * the list and then click outside the box (without pressing enter) the entered text is just removed (unless you have
+ * allow duplicates on in which case it will create a new option).
+ * This plugin fixes that, such that Tomselect will first try to select an option matching the remaining uncommitted
+ * text and only when no matching option is found tries to create a new one (if createOnBlur and create is on)
+ *
+ * #select_on_delimiter option
+ * Normally when typing the delimiter (space by default) Tomselect will try to create a new option (and select it) (if
+ * create is on), but if the typed text matches an option (and allow duplicates is off) it refuses to react at all until
+ * you press enter. With this option, the delimiter will also allow selecting an option, not just creating it.
+ */
+function select_current_input(self){
+ if(self.isLocked){
+ return
+ }
+
+ const val = self.inputValue()
+ //Do nothing if the input is empty
+ if (!val) {
+ return
+ }
+
+ if (self.options[val]) {
+ self.addItem(val)
+ self.setTextboxValue()
+ }
+}
+
+export default function(plugin_options_) {
+ const plugin_options = Object.assign({
+ //Autoselect the typed text when the input element goes out of focus
+ select_on_blur: true,
+ //Autoselect the typed text when the delimiter is typed
+ select_on_delimiter: true,
+ }, plugin_options_);
+
+ const self = this
+
+ if(plugin_options.select_on_blur) {
+ this.hook("before", "onBlur", function () {
+ select_current_input(self)
+ })
+ }
+
+ if(plugin_options.select_on_delimiter) {
+ this.hook("before", "onKeyPress", function (e) {
+ const character = String.fromCharCode(e.keyCode || e.which);
+ if (self.settings.mode === 'multi' && character === self.settings.delimiter) {
+ select_current_input(self)
+ }
+ })
+ }
+
+}
\ No newline at end of file
diff --git a/assets/tomselect/click_to_edit/click_to_edit.js b/assets/tomselect/click_to_edit/click_to_edit.js
new file mode 100644
index 00000000..b7dcab03
--- /dev/null
+++ b/assets/tomselect/click_to_edit/click_to_edit.js
@@ -0,0 +1,93 @@
+/**
+ * click_to_edit plugin for Tomselect
+ *
+ * This plugin allows editing (and selecting text in) any selected item by clicking it.
+ *
+ * Usually, when the user typed some text and created an item in Tomselect that item cannot be edited anymore. To make
+ * a change, the item has to be deleted and retyped completely. There is also generally no way to copy text out of a
+ * tomselect item. The "restore_on_backspace" plugin improves that somewhat, by allowing the user to edit an item after
+ * pressing backspace. However, it is somewhat confusing to first have to focus the field an then hit backspace in order
+ * to copy a piece of text. It may also not be immediately obvious for editing.
+ * This plugin transforms an item into editable text when it is clicked, e.g. when the user tries to place the caret
+ * within an item or when they try to drag across the text to highlight it.
+ * It also plays nice with the remove_button plugin which still removes (deselects) an option entirely.
+ *
+ * It is recommended to also enable the autoselect_typed plugin when using this plugin. Without it, the text in the
+ * input field (i.e. the item that was just clicked) is lost when the user clicks outside the field. Also, when the user
+ * clicks an option (making it text) and then tries to enter another one by entering the delimiter (e.g. space) nothing
+ * happens until enter is pressed or the text is changed from what it was.
+ */
+
+/**
+ * Return a dom element from either a dom query string, jQuery object, a dom element or html string
+ * https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518
+ *
+ * param query should be {}
+ */
+const getDom = query => {
+ if (query.jquery) {
+ return query[0];
+ }
+ if (query instanceof HTMLElement) {
+ return query;
+ }
+ if (isHtmlString(query)) {
+ var tpl = document.createElement('template');
+ tpl.innerHTML = query.trim(); // Never return a text node of whitespace as the result
+ return tpl.content.firstChild;
+ }
+ return document.querySelector(query);
+};
+const isHtmlString = arg => {
+ if (typeof arg === 'string' && arg.indexOf('<') > -1) {
+ return true;
+ }
+ return false;
+};
+
+function plugin(plugin_options_) {
+ const self = this
+
+ const plugin_options = Object.assign({
+ //If there is unsubmitted text in the input field, should that text be automatically used to select a matching
+ //element? If this is off, clicking on item1 and then clicking on item2 will result in item1 being deselected
+ auto_select_before_edit: true,
+ //If there is unsubmitted text in the input field, should that text be automatically used to create a matching
+ //element if no matching element was found or auto_select_before_edit is off?
+ auto_create_before_edit: true,
+ //customize this function to change which text the item is replaced with when clicking on it
+ text: option => {
+ return option[self.settings.labelField];
+ }
+ }, plugin_options_);
+
+
+ self.hook('after', 'setupTemplates', () => {
+ const orig_render_item = self.settings.render.item;
+ self.settings.render.item = (data, escape) => {
+ const item = getDom(orig_render_item.call(self, data, escape));
+
+ item.addEventListener('click', evt => {
+ if (self.isLocked) {
+ return;
+ }
+ const val = self.inputValue();
+
+ if (self.options[val]) {
+ self.addItem(val)
+ } else if (self.settings.create) {
+ self.createItem();
+ }
+ const option = self.options[item.dataset.value]
+ self.setTextboxValue(plugin_options.text.call(self, option));
+ self.focus();
+ self.removeItem(item);
+ }
+ );
+
+ return item;
+ }
+ });
+
+}
+export { plugin as default };
\ No newline at end of file
diff --git a/bin/console b/bin/console
index 88268a20..256c0a60 100755
--- a/bin/console
+++ b/bin/console
@@ -4,6 +4,10 @@
use App\Kernel;
use Symfony\Bundle\FrameworkBundle\Console\Application;
+if (!is_dir(dirname(__DIR__).'/vendor')) {
+ throw new LogicException('Dependencies are missing. Try running "composer install".');
+}
+
//Increase xdebug.max_nesting_level to 1000 if required (see issue #411)
//Check if xdebug extension is active, and xdebug.max_nesting_level is set to 256 or lower
if (extension_loaded('xdebug') && ((int) ini_get('xdebug.max_nesting_level')) <= 256) {
diff --git a/composer.json b/composer.json
index 0659f2ee..e57ce652 100644
--- a/composer.json
+++ b/composer.json
@@ -1,4 +1,5 @@
{
+ "name": "part-db/part-db-server",
"type": "project",
"license": "AGPL-3.0-or-later",
"require": {
@@ -14,9 +15,9 @@
"api-platform/core": "^3.1",
"beberlei/doctrineextensions": "^1.2",
"brick/math": "0.12.1 as 0.11.0",
- "composer/ca-bundle": "^1.3",
+ "composer/ca-bundle": "^1.5",
"composer/package-versions-deprecated": "^1.11.99.5",
- "doctrine/data-fixtures": "^1.6.6",
+ "doctrine/data-fixtures": "^2.0.0",
"doctrine/dbal": "^4.0.0",
"doctrine/doctrine-bundle": "^2.0",
"doctrine/doctrine-migrations-bundle": "^3.0",
@@ -39,12 +40,10 @@
"nelmio/cors-bundle": "^2.3",
"nelmio/security-bundle": "^3.0",
"nyholm/psr7": "^1.1",
- "ocramius/proxy-manager": "2.2.*",
- "omines/datatables-bundle": "^0.8.0",
+ "omines/datatables-bundle": "^0.9.1",
"paragonie/sodium_compat": "^1.21",
"part-db/label-fonts": "^1.0",
- "phpdocumentor/reflection-docblock": "^5.2",
- "phpstan/phpdoc-parser": "^1.23",
+ "rhukster/dom-sanitizer": "^1.0",
"runtime/frankenphp-symfony": "^0.2.0",
"s9e/text-formatter": "^2.1",
"scheb/2fa-backup-code": "^6.8.0",
@@ -56,6 +55,8 @@
"symfony/apache-pack": "^1.0",
"symfony/asset": "6.4.*",
"symfony/console": "6.4.*",
+ "symfony/css-selector": "6.4.*",
+ "symfony/dom-crawler": "6.4.*",
"symfony/dotenv": "6.4.*",
"symfony/expression-language": "6.4.*",
"symfony/flex": "^v2.3.1",
@@ -69,7 +70,6 @@
"symfony/process": "6.4.*",
"symfony/property-access": "6.4.*",
"symfony/property-info": "6.4.*",
- "symfony/proxy-manager-bridge": "6.4.*",
"symfony/rate-limiter": "6.4.*",
"symfony/runtime": "6.4.*",
"symfony/security-bundle": "6.4.*",
@@ -91,24 +91,22 @@
"twig/intl-extra": "^3.8",
"twig/markdown-extra": "^3.8",
"twig/string-extra": "^3.8",
- "web-auth/webauthn-symfony-bundle": "^4.0.0",
- "webmozart/assert": "^1.4"
+ "web-auth/webauthn-symfony-bundle": "^4.0.0"
},
"require-dev": {
"dama/doctrine-test-bundle": "^v8.0.0",
- "doctrine/doctrine-fixtures-bundle": "^3.2",
- "ekino/phpstan-banned-code": "^v1.0.0",
+ "doctrine/doctrine-fixtures-bundle": "^4.0.0",
+ "ekino/phpstan-banned-code": "^v3.0.0",
"jbtronics/translation-editor-bundle": "^1.0",
"phpstan/extension-installer": "^1.0",
- "phpstan/phpstan": "^1.4.7",
- "phpstan/phpstan-doctrine": "^1.2.11",
- "phpstan/phpstan-strict-rules": "^1.5",
- "phpstan/phpstan-symfony": "^1.1.7",
+ "phpstan/phpstan": "^2.0.4",
+ "phpstan/phpstan-doctrine": "^2.0.1",
+ "phpstan/phpstan-strict-rules": "^2.0.1",
+ "phpstan/phpstan-symfony": "^2.0.0",
"phpunit/phpunit": "^9.5",
- "rector/rector": "^1.1.1",
+ "rector/rector": "^2.0.4",
"roave/security-advisories": "dev-latest",
"symfony/browser-kit": "6.4.*",
- "symfony/css-selector": "6.4.*",
"symfony/debug-bundle": "6.4.*",
"symfony/maker-bundle": "^1.13",
"symfony/phpunit-bridge": "6.4.*",
diff --git a/composer.lock b/composer.lock
index 84311e49..4d658092 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,20 +4,20 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "465fa2ab7f9f8dad2b8cfbeaa640c136",
+ "content-hash": "27cd0d915eab5e7cb57215a4c0b529fb",
"packages": [
{
"name": "amphp/amp",
- "version": "v3.0.2",
+ "version": "v3.1.0",
"source": {
"type": "git",
"url": "https://github.com/amphp/amp.git",
- "reference": "138801fb68cfc9c329da8a7b39d01ce7291ee4b0"
+ "reference": "7cf7fef3d667bfe4b2560bc87e67d5387a7bcde9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/amp/zipball/138801fb68cfc9c329da8a7b39d01ce7291ee4b0",
- "reference": "138801fb68cfc9c329da8a7b39d01ce7291ee4b0",
+ "url": "https://api.github.com/repos/amphp/amp/zipball/7cf7fef3d667bfe4b2560bc87e67d5387a7bcde9",
+ "reference": "7cf7fef3d667bfe4b2560bc87e67d5387a7bcde9",
"shasum": ""
},
"require": {
@@ -77,7 +77,7 @@
],
"support": {
"issues": "https://github.com/amphp/amp/issues",
- "source": "https://github.com/amphp/amp/tree/v3.0.2"
+ "source": "https://github.com/amphp/amp/tree/v3.1.0"
},
"funding": [
{
@@ -85,20 +85,20 @@
"type": "github"
}
],
- "time": "2024-05-10T21:37:46+00:00"
+ "time": "2025-01-26T16:07:39+00:00"
},
{
"name": "amphp/byte-stream",
- "version": "v2.1.1",
+ "version": "v2.1.2",
"source": {
"type": "git",
"url": "https://github.com/amphp/byte-stream.git",
- "reference": "daa00f2efdbd71565bf64ffefa89e37542addf93"
+ "reference": "55a6bd071aec26fa2a3e002618c20c35e3df1b46"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/byte-stream/zipball/daa00f2efdbd71565bf64ffefa89e37542addf93",
- "reference": "daa00f2efdbd71565bf64ffefa89e37542addf93",
+ "url": "https://api.github.com/repos/amphp/byte-stream/zipball/55a6bd071aec26fa2a3e002618c20c35e3df1b46",
+ "reference": "55a6bd071aec26fa2a3e002618c20c35e3df1b46",
"shasum": ""
},
"require": {
@@ -152,7 +152,7 @@
],
"support": {
"issues": "https://github.com/amphp/byte-stream/issues",
- "source": "https://github.com/amphp/byte-stream/tree/v2.1.1"
+ "source": "https://github.com/amphp/byte-stream/tree/v2.1.2"
},
"funding": [
{
@@ -160,7 +160,7 @@
"type": "github"
}
],
- "time": "2024-02-17T04:49:38+00:00"
+ "time": "2025-03-16T17:10:27+00:00"
},
{
"name": "amphp/cache",
@@ -229,16 +229,16 @@
},
{
"name": "amphp/dns",
- "version": "v2.2.0",
+ "version": "v2.4.0",
"source": {
"type": "git",
"url": "https://github.com/amphp/dns.git",
- "reference": "758266b0ea7470e2e42cd098493bc6d6c7100cf7"
+ "reference": "78eb3db5fc69bf2fc0cb503c4fcba667bc223c71"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/dns/zipball/758266b0ea7470e2e42cd098493bc6d6c7100cf7",
- "reference": "758266b0ea7470e2e42cd098493bc6d6c7100cf7",
+ "url": "https://api.github.com/repos/amphp/dns/zipball/78eb3db5fc69bf2fc0cb503c4fcba667bc223c71",
+ "reference": "78eb3db5fc69bf2fc0cb503c4fcba667bc223c71",
"shasum": ""
},
"require": {
@@ -246,9 +246,10 @@
"amphp/byte-stream": "^2",
"amphp/cache": "^2",
"amphp/parser": "^1",
- "amphp/windows-registry": "^1.0.1",
+ "amphp/process": "^2",
"daverandom/libdns": "^2.0.2",
"ext-filter": "*",
+ "ext-json": "*",
"php": ">=8.1",
"revolt/event-loop": "^1 || ^0.2"
},
@@ -305,7 +306,7 @@
],
"support": {
"issues": "https://github.com/amphp/dns/issues",
- "source": "https://github.com/amphp/dns/tree/v2.2.0"
+ "source": "https://github.com/amphp/dns/tree/v2.4.0"
},
"funding": [
{
@@ -313,7 +314,7 @@
"type": "github"
}
],
- "time": "2024-06-02T19:54:12+00:00"
+ "time": "2025-01-19T15:43:40+00:00"
},
{
"name": "amphp/hpack",
@@ -391,16 +392,16 @@
},
{
"name": "amphp/http",
- "version": "v2.1.1",
+ "version": "v2.1.2",
"source": {
"type": "git",
"url": "https://github.com/amphp/http.git",
- "reference": "fe6b4dd50c1e70caf823092398074b5082e1d6da"
+ "reference": "3680d80bd38b5d6f3c2cef2214ca6dd6cef26588"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/http/zipball/fe6b4dd50c1e70caf823092398074b5082e1d6da",
- "reference": "fe6b4dd50c1e70caf823092398074b5082e1d6da",
+ "url": "https://api.github.com/repos/amphp/http/zipball/3680d80bd38b5d6f3c2cef2214ca6dd6cef26588",
+ "reference": "3680d80bd38b5d6f3c2cef2214ca6dd6cef26588",
"shasum": ""
},
"require": {
@@ -414,7 +415,7 @@
"amphp/php-cs-fixer-config": "^2",
"league/uri": "^6.8 | ^7.1",
"phpunit/phpunit": "^9",
- "psalm/phar": "^5.4"
+ "psalm/phar": "^5.26.1"
},
"type": "library",
"autoload": {
@@ -443,7 +444,7 @@
"description": "Basic HTTP primitives which can be shared by servers and clients.",
"support": {
"issues": "https://github.com/amphp/http/issues",
- "source": "https://github.com/amphp/http/tree/v2.1.1"
+ "source": "https://github.com/amphp/http/tree/v2.1.2"
},
"funding": [
{
@@ -451,20 +452,20 @@
"type": "github"
}
],
- "time": "2024-04-03T18:00:53+00:00"
+ "time": "2024-11-23T14:57:26+00:00"
},
{
"name": "amphp/http-client",
- "version": "v5.1.0",
+ "version": "v5.3.2",
"source": {
"type": "git",
"url": "https://github.com/amphp/http-client.git",
- "reference": "483df9a856625fe4406c7fb6a64d6787105bd184"
+ "reference": "cf885bf00550d645a27605626528a3b2ce5563ae"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/http-client/zipball/483df9a856625fe4406c7fb6a64d6787105bd184",
- "reference": "483df9a856625fe4406c7fb6a64d6787105bd184",
+ "url": "https://api.github.com/repos/amphp/http-client/zipball/cf885bf00550d645a27605626528a3b2ce5563ae",
+ "reference": "cf885bf00550d645a27605626528a3b2ce5563ae",
"shasum": ""
},
"require": {
@@ -475,15 +476,18 @@
"amphp/pipeline": "^1",
"amphp/socket": "^2",
"amphp/sync": "^2",
- "league/uri": "^6 | ^7",
- "league/uri-components": "^2.4 | ^7",
+ "league/uri": "^7",
+ "league/uri-components": "^7",
"league/uri-interfaces": "^7.1",
"php": ">=8.1",
"psr/http-message": "^1 | ^2",
"revolt/event-loop": "^1"
},
+ "conflict": {
+ "amphp/file": "<3 | >=5"
+ },
"require-dev": {
- "amphp/file": "^3",
+ "amphp/file": "^3 | ^4",
"amphp/http-server": "^3",
"amphp/php-cs-fixer-config": "^2",
"amphp/phpunit-util": "^3",
@@ -538,7 +542,7 @@
],
"support": {
"issues": "https://github.com/amphp/http-client/issues",
- "source": "https://github.com/amphp/http-client/tree/v5.1.0"
+ "source": "https://github.com/amphp/http-client/tree/v5.3.2"
},
"funding": [
{
@@ -546,7 +550,7 @@
"type": "github"
}
],
- "time": "2024-04-21T16:40:36+00:00"
+ "time": "2025-05-18T18:27:44+00:00"
},
{
"name": "amphp/parser",
@@ -612,16 +616,16 @@
},
{
"name": "amphp/pipeline",
- "version": "v1.2.1",
+ "version": "v1.2.3",
"source": {
"type": "git",
"url": "https://github.com/amphp/pipeline.git",
- "reference": "66c095673aa5b6e689e63b52d19e577459129ab3"
+ "reference": "7b52598c2e9105ebcddf247fc523161581930367"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/pipeline/zipball/66c095673aa5b6e689e63b52d19e577459129ab3",
- "reference": "66c095673aa5b6e689e63b52d19e577459129ab3",
+ "url": "https://api.github.com/repos/amphp/pipeline/zipball/7b52598c2e9105ebcddf247fc523161581930367",
+ "reference": "7b52598c2e9105ebcddf247fc523161581930367",
"shasum": ""
},
"require": {
@@ -667,7 +671,7 @@
],
"support": {
"issues": "https://github.com/amphp/pipeline/issues",
- "source": "https://github.com/amphp/pipeline/tree/v1.2.1"
+ "source": "https://github.com/amphp/pipeline/tree/v1.2.3"
},
"funding": [
{
@@ -675,7 +679,7 @@
"type": "github"
}
],
- "time": "2024-07-04T00:56:47+00:00"
+ "time": "2025-03-16T16:33:53+00:00"
},
{
"name": "amphp/process",
@@ -962,70 +966,18 @@
],
"time": "2024-08-03T19:31:26+00:00"
},
- {
- "name": "amphp/windows-registry",
- "version": "v1.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/amphp/windows-registry.git",
- "reference": "0d569e8f256cca974e3842b6e78b4e434bf98306"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/amphp/windows-registry/zipball/0d569e8f256cca974e3842b6e78b4e434bf98306",
- "reference": "0d569e8f256cca974e3842b6e78b4e434bf98306",
- "shasum": ""
- },
- "require": {
- "amphp/byte-stream": "^2",
- "amphp/process": "^2",
- "php": ">=8.1"
- },
- "require-dev": {
- "amphp/php-cs-fixer-config": "^2",
- "psalm/phar": "^5.4"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Amp\\WindowsRegistry\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
- }
- ],
- "description": "Windows Registry Reader.",
- "support": {
- "issues": "https://github.com/amphp/windows-registry/issues",
- "source": "https://github.com/amphp/windows-registry/tree/v1.0.1"
- },
- "funding": [
- {
- "url": "https://github.com/amphp",
- "type": "github"
- }
- ],
- "time": "2024-01-30T23:01:51+00:00"
- },
{
"name": "api-platform/core",
- "version": "v3.3.12",
+ "version": "v3.4.17",
"source": {
"type": "git",
"url": "https://github.com/api-platform/core.git",
- "reference": "e2eeb6b710f96542b75357a13d8d69ed4d8be5e2"
+ "reference": "c5fb664d17ed9ae919394514ea69a5039d2ad9ab"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/api-platform/core/zipball/e2eeb6b710f96542b75357a13d8d69ed4d8be5e2",
- "reference": "e2eeb6b710f96542b75357a13d8d69ed4d8be5e2",
+ "url": "https://api.github.com/repos/api-platform/core/zipball/c5fb664d17ed9ae919394514ea69a5039d2ad9ab",
+ "reference": "c5fb664d17ed9ae919394514ea69a5039d2ad9ab",
"shasum": ""
},
"require": {
@@ -1034,13 +986,13 @@
"psr/cache": "^1.0 || ^2.0 || ^3.0",
"psr/container": "^1.0 || ^2.0",
"symfony/deprecation-contracts": "^3.1",
- "symfony/http-foundation": "^6.4 || ^7.0",
- "symfony/http-kernel": "^6.4 || ^7.0",
- "symfony/property-access": "^6.4 || ^7.0",
- "symfony/property-info": "^6.4 || ^7.0",
- "symfony/serializer": "^6.4 || ^7.0",
+ "symfony/http-foundation": "^6.4 || ^7.1",
+ "symfony/http-kernel": "^6.4 || ^7.1",
+ "symfony/property-access": "^6.4 || ^7.1",
+ "symfony/property-info": "^6.4 || ^7.1",
+ "symfony/serializer": "^6.4 || ^7.1",
"symfony/translation-contracts": "^3.3",
- "symfony/web-link": "^6.4 || ^7.0",
+ "symfony/web-link": "^6.4 || ^7.1",
"willdurand/negotiation": "^3.0"
},
"conflict": {
@@ -1055,12 +1007,53 @@
"symfony/framework-bundle": "6.4.6 || 7.0.6",
"symfony/var-exporter": "<6.1.1"
},
+ "replace": {
+ "api-platform/doctrine-common": "self.version",
+ "api-platform/doctrine-odm": "self.version",
+ "api-platform/doctrine-orm": "self.version",
+ "api-platform/documentation": "self.version",
+ "api-platform/elasticsearch": "self.version",
+ "api-platform/graphql": "self.version",
+ "api-platform/http-cache": "self.version",
+ "api-platform/hydra": "self.version",
+ "api-platform/json-api": "self.version",
+ "api-platform/json-hal": "self.version",
+ "api-platform/json-schema": "self.version",
+ "api-platform/jsonld": "self.version",
+ "api-platform/laravel": "self.version",
+ "api-platform/metadata": "self.version",
+ "api-platform/openapi": "self.version",
+ "api-platform/parameter-validator": "self.version",
+ "api-platform/ramsey-uuid": "self.version",
+ "api-platform/serializer": "self.version",
+ "api-platform/state": "self.version",
+ "api-platform/symfony": "self.version",
+ "api-platform/validator": "self.version"
+ },
"require-dev": {
+ "api-platform/doctrine-common": "^3.4 || ^4.0",
+ "api-platform/doctrine-odm": "^3.4 || ^4.0",
+ "api-platform/doctrine-orm": "^3.4 || ^4.0",
+ "api-platform/documentation": "^3.4 || ^4.0",
+ "api-platform/elasticsearch": "^3.4 || ^4.0",
+ "api-platform/graphql": "^3.4 || ^4.0",
+ "api-platform/http-cache": "^3.4 || ^4.0",
+ "api-platform/hydra": "^3.4 || ^4.0",
+ "api-platform/json-api": "^3.3 || ^4.0",
+ "api-platform/json-schema": "^3.4 || ^4.0",
+ "api-platform/jsonld": "^3.4 || ^4.0",
+ "api-platform/metadata": "^3.4 || ^4.0",
+ "api-platform/openapi": "^3.4 || ^4.0",
+ "api-platform/parameter-validator": "^3.4",
+ "api-platform/ramsey-uuid": "^3.4 || ^4.0",
+ "api-platform/serializer": "^3.4 || ^4.0",
+ "api-platform/state": "^3.4 || ^4.0",
+ "api-platform/validator": "^3.4 || ^4.0",
"behat/behat": "^3.11",
"behat/mink": "^1.9",
"doctrine/cache": "^1.11 || ^2.1",
"doctrine/common": "^3.2.2",
- "doctrine/dbal": "^3.4.0",
+ "doctrine/dbal": "^3.4.0 || ^4.0",
"doctrine/doctrine-bundle": "^1.12 || ^2.0",
"doctrine/mongodb-odm": "^2.2",
"doctrine/mongodb-odm-bundle": "^4.0 || ^5.0",
@@ -1069,12 +1062,12 @@
"friends-of-behat/mink-browserkit-driver": "^1.3.1",
"friends-of-behat/mink-extension": "^2.2",
"friends-of-behat/symfony-extension": "^2.1",
- "guzzlehttp/guzzle": "^6.0 || ^7.0",
+ "guzzlehttp/guzzle": "^6.0 || ^7.1",
"jangregor/phpstan-prophecy": "^1.0",
"justinrainbow/json-schema": "^5.2.1",
"phpspec/prophecy-phpunit": "^2.0",
"phpstan/extension-installer": "^1.1",
- "phpstan/phpdoc-parser": "^1.13",
+ "phpstan/phpdoc-parser": "^1.13|^2.0",
"phpstan/phpstan": "^1.10",
"phpstan/phpstan-doctrine": "^1.0",
"phpstan/phpstan-phpunit": "^1.0",
@@ -1082,41 +1075,42 @@
"phpunit/phpunit": "^9.6",
"psr/log": "^1.0 || ^2.0 || ^3.0",
"ramsey/uuid": "^3.9.7 || ^4.0",
- "ramsey/uuid-doctrine": "^1.4 || ^2.0",
+ "ramsey/uuid-doctrine": "^1.4 || ^2.0 || ^3.0",
"sebastian/comparator": "<5.0",
"soyuka/contexts": "v3.3.9",
- "soyuka/pmu": "^0.0.2",
+ "soyuka/pmu": "^0.0.12",
"soyuka/stubs-mongodb": "^1.0",
- "symfony/asset": "^6.4 || ^7.0",
- "symfony/browser-kit": "^6.4 || ^7.0",
- "symfony/cache": "^6.4 || ^7.0",
- "symfony/config": "^6.4 || ^7.0",
- "symfony/console": "^6.4 || ^7.0",
- "symfony/css-selector": "^6.4 || ^7.0",
- "symfony/dependency-injection": "^6.4 || ^7.0.12",
- "symfony/doctrine-bridge": "^6.4 || ^7.0",
- "symfony/dom-crawler": "^6.4 || ^7.0",
- "symfony/error-handler": "^6.4 || ^7.0",
- "symfony/event-dispatcher": "^6.4 || ^7.0",
- "symfony/expression-language": "^6.4 || ^7.0",
- "symfony/finder": "^6.4 || ^7.0",
- "symfony/form": "^6.4 || ^7.0",
- "symfony/framework-bundle": "^6.4 || ^7.0",
- "symfony/http-client": "^6.4 || ^7.0",
- "symfony/intl": "^6.4 || ^7.0",
+ "symfony/asset": "^6.4 || ^7.1",
+ "symfony/browser-kit": "^6.4 || ^7.1",
+ "symfony/cache": "^6.4 || ^7.1",
+ "symfony/config": "^6.4 || ^7.1",
+ "symfony/console": "^6.4 || ^7.1",
+ "symfony/css-selector": "^6.4 || ^7.1",
+ "symfony/dependency-injection": "^6.4 || ^7.1",
+ "symfony/doctrine-bridge": "^6.4 || ^7.1",
+ "symfony/dom-crawler": "^6.4 || ^7.1",
+ "symfony/error-handler": "^6.4 || ^7.1",
+ "symfony/event-dispatcher": "^6.4 || ^7.1",
+ "symfony/expression-language": "^6.4 || ^7.1",
+ "symfony/finder": "^6.4 || ^7.1",
+ "symfony/form": "^6.4 || ^7.1",
+ "symfony/framework-bundle": "^6.4 || ^7.1",
+ "symfony/http-client": "^6.4 || ^7.1",
+ "symfony/intl": "^6.4 || ^7.1",
"symfony/maker-bundle": "^1.24",
"symfony/mercure-bundle": "*",
- "symfony/messenger": "^6.4 || ^7.0",
- "symfony/phpunit-bridge": "^6.4.1 || ^7.0",
- "symfony/routing": "^6.4 || ^7.0",
- "symfony/security-bundle": "^6.4 || ^7.0",
- "symfony/security-core": "^6.4 || ^7.0",
- "symfony/stopwatch": "^6.4 || ^7.0",
- "symfony/twig-bundle": "^6.4 || ^7.0",
- "symfony/uid": "^6.4 || ^7.0",
- "symfony/validator": "^6.4 || ^7.0",
- "symfony/web-profiler-bundle": "^6.4 || ^7.0",
- "symfony/yaml": "^6.4 || ^7.0",
+ "symfony/messenger": "^6.4 || ^7.1",
+ "symfony/phpunit-bridge": "^6.4.1 || ^7.1",
+ "symfony/routing": "^6.4 || ^7.1",
+ "symfony/security-bundle": "^6.4 || ^7.1",
+ "symfony/security-core": "^6.4 || ^7.1",
+ "symfony/stopwatch": "^6.4 || ^7.1",
+ "symfony/string": "^6.4 || ^7.1",
+ "symfony/twig-bundle": "^6.4 || ^7.1",
+ "symfony/uid": "^6.4 || ^7.1",
+ "symfony/validator": "^6.4 || ^7.1",
+ "symfony/web-profiler-bundle": "^6.4 || ^7.1",
+ "symfony/yaml": "^6.4 || ^7.1",
"twig/twig": "^1.42.3 || ^2.12 || ^3.0",
"webonyx/graphql-php": "^14.0 || ^15.0"
},
@@ -1140,32 +1134,23 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "3.3.x-dev"
+ "pmu": {
+ "projects": [
+ "./src/*/composer.json",
+ "src/Doctrine/*/composer.json"
+ ]
+ },
+ "thanks": {
+ "url": "https://github.com/api-platform/api-platform",
+ "name": "api-platform/api-platform"
},
"symfony": {
- "require": "^6.4 || ^7.0"
+ "require": "^6.4 || ^7.1"
},
- "projects": [
- "api-platform/doctrine-common",
- "api-platform/doctrine-orm",
- "api-platform/doctrine-odm",
- "api-platform/metadata",
- "api-platform/json-schema",
- "api-platform/elasticsearch",
- "api-platform/jsonld",
- "api-platform/hydra",
- "api-platform/openapi",
- "api-platform/graphql",
- "api-platform/http-cache",
- "api-platform/documentation",
- "api-platform/parameter-validator",
- "api-platform/ramsey-uuid",
- "api-platform/serializer",
- "api-platform/state",
- "api-platform/symfony",
- "api-platform/validator"
- ]
+ "branch-alias": {
+ "dev-3.4": "3.4.x-dev",
+ "dev-main": "4.0.x-dev"
+ }
},
"autoload": {
"psr-4": {
@@ -1198,22 +1183,22 @@
],
"support": {
"issues": "https://github.com/api-platform/core/issues",
- "source": "https://github.com/api-platform/core/tree/v3.3.12"
+ "source": "https://github.com/api-platform/core/tree/v3.4.17"
},
- "time": "2024-08-30T14:44:44+00:00"
+ "time": "2025-04-07T08:40:57+00:00"
},
{
"name": "beberlei/assert",
- "version": "v3.3.2",
+ "version": "v3.3.3",
"source": {
"type": "git",
"url": "https://github.com/beberlei/assert.git",
- "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655"
+ "reference": "b5fd8eacd8915a1b627b8bfc027803f1939734dd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/beberlei/assert/zipball/cb70015c04be1baee6f5f5c953703347c0ac1655",
- "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655",
+ "url": "https://api.github.com/repos/beberlei/assert/zipball/b5fd8eacd8915a1b627b8bfc027803f1939734dd",
+ "reference": "b5fd8eacd8915a1b627b8bfc027803f1939734dd",
"shasum": ""
},
"require": {
@@ -1221,7 +1206,7 @@
"ext-json": "*",
"ext-mbstring": "*",
"ext-simplexml": "*",
- "php": "^7.0 || ^8.0"
+ "php": "^7.1 || ^8.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "*",
@@ -1265,9 +1250,9 @@
],
"support": {
"issues": "https://github.com/beberlei/assert/issues",
- "source": "https://github.com/beberlei/assert/tree/v3.3.2"
+ "source": "https://github.com/beberlei/assert/tree/v3.3.3"
},
- "time": "2021-12-16T21:41:27+00:00"
+ "time": "2024-07-15T13:18:35+00:00"
},
{
"name": "beberlei/doctrineextensions",
@@ -1393,16 +1378,16 @@
},
{
"name": "composer/ca-bundle",
- "version": "1.5.1",
+ "version": "1.5.6",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
- "reference": "063d9aa8696582f5a41dffbbaf3c81024f0a604a"
+ "reference": "f65c239c970e7f072f067ab78646e9f0b2935175"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/ca-bundle/zipball/063d9aa8696582f5a41dffbbaf3c81024f0a604a",
- "reference": "063d9aa8696582f5a41dffbbaf3c81024f0a604a",
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/f65c239c970e7f072f067ab78646e9f0b2935175",
+ "reference": "f65c239c970e7f072f067ab78646e9f0b2935175",
"shasum": ""
},
"require": {
@@ -1412,8 +1397,8 @@
},
"require-dev": {
"phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^8 || ^9",
"psr/log": "^1.0 || ^2.0 || ^3.0",
- "symfony/phpunit-bridge": "^4.2 || ^5",
"symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0"
},
"type": "library",
@@ -1449,7 +1434,7 @@
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/ca-bundle/issues",
- "source": "https://github.com/composer/ca-bundle/tree/1.5.1"
+ "source": "https://github.com/composer/ca-bundle/tree/1.5.6"
},
"funding": [
{
@@ -1465,7 +1450,7 @@
"type": "tidelift"
}
],
- "time": "2024-07-08T15:28:20+00:00"
+ "time": "2025-03-06T14:30:56+00:00"
},
{
"name": "composer/package-versions-deprecated",
@@ -1584,124 +1569,31 @@
},
"time": "2024-04-12T12:12:48+00:00"
},
- {
- "name": "doctrine/cache",
- "version": "2.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/cache.git",
- "reference": "1ca8f21980e770095a31456042471a57bc4c68fb"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb",
- "reference": "1ca8f21980e770095a31456042471a57bc4c68fb",
- "shasum": ""
- },
- "require": {
- "php": "~7.1 || ^8.0"
- },
- "conflict": {
- "doctrine/common": ">2.2,<2.4"
- },
- "require-dev": {
- "cache/integration-tests": "dev-master",
- "doctrine/coding-standard": "^9",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
- "psr/cache": "^1.0 || ^2.0 || ^3.0",
- "symfony/cache": "^4.4 || ^5.4 || ^6",
- "symfony/var-exporter": "^4.4 || ^5.4 || ^6"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
- {
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
- },
- {
- "name": "Benjamin Eberlei",
- "email": "kontakt@beberlei.de"
- },
- {
- "name": "Jonathan Wage",
- "email": "jonwage@gmail.com"
- },
- {
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
- }
- ],
- "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.",
- "homepage": "https://www.doctrine-project.org/projects/cache.html",
- "keywords": [
- "abstraction",
- "apcu",
- "cache",
- "caching",
- "couchdb",
- "memcached",
- "php",
- "redis",
- "xcache"
- ],
- "support": {
- "issues": "https://github.com/doctrine/cache/issues",
- "source": "https://github.com/doctrine/cache/tree/2.2.0"
- },
- "funding": [
- {
- "url": "https://www.doctrine-project.org/sponsorship.html",
- "type": "custom"
- },
- {
- "url": "https://www.patreon.com/phpdoctrine",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache",
- "type": "tidelift"
- }
- ],
- "time": "2022-05-20T20:07:39+00:00"
- },
{
"name": "doctrine/collections",
- "version": "2.2.2",
+ "version": "2.3.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/collections.git",
- "reference": "d8af7f248c74f195f7347424600fd9e17b57af59"
+ "reference": "2eb07e5953eed811ce1b309a7478a3b236f2273d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/collections/zipball/d8af7f248c74f195f7347424600fd9e17b57af59",
- "reference": "d8af7f248c74f195f7347424600fd9e17b57af59",
+ "url": "https://api.github.com/repos/doctrine/collections/zipball/2eb07e5953eed811ce1b309a7478a3b236f2273d",
+ "reference": "2eb07e5953eed811ce1b309a7478a3b236f2273d",
"shasum": ""
},
"require": {
"doctrine/deprecations": "^1",
- "php": "^8.1"
+ "php": "^8.1",
+ "symfony/polyfill-php84": "^1.30"
},
"require-dev": {
"doctrine/coding-standard": "^12",
"ext-json": "*",
"phpstan/phpstan": "^1.8",
"phpstan/phpstan-phpunit": "^1.0",
- "phpunit/phpunit": "^10.5",
- "vimeo/psalm": "^5.11"
+ "phpunit/phpunit": "^10.5"
},
"type": "library",
"autoload": {
@@ -1745,7 +1637,7 @@
],
"support": {
"issues": "https://github.com/doctrine/collections/issues",
- "source": "https://github.com/doctrine/collections/tree/2.2.2"
+ "source": "https://github.com/doctrine/collections/tree/2.3.0"
},
"funding": [
{
@@ -1761,26 +1653,26 @@
"type": "tidelift"
}
],
- "time": "2024-04-18T06:56:21+00:00"
+ "time": "2025-03-22T10:17:19+00:00"
},
{
"name": "doctrine/data-fixtures",
- "version": "1.7.0",
+ "version": "2.0.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/data-fixtures.git",
- "reference": "bbcb74f2ac6dbe81a14b3c3687d7623490a0448f"
+ "reference": "f7f1e12d6bceb58c204b3e77210a103c1c57601e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/bbcb74f2ac6dbe81a14b3c3687d7623490a0448f",
- "reference": "bbcb74f2ac6dbe81a14b3c3687d7623490a0448f",
+ "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/f7f1e12d6bceb58c204b3e77210a103c1c57601e",
+ "reference": "f7f1e12d6bceb58c204b3e77210a103c1c57601e",
"shasum": ""
},
"require": {
- "doctrine/deprecations": "^0.5.3 || ^1.0",
- "doctrine/persistence": "^2.0|^3.0",
- "php": "^7.4 || ^8.0"
+ "doctrine/persistence": "^3.1 || ^4.0",
+ "php": "^8.1",
+ "psr/log": "^1.1 || ^2 || ^3"
},
"conflict": {
"doctrine/dbal": "<3.5 || >=5",
@@ -1788,17 +1680,16 @@
"doctrine/phpcr-odm": "<1.3.0"
},
"require-dev": {
- "doctrine/annotations": "^1.12 || ^2",
"doctrine/coding-standard": "^12",
"doctrine/dbal": "^3.5 || ^4",
"doctrine/mongodb-odm": "^1.3.0 || ^2.0.0",
"doctrine/orm": "^2.14 || ^3",
"ext-sqlite3": "*",
+ "fig/log-test": "^1",
"phpstan/phpstan": "^1.10",
- "phpunit/phpunit": "^9.6.13 || ^10.4.2",
- "symfony/cache": "^5.4 || ^6.3 || ^7",
- "symfony/var-exporter": "^5.4 || ^6.3 || ^7",
- "vimeo/psalm": "^5.9"
+ "phpunit/phpunit": "^10.5.3",
+ "symfony/cache": "^6.4 || ^7",
+ "symfony/var-exporter": "^6.4 || ^7"
},
"suggest": {
"alcaeus/mongo-php-adapter": "For using MongoDB ODM 1.3 with PHP 7 (deprecated)",
@@ -1829,7 +1720,7 @@
],
"support": {
"issues": "https://github.com/doctrine/data-fixtures/issues",
- "source": "https://github.com/doctrine/data-fixtures/tree/1.7.0"
+ "source": "https://github.com/doctrine/data-fixtures/tree/2.0.2"
},
"funding": [
{
@@ -1845,20 +1736,20 @@
"type": "tidelift"
}
],
- "time": "2023-11-24T11:18:31+00:00"
+ "time": "2025-01-21T13:21:31+00:00"
},
{
"name": "doctrine/dbal",
- "version": "4.1.1",
+ "version": "4.2.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
- "reference": "7a8252418689feb860ea8dfeab66d64a56a64df8"
+ "reference": "33d2d7fe1269b2301640c44cf2896ea607b30e3e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/dbal/zipball/7a8252418689feb860ea8dfeab66d64a56a64df8",
- "reference": "7a8252418689feb860ea8dfeab66d64a56a64df8",
+ "url": "https://api.github.com/repos/doctrine/dbal/zipball/33d2d7fe1269b2301640c44cf2896ea607b30e3e",
+ "reference": "33d2d7fe1269b2301640c44cf2896ea607b30e3e",
"shasum": ""
},
"require": {
@@ -1871,16 +1762,14 @@
"doctrine/coding-standard": "12.0.0",
"fig/log-test": "^1",
"jetbrains/phpstorm-stubs": "2023.2",
- "phpstan/phpstan": "1.12.0",
- "phpstan/phpstan-phpunit": "1.4.0",
- "phpstan/phpstan-strict-rules": "^1.6",
- "phpunit/phpunit": "10.5.30",
- "psalm/plugin-phpunit": "0.19.0",
+ "phpstan/phpstan": "2.1.1",
+ "phpstan/phpstan-phpunit": "2.0.3",
+ "phpstan/phpstan-strict-rules": "^2",
+ "phpunit/phpunit": "10.5.39",
"slevomat/coding-standard": "8.13.1",
"squizlabs/php_codesniffer": "3.10.2",
"symfony/cache": "^6.3.8|^7.0",
- "symfony/console": "^5.4|^6.3|^7.0",
- "vimeo/psalm": "5.25.0"
+ "symfony/console": "^5.4|^6.3|^7.0"
},
"suggest": {
"symfony/console": "For helpful console commands such as SQL execution and import of files."
@@ -1937,7 +1826,7 @@
],
"support": {
"issues": "https://github.com/doctrine/dbal/issues",
- "source": "https://github.com/doctrine/dbal/tree/4.1.1"
+ "source": "https://github.com/doctrine/dbal/tree/4.2.3"
},
"funding": [
{
@@ -1953,33 +1842,34 @@
"type": "tidelift"
}
],
- "time": "2024-09-03T08:58:39+00:00"
+ "time": "2025-03-07T18:29:05+00:00"
},
{
"name": "doctrine/deprecations",
- "version": "1.1.3",
+ "version": "1.1.5",
"source": {
"type": "git",
"url": "https://github.com/doctrine/deprecations.git",
- "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab"
+ "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
- "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
+ "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
+ "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
+ "conflict": {
+ "phpunit/phpunit": "<=7.5 || >=13"
+ },
"require-dev": {
- "doctrine/coding-standard": "^9",
- "phpstan/phpstan": "1.4.10 || 1.10.15",
- "phpstan/phpstan-phpunit": "^1.0",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
- "psalm/plugin-phpunit": "0.18.4",
- "psr/log": "^1 || ^2 || ^3",
- "vimeo/psalm": "4.30.0 || 5.12.0"
+ "doctrine/coding-standard": "^9 || ^12 || ^13",
+ "phpstan/phpstan": "1.4.10 || 2.1.11",
+ "phpstan/phpstan-phpunit": "^1.0 || ^2",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12",
+ "psr/log": "^1 || ^2 || ^3"
},
"suggest": {
"psr/log": "Allows logging deprecations via PSR-3 logger implementation"
@@ -1987,7 +1877,7 @@
"type": "library",
"autoload": {
"psr-4": {
- "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
+ "Doctrine\\Deprecations\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1998,68 +1888,70 @@
"homepage": "https://www.doctrine-project.org/",
"support": {
"issues": "https://github.com/doctrine/deprecations/issues",
- "source": "https://github.com/doctrine/deprecations/tree/1.1.3"
+ "source": "https://github.com/doctrine/deprecations/tree/1.1.5"
},
- "time": "2024-01-30T19:34:25+00:00"
+ "time": "2025-04-07T20:06:18+00:00"
},
{
"name": "doctrine/doctrine-bundle",
- "version": "2.13.0",
+ "version": "2.14.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/DoctrineBundle.git",
- "reference": "ca59d84b8e63143ce1aed90cdb333ba329d71563"
+ "reference": "ca6a7350b421baf7fbdefbf9f4993292ed18effb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/ca59d84b8e63143ce1aed90cdb333ba329d71563",
- "reference": "ca59d84b8e63143ce1aed90cdb333ba329d71563",
+ "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/ca6a7350b421baf7fbdefbf9f4993292ed18effb",
+ "reference": "ca6a7350b421baf7fbdefbf9f4993292ed18effb",
"shasum": ""
},
"require": {
- "doctrine/cache": "^1.11 || ^2.0",
"doctrine/dbal": "^3.7.0 || ^4.0",
- "doctrine/persistence": "^2.2 || ^3",
+ "doctrine/persistence": "^3.1 || ^4",
"doctrine/sql-formatter": "^1.0.1",
- "php": "^7.4 || ^8.0",
- "symfony/cache": "^5.4 || ^6.0 || ^7.0",
- "symfony/config": "^5.4 || ^6.0 || ^7.0",
- "symfony/console": "^5.4 || ^6.0 || ^7.0",
- "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0",
+ "php": "^8.1",
+ "symfony/cache": "^6.4 || ^7.0",
+ "symfony/config": "^6.4 || ^7.0",
+ "symfony/console": "^6.4 || ^7.0",
+ "symfony/dependency-injection": "^6.4 || ^7.0",
"symfony/deprecation-contracts": "^2.1 || ^3",
- "symfony/doctrine-bridge": "^5.4.19 || ^6.0.7 || ^7.0",
- "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0",
- "symfony/polyfill-php80": "^1.15",
- "symfony/service-contracts": "^1.1.1 || ^2.0 || ^3"
+ "symfony/doctrine-bridge": "^6.4.3 || ^7.0.3",
+ "symfony/framework-bundle": "^6.4 || ^7.0",
+ "symfony/service-contracts": "^2.5 || ^3"
},
"conflict": {
"doctrine/annotations": ">=3.0",
+ "doctrine/cache": "< 1.11",
"doctrine/orm": "<2.17 || >=4.0",
- "twig/twig": "<1.34 || >=2.0 <2.4"
+ "symfony/var-exporter": "< 6.4.1 || 7.0.0",
+ "twig/twig": "<2.13 || >=3.0 <3.0.4"
},
"require-dev": {
"doctrine/annotations": "^1 || ^2",
+ "doctrine/cache": "^1.11 || ^2.0",
"doctrine/coding-standard": "^12",
"doctrine/deprecations": "^1.0",
"doctrine/orm": "^2.17 || ^3.0",
"friendsofphp/proxy-manager-lts": "^1.0",
- "phpunit/phpunit": "^9.5.26",
- "psalm/plugin-phpunit": "^0.18.4",
- "psalm/plugin-symfony": "^5",
+ "phpstan/phpstan": "2.1.1",
+ "phpstan/phpstan-phpunit": "2.0.3",
+ "phpstan/phpstan-strict-rules": "^2",
+ "phpunit/phpunit": "^9.6.22",
"psr/log": "^1.1.4 || ^2.0 || ^3.0",
- "symfony/phpunit-bridge": "^6.1 || ^7.0",
- "symfony/property-info": "^5.4 || ^6.0 || ^7.0",
- "symfony/proxy-manager-bridge": "^5.4 || ^6.0 || ^7.0",
- "symfony/security-bundle": "^5.4 || ^6.0 || ^7.0",
- "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0",
- "symfony/string": "^5.4 || ^6.0 || ^7.0",
- "symfony/twig-bridge": "^5.4 || ^6.0 || ^7.0",
- "symfony/validator": "^5.4 || ^6.0 || ^7.0",
- "symfony/var-exporter": "^5.4 || ^6.2 || ^7.0",
- "symfony/web-profiler-bundle": "^5.4 || ^6.0 || ^7.0",
- "symfony/yaml": "^5.4 || ^6.0 || ^7.0",
- "twig/twig": "^1.34 || ^2.12 || ^3.0",
- "vimeo/psalm": "^5.15"
+ "symfony/doctrine-messenger": "^6.4 || ^7.0",
+ "symfony/messenger": "^6.4 || ^7.0",
+ "symfony/phpunit-bridge": "^7.2",
+ "symfony/property-info": "^6.4 || ^7.0",
+ "symfony/security-bundle": "^6.4 || ^7.0",
+ "symfony/stopwatch": "^6.4 || ^7.0",
+ "symfony/string": "^6.4 || ^7.0",
+ "symfony/twig-bridge": "^6.4 || ^7.0",
+ "symfony/validator": "^6.4 || ^7.0",
+ "symfony/var-exporter": "^6.4.1 || ^7.0.1",
+ "symfony/web-profiler-bundle": "^6.4 || ^7.0",
+ "symfony/yaml": "^6.4 || ^7.0",
+ "twig/twig": "^2.13 || ^3.0.4"
},
"suggest": {
"doctrine/orm": "The Doctrine ORM integration is optional in the bundle.",
@@ -2104,7 +1996,7 @@
],
"support": {
"issues": "https://github.com/doctrine/DoctrineBundle/issues",
- "source": "https://github.com/doctrine/DoctrineBundle/tree/2.13.0"
+ "source": "https://github.com/doctrine/DoctrineBundle/tree/2.14.0"
},
"funding": [
{
@@ -2120,26 +2012,26 @@
"type": "tidelift"
}
],
- "time": "2024-09-01T09:46:40+00:00"
+ "time": "2025-03-22T17:28:21+00:00"
},
{
"name": "doctrine/doctrine-migrations-bundle",
- "version": "3.3.1",
+ "version": "3.4.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/DoctrineMigrationsBundle.git",
- "reference": "715b62c31a5894afcb2b2cdbbc6607d7dd0580c0"
+ "reference": "5a6ac7120c2924c4c070a869d08b11ccf9e277b9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/715b62c31a5894afcb2b2cdbbc6607d7dd0580c0",
- "reference": "715b62c31a5894afcb2b2cdbbc6607d7dd0580c0",
+ "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/5a6ac7120c2924c4c070a869d08b11ccf9e277b9",
+ "reference": "5a6ac7120c2924c4c070a869d08b11ccf9e277b9",
"shasum": ""
},
"require": {
"doctrine/doctrine-bundle": "^2.4",
"doctrine/migrations": "^3.2",
- "php": "^7.2|^8.0",
+ "php": "^7.2 || ^8.0",
"symfony/deprecation-contracts": "^2.1 || ^3",
"symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0"
},
@@ -2147,27 +2039,20 @@
"composer/semver": "^3.0",
"doctrine/coding-standard": "^12",
"doctrine/orm": "^2.6 || ^3",
- "doctrine/persistence": "^2.0 || ^3 ",
- "phpstan/phpstan": "^1.4",
- "phpstan/phpstan-deprecation-rules": "^1",
- "phpstan/phpstan-phpunit": "^1",
- "phpstan/phpstan-strict-rules": "^1.1",
- "phpstan/phpstan-symfony": "^1.3",
- "phpunit/phpunit": "^8.5|^9.5",
- "psalm/plugin-phpunit": "^0.18.4",
- "psalm/plugin-symfony": "^3 || ^5",
+ "phpstan/phpstan": "^1.4 || ^2",
+ "phpstan/phpstan-deprecation-rules": "^1 || ^2",
+ "phpstan/phpstan-phpunit": "^1 || ^2",
+ "phpstan/phpstan-strict-rules": "^1.1 || ^2",
+ "phpstan/phpstan-symfony": "^1.3 || ^2",
+ "phpunit/phpunit": "^8.5 || ^9.5",
"symfony/phpunit-bridge": "^6.3 || ^7",
- "symfony/var-exporter": "^5.4 || ^6 || ^7",
- "vimeo/psalm": "^4.30 || ^5.15"
+ "symfony/var-exporter": "^5.4 || ^6 || ^7"
},
"type": "symfony-bundle",
"autoload": {
"psr-4": {
- "Doctrine\\Bundle\\MigrationsBundle\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
+ "Doctrine\\Bundle\\MigrationsBundle\\": "src"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2196,7 +2081,7 @@
],
"support": {
"issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues",
- "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.3.1"
+ "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.4.2"
},
"funding": [
{
@@ -2212,7 +2097,7 @@
"type": "tidelift"
}
],
- "time": "2024-05-14T20:32:18+00:00"
+ "time": "2025-03-11T17:36:26+00:00"
},
{
"name": "doctrine/event-manager",
@@ -2545,16 +2430,16 @@
},
{
"name": "doctrine/migrations",
- "version": "3.8.1",
+ "version": "3.9.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/migrations.git",
- "reference": "7760fbd0b7cb58bfb50415505a7bab821adf0877"
+ "reference": "325b61e41d032f5f7d7e2d11cbefff656eadc9ab"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/migrations/zipball/7760fbd0b7cb58bfb50415505a7bab821adf0877",
- "reference": "7760fbd0b7cb58bfb50415505a7bab821adf0877",
+ "url": "https://api.github.com/repos/doctrine/migrations/zipball/325b61e41d032f5f7d7e2d11cbefff656eadc9ab",
+ "reference": "325b61e41d032f5f7d7e2d11cbefff656eadc9ab",
"shasum": ""
},
"require": {
@@ -2574,7 +2459,7 @@
"require-dev": {
"doctrine/coding-standard": "^12",
"doctrine/orm": "^2.13 || ^3",
- "doctrine/persistence": "^2 || ^3",
+ "doctrine/persistence": "^2 || ^3 || ^4",
"doctrine/sql-formatter": "^1.0",
"ext-pdo_sqlite": "*",
"fig/log-test": "^1",
@@ -2628,7 +2513,7 @@
],
"support": {
"issues": "https://github.com/doctrine/migrations/issues",
- "source": "https://github.com/doctrine/migrations/tree/3.8.1"
+ "source": "https://github.com/doctrine/migrations/tree/3.9.0"
},
"funding": [
{
@@ -2644,20 +2529,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-28T13:17:28+00:00"
+ "time": "2025-03-26T06:48:45+00:00"
},
{
"name": "doctrine/orm",
- "version": "3.2.2",
+ "version": "3.3.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/orm.git",
- "reference": "831a1eb7d260925528cdbb49cc1866c0357cf147"
+ "reference": "1f1891d3e20ef9881e81c2f32c53e9dc88dfc9a7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/orm/zipball/831a1eb7d260925528cdbb49cc1866c0357cf147",
- "reference": "831a1eb7d260925528cdbb49cc1866c0357cf147",
+ "url": "https://api.github.com/repos/doctrine/orm/zipball/1f1891d3e20ef9881e81c2f32c53e9dc88dfc9a7",
+ "reference": "1f1891d3e20ef9881e81c2f32c53e9dc88dfc9a7",
"shasum": ""
},
"require": {
@@ -2669,7 +2554,7 @@
"doctrine/inflector": "^1.4 || ^2.0",
"doctrine/instantiator": "^1.3 || ^2",
"doctrine/lexer": "^3",
- "doctrine/persistence": "^3.3.1",
+ "doctrine/persistence": "^3.3.1 || ^4",
"ext-ctype": "*",
"php": "^8.1",
"psr/cache": "^1 || ^2 || ^3",
@@ -2677,14 +2562,16 @@
"symfony/var-exporter": "^6.3.9 || ^7.0"
},
"require-dev": {
- "doctrine/coding-standard": "^12.0",
+ "doctrine/coding-standard": "^13.0",
"phpbench/phpbench": "^1.0",
- "phpstan/phpstan": "1.11.1",
+ "phpdocumentor/guides-cli": "^1.4",
+ "phpstan/extension-installer": "^1.4",
+ "phpstan/phpstan": "2.0.3",
+ "phpstan/phpstan-deprecation-rules": "^2",
"phpunit/phpunit": "^10.4.0",
"psr/log": "^1 || ^2 || ^3",
- "squizlabs/php_codesniffer": "3.7.2",
- "symfony/cache": "^5.4 || ^6.2 || ^7.0",
- "vimeo/psalm": "5.24.0"
+ "squizlabs/php_codesniffer": "3.12.0",
+ "symfony/cache": "^5.4 || ^6.2 || ^7.0"
},
"suggest": {
"ext-dom": "Provides support for XSD validation for XML mapping files",
@@ -2730,27 +2617,27 @@
],
"support": {
"issues": "https://github.com/doctrine/orm/issues",
- "source": "https://github.com/doctrine/orm/tree/3.2.2"
+ "source": "https://github.com/doctrine/orm/tree/3.3.3"
},
- "time": "2024-08-23T10:03:52+00:00"
+ "time": "2025-05-02T17:42:51+00:00"
},
{
"name": "doctrine/persistence",
- "version": "3.3.3",
+ "version": "4.0.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/persistence.git",
- "reference": "b337726451f5d530df338fc7f68dee8781b49779"
+ "reference": "45004aca79189474f113cbe3a53847c2115a55fa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/persistence/zipball/b337726451f5d530df338fc7f68dee8781b49779",
- "reference": "b337726451f5d530df338fc7f68dee8781b49779",
+ "url": "https://api.github.com/repos/doctrine/persistence/zipball/45004aca79189474f113cbe3a53847c2115a55fa",
+ "reference": "45004aca79189474f113cbe3a53847c2115a55fa",
"shasum": ""
},
"require": {
"doctrine/event-manager": "^1 || ^2",
- "php": "^7.2 || ^8.0",
+ "php": "^8.1",
"psr/cache": "^1.0 || ^2.0 || ^3.0"
},
"conflict": {
@@ -2758,13 +2645,11 @@
},
"require-dev": {
"doctrine/coding-standard": "^12",
- "doctrine/common": "^3.0",
- "phpstan/phpstan": "1.11.1",
+ "phpstan/phpstan": "1.12.7",
"phpstan/phpstan-phpunit": "^1",
"phpstan/phpstan-strict-rules": "^1.1",
- "phpunit/phpunit": "^8.5 || ^9.5",
- "symfony/cache": "^4.4 || ^5.4 || ^6.0",
- "vimeo/psalm": "4.30.0 || 5.24.0"
+ "phpunit/phpunit": "^9.6",
+ "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0"
},
"type": "library",
"autoload": {
@@ -2813,7 +2698,7 @@
],
"support": {
"issues": "https://github.com/doctrine/persistence/issues",
- "source": "https://github.com/doctrine/persistence/tree/3.3.3"
+ "source": "https://github.com/doctrine/persistence/tree/4.0.0"
},
"funding": [
{
@@ -2829,20 +2714,20 @@
"type": "tidelift"
}
],
- "time": "2024-06-20T10:14:30+00:00"
+ "time": "2024-11-01T21:49:07+00:00"
},
{
"name": "doctrine/sql-formatter",
- "version": "1.4.1",
+ "version": "1.5.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/sql-formatter.git",
- "reference": "7f83911cc5eba870de7ebb11283972483f7e2891"
+ "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/7f83911cc5eba870de7ebb11283972483f7e2891",
- "reference": "7f83911cc5eba870de7ebb11283972483f7e2891",
+ "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/d6d00aba6fd2957fe5216fe2b7673e9985db20c8",
+ "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8",
"shasum": ""
},
"require": {
@@ -2850,9 +2735,9 @@
},
"require-dev": {
"doctrine/coding-standard": "^12",
+ "ergebnis/phpunit-slow-test-detector": "^2.14",
"phpstan/phpstan": "^1.10",
- "phpunit/phpunit": "^10.5",
- "vimeo/psalm": "^5.24"
+ "phpunit/phpunit": "^10.5"
},
"bin": [
"bin/sql-formatter"
@@ -2882,22 +2767,22 @@
],
"support": {
"issues": "https://github.com/doctrine/sql-formatter/issues",
- "source": "https://github.com/doctrine/sql-formatter/tree/1.4.1"
+ "source": "https://github.com/doctrine/sql-formatter/tree/1.5.2"
},
- "time": "2024-08-05T20:32:22+00:00"
+ "time": "2025-01-24T11:45:48+00:00"
},
{
"name": "dompdf/dompdf",
- "version": "v3.0.0",
+ "version": "v3.1.0",
"source": {
"type": "git",
"url": "https://github.com/dompdf/dompdf.git",
- "reference": "fbc7c5ee5d94f7a910b78b43feb7931b7f971b59"
+ "reference": "a51bd7a063a65499446919286fb18b518177155a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/dompdf/dompdf/zipball/fbc7c5ee5d94f7a910b78b43feb7931b7f971b59",
- "reference": "fbc7c5ee5d94f7a910b78b43feb7931b7f971b59",
+ "url": "https://api.github.com/repos/dompdf/dompdf/zipball/a51bd7a063a65499446919286fb18b518177155a",
+ "reference": "a51bd7a063a65499446919286fb18b518177155a",
"shasum": ""
},
"require": {
@@ -2913,7 +2798,7 @@
"ext-json": "*",
"ext-zip": "*",
"mockery/mockery": "^1.3",
- "phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10",
+ "phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11",
"squizlabs/php_codesniffer": "^3.5",
"symfony/process": "^4.4 || ^5.4 || ^6.2 || ^7.0"
},
@@ -2946,22 +2831,22 @@
"homepage": "https://github.com/dompdf/dompdf",
"support": {
"issues": "https://github.com/dompdf/dompdf/issues",
- "source": "https://github.com/dompdf/dompdf/tree/v3.0.0"
+ "source": "https://github.com/dompdf/dompdf/tree/v3.1.0"
},
- "time": "2024-04-29T14:01:28+00:00"
+ "time": "2025-01-15T14:09:04+00:00"
},
{
"name": "dompdf/php-font-lib",
- "version": "1.0.0",
+ "version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/dompdf/php-font-lib.git",
- "reference": "991d6a954f6bbd7e41022198f00586b230731441"
+ "reference": "6137b7d4232b7f16c882c75e4ca3991dbcf6fe2d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/991d6a954f6bbd7e41022198f00586b230731441",
- "reference": "991d6a954f6bbd7e41022198f00586b230731441",
+ "url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/6137b7d4232b7f16c882c75e4ca3991dbcf6fe2d",
+ "reference": "6137b7d4232b7f16c882c75e4ca3991dbcf6fe2d",
"shasum": ""
},
"require": {
@@ -2991,9 +2876,9 @@
"homepage": "https://github.com/dompdf/php-font-lib",
"support": {
"issues": "https://github.com/dompdf/php-font-lib/issues",
- "source": "https://github.com/dompdf/php-font-lib/tree/1.0.0"
+ "source": "https://github.com/dompdf/php-font-lib/tree/1.0.1"
},
- "time": "2024-04-29T13:40:38+00:00"
+ "time": "2024-12-02T14:37:59+00:00"
},
{
"name": "dompdf/php-svg-lib",
@@ -3043,16 +2928,16 @@
},
{
"name": "egulias/email-validator",
- "version": "4.0.2",
+ "version": "4.0.4",
"source": {
"type": "git",
"url": "https://github.com/egulias/EmailValidator.git",
- "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e"
+ "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e",
- "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e",
+ "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa",
+ "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa",
"shasum": ""
},
"require": {
@@ -3098,7 +2983,7 @@
],
"support": {
"issues": "https://github.com/egulias/EmailValidator/issues",
- "source": "https://github.com/egulias/EmailValidator/tree/4.0.2"
+ "source": "https://github.com/egulias/EmailValidator/tree/4.0.4"
},
"funding": [
{
@@ -3106,7 +2991,7 @@
"type": "github"
}
],
- "time": "2023-10-06T06:47:41+00:00"
+ "time": "2025-03-06T22:45:56+00:00"
},
{
"name": "erusev/parsedown",
@@ -3359,88 +3244,6 @@
},
"time": "2024-07-09T13:51:01+00:00"
},
- {
- "name": "friendsofphp/proxy-manager-lts",
- "version": "v1.0.18",
- "source": {
- "type": "git",
- "url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git",
- "reference": "2c8a6cffc3220e99352ad958fe7cf06bf6f7690f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/2c8a6cffc3220e99352ad958fe7cf06bf6f7690f",
- "reference": "2c8a6cffc3220e99352ad958fe7cf06bf6f7690f",
- "shasum": ""
- },
- "require": {
- "laminas/laminas-code": "~3.4.1|^4.0",
- "php": ">=7.1",
- "symfony/filesystem": "^4.4.17|^5.0|^6.0|^7.0"
- },
- "conflict": {
- "laminas/laminas-stdlib": "<3.2.1",
- "zendframework/zend-stdlib": "<3.2.1"
- },
- "replace": {
- "ocramius/proxy-manager": "^2.1"
- },
- "require-dev": {
- "ext-phar": "*",
- "symfony/phpunit-bridge": "^5.4|^6.0|^7.0"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "name": "ocramius/proxy-manager",
- "url": "https://github.com/Ocramius/ProxyManager"
- }
- },
- "autoload": {
- "psr-4": {
- "ProxyManager\\": "src/ProxyManager"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com",
- "homepage": "https://ocramius.github.io/"
- },
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- }
- ],
- "description": "Adding support for a wider range of PHP versions to ocramius/proxy-manager",
- "homepage": "https://github.com/FriendsOfPHP/proxy-manager-lts",
- "keywords": [
- "aop",
- "lazy loading",
- "proxy",
- "proxy pattern",
- "service proxies"
- ],
- "support": {
- "issues": "https://github.com/FriendsOfPHP/proxy-manager-lts/issues",
- "source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.18"
- },
- "funding": [
- {
- "url": "https://github.com/Ocramius",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager",
- "type": "tidelift"
- }
- ],
- "time": "2024-03-20T12:50:41+00:00"
- },
{
"name": "gregwar/captcha",
"version": "v1.2.1",
@@ -3567,16 +3370,16 @@
},
{
"name": "guzzlehttp/guzzle",
- "version": "7.9.2",
+ "version": "7.9.3",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
- "reference": "d281ed313b989f213357e3be1a179f02196ac99b"
+ "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b",
- "reference": "d281ed313b989f213357e3be1a179f02196ac99b",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77",
+ "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77",
"shasum": ""
},
"require": {
@@ -3673,7 +3476,7 @@
],
"support": {
"issues": "https://github.com/guzzle/guzzle/issues",
- "source": "https://github.com/guzzle/guzzle/tree/7.9.2"
+ "source": "https://github.com/guzzle/guzzle/tree/7.9.3"
},
"funding": [
{
@@ -3689,20 +3492,20 @@
"type": "tidelift"
}
],
- "time": "2024-07-24T11:22:20+00:00"
+ "time": "2025-03-27T13:37:11+00:00"
},
{
"name": "guzzlehttp/promises",
- "version": "2.0.3",
+ "version": "2.2.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
- "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8"
+ "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8",
- "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c",
+ "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c",
"shasum": ""
},
"require": {
@@ -3756,7 +3559,7 @@
],
"support": {
"issues": "https://github.com/guzzle/promises/issues",
- "source": "https://github.com/guzzle/promises/tree/2.0.3"
+ "source": "https://github.com/guzzle/promises/tree/2.2.0"
},
"funding": [
{
@@ -3772,20 +3575,20 @@
"type": "tidelift"
}
],
- "time": "2024-07-18T10:29:17+00:00"
+ "time": "2025-03-27T13:27:01+00:00"
},
{
"name": "guzzlehttp/psr7",
- "version": "2.7.0",
+ "version": "2.7.1",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201"
+ "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
- "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16",
+ "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16",
"shasum": ""
},
"require": {
@@ -3872,7 +3675,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/2.7.0"
+ "source": "https://github.com/guzzle/psr7/tree/2.7.1"
},
"funding": [
{
@@ -3888,7 +3691,7 @@
"type": "tidelift"
}
],
- "time": "2024-07-18T11:15:46+00:00"
+ "time": "2025-03-27T12:30:47+00:00"
},
{
"name": "hshn/base64-encoded-file",
@@ -3954,20 +3757,20 @@
},
{
"name": "imagine/imagine",
- "version": "1.3.5",
+ "version": "1.5.0",
"source": {
"type": "git",
"url": "https://github.com/php-imagine/Imagine.git",
- "reference": "7151d553edec4dc2bbac60419f7a74ff34700e7f"
+ "reference": "80ab21434890dee9ba54969d31c51ac8d4d551e0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-imagine/Imagine/zipball/7151d553edec4dc2bbac60419f7a74ff34700e7f",
- "reference": "7151d553edec4dc2bbac60419f7a74ff34700e7f",
+ "url": "https://api.github.com/repos/php-imagine/Imagine/zipball/80ab21434890dee9ba54969d31c51ac8d4d551e0",
+ "reference": "80ab21434890dee9ba54969d31c51ac8d4d551e0",
"shasum": ""
},
"require": {
- "php": ">=5.5"
+ "php": ">=7.1"
},
"require-dev": {
"phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5 || ^8.4 || ^9.3"
@@ -4000,7 +3803,7 @@
"homepage": "http://avalanche123.com"
}
],
- "description": "Image processing for PHP 5.3",
+ "description": "Image processing for PHP",
"homepage": "http://imagine.readthedocs.org/",
"keywords": [
"drawing",
@@ -4010,22 +3813,22 @@
],
"support": {
"issues": "https://github.com/php-imagine/Imagine/issues",
- "source": "https://github.com/php-imagine/Imagine/tree/1.3.5"
+ "source": "https://github.com/php-imagine/Imagine/tree/1.5.0"
},
- "time": "2023-06-07T14:49:52+00:00"
+ "time": "2024-12-03T14:37:55+00:00"
},
{
"name": "jbtronics/2fa-webauthn",
- "version": "v2.2.2",
+ "version": "v2.2.3",
"source": {
"type": "git",
"url": "https://github.com/jbtronics/2fa-webauthn.git",
- "reference": "4341335ab9667f7347a24d60c29d143f25371e82"
+ "reference": "fda6f39e70784cbf1f93cf758bf798563219d451"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/jbtronics/2fa-webauthn/zipball/4341335ab9667f7347a24d60c29d143f25371e82",
- "reference": "4341335ab9667f7347a24d60c29d143f25371e82",
+ "url": "https://api.github.com/repos/jbtronics/2fa-webauthn/zipball/fda6f39e70784cbf1f93cf758bf798563219d451",
+ "reference": "fda6f39e70784cbf1f93cf758bf798563219d451",
"shasum": ""
},
"require": {
@@ -4070,22 +3873,22 @@
],
"support": {
"issues": "https://github.com/jbtronics/2fa-webauthn/issues",
- "source": "https://github.com/jbtronics/2fa-webauthn/tree/v2.2.2"
+ "source": "https://github.com/jbtronics/2fa-webauthn/tree/v2.2.3"
},
- "time": "2024-07-21T19:24:26+00:00"
+ "time": "2025-03-27T19:23:40+00:00"
},
{
"name": "jbtronics/dompdf-font-loader-bundle",
- "version": "v1.1.2",
+ "version": "v1.1.3",
"source": {
"type": "git",
"url": "https://github.com/jbtronics/dompdf-font-loader-bundle.git",
- "reference": "de3a2982e626144bc543119585ed46dc4c884bea"
+ "reference": "da01d9655826105d53f9d0e8ba4f9d838201dcb2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/jbtronics/dompdf-font-loader-bundle/zipball/de3a2982e626144bc543119585ed46dc4c884bea",
- "reference": "de3a2982e626144bc543119585ed46dc4c884bea",
+ "url": "https://api.github.com/repos/jbtronics/dompdf-font-loader-bundle/zipball/da01d9655826105d53f9d0e8ba4f9d838201dcb2",
+ "reference": "da01d9655826105d53f9d0e8ba4f9d838201dcb2",
"shasum": ""
},
"require": {
@@ -4125,9 +3928,9 @@
],
"support": {
"issues": "https://github.com/jbtronics/dompdf-font-loader-bundle/issues",
- "source": "https://github.com/jbtronics/dompdf-font-loader-bundle/tree/v1.1.2"
+ "source": "https://github.com/jbtronics/dompdf-font-loader-bundle/tree/v1.1.3"
},
- "time": "2024-06-06T17:42:51+00:00"
+ "time": "2025-02-07T23:21:03+00:00"
},
{
"name": "jfcherng/php-color-output",
@@ -4426,16 +4229,16 @@
},
{
"name": "knpuniversity/oauth2-client-bundle",
- "version": "v2.18.2",
+ "version": "v2.18.3",
"source": {
"type": "git",
"url": "https://github.com/knpuniversity/oauth2-client-bundle.git",
- "reference": "0f8db87efa064bc1800315c027a80b53ef935524"
+ "reference": "c38ca88a70aae3694ca346a41b13b9a8f6e33ed4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/knpuniversity/oauth2-client-bundle/zipball/0f8db87efa064bc1800315c027a80b53ef935524",
- "reference": "0f8db87efa064bc1800315c027a80b53ef935524",
+ "url": "https://api.github.com/repos/knpuniversity/oauth2-client-bundle/zipball/c38ca88a70aae3694ca346a41b13b9a8f6e33ed4",
+ "reference": "c38ca88a70aae3694ca346a41b13b9a8f6e33ed4",
"shasum": ""
},
"require": {
@@ -4479,72 +4282,9 @@
],
"support": {
"issues": "https://github.com/knpuniversity/oauth2-client-bundle/issues",
- "source": "https://github.com/knpuniversity/oauth2-client-bundle/tree/v2.18.2"
+ "source": "https://github.com/knpuniversity/oauth2-client-bundle/tree/v2.18.3"
},
- "time": "2024-08-12T15:26:07+00:00"
- },
- {
- "name": "laminas/laminas-code",
- "version": "4.14.0",
- "source": {
- "type": "git",
- "url": "https://github.com/laminas/laminas-code.git",
- "reference": "562e02b7d85cb9142b5116cc76c4c7c162a11a1c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-code/zipball/562e02b7d85cb9142b5116cc76c4c7c162a11a1c",
- "reference": "562e02b7d85cb9142b5116cc76c4c7c162a11a1c",
- "shasum": ""
- },
- "require": {
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0"
- },
- "require-dev": {
- "doctrine/annotations": "^2.0.1",
- "ext-phar": "*",
- "laminas/laminas-coding-standard": "^2.5.0",
- "laminas/laminas-stdlib": "^3.17.0",
- "phpunit/phpunit": "^10.3.3",
- "psalm/plugin-phpunit": "^0.19.0",
- "vimeo/psalm": "^5.15.0"
- },
- "suggest": {
- "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features",
- "laminas/laminas-stdlib": "Laminas\\Stdlib component"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Laminas\\Code\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "description": "Extensions to the PHP Reflection API, static code scanning, and code generation",
- "homepage": "https://laminas.dev",
- "keywords": [
- "code",
- "laminas",
- "laminasframework"
- ],
- "support": {
- "chat": "https://laminas.dev/chat",
- "docs": "https://docs.laminas.dev/laminas-code/",
- "forum": "https://discourse.laminas.dev",
- "issues": "https://github.com/laminas/laminas-code/issues",
- "rss": "https://github.com/laminas/laminas-code/releases.atom",
- "source": "https://github.com/laminas/laminas-code"
- },
- "funding": [
- {
- "url": "https://funding.communitybridge.org/projects/laminas-project",
- "type": "community_bridge"
- }
- ],
- "time": "2024-06-17T08:50:25+00:00"
+ "time": "2024-10-02T14:26:09+00:00"
},
{
"name": "lcobucci/clock",
@@ -4858,35 +4598,30 @@
},
{
"name": "league/oauth2-client",
- "version": "2.7.0",
+ "version": "2.8.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/oauth2-client.git",
- "reference": "160d6274b03562ebeb55ed18399281d8118b76c8"
+ "reference": "9df2924ca644736c835fc60466a3a60390d334f9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/oauth2-client/zipball/160d6274b03562ebeb55ed18399281d8118b76c8",
- "reference": "160d6274b03562ebeb55ed18399281d8118b76c8",
+ "url": "https://api.github.com/repos/thephpleague/oauth2-client/zipball/9df2924ca644736c835fc60466a3a60390d334f9",
+ "reference": "9df2924ca644736c835fc60466a3a60390d334f9",
"shasum": ""
},
"require": {
- "guzzlehttp/guzzle": "^6.0 || ^7.0",
- "paragonie/random_compat": "^1 || ^2 || ^9.99",
- "php": "^5.6 || ^7.0 || ^8.0"
+ "ext-json": "*",
+ "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5",
+ "php": "^7.1 || >=8.0.0 <8.5.0"
},
"require-dev": {
"mockery/mockery": "^1.3.5",
- "php-parallel-lint/php-parallel-lint": "^1.3.1",
- "phpunit/phpunit": "^5.7 || ^6.0 || ^9.5",
- "squizlabs/php_codesniffer": "^2.3 || ^3.0"
+ "php-parallel-lint/php-parallel-lint": "^1.4",
+ "phpunit/phpunit": "^7 || ^8 || ^9 || ^10 || ^11",
+ "squizlabs/php_codesniffer": "^3.11"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-2.x": "2.0.x-dev"
- }
- },
"autoload": {
"psr-4": {
"League\\OAuth2\\Client\\": "src/"
@@ -4922,26 +4657,26 @@
],
"support": {
"issues": "https://github.com/thephpleague/oauth2-client/issues",
- "source": "https://github.com/thephpleague/oauth2-client/tree/2.7.0"
+ "source": "https://github.com/thephpleague/oauth2-client/tree/2.8.1"
},
- "time": "2023-04-16T18:19:15+00:00"
+ "time": "2025-02-26T04:37:30+00:00"
},
{
"name": "league/uri",
- "version": "7.4.1",
+ "version": "7.5.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/uri.git",
- "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4"
+ "reference": "81fb5145d2644324614cc532b28efd0215bda430"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/uri/zipball/bedb6e55eff0c933668addaa7efa1e1f2c417cc4",
- "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4",
+ "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430",
+ "reference": "81fb5145d2644324614cc532b28efd0215bda430",
"shasum": ""
},
"require": {
- "league/uri-interfaces": "^7.3",
+ "league/uri-interfaces": "^7.5",
"php": "^8.1"
},
"conflict": {
@@ -5006,7 +4741,7 @@
"docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri-src/issues",
- "source": "https://github.com/thephpleague/uri/tree/7.4.1"
+ "source": "https://github.com/thephpleague/uri/tree/7.5.1"
},
"funding": [
{
@@ -5014,24 +4749,24 @@
"type": "github"
}
],
- "time": "2024-03-23T07:42:40+00:00"
+ "time": "2024-12-08T08:40:02+00:00"
},
{
"name": "league/uri-components",
- "version": "7.4.1",
+ "version": "7.5.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/uri-components.git",
- "reference": "b94fe4097885f1b51c4c3fcb78025fbbabbb5d9d"
+ "reference": "4aabf0e2f2f9421ffcacab35be33e4fb5e63c44f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/uri-components/zipball/b94fe4097885f1b51c4c3fcb78025fbbabbb5d9d",
- "reference": "b94fe4097885f1b51c4c3fcb78025fbbabbb5d9d",
+ "url": "https://api.github.com/repos/thephpleague/uri-components/zipball/4aabf0e2f2f9421ffcacab35be33e4fb5e63c44f",
+ "reference": "4aabf0e2f2f9421ffcacab35be33e4fb5e63c44f",
"shasum": ""
},
"require": {
- "league/uri": "^7.3",
+ "league/uri": "^7.5",
"php": "^8.1"
},
"suggest": {
@@ -5088,7 +4823,7 @@
"docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri-src/issues",
- "source": "https://github.com/thephpleague/uri-components/tree/7.4.1"
+ "source": "https://github.com/thephpleague/uri-components/tree/7.5.1"
},
"funding": [
{
@@ -5096,20 +4831,20 @@
"type": "github"
}
],
- "time": "2024-03-23T07:42:40+00:00"
+ "time": "2024-12-08T08:40:02+00:00"
},
{
"name": "league/uri-interfaces",
- "version": "7.4.1",
+ "version": "7.5.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/uri-interfaces.git",
- "reference": "8d43ef5c841032c87e2de015972c06f3865ef718"
+ "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/8d43ef5c841032c87e2de015972c06f3865ef718",
- "reference": "8d43ef5c841032c87e2de015972c06f3865ef718",
+ "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742",
+ "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742",
"shasum": ""
},
"require": {
@@ -5172,7 +4907,7 @@
"docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri-src/issues",
- "source": "https://github.com/thephpleague/uri-interfaces/tree/7.4.1"
+ "source": "https://github.com/thephpleague/uri-interfaces/tree/7.5.0"
},
"funding": [
{
@@ -5180,20 +4915,20 @@
"type": "github"
}
],
- "time": "2024-03-23T07:42:40+00:00"
+ "time": "2024-12-08T08:18:47+00:00"
},
{
"name": "liip/imagine-bundle",
- "version": "2.13.2",
+ "version": "2.13.3",
"source": {
"type": "git",
"url": "https://github.com/liip/LiipImagineBundle.git",
- "reference": "98e0318ea0f7b9500343236e63cc29ded58a1d43"
+ "reference": "3faccde327f91368e51d05ecad49a9cd915abd81"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/liip/LiipImagineBundle/zipball/98e0318ea0f7b9500343236e63cc29ded58a1d43",
- "reference": "98e0318ea0f7b9500343236e63cc29ded58a1d43",
+ "url": "https://api.github.com/repos/liip/LiipImagineBundle/zipball/3faccde327f91368e51d05ecad49a9cd915abd81",
+ "reference": "3faccde327f91368e51d05ecad49a9cd915abd81",
"shasum": ""
},
"require": {
@@ -5284,9 +5019,9 @@
],
"support": {
"issues": "https://github.com/liip/LiipImagineBundle/issues",
- "source": "https://github.com/liip/LiipImagineBundle/tree/2.13.2"
+ "source": "https://github.com/liip/LiipImagineBundle/tree/2.13.3"
},
- "time": "2024-09-04T12:55:26+00:00"
+ "time": "2024-12-12T09:38:23+00:00"
},
{
"name": "lorenzo/pinky",
@@ -5410,16 +5145,16 @@
},
{
"name": "monolog/monolog",
- "version": "3.7.0",
+ "version": "3.9.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
- "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8"
+ "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f4393b648b78a5408747de94fca38beb5f7e9ef8",
- "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6",
+ "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6",
"shasum": ""
},
"require": {
@@ -5439,12 +5174,14 @@
"guzzlehttp/psr7": "^2.2",
"mongodb/mongodb": "^1.8",
"php-amqplib/php-amqplib": "~2.4 || ^3",
- "phpstan/phpstan": "^1.9",
- "phpstan/phpstan-deprecation-rules": "^1.0",
- "phpstan/phpstan-strict-rules": "^1.4",
- "phpunit/phpunit": "^10.5.17",
+ "php-console/php-console": "^3.1.8",
+ "phpstan/phpstan": "^2",
+ "phpstan/phpstan-deprecation-rules": "^2",
+ "phpstan/phpstan-strict-rules": "^2",
+ "phpunit/phpunit": "^10.5.17 || ^11.0.7",
"predis/predis": "^1.1 || ^2",
- "ruflin/elastica": "^7",
+ "rollbar/rollbar": "^4.0",
+ "ruflin/elastica": "^7 || ^8",
"symfony/mailer": "^5.4 || ^6",
"symfony/mime": "^5.4 || ^6"
},
@@ -5495,7 +5232,7 @@
],
"support": {
"issues": "https://github.com/Seldaek/monolog/issues",
- "source": "https://github.com/Seldaek/monolog/tree/3.7.0"
+ "source": "https://github.com/Seldaek/monolog/tree/3.9.0"
},
"funding": [
{
@@ -5507,7 +5244,7 @@
"type": "tidelift"
}
],
- "time": "2024-06-28T09:40:51+00:00"
+ "time": "2025-03-24T10:02:05+00:00"
},
{
"name": "nbgrp/onelogin-saml-bundle",
@@ -5709,16 +5446,16 @@
},
{
"name": "nelmio/security-bundle",
- "version": "v3.4.1",
+ "version": "v3.5.1",
"source": {
"type": "git",
"url": "https://github.com/nelmio/NelmioSecurityBundle.git",
- "reference": "00d275a38ec99230df60160cb62d88fabf8f088e"
+ "reference": "b1c5e323d71152bc1a61a4f8fbf7d88c6fa3e2e7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nelmio/NelmioSecurityBundle/zipball/00d275a38ec99230df60160cb62d88fabf8f088e",
- "reference": "00d275a38ec99230df60160cb62d88fabf8f088e",
+ "url": "https://api.github.com/repos/nelmio/NelmioSecurityBundle/zipball/b1c5e323d71152bc1a61a4f8fbf7d88c6fa3e2e7",
+ "reference": "b1c5e323d71152bc1a61a4f8fbf7d88c6fa3e2e7",
"shasum": ""
},
"require": {
@@ -5777,22 +5514,22 @@
],
"support": {
"issues": "https://github.com/nelmio/NelmioSecurityBundle/issues",
- "source": "https://github.com/nelmio/NelmioSecurityBundle/tree/v3.4.1"
+ "source": "https://github.com/nelmio/NelmioSecurityBundle/tree/v3.5.1"
},
- "time": "2024-09-03T15:05:21+00:00"
+ "time": "2025-03-13T09:17:16+00:00"
},
{
"name": "nikolaposa/version",
- "version": "4.2.0",
+ "version": "4.2.1",
"source": {
"type": "git",
"url": "https://github.com/nikolaposa/version.git",
- "reference": "003fefa14f47cd44917546285e39d196af062a95"
+ "reference": "2b9ee2f0b09333b6ce00bd6b63132cdf1d7a1428"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikolaposa/version/zipball/003fefa14f47cd44917546285e39d196af062a95",
- "reference": "003fefa14f47cd44917546285e39d196af062a95",
+ "url": "https://api.github.com/repos/nikolaposa/version/zipball/2b9ee2f0b09333b6ce00bd6b63132cdf1d7a1428",
+ "reference": "2b9ee2f0b09333b6ce00bd6b63132cdf1d7a1428",
"shasum": ""
},
"require": {
@@ -5838,9 +5575,9 @@
],
"support": {
"issues": "https://github.com/nikolaposa/version/issues",
- "source": "https://github.com/nikolaposa/version/tree/4.2.0"
+ "source": "https://github.com/nikolaposa/version/tree/4.2.1"
},
- "time": "2023-12-29T22:07:54+00:00"
+ "time": "2025-03-24T19:12:02+00:00"
},
{
"name": "nyholm/psr7",
@@ -5922,58 +5659,63 @@
},
{
"name": "omines/datatables-bundle",
- "version": "0.8.2",
+ "version": "0.9.2",
"source": {
"type": "git",
"url": "https://github.com/omines/datatables-bundle.git",
- "reference": "1a1bd7814419831898d834ac1b3e980120fd7425"
+ "reference": "15974fc7dde750f8a3eff32d9ad4d9de6028583f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/omines/datatables-bundle/zipball/1a1bd7814419831898d834ac1b3e980120fd7425",
- "reference": "1a1bd7814419831898d834ac1b3e980120fd7425",
+ "url": "https://api.github.com/repos/omines/datatables-bundle/zipball/15974fc7dde750f8a3eff32d9ad4d9de6028583f",
+ "reference": "15974fc7dde750f8a3eff32d9ad4d9de6028583f",
"shasum": ""
},
"require": {
"php": ">=8.1",
- "symfony/event-dispatcher": "^6.3|^7.0",
- "symfony/framework-bundle": "^6.3|^7.0",
- "symfony/options-resolver": "^6.3|^7.0",
- "symfony/property-access": "^6.3|^7.0",
- "symfony/translation": "^6.3|^7.0"
+ "symfony/event-dispatcher": "^6.4|^7.1",
+ "symfony/framework-bundle": "^6.4|^7.1",
+ "symfony/options-resolver": "^6.4|^7.1",
+ "symfony/polyfill-mbstring": "^1.31.0",
+ "symfony/property-access": "^6.4|^7.1",
+ "symfony/translation": "^6.4|^7.1"
+ },
+ "conflict": {
+ "doctrine/orm": "^3.0 <3.3"
},
"require-dev": {
- "doctrine/common": "^3.4.3",
- "doctrine/doctrine-bundle": "^2.11.1",
- "doctrine/orm": "^2.17.2",
- "doctrine/persistence": "^3.2.0",
+ "doctrine/common": "^3.4.5",
+ "doctrine/doctrine-bundle": "^2.13.1",
+ "doctrine/orm": "^2.19.3|^3.3.0",
+ "doctrine/persistence": "^3.4.0",
"ext-curl": "*",
"ext-json": "*",
+ "ext-mbstring": "*",
"ext-mongodb": "*",
"ext-pdo_sqlite": "*",
"ext-zip": "*",
- "friendsofphp/php-cs-fixer": "^v3.40.0",
- "mongodb/mongodb": "^1.17",
- "ocramius/package-versions": "^2.8",
+ "friendsofphp/php-cs-fixer": "^3.65.0",
+ "mongodb/mongodb": "^1.20.0",
+ "ocramius/package-versions": "^2.9",
"openspout/openspout": "^4.23",
- "phpoffice/phpspreadsheet": "^1.29.0 || ^2.0",
- "phpstan/extension-installer": "^1.3.1",
- "phpstan/phpstan": "^1.10.55",
- "phpstan/phpstan-doctrine": "^1.3.54",
- "phpstan/phpstan-phpunit": "^1.3.15",
- "phpstan/phpstan-symfony": "^1.3.6",
- "phpunit/phpunit": "^10.5.10 || ^11.0.3",
- "ruflin/elastica": "^6.2|^7.3.1",
- "symfony/browser-kit": "^6.3|^7.0",
- "symfony/css-selector": "^6.3|^7.0",
- "symfony/doctrine-bridge": "^6.3|^7.0.2",
- "symfony/dom-crawler": "^6.3|^7.0",
- "symfony/intl": "^6.3|^7.0.2",
- "symfony/mime": "^6.3|^7.0",
- "symfony/phpunit-bridge": "^6.3|^7.0.2",
- "symfony/twig-bundle": "^6.3|^7.0",
- "symfony/var-dumper": "^6.3|^7.0.2",
- "symfony/yaml": "^6.3|^7.0"
+ "phpoffice/phpspreadsheet": "^2.3.3|^3.5",
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^2.0.3",
+ "phpstan/phpstan-doctrine": "^2.0.1",
+ "phpstan/phpstan-phpunit": "^2.0.1",
+ "phpstan/phpstan-symfony": "^2.0.0",
+ "phpunit/phpunit": "^10.5.38|^11.4.4",
+ "ruflin/elastica": "^6.2|^7.3.2",
+ "symfony/browser-kit": "^6.4.13|^7.1",
+ "symfony/css-selector": "^6.4.13|^7.1",
+ "symfony/doctrine-bridge": "^6.4.13|^7.1",
+ "symfony/dom-crawler": "^6.4.13|^7.1",
+ "symfony/intl": "^6.4.13|^7.1",
+ "symfony/mime": "^6.4.13|^7.1",
+ "symfony/phpunit-bridge": "^7.2",
+ "symfony/twig-bundle": "^6.4|^7.1",
+ "symfony/var-dumper": "^6.4.13|^7.1",
+ "symfony/yaml": "^6.4.13|^7.1"
},
"suggest": {
"doctrine/doctrine-bundle": "For integrated access to Doctrine object managers",
@@ -5987,7 +5729,7 @@
"type": "symfony-bundle",
"extra": {
"branch-alias": {
- "dev-master": "0.8-dev"
+ "dev-master": "0.9-dev"
}
},
"autoload": {
@@ -6025,7 +5767,7 @@
],
"support": {
"issues": "https://github.com/omines/datatables-bundle/issues",
- "source": "https://github.com/omines/datatables-bundle/tree/0.8.2"
+ "source": "https://github.com/omines/datatables-bundle/tree/0.9.2"
},
"funding": [
{
@@ -6033,7 +5775,7 @@
"type": "github"
}
],
- "time": "2024-03-24T20:57:13+00:00"
+ "time": "2025-01-23T14:53:20+00:00"
},
{
"name": "onelogin/php-saml",
@@ -6342,16 +6084,16 @@
},
{
"name": "php-http/discovery",
- "version": "1.19.4",
+ "version": "1.20.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/discovery.git",
- "reference": "0700efda8d7526335132360167315fdab3aeb599"
+ "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-http/discovery/zipball/0700efda8d7526335132360167315fdab3aeb599",
- "reference": "0700efda8d7526335132360167315fdab3aeb599",
+ "url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d",
+ "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d",
"shasum": ""
},
"require": {
@@ -6415,22 +6157,22 @@
],
"support": {
"issues": "https://github.com/php-http/discovery/issues",
- "source": "https://github.com/php-http/discovery/tree/1.19.4"
+ "source": "https://github.com/php-http/discovery/tree/1.20.0"
},
- "time": "2024-03-29T13:00:05+00:00"
+ "time": "2024-10-02T11:20:13+00:00"
},
{
"name": "php-http/httplug",
- "version": "2.4.0",
+ "version": "2.4.1",
"source": {
"type": "git",
"url": "https://github.com/php-http/httplug.git",
- "reference": "625ad742c360c8ac580fcc647a1541d29e257f67"
+ "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-http/httplug/zipball/625ad742c360c8ac580fcc647a1541d29e257f67",
- "reference": "625ad742c360c8ac580fcc647a1541d29e257f67",
+ "url": "https://api.github.com/repos/php-http/httplug/zipball/5cad731844891a4c282f3f3e1b582c46839d22f4",
+ "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4",
"shasum": ""
},
"require": {
@@ -6472,9 +6214,9 @@
],
"support": {
"issues": "https://github.com/php-http/httplug/issues",
- "source": "https://github.com/php-http/httplug/tree/2.4.0"
+ "source": "https://github.com/php-http/httplug/tree/2.4.1"
},
- "time": "2023-04-14T15:10:03+00:00"
+ "time": "2024-09-23T11:39:58+00:00"
},
{
"name": "php-http/promise",
@@ -6583,16 +6325,16 @@
},
{
"name": "phpdocumentor/reflection-docblock",
- "version": "5.4.1",
+ "version": "5.6.2",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c"
+ "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c",
- "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/92dde6a5919e34835c506ac8c523ef095a95ed62",
+ "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62",
"shasum": ""
},
"require": {
@@ -6601,17 +6343,17 @@
"php": "^7.4 || ^8.0",
"phpdocumentor/reflection-common": "^2.2",
"phpdocumentor/type-resolver": "^1.7",
- "phpstan/phpdoc-parser": "^1.7",
+ "phpstan/phpdoc-parser": "^1.7|^2.0",
"webmozart/assert": "^1.9.1"
},
"require-dev": {
- "mockery/mockery": "~1.3.5",
+ "mockery/mockery": "~1.3.5 || ~1.6.0",
"phpstan/extension-installer": "^1.1",
"phpstan/phpstan": "^1.8",
"phpstan/phpstan-mockery": "^1.1",
"phpstan/phpstan-webmozart-assert": "^1.2",
"phpunit/phpunit": "^9.5",
- "vimeo/psalm": "^5.13"
+ "psalm/phar": "^5.26"
},
"type": "library",
"extra": {
@@ -6641,29 +6383,29 @@
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
"support": {
"issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
- "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.1"
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.2"
},
- "time": "2024-05-21T05:55:05+00:00"
+ "time": "2025-04-13T19:20:35+00:00"
},
{
"name": "phpdocumentor/type-resolver",
- "version": "1.8.2",
+ "version": "1.10.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "153ae662783729388a584b4361f2545e4d841e3c"
+ "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c",
- "reference": "153ae662783729388a584b4361f2545e4d841e3c",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a",
+ "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a",
"shasum": ""
},
"require": {
"doctrine/deprecations": "^1.0",
"php": "^7.3 || ^8.0",
"phpdocumentor/reflection-common": "^2.0",
- "phpstan/phpdoc-parser": "^1.13"
+ "phpstan/phpdoc-parser": "^1.18|^2.0"
},
"require-dev": {
"ext-tokenizer": "*",
@@ -6699,36 +6441,36 @@
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
"support": {
"issues": "https://github.com/phpDocumentor/TypeResolver/issues",
- "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2"
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0"
},
- "time": "2024-02-23T11:10:43+00:00"
+ "time": "2024-11-09T15:12:26+00:00"
},
{
"name": "phpstan/phpdoc-parser",
- "version": "1.30.1",
+ "version": "2.1.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "51b95ec8670af41009e2b2b56873bad96682413e"
+ "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/51b95ec8670af41009e2b2b56873bad96682413e",
- "reference": "51b95ec8670af41009e2b2b56873bad96682413e",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68",
+ "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68",
"shasum": ""
},
"require": {
- "php": "^7.2 || ^8.0"
+ "php": "^7.4 || ^8.0"
},
"require-dev": {
"doctrine/annotations": "^2.0",
- "nikic/php-parser": "^4.15",
+ "nikic/php-parser": "^5.3.0",
"php-parallel-lint/php-parallel-lint": "^1.2",
"phpstan/extension-installer": "^1.0",
- "phpstan/phpstan": "^1.5",
- "phpstan/phpstan-phpunit": "^1.1",
- "phpstan/phpstan-strict-rules": "^1.0",
- "phpunit/phpunit": "^9.5",
+ "phpstan/phpstan": "^2.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpstan/phpstan-strict-rules": "^2.0",
+ "phpunit/phpunit": "^9.6",
"symfony/process": "^5.2"
},
"type": "library",
@@ -6746,9 +6488,9 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/1.30.1"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0"
},
- "time": "2024-09-07T20:13:05+00:00"
+ "time": "2025-02-19T13:28:12+00:00"
},
{
"name": "psr/cache",
@@ -7168,16 +6910,16 @@
},
{
"name": "psr/log",
- "version": "3.0.1",
+ "version": "3.0.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
- "reference": "79dff0b268932c640297f5208d6298f71855c03e"
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/79dff0b268932c640297f5208d6298f71855c03e",
- "reference": "79dff0b268932c640297f5208d6298f71855c03e",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
"shasum": ""
},
"require": {
@@ -7212,9 +6954,9 @@
"psr-3"
],
"support": {
- "source": "https://github.com/php-fig/log/tree/3.0.1"
+ "source": "https://github.com/php-fig/log/tree/3.0.2"
},
- "time": "2024-08-21T13:31:24+00:00"
+ "time": "2024-09-11T13:17:53+00:00"
},
{
"name": "psr/simple-cache",
@@ -7313,16 +7055,16 @@
},
{
"name": "revolt/event-loop",
- "version": "v1.0.6",
+ "version": "v1.0.7",
"source": {
"type": "git",
"url": "https://github.com/revoltphp/event-loop.git",
- "reference": "25de49af7223ba039f64da4ae9a28ec2d10d0254"
+ "reference": "09bf1bf7f7f574453efe43044b06fafe12216eb3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/revoltphp/event-loop/zipball/25de49af7223ba039f64da4ae9a28ec2d10d0254",
- "reference": "25de49af7223ba039f64da4ae9a28ec2d10d0254",
+ "url": "https://api.github.com/repos/revoltphp/event-loop/zipball/09bf1bf7f7f574453efe43044b06fafe12216eb3",
+ "reference": "09bf1bf7f7f574453efe43044b06fafe12216eb3",
"shasum": ""
},
"require": {
@@ -7379,22 +7121,67 @@
],
"support": {
"issues": "https://github.com/revoltphp/event-loop/issues",
- "source": "https://github.com/revoltphp/event-loop/tree/v1.0.6"
+ "source": "https://github.com/revoltphp/event-loop/tree/v1.0.7"
},
- "time": "2023-11-30T05:34:44+00:00"
+ "time": "2025-01-25T19:27:39+00:00"
},
{
- "name": "robrichards/xmlseclibs",
- "version": "3.1.1",
+ "name": "rhukster/dom-sanitizer",
+ "version": "1.0.7",
"source": {
"type": "git",
- "url": "https://github.com/robrichards/xmlseclibs.git",
- "reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df"
+ "url": "https://github.com/rhukster/dom-sanitizer.git",
+ "reference": "c2a98f27ad742668b254282ccc5581871d0fb601"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/f8f19e58f26cdb42c54b214ff8a820760292f8df",
- "reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df",
+ "url": "https://api.github.com/repos/rhukster/dom-sanitizer/zipball/c2a98f27ad742668b254282ccc5581871d0fb601",
+ "reference": "c2a98f27ad742668b254282ccc5581871d0fb601",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Rhukster\\DomSanitizer\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Andy Miller",
+ "email": "rhuk@rhuk.net"
+ }
+ ],
+ "description": "A simple but effective DOM/SVG/MathML Sanitizer for PHP 7.4+",
+ "support": {
+ "issues": "https://github.com/rhukster/dom-sanitizer/issues",
+ "source": "https://github.com/rhukster/dom-sanitizer/tree/1.0.7"
+ },
+ "time": "2023-11-06T16:46:48+00:00"
+ },
+ {
+ "name": "robrichards/xmlseclibs",
+ "version": "3.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/robrichards/xmlseclibs.git",
+ "reference": "2bdfd742624d739dfadbd415f00181b4a77aaf07"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/2bdfd742624d739dfadbd415f00181b4a77aaf07",
+ "reference": "2bdfd742624d739dfadbd415f00181b4a77aaf07",
"shasum": ""
},
"require": {
@@ -7421,9 +7208,9 @@
],
"support": {
"issues": "https://github.com/robrichards/xmlseclibs/issues",
- "source": "https://github.com/robrichards/xmlseclibs/tree/3.1.1"
+ "source": "https://github.com/robrichards/xmlseclibs/tree/3.1.3"
},
- "time": "2020-09-05T13:00:25+00:00"
+ "time": "2024-11-20T21:13:56+00:00"
},
{
"name": "runtime/frankenphp-symfony",
@@ -7567,16 +7354,16 @@
},
{
"name": "s9e/text-formatter",
- "version": "2.18.0",
+ "version": "2.19.0",
"source": {
"type": "git",
"url": "https://github.com/s9e/TextFormatter.git",
- "reference": "4970711f25d94306b4835b723b9cc5010170ea37"
+ "reference": "d65a4f61cbe494937afb3150dc73b6e757d400d3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/s9e/TextFormatter/zipball/4970711f25d94306b4835b723b9cc5010170ea37",
- "reference": "4970711f25d94306b4835b723b9cc5010170ea37",
+ "url": "https://api.github.com/repos/s9e/TextFormatter/zipball/d65a4f61cbe494937afb3150dc73b6e757d400d3",
+ "reference": "d65a4f61cbe494937afb3150dc73b6e757d400d3",
"shasum": ""
},
"require": {
@@ -7604,7 +7391,7 @@
},
"type": "library",
"extra": {
- "version": "2.18.0"
+ "version": "2.19.0"
},
"autoload": {
"psr-4": {
@@ -7636,30 +7423,30 @@
],
"support": {
"issues": "https://github.com/s9e/TextFormatter/issues",
- "source": "https://github.com/s9e/TextFormatter/tree/2.18.0"
+ "source": "https://github.com/s9e/TextFormatter/tree/2.19.0"
},
- "time": "2024-07-24T14:50:52+00:00"
+ "time": "2025-04-26T09:27:34+00:00"
},
{
"name": "sabberworm/php-css-parser",
- "version": "v8.6.0",
+ "version": "v8.8.0",
"source": {
"type": "git",
"url": "https://github.com/MyIntervals/PHP-CSS-Parser.git",
- "reference": "d2fb94a9641be84d79c7548c6d39bbebba6e9a70"
+ "reference": "3de493bdddfd1f051249af725c7e0d2c38fed740"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/d2fb94a9641be84d79c7548c6d39bbebba6e9a70",
- "reference": "d2fb94a9641be84d79c7548c6d39bbebba6e9a70",
+ "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/3de493bdddfd1f051249af725c7e0d2c38fed740",
+ "reference": "3de493bdddfd1f051249af725c7e0d2c38fed740",
"shasum": ""
},
"require": {
"ext-iconv": "*",
- "php": ">=5.6.20"
+ "php": "^5.6.20 || ^7.0.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
},
"require-dev": {
- "phpunit/phpunit": "^5.7.27"
+ "phpunit/phpunit": "5.7.27 || 6.5.14 || 7.5.20 || 8.5.41"
},
"suggest": {
"ext-mbstring": "for parsing UTF-8 CSS"
@@ -7701,26 +7488,26 @@
],
"support": {
"issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues",
- "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v8.6.0"
+ "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v8.8.0"
},
- "time": "2024-07-01T07:33:21+00:00"
+ "time": "2025-03-23T17:59:05+00:00"
},
{
"name": "scheb/2fa-backup-code",
- "version": "v6.12.0",
+ "version": "v6.13.1",
"source": {
"type": "git",
"url": "https://github.com/scheb/2fa-backup-code.git",
- "reference": "1ad84e7eb26eb425c609e03097cac99387dde44c"
+ "reference": "6dceeb5be0f6339d76f8e380ee09631c8bbebc7e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/scheb/2fa-backup-code/zipball/1ad84e7eb26eb425c609e03097cac99387dde44c",
- "reference": "1ad84e7eb26eb425c609e03097cac99387dde44c",
+ "url": "https://api.github.com/repos/scheb/2fa-backup-code/zipball/6dceeb5be0f6339d76f8e380ee09631c8bbebc7e",
+ "reference": "6dceeb5be0f6339d76f8e380ee09631c8bbebc7e",
"shasum": ""
},
"require": {
- "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0",
+ "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
"scheb/2fa-bundle": "self.version"
},
"type": "library",
@@ -7750,27 +7537,27 @@
"two-step"
],
"support": {
- "source": "https://github.com/scheb/2fa-backup-code/tree/v6.12.0"
+ "source": "https://github.com/scheb/2fa-backup-code/tree/v6.13.1"
},
- "time": "2023-12-03T15:44:26+00:00"
+ "time": "2024-11-29T19:22:48+00:00"
},
{
"name": "scheb/2fa-bundle",
- "version": "v6.12.0",
+ "version": "v6.13.1",
"source": {
"type": "git",
"url": "https://github.com/scheb/2fa-bundle.git",
- "reference": "6e51477c53070f27ac3e3d36be1a991870db415a"
+ "reference": "8eadd57ebc2078ef273dca72b1ac4bd283812346"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/scheb/2fa-bundle/zipball/6e51477c53070f27ac3e3d36be1a991870db415a",
- "reference": "6e51477c53070f27ac3e3d36be1a991870db415a",
+ "url": "https://api.github.com/repos/scheb/2fa-bundle/zipball/8eadd57ebc2078ef273dca72b1ac4bd283812346",
+ "reference": "8eadd57ebc2078ef273dca72b1ac4bd283812346",
"shasum": ""
},
"require": {
"ext-json": "*",
- "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0",
+ "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
"symfony/config": "^5.4 || ^6.0",
"symfony/dependency-injection": "^5.4 || ^6.0",
"symfony/event-dispatcher": "^5.4 || ^6.0",
@@ -7818,27 +7605,27 @@
"two-step"
],
"support": {
- "source": "https://github.com/scheb/2fa-bundle/tree/v6.12.0"
+ "source": "https://github.com/scheb/2fa-bundle/tree/v6.13.1"
},
- "time": "2023-12-03T16:02:15+00:00"
+ "time": "2024-11-29T19:29:49+00:00"
},
{
"name": "scheb/2fa-google-authenticator",
- "version": "v6.12.0",
+ "version": "v6.13.1",
"source": {
"type": "git",
"url": "https://github.com/scheb/2fa-google-authenticator.git",
- "reference": "2c43bbe432fdc465d8f1d1b2d73ca9ea5276fe34"
+ "reference": "2c960a5cb32edb4c37f719f10180df378a44fd6f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/scheb/2fa-google-authenticator/zipball/2c43bbe432fdc465d8f1d1b2d73ca9ea5276fe34",
- "reference": "2c43bbe432fdc465d8f1d1b2d73ca9ea5276fe34",
+ "url": "https://api.github.com/repos/scheb/2fa-google-authenticator/zipball/2c960a5cb32edb4c37f719f10180df378a44fd6f",
+ "reference": "2c960a5cb32edb4c37f719f10180df378a44fd6f",
"shasum": ""
},
"require": {
"paragonie/constant_time_encoding": "^2.4",
- "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0",
+ "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
"scheb/2fa-bundle": "self.version",
"spomky-labs/otphp": "^10.0 || ^11.0"
},
@@ -7869,28 +7656,28 @@
"two-step"
],
"support": {
- "source": "https://github.com/scheb/2fa-google-authenticator/tree/v6.12.0"
+ "source": "https://github.com/scheb/2fa-google-authenticator/tree/v6.13.1"
},
- "time": "2023-12-03T15:44:26+00:00"
+ "time": "2024-11-29T19:22:48+00:00"
},
{
"name": "scheb/2fa-trusted-device",
- "version": "v6.12.0",
+ "version": "v6.13.1",
"source": {
"type": "git",
"url": "https://github.com/scheb/2fa-trusted-device.git",
- "reference": "1ca6158dc6518ca9dba8b111bd9807a8b9be2903"
+ "reference": "38e690325232a4037ff4aec8de926c938906942c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/scheb/2fa-trusted-device/zipball/1ca6158dc6518ca9dba8b111bd9807a8b9be2903",
- "reference": "1ca6158dc6518ca9dba8b111bd9807a8b9be2903",
+ "url": "https://api.github.com/repos/scheb/2fa-trusted-device/zipball/38e690325232a4037ff4aec8de926c938906942c",
+ "reference": "38e690325232a4037ff4aec8de926c938906942c",
"shasum": ""
},
"require": {
"lcobucci/clock": "^2.0 || ^3.0",
"lcobucci/jwt": "^4.1 || ^5.0",
- "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0",
+ "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
"scheb/2fa-bundle": "self.version"
},
"type": "library",
@@ -7920,9 +7707,9 @@
"two-step"
],
"support": {
- "source": "https://github.com/scheb/2fa-trusted-device/tree/v6.12.0"
+ "source": "https://github.com/scheb/2fa-trusted-device/tree/v6.13.1"
},
- "time": "2023-12-03T15:44:26+00:00"
+ "time": "2024-11-29T19:22:48+00:00"
},
{
"name": "shivas/versioning-bundle",
@@ -7986,16 +7773,16 @@
},
{
"name": "spatie/db-dumper",
- "version": "3.6.0",
+ "version": "3.8.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/db-dumper.git",
- "reference": "faca5056830bccea04eadf07e8074669cb9e905e"
+ "reference": "91e1fd4dc000aefc9753cda2da37069fc996baee"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/db-dumper/zipball/faca5056830bccea04eadf07e8074669cb9e905e",
- "reference": "faca5056830bccea04eadf07e8074669cb9e905e",
+ "url": "https://api.github.com/repos/spatie/db-dumper/zipball/91e1fd4dc000aefc9753cda2da37069fc996baee",
+ "reference": "91e1fd4dc000aefc9753cda2da37069fc996baee",
"shasum": ""
},
"require": {
@@ -8033,7 +7820,7 @@
"spatie"
],
"support": {
- "source": "https://github.com/spatie/db-dumper/tree/3.6.0"
+ "source": "https://github.com/spatie/db-dumper/tree/3.8.0"
},
"funding": [
{
@@ -8045,7 +7832,7 @@
"type": "github"
}
],
- "time": "2024-04-24T14:54:13+00:00"
+ "time": "2025-02-14T15:04:22+00:00"
},
{
"name": "spomky-labs/cbor-php",
@@ -8214,39 +8001,37 @@
},
{
"name": "spomky-labs/pki-framework",
- "version": "1.2.1",
+ "version": "1.2.3",
"source": {
"type": "git",
"url": "https://github.com/Spomky-Labs/pki-framework.git",
- "reference": "0b10c8b53366729417d6226ae89a665f9e2d61b6"
+ "reference": "5ff1dcc21e961b60149a80e77f744fc047800b31"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/0b10c8b53366729417d6226ae89a665f9e2d61b6",
- "reference": "0b10c8b53366729417d6226ae89a665f9e2d61b6",
+ "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/5ff1dcc21e961b60149a80e77f744fc047800b31",
+ "reference": "5ff1dcc21e961b60149a80e77f744fc047800b31",
"shasum": ""
},
"require": {
- "brick/math": "^0.10|^0.11|^0.12",
+ "brick/math": "^0.10|^0.11|^0.12|^0.13",
"ext-mbstring": "*",
"php": ">=8.1"
},
"require-dev": {
- "ekino/phpstan-banned-code": "^1.0",
+ "ekino/phpstan-banned-code": "^1.0|^2.0|^3.0",
"ext-gmp": "*",
"ext-openssl": "*",
- "infection/infection": "^0.28",
+ "infection/infection": "^0.28|^0.29",
"php-parallel-lint/php-parallel-lint": "^1.3",
- "phpstan/extension-installer": "^1.3",
- "phpstan/phpstan": "^1.8",
- "phpstan/phpstan-beberlei-assert": "^1.0",
- "phpstan/phpstan-deprecation-rules": "^1.0",
- "phpstan/phpstan-phpunit": "^1.1",
- "phpstan/phpstan-strict-rules": "^1.3",
- "phpunit/phpunit": "^10.1|^11.0",
- "rector/rector": "^1.0",
+ "phpstan/extension-installer": "^1.3|^2.0",
+ "phpstan/phpstan": "^1.8|^2.0",
+ "phpstan/phpstan-deprecation-rules": "^1.0|^2.0",
+ "phpstan/phpstan-phpunit": "^1.1|^2.0",
+ "phpstan/phpstan-strict-rules": "^1.3|^2.0",
+ "phpunit/phpunit": "^10.1|^11.0|^12.0",
+ "rector/rector": "^1.0|^2.0",
"roave/security-advisories": "dev-latest",
- "symfony/phpunit-bridge": "^6.4|^7.0",
"symfony/string": "^6.4|^7.0",
"symfony/var-dumper": "^6.4|^7.0",
"symplify/easy-coding-standard": "^12.0"
@@ -8309,7 +8094,7 @@
],
"support": {
"issues": "https://github.com/Spomky-Labs/pki-framework/issues",
- "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.2.1"
+ "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.2.3"
},
"funding": [
{
@@ -8321,7 +8106,7 @@
"type": "patreon"
}
],
- "time": "2024-03-30T18:03:49+00:00"
+ "time": "2025-04-25T15:57:13+00:00"
},
{
"name": "symfony/apache-pack",
@@ -8351,16 +8136,16 @@
},
{
"name": "symfony/asset",
- "version": "v6.4.8",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/asset.git",
- "reference": "c668aa320e26b7379540368832b9d1dd43d32603"
+ "reference": "2466c17d61d14539cddf77e57ebb9cc971185302"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/asset/zipball/c668aa320e26b7379540368832b9d1dd43d32603",
- "reference": "c668aa320e26b7379540368832b9d1dd43d32603",
+ "url": "https://api.github.com/repos/symfony/asset/zipball/2466c17d61d14539cddf77e57ebb9cc971185302",
+ "reference": "2466c17d61d14539cddf77e57ebb9cc971185302",
"shasum": ""
},
"require": {
@@ -8400,7 +8185,7 @@
"description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/asset/tree/v6.4.8"
+ "source": "https://github.com/symfony/asset/tree/v6.4.13"
},
"funding": [
{
@@ -8416,20 +8201,20 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-10-25T15:07:50+00:00"
},
{
"name": "symfony/cache",
- "version": "v6.4.11",
+ "version": "v6.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache.git",
- "reference": "36daef8fce88fe0b9a4f8cf4c342ced5c05616dc"
+ "reference": "d1abcf763a7414f2e572f676f22da7a06c8cd9ee"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/cache/zipball/36daef8fce88fe0b9a4f8cf4c342ced5c05616dc",
- "reference": "36daef8fce88fe0b9a4f8cf4c342ced5c05616dc",
+ "url": "https://api.github.com/repos/symfony/cache/zipball/d1abcf763a7414f2e572f676f22da7a06c8cd9ee",
+ "reference": "d1abcf763a7414f2e572f676f22da7a06c8cd9ee",
"shasum": ""
},
"require": {
@@ -8496,7 +8281,7 @@
"psr6"
],
"support": {
- "source": "https://github.com/symfony/cache/tree/v6.4.11"
+ "source": "https://github.com/symfony/cache/tree/v6.4.21"
},
"funding": [
{
@@ -8512,20 +8297,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-05T07:40:31+00:00"
+ "time": "2025-04-08T08:21:20+00:00"
},
{
"name": "symfony/cache-contracts",
- "version": "v3.5.0",
+ "version": "v3.5.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache-contracts.git",
- "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197"
+ "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/df6a1a44c890faded49a5fca33c2d5c5fd3c2197",
- "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197",
+ "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b",
+ "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b",
"shasum": ""
},
"require": {
@@ -8534,12 +8319,12 @@
},
"type": "library",
"extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
"branch-alias": {
"dev-main": "3.5-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
}
},
"autoload": {
@@ -8572,7 +8357,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/cache-contracts/tree/v3.5.0"
+ "source": "https://github.com/symfony/cache-contracts/tree/v3.5.1"
},
"funding": [
{
@@ -8588,20 +8373,20 @@
"type": "tidelift"
}
],
- "time": "2024-04-18T09:32:20+00:00"
+ "time": "2024-09-25T14:20:29+00:00"
},
{
"name": "symfony/clock",
- "version": "v6.4.8",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/clock.git",
- "reference": "7a4840efd17135cbd547e41ec49fb910ed4f8b98"
+ "reference": "b2bf55c4dd115003309eafa87ee7df9ed3dde81b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/clock/zipball/7a4840efd17135cbd547e41ec49fb910ed4f8b98",
- "reference": "7a4840efd17135cbd547e41ec49fb910ed4f8b98",
+ "url": "https://api.github.com/repos/symfony/clock/zipball/b2bf55c4dd115003309eafa87ee7df9ed3dde81b",
+ "reference": "b2bf55c4dd115003309eafa87ee7df9ed3dde81b",
"shasum": ""
},
"require": {
@@ -8646,7 +8431,7 @@
"time"
],
"support": {
- "source": "https://github.com/symfony/clock/tree/v6.4.8"
+ "source": "https://github.com/symfony/clock/tree/v6.4.13"
},
"funding": [
{
@@ -8662,20 +8447,20 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:51:39+00:00"
+ "time": "2024-09-25T14:18:03+00:00"
},
{
"name": "symfony/config",
- "version": "v6.4.8",
+ "version": "v6.4.14",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
- "reference": "12e7e52515ce37191b193cf3365903c4f3951e35"
+ "reference": "4e55e7e4ffddd343671ea972216d4509f46c22ef"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/config/zipball/12e7e52515ce37191b193cf3365903c4f3951e35",
- "reference": "12e7e52515ce37191b193cf3365903c4f3951e35",
+ "url": "https://api.github.com/repos/symfony/config/zipball/4e55e7e4ffddd343671ea972216d4509f46c22ef",
+ "reference": "4e55e7e4ffddd343671ea972216d4509f46c22ef",
"shasum": ""
},
"require": {
@@ -8721,7 +8506,7 @@
"description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/config/tree/v6.4.8"
+ "source": "https://github.com/symfony/config/tree/v6.4.14"
},
"funding": [
{
@@ -8737,20 +8522,20 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-11-04T11:33:53+00:00"
},
{
"name": "symfony/console",
- "version": "v6.4.11",
+ "version": "v6.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "42686880adaacdad1835ee8fc2a9ec5b7bd63998"
+ "reference": "a3011c7b7adb58d89f6c0d822abb641d7a5f9719"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/42686880adaacdad1835ee8fc2a9ec5b7bd63998",
- "reference": "42686880adaacdad1835ee8fc2a9ec5b7bd63998",
+ "url": "https://api.github.com/repos/symfony/console/zipball/a3011c7b7adb58d89f6c0d822abb641d7a5f9719",
+ "reference": "a3011c7b7adb58d89f6c0d822abb641d7a5f9719",
"shasum": ""
},
"require": {
@@ -8815,7 +8600,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v6.4.11"
+ "source": "https://github.com/symfony/console/tree/v6.4.21"
},
"funding": [
{
@@ -8831,20 +8616,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-15T22:48:29+00:00"
+ "time": "2025-04-07T15:42:41+00:00"
},
{
"name": "symfony/css-selector",
- "version": "v6.4.8",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "4b61b02fe15db48e3687ce1c45ea385d1780fe08"
+ "reference": "cb23e97813c5837a041b73a6d63a9ddff0778f5e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/4b61b02fe15db48e3687ce1c45ea385d1780fe08",
- "reference": "4b61b02fe15db48e3687ce1c45ea385d1780fe08",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/cb23e97813c5837a041b73a6d63a9ddff0778f5e",
+ "reference": "cb23e97813c5837a041b73a6d63a9ddff0778f5e",
"shasum": ""
},
"require": {
@@ -8880,7 +8665,7 @@
"description": "Converts CSS selectors to XPath expressions",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/css-selector/tree/v6.4.8"
+ "source": "https://github.com/symfony/css-selector/tree/v6.4.13"
},
"funding": [
{
@@ -8896,20 +8681,20 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-09-25T14:18:03+00:00"
},
{
"name": "symfony/dependency-injection",
- "version": "v6.4.11",
+ "version": "v6.4.20",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
- "reference": "e93c8368dc9915c2fe12018ff22fcbbdd32c9a9e"
+ "reference": "c49796a9184a532843e78e50df9e55708b92543a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/e93c8368dc9915c2fe12018ff22fcbbdd32c9a9e",
- "reference": "e93c8368dc9915c2fe12018ff22fcbbdd32c9a9e",
+ "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/c49796a9184a532843e78e50df9e55708b92543a",
+ "reference": "c49796a9184a532843e78e50df9e55708b92543a",
"shasum": ""
},
"require": {
@@ -8917,7 +8702,7 @@
"psr/container": "^1.1|^2.0",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/service-contracts": "^2.5|^3.0",
- "symfony/var-exporter": "^6.2.10|^7.0"
+ "symfony/var-exporter": "^6.4.20|^7.2.5"
},
"conflict": {
"ext-psr": "<1.1|>=2",
@@ -8961,7 +8746,7 @@
"description": "Allows you to standardize and centralize the way objects are constructed in your application",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/dependency-injection/tree/v6.4.11"
+ "source": "https://github.com/symfony/dependency-injection/tree/v6.4.20"
},
"funding": [
{
@@ -8977,20 +8762,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-29T08:15:38+00:00"
+ "time": "2025-03-13T09:55:08+00:00"
},
{
"name": "symfony/deprecation-contracts",
- "version": "v3.5.0",
+ "version": "v3.5.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1"
+ "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
- "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
+ "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
"shasum": ""
},
"require": {
@@ -8998,12 +8783,12 @@
},
"type": "library",
"extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
"branch-alias": {
"dev-main": "3.5-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
}
},
"autoload": {
@@ -9028,7 +8813,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0"
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1"
},
"funding": [
{
@@ -9044,25 +8829,25 @@
"type": "tidelift"
}
],
- "time": "2024-04-18T09:32:20+00:00"
+ "time": "2024-09-25T14:20:29+00:00"
},
{
"name": "symfony/doctrine-bridge",
- "version": "v6.4.11",
+ "version": "v6.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/doctrine-bridge.git",
- "reference": "3c7a50bb920a5398c906725942d947493b1b044c"
+ "reference": "fcce66ede41ca56100b91fd4a00131ba6cf89aba"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/3c7a50bb920a5398c906725942d947493b1b044c",
- "reference": "3c7a50bb920a5398c906725942d947493b1b044c",
+ "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/fcce66ede41ca56100b91fd4a00131ba6cf89aba",
+ "reference": "fcce66ede41ca56100b91fd4a00131ba6cf89aba",
"shasum": ""
},
"require": {
"doctrine/event-manager": "^1.2|^2",
- "doctrine/persistence": "^3.1",
+ "doctrine/persistence": "^2.5|^3.1|^4",
"php": ">=8.1",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-ctype": "~1.8",
@@ -9087,7 +8872,7 @@
},
"require-dev": {
"doctrine/collections": "^1.0|^2.0",
- "doctrine/data-fixtures": "^1.1",
+ "doctrine/data-fixtures": "^1.1|^2",
"doctrine/dbal": "^2.13.1|^3|^4",
"doctrine/orm": "^2.15|^3",
"psr/log": "^1|^2|^3",
@@ -9136,7 +8921,7 @@
"description": "Provides integration for Doctrine with various Symfony components",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/doctrine-bridge/tree/v6.4.11"
+ "source": "https://github.com/symfony/doctrine-bridge/tree/v6.4.21"
},
"funding": [
{
@@ -9152,20 +8937,87 @@
"type": "tidelift"
}
],
- "time": "2024-08-13T10:11:51+00:00"
+ "time": "2025-04-27T15:22:02+00:00"
},
{
- "name": "symfony/dotenv",
- "version": "v6.4.10",
+ "name": "symfony/dom-crawler",
+ "version": "v6.4.19",
"source": {
"type": "git",
- "url": "https://github.com/symfony/dotenv.git",
- "reference": "2ae0c84cc9be0dc1eeb86016970b63c764d8472e"
+ "url": "https://github.com/symfony/dom-crawler.git",
+ "reference": "19073e3e0bb50cbc1cb286077069b3107085206f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dotenv/zipball/2ae0c84cc9be0dc1eeb86016970b63c764d8472e",
- "reference": "2ae0c84cc9be0dc1eeb86016970b63c764d8472e",
+ "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/19073e3e0bb50cbc1cb286077069b3107085206f",
+ "reference": "19073e3e0bb50cbc1cb286077069b3107085206f",
+ "shasum": ""
+ },
+ "require": {
+ "masterminds/html5": "^2.6",
+ "php": ">=8.1",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-mbstring": "~1.0"
+ },
+ "require-dev": {
+ "symfony/css-selector": "^5.4|^6.0|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\DomCrawler\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Eases DOM navigation for HTML and XML documents",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/dom-crawler/tree/v6.4.19"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-02-14T17:58:34+00:00"
+ },
+ {
+ "name": "symfony/dotenv",
+ "version": "v6.4.16",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/dotenv.git",
+ "reference": "1ac5e7e7e862d4d574258daf08bd569ba926e4a5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/dotenv/zipball/1ac5e7e7e862d4d574258daf08bd569ba926e4a5",
+ "reference": "1ac5e7e7e862d4d574258daf08bd569ba926e4a5",
"shasum": ""
},
"require": {
@@ -9210,7 +9062,7 @@
"environment"
],
"support": {
- "source": "https://github.com/symfony/dotenv/tree/v6.4.10"
+ "source": "https://github.com/symfony/dotenv/tree/v6.4.16"
},
"funding": [
{
@@ -9226,20 +9078,20 @@
"type": "tidelift"
}
],
- "time": "2024-07-09T18:29:35+00:00"
+ "time": "2024-11-27T11:08:19+00:00"
},
{
"name": "symfony/error-handler",
- "version": "v6.4.10",
+ "version": "v6.4.20",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
- "reference": "231f1b2ee80f72daa1972f7340297d67439224f0"
+ "reference": "aa3bcf4f7674719df078e61cc8062e5b7f752031"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/error-handler/zipball/231f1b2ee80f72daa1972f7340297d67439224f0",
- "reference": "231f1b2ee80f72daa1972f7340297d67439224f0",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/aa3bcf4f7674719df078e61cc8062e5b7f752031",
+ "reference": "aa3bcf4f7674719df078e61cc8062e5b7f752031",
"shasum": ""
},
"require": {
@@ -9285,7 +9137,7 @@
"description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/error-handler/tree/v6.4.10"
+ "source": "https://github.com/symfony/error-handler/tree/v6.4.20"
},
"funding": [
{
@@ -9301,20 +9153,20 @@
"type": "tidelift"
}
],
- "time": "2024-07-26T12:30:32+00:00"
+ "time": "2025-03-01T13:00:38+00:00"
},
{
"name": "symfony/event-dispatcher",
- "version": "v6.4.8",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "8d7507f02b06e06815e56bb39aa0128e3806208b"
+ "reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8d7507f02b06e06815e56bb39aa0128e3806208b",
- "reference": "8d7507f02b06e06815e56bb39aa0128e3806208b",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e",
+ "reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e",
"shasum": ""
},
"require": {
@@ -9365,7 +9217,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.8"
+ "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.13"
},
"funding": [
{
@@ -9381,20 +9233,20 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-09-25T14:18:03+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
- "version": "v3.5.0",
+ "version": "v3.5.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git",
- "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50"
+ "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50",
- "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f",
+ "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f",
"shasum": ""
},
"require": {
@@ -9403,12 +9255,12 @@
},
"type": "library",
"extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
"branch-alias": {
"dev-main": "3.5-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
}
},
"autoload": {
@@ -9441,7 +9293,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0"
+ "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1"
},
"funding": [
{
@@ -9457,20 +9309,20 @@
"type": "tidelift"
}
],
- "time": "2024-04-18T09:32:20+00:00"
+ "time": "2024-09-25T14:20:29+00:00"
},
{
"name": "symfony/expression-language",
- "version": "v6.4.11",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/expression-language.git",
- "reference": "564e109c40d3637053c942a29a58e9434592a8bf"
+ "reference": "3524904fb026356a5230cd197f9a4e6a61e0e7df"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/expression-language/zipball/564e109c40d3637053c942a29a58e9434592a8bf",
- "reference": "564e109c40d3637053c942a29a58e9434592a8bf",
+ "url": "https://api.github.com/repos/symfony/expression-language/zipball/3524904fb026356a5230cd197f9a4e6a61e0e7df",
+ "reference": "3524904fb026356a5230cd197f9a4e6a61e0e7df",
"shasum": ""
},
"require": {
@@ -9505,7 +9357,7 @@
"description": "Provides an engine that can compile and evaluate expressions",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/expression-language/tree/v6.4.11"
+ "source": "https://github.com/symfony/expression-language/tree/v6.4.13"
},
"funding": [
{
@@ -9521,20 +9373,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-12T09:55:28+00:00"
+ "time": "2024-10-09T08:40:40+00:00"
},
{
"name": "symfony/filesystem",
- "version": "v6.4.9",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "b51ef8059159330b74a4d52f68e671033c0fe463"
+ "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/b51ef8059159330b74a4d52f68e671033c0fe463",
- "reference": "b51ef8059159330b74a4d52f68e671033c0fe463",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/4856c9cf585d5a0313d8d35afd681a526f038dd3",
+ "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3",
"shasum": ""
},
"require": {
@@ -9571,7 +9423,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v6.4.9"
+ "source": "https://github.com/symfony/filesystem/tree/v6.4.13"
},
"funding": [
{
@@ -9587,20 +9439,20 @@
"type": "tidelift"
}
],
- "time": "2024-06-28T09:49:33+00:00"
+ "time": "2024-10-25T15:07:50+00:00"
},
{
"name": "symfony/finder",
- "version": "v6.4.11",
+ "version": "v6.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "d7eb6daf8cd7e9ac4976e9576b32042ef7253453"
+ "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/d7eb6daf8cd7e9ac4976e9576b32042ef7253453",
- "reference": "d7eb6daf8cd7e9ac4976e9576b32042ef7253453",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7",
+ "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7",
"shasum": ""
},
"require": {
@@ -9635,7 +9487,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/finder/tree/v6.4.11"
+ "source": "https://github.com/symfony/finder/tree/v6.4.17"
},
"funding": [
{
@@ -9651,26 +9503,29 @@
"type": "tidelift"
}
],
- "time": "2024-08-13T14:27:37+00:00"
+ "time": "2024-12-29T13:51:37+00:00"
},
{
"name": "symfony/flex",
- "version": "v2.4.6",
+ "version": "v2.5.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/flex.git",
- "reference": "4dc11919791f81d087a12db2ab4c7e044431ef6b"
+ "reference": "62d5c38c7af6280d8605b725364680838b475641"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/flex/zipball/4dc11919791f81d087a12db2ab4c7e044431ef6b",
- "reference": "4dc11919791f81d087a12db2ab4c7e044431ef6b",
+ "url": "https://api.github.com/repos/symfony/flex/zipball/62d5c38c7af6280d8605b725364680838b475641",
+ "reference": "62d5c38c7af6280d8605b725364680838b475641",
"shasum": ""
},
"require": {
"composer-plugin-api": "^2.1",
"php": ">=8.0"
},
+ "conflict": {
+ "composer/semver": "<1.7.2"
+ },
"require-dev": {
"composer/composer": "^2.1",
"symfony/dotenv": "^5.4|^6.0",
@@ -9700,7 +9555,7 @@
"description": "Composer plugin for Symfony",
"support": {
"issues": "https://github.com/symfony/flex/issues",
- "source": "https://github.com/symfony/flex/tree/v2.4.6"
+ "source": "https://github.com/symfony/flex/tree/v2.5.1"
},
"funding": [
{
@@ -9716,20 +9571,20 @@
"type": "tidelift"
}
],
- "time": "2024-04-27T10:22:22+00:00"
+ "time": "2025-05-10T14:05:03+00:00"
},
{
"name": "symfony/form",
- "version": "v6.4.11",
+ "version": "v6.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/form.git",
- "reference": "330d337558ecd77c664ae71e99fbc8dbc4032246"
+ "reference": "44a0e253c16a3187299f07b8f80e23ecb000d360"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/form/zipball/330d337558ecd77c664ae71e99fbc8dbc4032246",
- "reference": "330d337558ecd77c664ae71e99fbc8dbc4032246",
+ "url": "https://api.github.com/repos/symfony/form/zipball/44a0e253c16a3187299f07b8f80e23ecb000d360",
+ "reference": "44a0e253c16a3187299f07b8f80e23ecb000d360",
"shasum": ""
},
"require": {
@@ -9797,7 +9652,7 @@
"description": "Allows to easily create, process and reuse HTML forms",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/form/tree/v6.4.11"
+ "source": "https://github.com/symfony/form/tree/v6.4.21"
},
"funding": [
{
@@ -9813,20 +9668,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-12T09:55:28+00:00"
+ "time": "2025-04-27T15:22:02+00:00"
},
{
"name": "symfony/framework-bundle",
- "version": "v6.4.10",
+ "version": "v6.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/framework-bundle.git",
- "reference": "6cbdb0cc3ddbb63499262cd3036882b08ee2690b"
+ "reference": "d0b06133b00e4dd3df7f47a3188fb7baabcc6b2a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/6cbdb0cc3ddbb63499262cd3036882b08ee2690b",
- "reference": "6cbdb0cc3ddbb63499262cd3036882b08ee2690b",
+ "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/d0b06133b00e4dd3df7f47a3188fb7baabcc6b2a",
+ "reference": "d0b06133b00e4dd3df7f47a3188fb7baabcc6b2a",
"shasum": ""
},
"require": {
@@ -9835,7 +9690,7 @@
"php": ">=8.1",
"symfony/cache": "^5.4|^6.0|^7.0",
"symfony/config": "^6.1|^7.0",
- "symfony/dependency-injection": "^6.4|^7.0",
+ "symfony/dependency-injection": "^6.4.12|^7.0",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/error-handler": "^6.1|^7.0",
"symfony/event-dispatcher": "^5.4|^6.0|^7.0",
@@ -9865,6 +9720,7 @@
"symfony/mime": "<6.4",
"symfony/property-access": "<5.4",
"symfony/property-info": "<5.4",
+ "symfony/runtime": "<5.4.45|>=6.0,<6.4.13|>=7.0,<7.1.6",
"symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4",
"symfony/security-core": "<5.4",
"symfony/security-csrf": "<5.4",
@@ -9945,7 +9801,7 @@
"description": "Provides a tight integration between Symfony components and the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/framework-bundle/tree/v6.4.10"
+ "source": "https://github.com/symfony/framework-bundle/tree/v6.4.21"
},
"funding": [
{
@@ -9961,27 +9817,27 @@
"type": "tidelift"
}
],
- "time": "2024-07-26T13:24:20+00:00"
+ "time": "2025-04-27T13:27:38+00:00"
},
{
"name": "symfony/http-client",
- "version": "v6.4.11",
+ "version": "v6.4.19",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
- "reference": "4c92046bb788648ff1098cc66da69aa7eac8cb65"
+ "reference": "3294a433fc9d12ae58128174896b5b1822c28dad"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-client/zipball/4c92046bb788648ff1098cc66da69aa7eac8cb65",
- "reference": "4c92046bb788648ff1098cc66da69aa7eac8cb65",
+ "url": "https://api.github.com/repos/symfony/http-client/zipball/3294a433fc9d12ae58128174896b5b1822c28dad",
+ "reference": "3294a433fc9d12ae58128174896b5b1822c28dad",
"shasum": ""
},
"require": {
"php": ">=8.1",
"psr/log": "^1|^2|^3",
"symfony/deprecation-contracts": "^2.5|^3",
- "symfony/http-client-contracts": "^3.4.1",
+ "symfony/http-client-contracts": "~3.4.4|^3.5.2",
"symfony/service-contracts": "^2.5|^3"
},
"conflict": {
@@ -10038,7 +9894,7 @@
"http"
],
"support": {
- "source": "https://github.com/symfony/http-client/tree/v6.4.11"
+ "source": "https://github.com/symfony/http-client/tree/v6.4.19"
},
"funding": [
{
@@ -10054,20 +9910,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-26T06:30:21+00:00"
+ "time": "2025-02-13T09:55:13+00:00"
},
{
"name": "symfony/http-client-contracts",
- "version": "v3.5.0",
+ "version": "v3.5.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client-contracts.git",
- "reference": "20414d96f391677bf80078aa55baece78b82647d"
+ "reference": "ee8d807ab20fcb51267fdace50fbe3494c31e645"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/20414d96f391677bf80078aa55baece78b82647d",
- "reference": "20414d96f391677bf80078aa55baece78b82647d",
+ "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/ee8d807ab20fcb51267fdace50fbe3494c31e645",
+ "reference": "ee8d807ab20fcb51267fdace50fbe3494c31e645",
"shasum": ""
},
"require": {
@@ -10075,12 +9931,12 @@
},
"type": "library",
"extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
"branch-alias": {
"dev-main": "3.5-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
}
},
"autoload": {
@@ -10116,7 +9972,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/http-client-contracts/tree/v3.5.0"
+ "source": "https://github.com/symfony/http-client-contracts/tree/v3.5.2"
},
"funding": [
{
@@ -10132,20 +9988,20 @@
"type": "tidelift"
}
],
- "time": "2024-04-18T09:32:20+00:00"
+ "time": "2024-12-07T08:49:48+00:00"
},
{
"name": "symfony/http-foundation",
- "version": "v6.4.10",
+ "version": "v6.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "117f1f20a7ade7bcea28b861fb79160a21a1e37b"
+ "reference": "3f0c7ea41db479383b81d436b836d37168fd5b99"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/117f1f20a7ade7bcea28b861fb79160a21a1e37b",
- "reference": "117f1f20a7ade7bcea28b861fb79160a21a1e37b",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/3f0c7ea41db479383b81d436b836d37168fd5b99",
+ "reference": "3f0c7ea41db479383b81d436b836d37168fd5b99",
"shasum": ""
},
"require": {
@@ -10155,12 +10011,12 @@
"symfony/polyfill-php83": "^1.27"
},
"conflict": {
- "symfony/cache": "<6.3"
+ "symfony/cache": "<6.4.12|>=7.0,<7.1.5"
},
"require-dev": {
"doctrine/dbal": "^2.13.1|^3|^4",
"predis/predis": "^1.1|^2.0",
- "symfony/cache": "^6.3|^7.0",
+ "symfony/cache": "^6.4.12|^7.1.5",
"symfony/dependency-injection": "^5.4|^6.0|^7.0",
"symfony/expression-language": "^5.4|^6.0|^7.0",
"symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0",
@@ -10193,7 +10049,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-foundation/tree/v6.4.10"
+ "source": "https://github.com/symfony/http-foundation/tree/v6.4.21"
},
"funding": [
{
@@ -10209,20 +10065,20 @@
"type": "tidelift"
}
],
- "time": "2024-07-26T12:36:27+00:00"
+ "time": "2025-04-27T13:27:38+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v6.4.11",
+ "version": "v6.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "1ba6b89d781cb47448155cc70dd2e0f1b0584c79"
+ "reference": "983ca05eec6623920d24ec0f1005f487d3734a0c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/1ba6b89d781cb47448155cc70dd2e0f1b0584c79",
- "reference": "1ba6b89d781cb47448155cc70dd2e0f1b0584c79",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/983ca05eec6623920d24ec0f1005f487d3734a0c",
+ "reference": "983ca05eec6623920d24ec0f1005f487d3734a0c",
"shasum": ""
},
"require": {
@@ -10307,7 +10163,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-kernel/tree/v6.4.11"
+ "source": "https://github.com/symfony/http-kernel/tree/v6.4.21"
},
"funding": [
{
@@ -10323,20 +10179,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-30T16:57:20+00:00"
+ "time": "2025-05-02T08:46:38+00:00"
},
{
"name": "symfony/intl",
- "version": "v6.4.8",
+ "version": "v6.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/intl.git",
- "reference": "50265cdcf5a44bec3fcf487b5d0015aece91d1eb"
+ "reference": "b248d227fa10fd6345efd4c1c74efaa1c1de6f76"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/intl/zipball/50265cdcf5a44bec3fcf487b5d0015aece91d1eb",
- "reference": "50265cdcf5a44bec3fcf487b5d0015aece91d1eb",
+ "url": "https://api.github.com/repos/symfony/intl/zipball/b248d227fa10fd6345efd4c1c74efaa1c1de6f76",
+ "reference": "b248d227fa10fd6345efd4c1c74efaa1c1de6f76",
"shasum": ""
},
"require": {
@@ -10390,7 +10246,7 @@
"localization"
],
"support": {
- "source": "https://github.com/symfony/intl/tree/v6.4.8"
+ "source": "https://github.com/symfony/intl/tree/v6.4.21"
},
"funding": [
{
@@ -10406,20 +10262,20 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2025-04-07T19:02:30+00:00"
},
{
"name": "symfony/mailer",
- "version": "v6.4.9",
+ "version": "v6.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/mailer.git",
- "reference": "e2d56f180f5b8c5e7c0fbea872bb1f529b6d6d45"
+ "reference": "ada2809ccd4ec27aba9fc344e3efdaec624c6438"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mailer/zipball/e2d56f180f5b8c5e7c0fbea872bb1f529b6d6d45",
- "reference": "e2d56f180f5b8c5e7c0fbea872bb1f529b6d6d45",
+ "url": "https://api.github.com/repos/symfony/mailer/zipball/ada2809ccd4ec27aba9fc344e3efdaec624c6438",
+ "reference": "ada2809ccd4ec27aba9fc344e3efdaec624c6438",
"shasum": ""
},
"require": {
@@ -10470,7 +10326,7 @@
"description": "Helps sending emails",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/mailer/tree/v6.4.9"
+ "source": "https://github.com/symfony/mailer/tree/v6.4.21"
},
"funding": [
{
@@ -10486,20 +10342,20 @@
"type": "tidelift"
}
],
- "time": "2024-06-28T07:59:05+00:00"
+ "time": "2025-04-26T23:47:35+00:00"
},
{
"name": "symfony/mime",
- "version": "v6.4.11",
+ "version": "v6.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
- "reference": "dba5d5f6073baf7a3576b580cc4a208b4ca00553"
+ "reference": "fec8aa5231f3904754955fad33c2db50594d22d1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mime/zipball/dba5d5f6073baf7a3576b580cc4a208b4ca00553",
- "reference": "dba5d5f6073baf7a3576b580cc4a208b4ca00553",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/fec8aa5231f3904754955fad33c2db50594d22d1",
+ "reference": "fec8aa5231f3904754955fad33c2db50594d22d1",
"shasum": ""
},
"require": {
@@ -10555,7 +10411,7 @@
"mime-type"
],
"support": {
- "source": "https://github.com/symfony/mime/tree/v6.4.11"
+ "source": "https://github.com/symfony/mime/tree/v6.4.21"
},
"funding": [
{
@@ -10571,20 +10427,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-13T12:15:02+00:00"
+ "time": "2025-04-27T13:27:38+00:00"
},
{
"name": "symfony/monolog-bridge",
- "version": "v6.4.8",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/monolog-bridge.git",
- "reference": "0fbee64913b1c595e7650a1919ba3edba8d49ea7"
+ "reference": "9d14621e59f22c2b6d030d92d37ffe5ae1e60452"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/0fbee64913b1c595e7650a1919ba3edba8d49ea7",
- "reference": "0fbee64913b1c595e7650a1919ba3edba8d49ea7",
+ "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/9d14621e59f22c2b6d030d92d37ffe5ae1e60452",
+ "reference": "9d14621e59f22c2b6d030d92d37ffe5ae1e60452",
"shasum": ""
},
"require": {
@@ -10634,7 +10490,7 @@
"description": "Provides integration for Monolog with various Symfony components",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/monolog-bridge/tree/v6.4.8"
+ "source": "https://github.com/symfony/monolog-bridge/tree/v6.4.13"
},
"funding": [
{
@@ -10650,7 +10506,7 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-10-14T08:49:08+00:00"
},
{
"name": "symfony/monolog-bundle",
@@ -10735,16 +10591,16 @@
},
{
"name": "symfony/options-resolver",
- "version": "v6.4.8",
+ "version": "v6.4.16",
"source": {
"type": "git",
"url": "https://github.com/symfony/options-resolver.git",
- "reference": "22ab9e9101ab18de37839074f8a1197f55590c1b"
+ "reference": "368128ad168f20e22c32159b9f761e456cec0c78"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/options-resolver/zipball/22ab9e9101ab18de37839074f8a1197f55590c1b",
- "reference": "22ab9e9101ab18de37839074f8a1197f55590c1b",
+ "url": "https://api.github.com/repos/symfony/options-resolver/zipball/368128ad168f20e22c32159b9f761e456cec0c78",
+ "reference": "368128ad168f20e22c32159b9f761e456cec0c78",
"shasum": ""
},
"require": {
@@ -10782,7 +10638,7 @@
"options"
],
"support": {
- "source": "https://github.com/symfony/options-resolver/tree/v6.4.8"
+ "source": "https://github.com/symfony/options-resolver/tree/v6.4.16"
},
"funding": [
{
@@ -10798,20 +10654,20 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-11-20T10:57:02+00:00"
},
{
"name": "symfony/password-hasher",
- "version": "v6.4.8",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/password-hasher.git",
- "reference": "90ebbe946e5d64a5fad9ac9427e335045cf2bd31"
+ "reference": "e97a1b31f60b8bdfc1fdedab4398538da9441d47"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/password-hasher/zipball/90ebbe946e5d64a5fad9ac9427e335045cf2bd31",
- "reference": "90ebbe946e5d64a5fad9ac9427e335045cf2bd31",
+ "url": "https://api.github.com/repos/symfony/password-hasher/zipball/e97a1b31f60b8bdfc1fdedab4398538da9441d47",
+ "reference": "e97a1b31f60b8bdfc1fdedab4398538da9441d47",
"shasum": ""
},
"require": {
@@ -10854,7 +10710,7 @@
"password"
],
"support": {
- "source": "https://github.com/symfony/password-hasher/tree/v6.4.8"
+ "source": "https://github.com/symfony/password-hasher/tree/v6.4.13"
},
"funding": [
{
@@ -10870,11 +10726,11 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-09-25T14:18:03+00:00"
},
{
"name": "symfony/polyfill-ctype",
- "version": "v1.31.0",
+ "version": "v1.32.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
@@ -10898,8 +10754,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -10933,7 +10789,7 @@
"portable"
],
"support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0"
},
"funding": [
{
@@ -10953,7 +10809,7 @@
},
{
"name": "symfony/polyfill-intl-grapheme",
- "version": "v1.31.0",
+ "version": "v1.32.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
@@ -10974,8 +10830,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -11011,7 +10867,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0"
},
"funding": [
{
@@ -11031,16 +10887,16 @@
},
{
"name": "symfony/polyfill-intl-icu",
- "version": "v1.31.0",
+ "version": "v1.32.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-icu.git",
- "reference": "d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78"
+ "reference": "763d2a91fea5681509ca01acbc1c5e450d127811"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78",
- "reference": "d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/763d2a91fea5681509ca01acbc1c5e450d127811",
+ "reference": "763d2a91fea5681509ca01acbc1c5e450d127811",
"shasum": ""
},
"require": {
@@ -11052,8 +10908,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -11095,7 +10951,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.32.0"
},
"funding": [
{
@@ -11111,20 +10967,20 @@
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2024-12-21T18:38:29+00:00"
},
{
"name": "symfony/polyfill-intl-idn",
- "version": "v1.31.0",
+ "version": "v1.32.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
- "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773"
+ "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773",
- "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3",
+ "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3",
"shasum": ""
},
"require": {
@@ -11137,8 +10993,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -11178,7 +11034,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.32.0"
},
"funding": [
{
@@ -11194,11 +11050,11 @@
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2024-09-10T14:38:51+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
- "version": "v1.31.0",
+ "version": "v1.32.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
@@ -11219,8 +11075,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -11259,7 +11115,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0"
},
"funding": [
{
@@ -11279,19 +11135,20 @@
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.31.0",
+ "version": "v1.32.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341"
+ "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341",
- "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493",
+ "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493",
"shasum": ""
},
"require": {
+ "ext-iconv": "*",
"php": ">=7.2"
},
"provide": {
@@ -11303,8 +11160,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -11339,7 +11196,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0"
},
"funding": [
{
@@ -11355,167 +11212,11 @@
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
- },
- {
- "name": "symfony/polyfill-php80",
- "version": "v1.31.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
- "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Php80\\": ""
- },
- "classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Ion Bazan",
- "email": "ion.bazan@gmail.com"
- },
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-09T11:45:10+00:00"
- },
- {
- "name": "symfony/polyfill-php81",
- "version": "v1.31.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php81.git",
- "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
- "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Php81\\": ""
- },
- "classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2024-12-23T08:48:59+00:00"
},
{
"name": "symfony/polyfill-php82",
- "version": "v1.31.0",
+ "version": "v1.32.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php82.git",
@@ -11533,8 +11234,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -11571,7 +11272,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php82/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-php82/tree/v1.32.0"
},
"funding": [
{
@@ -11591,7 +11292,7 @@
},
{
"name": "symfony/polyfill-php83",
- "version": "v1.31.0",
+ "version": "v1.32.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php83.git",
@@ -11609,8 +11310,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -11647,7 +11348,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-php83/tree/v1.32.0"
},
"funding": [
{
@@ -11665,9 +11366,85 @@
],
"time": "2024-09-09T11:45:10+00:00"
},
+ {
+ "name": "symfony/polyfill-php84",
+ "version": "v1.32.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php84.git",
+ "reference": "000df7860439609837bbe28670b0be15783b7fbf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/000df7860439609837bbe28670b0be15783b7fbf",
+ "reference": "000df7860439609837bbe28670b0be15783b7fbf",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php84\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php84/tree/v1.32.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-02-20T12:04:08+00:00"
+ },
{
"name": "symfony/polyfill-uuid",
- "version": "v1.31.0",
+ "version": "v1.32.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-uuid.git",
@@ -11691,8 +11468,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -11726,7 +11503,7 @@
"uuid"
],
"support": {
- "source": "https://github.com/symfony/polyfill-uuid/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-uuid/tree/v1.32.0"
},
"funding": [
{
@@ -11746,16 +11523,16 @@
},
{
"name": "symfony/process",
- "version": "v6.4.8",
+ "version": "v6.4.20",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5"
+ "reference": "e2a61c16af36c9a07e5c9906498b73e091949a20"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/8d92dd79149f29e89ee0f480254db595f6a6a2c5",
- "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5",
+ "url": "https://api.github.com/repos/symfony/process/zipball/e2a61c16af36c9a07e5c9906498b73e091949a20",
+ "reference": "e2a61c16af36c9a07e5c9906498b73e091949a20",
"shasum": ""
},
"require": {
@@ -11787,7 +11564,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v6.4.8"
+ "source": "https://github.com/symfony/process/tree/v6.4.20"
},
"funding": [
{
@@ -11803,20 +11580,20 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2025-03-10T17:11:00+00:00"
},
{
"name": "symfony/property-access",
- "version": "v6.4.11",
+ "version": "v6.4.18",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-access.git",
- "reference": "866f6cd84f2094cbc6f66ce9752faf749916e2a9"
+ "reference": "80e0378f2f058b60d87dedc3c760caec882e992c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/property-access/zipball/866f6cd84f2094cbc6f66ce9752faf749916e2a9",
- "reference": "866f6cd84f2094cbc6f66ce9752faf749916e2a9",
+ "url": "https://api.github.com/repos/symfony/property-access/zipball/80e0378f2f058b60d87dedc3c760caec882e992c",
+ "reference": "80e0378f2f058b60d87dedc3c760caec882e992c",
"shasum": ""
},
"require": {
@@ -11864,7 +11641,7 @@
"reflection"
],
"support": {
- "source": "https://github.com/symfony/property-access/tree/v6.4.11"
+ "source": "https://github.com/symfony/property-access/tree/v6.4.18"
},
"funding": [
{
@@ -11880,20 +11657,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-30T16:10:11+00:00"
+ "time": "2024-12-16T14:42:05+00:00"
},
{
"name": "symfony/property-info",
- "version": "v6.4.10",
+ "version": "v6.4.18",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-info.git",
- "reference": "edaea9dcc723cb4a0ab6a00f7d6f8c07c0d8ff77"
+ "reference": "94d18e5cc11a37fd92856d38b61d9cdf72536a1e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/property-info/zipball/edaea9dcc723cb4a0ab6a00f7d6f8c07c0d8ff77",
- "reference": "edaea9dcc723cb4a0ab6a00f7d6f8c07c0d8ff77",
+ "url": "https://api.github.com/repos/symfony/property-info/zipball/94d18e5cc11a37fd92856d38b61d9cdf72536a1e",
+ "reference": "94d18e5cc11a37fd92856d38b61d9cdf72536a1e",
"shasum": ""
},
"require": {
@@ -11901,17 +11678,20 @@
"symfony/string": "^5.4|^6.0|^7.0"
},
"conflict": {
+ "doctrine/annotations": "<1.12",
"phpdocumentor/reflection-docblock": "<5.2",
"phpdocumentor/type-resolver": "<1.5.1",
- "symfony/dependency-injection": "<5.4",
- "symfony/serializer": "<6.4"
+ "symfony/cache": "<5.4",
+ "symfony/dependency-injection": "<5.4|>=6.0,<6.4",
+ "symfony/serializer": "<5.4"
},
"require-dev": {
+ "doctrine/annotations": "^1.12|^2",
"phpdocumentor/reflection-docblock": "^5.2",
- "phpstan/phpdoc-parser": "^1.0",
+ "phpstan/phpdoc-parser": "^1.0|^2.0",
"symfony/cache": "^5.4|^6.0|^7.0",
"symfony/dependency-injection": "^5.4|^6.0|^7.0",
- "symfony/serializer": "^6.4|^7.0"
+ "symfony/serializer": "^5.4|^6.4|^7.0"
},
"type": "library",
"autoload": {
@@ -11947,7 +11727,7 @@
"validator"
],
"support": {
- "source": "https://github.com/symfony/property-info/tree/v6.4.10"
+ "source": "https://github.com/symfony/property-info/tree/v6.4.18"
},
"funding": [
{
@@ -11963,87 +11743,20 @@
"type": "tidelift"
}
],
- "time": "2024-07-26T07:32:07+00:00"
- },
- {
- "name": "symfony/proxy-manager-bridge",
- "version": "v6.4.8",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/proxy-manager-bridge.git",
- "reference": "b8119e0b248ef0711c25cd09acc729102122621c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/b8119e0b248ef0711c25cd09acc729102122621c",
- "reference": "b8119e0b248ef0711c25cd09acc729102122621c",
- "shasum": ""
- },
- "require": {
- "friendsofphp/proxy-manager-lts": "^1.0.2",
- "php": ">=8.1",
- "symfony/dependency-injection": "^6.3|^7.0",
- "symfony/deprecation-contracts": "^2.5|^3"
- },
- "require-dev": {
- "symfony/config": "^6.1|^7.0"
- },
- "type": "symfony-bridge",
- "autoload": {
- "psr-4": {
- "Symfony\\Bridge\\ProxyManager\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides integration for ProxyManager with various Symfony components",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/proxy-manager-bridge/tree/v6.4.8"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2025-01-21T10:52:27+00:00"
},
{
"name": "symfony/psr-http-message-bridge",
- "version": "v6.4.11",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/psr-http-message-bridge.git",
- "reference": "74835ba54eca99a38f374f7a6d932fa510124773"
+ "reference": "c9cf83326a1074f83a738fc5320945abf7fb7fec"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/74835ba54eca99a38f374f7a6d932fa510124773",
- "reference": "74835ba54eca99a38f374f7a6d932fa510124773",
+ "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/c9cf83326a1074f83a738fc5320945abf7fb7fec",
+ "reference": "c9cf83326a1074f83a738fc5320945abf7fb7fec",
"shasum": ""
},
"require": {
@@ -12097,7 +11810,7 @@
"psr-7"
],
"support": {
- "source": "https://github.com/symfony/psr-http-message-bridge/tree/v6.4.11"
+ "source": "https://github.com/symfony/psr-http-message-bridge/tree/v6.4.13"
},
"funding": [
{
@@ -12113,20 +11826,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-14T13:55:58+00:00"
+ "time": "2024-09-25T14:18:03+00:00"
},
{
"name": "symfony/rate-limiter",
- "version": "v6.4.8",
+ "version": "v6.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/rate-limiter.git",
- "reference": "d96117211cf6740080827ee8c9eaf7e370243b50"
+ "reference": "e250d82fc17b277b97cbce94efef5414aff29bf9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/rate-limiter/zipball/d96117211cf6740080827ee8c9eaf7e370243b50",
- "reference": "d96117211cf6740080827ee8c9eaf7e370243b50",
+ "url": "https://api.github.com/repos/symfony/rate-limiter/zipball/e250d82fc17b277b97cbce94efef5414aff29bf9",
+ "reference": "e250d82fc17b277b97cbce94efef5414aff29bf9",
"shasum": ""
},
"require": {
@@ -12168,7 +11881,7 @@
"rate-limiter"
],
"support": {
- "source": "https://github.com/symfony/rate-limiter/tree/v6.4.8"
+ "source": "https://github.com/symfony/rate-limiter/tree/v6.4.15"
},
"funding": [
{
@@ -12184,20 +11897,20 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-11-09T07:19:24+00:00"
},
{
"name": "symfony/routing",
- "version": "v6.4.11",
+ "version": "v6.4.18",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "8ee0c24c1bf61c263a26f1b9b6d19e83b1121f2a"
+ "reference": "e9bfc94953019089acdfb9be51c1b9142c4afa68"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/8ee0c24c1bf61c263a26f1b9b6d19e83b1121f2a",
- "reference": "8ee0c24c1bf61c263a26f1b9b6d19e83b1121f2a",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/e9bfc94953019089acdfb9be51c1b9142c4afa68",
+ "reference": "e9bfc94953019089acdfb9be51c1b9142c4afa68",
"shasum": ""
},
"require": {
@@ -12251,7 +11964,7 @@
"url"
],
"support": {
- "source": "https://github.com/symfony/routing/tree/v6.4.11"
+ "source": "https://github.com/symfony/routing/tree/v6.4.18"
},
"funding": [
{
@@ -12267,20 +11980,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-29T08:15:38+00:00"
+ "time": "2025-01-09T08:51:02+00:00"
},
{
"name": "symfony/runtime",
- "version": "v6.4.8",
+ "version": "v6.4.14",
"source": {
"type": "git",
"url": "https://github.com/symfony/runtime.git",
- "reference": "b4bfa2fd4cad1fee62f80b3dfe4eb674cc3302a0"
+ "reference": "4facd4174f45cd37c65860403412b67c7381136a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/runtime/zipball/b4bfa2fd4cad1fee62f80b3dfe4eb674cc3302a0",
- "reference": "b4bfa2fd4cad1fee62f80b3dfe4eb674cc3302a0",
+ "url": "https://api.github.com/repos/symfony/runtime/zipball/4facd4174f45cd37c65860403412b67c7381136a",
+ "reference": "4facd4174f45cd37c65860403412b67c7381136a",
"shasum": ""
},
"require": {
@@ -12330,7 +12043,7 @@
"runtime"
],
"support": {
- "source": "https://github.com/symfony/runtime/tree/v6.4.8"
+ "source": "https://github.com/symfony/runtime/tree/v6.4.14"
},
"funding": [
{
@@ -12346,20 +12059,20 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-11-05T16:39:55+00:00"
},
{
"name": "symfony/security-bundle",
- "version": "v6.4.11",
+ "version": "v6.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-bundle.git",
- "reference": "620be16fceded671823ce6332d06f44bb327096d"
+ "reference": "99b656ff6046ef217d4e3f852940de7e22489849"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/security-bundle/zipball/620be16fceded671823ce6332d06f44bb327096d",
- "reference": "620be16fceded671823ce6332d06f44bb327096d",
+ "url": "https://api.github.com/repos/symfony/security-bundle/zipball/99b656ff6046ef217d4e3f852940de7e22489849",
+ "reference": "99b656ff6046ef217d4e3f852940de7e22489849",
"shasum": ""
},
"require": {
@@ -12442,7 +12155,7 @@
"description": "Provides a tight integration of the Security component into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/security-bundle/tree/v6.4.11"
+ "source": "https://github.com/symfony/security-bundle/tree/v6.4.21"
},
"funding": [
{
@@ -12458,20 +12171,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-20T11:22:16+00:00"
+ "time": "2025-04-27T13:27:38+00:00"
},
{
"name": "symfony/security-core",
- "version": "v6.4.11",
+ "version": "v6.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-core.git",
- "reference": "a8e106dc62e2b778093b29800187edbe62bbaa4e"
+ "reference": "c6e70da38436a9a49ed39d9cbead1ecf760f0fbd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/security-core/zipball/a8e106dc62e2b778093b29800187edbe62bbaa4e",
- "reference": "a8e106dc62e2b778093b29800187edbe62bbaa4e",
+ "url": "https://api.github.com/repos/symfony/security-core/zipball/c6e70da38436a9a49ed39d9cbead1ecf760f0fbd",
+ "reference": "c6e70da38436a9a49ed39d9cbead1ecf760f0fbd",
"shasum": ""
},
"require": {
@@ -12528,7 +12241,7 @@
"description": "Symfony Security Component - Core Library",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/security-core/tree/v6.4.11"
+ "source": "https://github.com/symfony/security-core/tree/v6.4.21"
},
"funding": [
{
@@ -12544,20 +12257,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-29T08:15:38+00:00"
+ "time": "2025-04-17T07:43:34+00:00"
},
{
"name": "symfony/security-csrf",
- "version": "v6.4.8",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-csrf.git",
- "reference": "f46ab02b76311087873257071559edcaf6d7ab99"
+ "reference": "c34421b7d34efbaef5d611ab2e646a0ec464ffe3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/security-csrf/zipball/f46ab02b76311087873257071559edcaf6d7ab99",
- "reference": "f46ab02b76311087873257071559edcaf6d7ab99",
+ "url": "https://api.github.com/repos/symfony/security-csrf/zipball/c34421b7d34efbaef5d611ab2e646a0ec464ffe3",
+ "reference": "c34421b7d34efbaef5d611ab2e646a0ec464ffe3",
"shasum": ""
},
"require": {
@@ -12596,7 +12309,7 @@
"description": "Symfony Security Component - CSRF Library",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/security-csrf/tree/v6.4.8"
+ "source": "https://github.com/symfony/security-csrf/tree/v6.4.13"
},
"funding": [
{
@@ -12612,20 +12325,20 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-09-25T14:18:03+00:00"
},
{
"name": "symfony/security-http",
- "version": "v6.4.11",
+ "version": "v6.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-http.git",
- "reference": "f502530fd13b2d6dac62446e10ad86c95d63e044"
+ "reference": "67d0edaf6702c3192f27ad483df9a875c9a1f1a2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/security-http/zipball/f502530fd13b2d6dac62446e10ad86c95d63e044",
- "reference": "f502530fd13b2d6dac62446e10ad86c95d63e044",
+ "url": "https://api.github.com/repos/symfony/security-http/zipball/67d0edaf6702c3192f27ad483df9a875c9a1f1a2",
+ "reference": "67d0edaf6702c3192f27ad483df9a875c9a1f1a2",
"shasum": ""
},
"require": {
@@ -12684,7 +12397,7 @@
"description": "Symfony Security Component - HTTP Integration",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/security-http/tree/v6.4.11"
+ "source": "https://github.com/symfony/security-http/tree/v6.4.21"
},
"funding": [
{
@@ -12700,20 +12413,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-15T22:52:23+00:00"
+ "time": "2025-04-27T13:58:34+00:00"
},
{
"name": "symfony/serializer",
- "version": "v6.4.11",
+ "version": "v6.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/serializer.git",
- "reference": "a75d03d7720417f8a654e73e8f02acdea8779cd0"
+ "reference": "c45f8f7763afb11e85772c0c1debb8f272c17f51"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/serializer/zipball/a75d03d7720417f8a654e73e8f02acdea8779cd0",
- "reference": "a75d03d7720417f8a654e73e8f02acdea8779cd0",
+ "url": "https://api.github.com/repos/symfony/serializer/zipball/c45f8f7763afb11e85772c0c1debb8f272c17f51",
+ "reference": "c45f8f7763afb11e85772c0c1debb8f272c17f51",
"shasum": ""
},
"require": {
@@ -12782,7 +12495,7 @@
"description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/serializer/tree/v6.4.11"
+ "source": "https://github.com/symfony/serializer/tree/v6.4.21"
},
"funding": [
{
@@ -12798,20 +12511,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-17T07:51:47+00:00"
+ "time": "2025-04-27T13:27:38+00:00"
},
{
"name": "symfony/service-contracts",
- "version": "v3.5.0",
+ "version": "v3.5.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
- "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f"
+ "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f",
- "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0",
+ "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0",
"shasum": ""
},
"require": {
@@ -12824,12 +12537,12 @@
},
"type": "library",
"extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
"branch-alias": {
"dev-main": "3.5-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
}
},
"autoload": {
@@ -12865,7 +12578,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v3.5.0"
+ "source": "https://github.com/symfony/service-contracts/tree/v3.5.1"
},
"funding": [
{
@@ -12881,20 +12594,20 @@
"type": "tidelift"
}
],
- "time": "2024-04-18T09:32:20+00:00"
+ "time": "2024-09-25T14:20:29+00:00"
},
{
"name": "symfony/stimulus-bundle",
- "version": "v2.19.0",
+ "version": "v2.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/stimulus-bundle.git",
- "reference": "5e2e1aff3e7cff2875e2f901437543fda9ca9910"
+ "reference": "e09840304467cda3324cc116c7f4ee23c8ff227c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/5e2e1aff3e7cff2875e2f901437543fda9ca9910",
- "reference": "5e2e1aff3e7cff2875e2f901437543fda9ca9910",
+ "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/e09840304467cda3324cc116c7f4ee23c8ff227c",
+ "reference": "e09840304467cda3324cc116c7f4ee23c8ff227c",
"shasum": ""
},
"require": {
@@ -12934,7 +12647,7 @@
"symfony-ux"
],
"support": {
- "source": "https://github.com/symfony/stimulus-bundle/tree/v2.19.0"
+ "source": "https://github.com/symfony/stimulus-bundle/tree/v2.24.0"
},
"funding": [
{
@@ -12950,20 +12663,20 @@
"type": "tidelift"
}
],
- "time": "2024-07-30T19:26:23+00:00"
+ "time": "2025-03-09T21:10:04+00:00"
},
{
"name": "symfony/stopwatch",
- "version": "v6.4.8",
+ "version": "v6.4.19",
"source": {
"type": "git",
"url": "https://github.com/symfony/stopwatch.git",
- "reference": "63e069eb616049632cde9674c46957819454b8aa"
+ "reference": "dfe1481c12c06266d0c3d58c0cb4b09bd497ab9c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/stopwatch/zipball/63e069eb616049632cde9674c46957819454b8aa",
- "reference": "63e069eb616049632cde9674c46957819454b8aa",
+ "url": "https://api.github.com/repos/symfony/stopwatch/zipball/dfe1481c12c06266d0c3d58c0cb4b09bd497ab9c",
+ "reference": "dfe1481c12c06266d0c3d58c0cb4b09bd497ab9c",
"shasum": ""
},
"require": {
@@ -12996,7 +12709,7 @@
"description": "Provides a way to profile code",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/stopwatch/tree/v6.4.8"
+ "source": "https://github.com/symfony/stopwatch/tree/v6.4.19"
},
"funding": [
{
@@ -13012,20 +12725,20 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2025-02-21T10:06:30+00:00"
},
{
"name": "symfony/string",
- "version": "v6.4.11",
+ "version": "v6.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "5bc3eb632cf9c8dbfd6529d89be9950d1518883b"
+ "reference": "73e2c6966a5aef1d4892873ed5322245295370c6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/5bc3eb632cf9c8dbfd6529d89be9950d1518883b",
- "reference": "5bc3eb632cf9c8dbfd6529d89be9950d1518883b",
+ "url": "https://api.github.com/repos/symfony/string/zipball/73e2c6966a5aef1d4892873ed5322245295370c6",
+ "reference": "73e2c6966a5aef1d4892873ed5322245295370c6",
"shasum": ""
},
"require": {
@@ -13082,7 +12795,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v6.4.11"
+ "source": "https://github.com/symfony/string/tree/v6.4.21"
},
"funding": [
{
@@ -13098,20 +12811,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-12T09:55:28+00:00"
+ "time": "2025-04-18T15:23:29+00:00"
},
{
"name": "symfony/translation",
- "version": "v6.4.10",
+ "version": "v6.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "94041203f8ac200ae9e7c6a18fa6137814ccecc9"
+ "reference": "bb92ea5588396b319ba43283a5a3087a034cb29c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/94041203f8ac200ae9e7c6a18fa6137814ccecc9",
- "reference": "94041203f8ac200ae9e7c6a18fa6137814ccecc9",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/bb92ea5588396b319ba43283a5a3087a034cb29c",
+ "reference": "bb92ea5588396b319ba43283a5a3087a034cb29c",
"shasum": ""
},
"require": {
@@ -13177,7 +12890,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/translation/tree/v6.4.10"
+ "source": "https://github.com/symfony/translation/tree/v6.4.21"
},
"funding": [
{
@@ -13193,20 +12906,20 @@
"type": "tidelift"
}
],
- "time": "2024-07-26T12:30:32+00:00"
+ "time": "2025-04-07T19:02:30+00:00"
},
{
"name": "symfony/translation-contracts",
- "version": "v3.5.0",
+ "version": "v3.5.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation-contracts.git",
- "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a"
+ "reference": "4667ff3bd513750603a09c8dedbea942487fb07c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a",
- "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a",
+ "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c",
+ "reference": "4667ff3bd513750603a09c8dedbea942487fb07c",
"shasum": ""
},
"require": {
@@ -13214,12 +12927,12 @@
},
"type": "library",
"extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
"branch-alias": {
"dev-main": "3.5-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
}
},
"autoload": {
@@ -13255,7 +12968,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0"
+ "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1"
},
"funding": [
{
@@ -13271,20 +12984,20 @@
"type": "tidelift"
}
],
- "time": "2024-04-18T09:32:20+00:00"
+ "time": "2024-09-25T14:20:29+00:00"
},
{
"name": "symfony/twig-bridge",
- "version": "v6.4.11",
+ "version": "v6.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bridge.git",
- "reference": "2cf03a4012631b74d68f9e6c3e03798ac592cbe5"
+ "reference": "0457b7944bf1cc9c846c98d4923b5379ec6afc09"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/2cf03a4012631b74d68f9e6c3e03798ac592cbe5",
- "reference": "2cf03a4012631b74d68f9e6c3e03798ac592cbe5",
+ "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/0457b7944bf1cc9c846c98d4923b5379ec6afc09",
+ "reference": "0457b7944bf1cc9c846c98d4923b5379ec6afc09",
"shasum": ""
},
"require": {
@@ -13315,7 +13028,7 @@
"symfony/dependency-injection": "^5.4|^6.0|^7.0",
"symfony/expression-language": "^5.4|^6.0|^7.0",
"symfony/finder": "^5.4|^6.0|^7.0",
- "symfony/form": "^6.4|^7.0",
+ "symfony/form": "^6.4.20|^7.2.5",
"symfony/html-sanitizer": "^6.1|^7.0",
"symfony/http-foundation": "^5.4|^6.0|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
@@ -13364,7 +13077,7 @@
"description": "Provides integration for Twig with various Symfony components",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/twig-bridge/tree/v6.4.11"
+ "source": "https://github.com/symfony/twig-bridge/tree/v6.4.21"
},
"funding": [
{
@@ -13380,20 +13093,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-29T08:15:38+00:00"
+ "time": "2025-04-27T13:27:38+00:00"
},
{
"name": "symfony/twig-bundle",
- "version": "v6.4.8",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bundle.git",
- "reference": "ef17bc8fc2cb2376b235cd1b98f0275a78c5ba65"
+ "reference": "c3beeb5336aba1ea03c37e526968c2fde3ef25c4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/ef17bc8fc2cb2376b235cd1b98f0275a78c5ba65",
- "reference": "ef17bc8fc2cb2376b235cd1b98f0275a78c5ba65",
+ "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/c3beeb5336aba1ea03c37e526968c2fde3ef25c4",
+ "reference": "c3beeb5336aba1ea03c37e526968c2fde3ef25c4",
"shasum": ""
},
"require": {
@@ -13448,7 +13161,7 @@
"description": "Provides a tight integration of Twig into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/twig-bundle/tree/v6.4.8"
+ "source": "https://github.com/symfony/twig-bundle/tree/v6.4.13"
},
"funding": [
{
@@ -13464,20 +13177,20 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-09-25T14:18:03+00:00"
},
{
"name": "symfony/uid",
- "version": "v6.4.11",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/uid.git",
- "reference": "6a0394ad707de386547223948fac1e0f2805bc0b"
+ "reference": "18eb207f0436a993fffbdd811b5b8fa35fa5e007"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/uid/zipball/6a0394ad707de386547223948fac1e0f2805bc0b",
- "reference": "6a0394ad707de386547223948fac1e0f2805bc0b",
+ "url": "https://api.github.com/repos/symfony/uid/zipball/18eb207f0436a993fffbdd811b5b8fa35fa5e007",
+ "reference": "18eb207f0436a993fffbdd811b5b8fa35fa5e007",
"shasum": ""
},
"require": {
@@ -13522,7 +13235,7 @@
"uuid"
],
"support": {
- "source": "https://github.com/symfony/uid/tree/v6.4.11"
+ "source": "https://github.com/symfony/uid/tree/v6.4.13"
},
"funding": [
{
@@ -13538,20 +13251,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-12T09:55:28+00:00"
+ "time": "2024-09-25T14:18:03+00:00"
},
{
"name": "symfony/ux-translator",
- "version": "v2.19.3",
+ "version": "v2.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/ux-translator.git",
- "reference": "2c0027a4aeda6a9c58db7428862c778e106c12a1"
+ "reference": "a829b5c83ed676a8e848dce90dd6d42f12e90be6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/ux-translator/zipball/2c0027a4aeda6a9c58db7428862c778e106c12a1",
- "reference": "2c0027a4aeda6a9c58db7428862c778e106c12a1",
+ "url": "https://api.github.com/repos/symfony/ux-translator/zipball/a829b5c83ed676a8e848dce90dd6d42f12e90be6",
+ "reference": "a829b5c83ed676a8e848dce90dd6d42f12e90be6",
"shasum": ""
},
"require": {
@@ -13569,8 +13282,8 @@
"type": "symfony-bundle",
"extra": {
"thanks": {
- "name": "symfony/ux",
- "url": "https://github.com/symfony/ux"
+ "url": "https://github.com/symfony/ux",
+ "name": "symfony/ux"
}
},
"autoload": {
@@ -13598,7 +13311,7 @@
"symfony-ux"
],
"support": {
- "source": "https://github.com/symfony/ux-translator/tree/v2.19.3"
+ "source": "https://github.com/symfony/ux-translator/tree/v2.24.0"
},
"funding": [
{
@@ -13614,20 +13327,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-14T14:09:20+00:00"
+ "time": "2025-03-09T21:10:04+00:00"
},
{
"name": "symfony/ux-turbo",
- "version": "v2.19.3",
+ "version": "v2.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/ux-turbo.git",
- "reference": "4a38f267193017958d487171c0a86e64f36164a3"
+ "reference": "22954300bd0b01ca46f17c7890ea15138d9cf67f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/ux-turbo/zipball/4a38f267193017958d487171c0a86e64f36164a3",
- "reference": "4a38f267193017958d487171c0a86e64f36164a3",
+ "url": "https://api.github.com/repos/symfony/ux-turbo/zipball/22954300bd0b01ca46f17c7890ea15138d9cf67f",
+ "reference": "22954300bd0b01ca46f17c7890ea15138d9cf67f",
"shasum": ""
},
"require": {
@@ -13642,27 +13355,28 @@
"doctrine/doctrine-bundle": "^2.4.3",
"doctrine/orm": "^2.8 | 3.0",
"phpstan/phpstan": "^1.10",
+ "symfony/asset-mapper": "^6.4|^7.0",
"symfony/debug-bundle": "^5.4|^6.0|^7.0",
"symfony/expression-language": "^5.4|^6.0|^7.0",
"symfony/form": "^5.4|^6.0|^7.0",
- "symfony/framework-bundle": "^5.4|^6.0|^7.0",
+ "symfony/framework-bundle": "^6.4|^7.0",
"symfony/mercure-bundle": "^0.3.7",
"symfony/messenger": "^5.4|^6.0|^7.0",
- "symfony/panther": "^1.0|^2.0",
+ "symfony/panther": "^2.1",
"symfony/phpunit-bridge": "^5.4|^6.0|^7.0",
"symfony/process": "^5.4|6.3.*|^7.0",
"symfony/property-access": "^5.4|^6.0|^7.0",
"symfony/security-core": "^5.4|^6.0|^7.0",
"symfony/stopwatch": "^5.4|^6.0|^7.0",
- "symfony/twig-bundle": "^5.4|^6.0|^7.0",
- "symfony/web-profiler-bundle": "^5.4|^6.0|^7.0",
- "symfony/webpack-encore-bundle": "^2.1.1"
+ "symfony/twig-bundle": "^6.4|^7.0",
+ "symfony/ux-twig-component": "^2.21",
+ "symfony/web-profiler-bundle": "^5.4|^6.0|^7.0"
},
"type": "symfony-bundle",
"extra": {
"thanks": {
- "name": "symfony/ux",
- "url": "https://github.com/symfony/ux"
+ "url": "https://github.com/symfony/ux",
+ "name": "symfony/ux"
}
},
"autoload": {
@@ -13695,7 +13409,7 @@
"turbo-stream"
],
"support": {
- "source": "https://github.com/symfony/ux-turbo/tree/v2.19.3"
+ "source": "https://github.com/symfony/ux-turbo/tree/v2.24.0"
},
"funding": [
{
@@ -13711,20 +13425,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-14T04:55:38+00:00"
+ "time": "2025-04-04T17:29:20+00:00"
},
{
"name": "symfony/validator",
- "version": "v6.4.11",
+ "version": "v6.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/validator.git",
- "reference": "4ff41cf10af1de99ad92895411b55c9f309bc2d8"
+ "reference": "47610116f476595b90c368ff2a22514050712785"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/validator/zipball/4ff41cf10af1de99ad92895411b55c9f309bc2d8",
- "reference": "4ff41cf10af1de99ad92895411b55c9f309bc2d8",
+ "url": "https://api.github.com/repos/symfony/validator/zipball/47610116f476595b90c368ff2a22514050712785",
+ "reference": "47610116f476595b90c368ff2a22514050712785",
"shasum": ""
},
"require": {
@@ -13792,7 +13506,7 @@
"description": "Provides tools to validate values",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/validator/tree/v6.4.11"
+ "source": "https://github.com/symfony/validator/tree/v6.4.21"
},
"funding": [
{
@@ -13808,20 +13522,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-30T15:57:55+00:00"
+ "time": "2025-04-30T18:50:04+00:00"
},
{
"name": "symfony/var-dumper",
- "version": "v6.4.11",
+ "version": "v6.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "ee14c8254a480913268b1e3b1cba8045ed122694"
+ "reference": "22560f80c0c5cd58cc0bcaf73455ffd81eb380d5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ee14c8254a480913268b1e3b1cba8045ed122694",
- "reference": "ee14c8254a480913268b1e3b1cba8045ed122694",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/22560f80c0c5cd58cc0bcaf73455ffd81eb380d5",
+ "reference": "22560f80c0c5cd58cc0bcaf73455ffd81eb380d5",
"shasum": ""
},
"require": {
@@ -13877,7 +13591,7 @@
"dump"
],
"support": {
- "source": "https://github.com/symfony/var-dumper/tree/v6.4.11"
+ "source": "https://github.com/symfony/var-dumper/tree/v6.4.21"
},
"funding": [
{
@@ -13893,20 +13607,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-30T16:03:21+00:00"
+ "time": "2025-04-09T07:34:50+00:00"
},
{
"name": "symfony/var-exporter",
- "version": "v6.4.9",
+ "version": "v6.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-exporter.git",
- "reference": "f9a060622e0d93777b7f8687ec4860191e16802e"
+ "reference": "717e7544aa99752c54ecba5c0e17459c48317472"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-exporter/zipball/f9a060622e0d93777b7f8687ec4860191e16802e",
- "reference": "f9a060622e0d93777b7f8687ec4860191e16802e",
+ "url": "https://api.github.com/repos/symfony/var-exporter/zipball/717e7544aa99752c54ecba5c0e17459c48317472",
+ "reference": "717e7544aa99752c54ecba5c0e17459c48317472",
"shasum": ""
},
"require": {
@@ -13954,7 +13668,7 @@
"serialize"
],
"support": {
- "source": "https://github.com/symfony/var-exporter/tree/v6.4.9"
+ "source": "https://github.com/symfony/var-exporter/tree/v6.4.21"
},
"funding": [
{
@@ -13970,20 +13684,20 @@
"type": "tidelift"
}
],
- "time": "2024-06-24T15:53:56+00:00"
+ "time": "2025-04-27T21:06:26+00:00"
},
{
"name": "symfony/web-link",
- "version": "v6.4.8",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/web-link.git",
- "reference": "304c67cefe7128ea3957e9bb1ac6ce08a90a635b"
+ "reference": "4d188b64bb9a9c5e2e4d20c8d5fdce6bbbb32c94"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/web-link/zipball/304c67cefe7128ea3957e9bb1ac6ce08a90a635b",
- "reference": "304c67cefe7128ea3957e9bb1ac6ce08a90a635b",
+ "url": "https://api.github.com/repos/symfony/web-link/zipball/4d188b64bb9a9c5e2e4d20c8d5fdce6bbbb32c94",
+ "reference": "4d188b64bb9a9c5e2e4d20c8d5fdce6bbbb32c94",
"shasum": ""
},
"require": {
@@ -14037,7 +13751,7 @@
"push"
],
"support": {
- "source": "https://github.com/symfony/web-link/tree/v6.4.8"
+ "source": "https://github.com/symfony/web-link/tree/v6.4.13"
},
"funding": [
{
@@ -14053,20 +13767,20 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-09-25T14:18:03+00:00"
},
{
"name": "symfony/webpack-encore-bundle",
- "version": "v2.1.1",
+ "version": "v2.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/webpack-encore-bundle.git",
- "reference": "75cb918df3f65e28cf0d4bc03042bc45ccb19dd0"
+ "reference": "e335394b68a775a9b2bd173a8ba4fd2001f3870c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/75cb918df3f65e28cf0d4bc03042bc45ccb19dd0",
- "reference": "75cb918df3f65e28cf0d4bc03042bc45ccb19dd0",
+ "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/e335394b68a775a9b2bd173a8ba4fd2001f3870c",
+ "reference": "e335394b68a775a9b2bd173a8ba4fd2001f3870c",
"shasum": ""
},
"require": {
@@ -14079,6 +13793,7 @@
},
"require-dev": {
"symfony/framework-bundle": "^5.4 || ^6.2 || ^7.0",
+ "symfony/http-client": "^5.4 || ^6.2 || ^7.0",
"symfony/phpunit-bridge": "^5.4 || ^6.2 || ^7.0",
"symfony/twig-bundle": "^5.4 || ^6.2 || ^7.0",
"symfony/web-link": "^5.4 || ^6.2 || ^7.0"
@@ -14086,8 +13801,8 @@
"type": "symfony-bundle",
"extra": {
"thanks": {
- "name": "symfony/webpack-encore",
- "url": "https://github.com/symfony/webpack-encore"
+ "url": "https://github.com/symfony/webpack-encore",
+ "name": "symfony/webpack-encore"
}
},
"autoload": {
@@ -14105,10 +13820,10 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Integration with your Symfony app & Webpack Encore!",
+ "description": "Integration of your Symfony app with Webpack Encore",
"support": {
"issues": "https://github.com/symfony/webpack-encore-bundle/issues",
- "source": "https://github.com/symfony/webpack-encore-bundle/tree/v2.1.1"
+ "source": "https://github.com/symfony/webpack-encore-bundle/tree/v2.2.0"
},
"funding": [
{
@@ -14124,20 +13839,20 @@
"type": "tidelift"
}
],
- "time": "2023-10-22T18:53:08+00:00"
+ "time": "2024-10-02T07:27:19+00:00"
},
{
"name": "symfony/yaml",
- "version": "v6.4.11",
+ "version": "v6.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "be37e7f13195e05ab84ca5269365591edd240335"
+ "reference": "f01987f45676778b474468aa266fe2eda1f2bc7e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/be37e7f13195e05ab84ca5269365591edd240335",
- "reference": "be37e7f13195e05ab84ca5269365591edd240335",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/f01987f45676778b474468aa266fe2eda1f2bc7e",
+ "reference": "f01987f45676778b474468aa266fe2eda1f2bc7e",
"shasum": ""
},
"require": {
@@ -14180,7 +13895,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v6.4.11"
+ "source": "https://github.com/symfony/yaml/tree/v6.4.21"
},
"funding": [
{
@@ -14196,20 +13911,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-12T09:55:28+00:00"
+ "time": "2025-04-04T09:48:44+00:00"
},
{
"name": "tecnickcom/tc-lib-barcode",
- "version": "2.3.1",
+ "version": "2.4.6",
"source": {
"type": "git",
"url": "https://github.com/tecnickcom/tc-lib-barcode.git",
- "reference": "e1d394525ce0e0db5a7b01d01a4d7c238a7b8bb4"
+ "reference": "c6130222fdc02a2d7c90682b5c2ca24a059c16f4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/tecnickcom/tc-lib-barcode/zipball/e1d394525ce0e0db5a7b01d01a4d7c238a7b8bb4",
- "reference": "e1d394525ce0e0db5a7b01d01a4d7c238a7b8bb4",
+ "url": "https://api.github.com/repos/tecnickcom/tc-lib-barcode/zipball/c6130222fdc02a2d7c90682b5c2ca24a059c16f4",
+ "reference": "c6130222fdc02a2d7c90682b5c2ca24a059c16f4",
"shasum": ""
},
"require": {
@@ -14217,14 +13932,14 @@
"ext-date": "*",
"ext-gd": "*",
"ext-pcre": "*",
- "php": ">=8.0",
+ "php": ">=8.1",
"tecnickcom/tc-lib-color": "^2.2"
},
"require-dev": {
- "pdepend/pdepend": "2.13.0",
- "phpmd/phpmd": "2.13.0",
- "phpunit/phpunit": "10.1.2 || 9.6.13",
- "squizlabs/php_codesniffer": "3.7.2"
+ "pdepend/pdepend": "2.16.2",
+ "phpmd/phpmd": "2.15.0",
+ "phpunit/phpunit": "12.1.3 || 11.5.7 || 10.5.40",
+ "squizlabs/php_codesniffer": "3.12.2"
},
"type": "library",
"autoload": {
@@ -14288,39 +14003,39 @@
],
"support": {
"issues": "https://github.com/tecnickcom/tc-lib-barcode/issues",
- "source": "https://github.com/tecnickcom/tc-lib-barcode/tree/2.3.1"
+ "source": "https://github.com/tecnickcom/tc-lib-barcode/tree/2.4.6"
},
"funding": [
{
- "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_donations¤cy_code=GBP&business=paypal@tecnick.com&item_name=donation%20for%20tc-lib-barcode%20project",
+ "url": "https://www.paypal.com/donate/?hosted_button_id=NZUEC5XS8MFBJ",
"type": "custom"
}
],
- "time": "2024-09-06T12:59:17+00:00"
+ "time": "2025-05-13T05:49:21+00:00"
},
{
"name": "tecnickcom/tc-lib-color",
- "version": "2.2.3",
+ "version": "2.2.11",
"source": {
"type": "git",
"url": "https://github.com/tecnickcom/tc-lib-color.git",
- "reference": "ae2fd400d11b3665e6fe90158d2f0aa2bd7d85e3"
+ "reference": "ead45d76932d936e065062194032bf87f7ea45f8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/tecnickcom/tc-lib-color/zipball/ae2fd400d11b3665e6fe90158d2f0aa2bd7d85e3",
- "reference": "ae2fd400d11b3665e6fe90158d2f0aa2bd7d85e3",
+ "url": "https://api.github.com/repos/tecnickcom/tc-lib-color/zipball/ead45d76932d936e065062194032bf87f7ea45f8",
+ "reference": "ead45d76932d936e065062194032bf87f7ea45f8",
"shasum": ""
},
"require": {
"ext-pcre": "*",
- "php": ">=8.0"
+ "php": ">=8.1"
},
"require-dev": {
- "pdepend/pdepend": "2.13.0",
- "phpmd/phpmd": "2.13.0",
- "phpunit/phpunit": "10.1.2 || 9.6.13",
- "squizlabs/php_codesniffer": "3.7.2"
+ "pdepend/pdepend": "2.16.2",
+ "phpmd/phpmd": "2.15.0",
+ "phpunit/phpunit": "12.1.3 || 11.5.7 || 10.5.40",
+ "squizlabs/php_codesniffer": "3.12.2"
},
"type": "library",
"autoload": {
@@ -14357,43 +14072,45 @@
],
"support": {
"issues": "https://github.com/tecnickcom/tc-lib-color/issues",
- "source": "https://github.com/tecnickcom/tc-lib-color/tree/2.2.3"
+ "source": "https://github.com/tecnickcom/tc-lib-color/tree/2.2.11"
},
"funding": [
{
- "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_donations¤cy_code=GBP&business=paypal@tecnick.com&item_name=donation%20for%20tc-lib-color%20project",
+ "url": "https://www.paypal.com/donate/?hosted_button_id=NZUEC5XS8MFBJ",
"type": "custom"
}
],
- "time": "2024-09-06T12:57:44+00:00"
+ "time": "2025-05-13T05:47:44+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
- "version": "v2.2.7",
+ "version": "v2.3.0",
"source": {
"type": "git",
"url": "https://github.com/tijsverkoyen/CssToInlineStyles.git",
- "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb"
+ "reference": "0d72ac1c00084279c1816675284073c5a337c20d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/83ee6f38df0a63106a9e4536e3060458b74ccedb",
- "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb",
+ "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0d72ac1c00084279c1816675284073c5a337c20d",
+ "reference": "0d72ac1c00084279c1816675284073c5a337c20d",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-libxml": "*",
- "php": "^5.5 || ^7.0 || ^8.0",
- "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0"
+ "php": "^7.4 || ^8.0",
+ "symfony/css-selector": "^5.4 || ^6.0 || ^7.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10"
+ "phpstan/phpstan": "^2.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpunit/phpunit": "^8.5.21 || ^9.5.10"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.2.x-dev"
+ "dev-master": "2.x-dev"
}
},
"autoload": {
@@ -14416,26 +14133,26 @@
"homepage": "https://github.com/tijsverkoyen/CssToInlineStyles",
"support": {
"issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues",
- "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.2.7"
+ "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.3.0"
},
- "time": "2023-12-08T13:03:43+00:00"
+ "time": "2024-12-21T16:25:41+00:00"
},
{
"name": "twig/cssinliner-extra",
- "version": "v3.13.0",
+ "version": "v3.21.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/cssinliner-extra.git",
- "reference": "cef36c444b1cce4c0978d7aebd20427671a918f4"
+ "reference": "378d29b61d6406c456e3a4afbd15bbeea0b72ea8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/cssinliner-extra/zipball/cef36c444b1cce4c0978d7aebd20427671a918f4",
- "reference": "cef36c444b1cce4c0978d7aebd20427671a918f4",
+ "url": "https://api.github.com/repos/twigphp/cssinliner-extra/zipball/378d29b61d6406c456e3a4afbd15bbeea0b72ea8",
+ "reference": "378d29b61d6406c456e3a4afbd15bbeea0b72ea8",
"shasum": ""
},
"require": {
- "php": ">=8.0.2",
+ "php": ">=8.1.0",
"symfony/deprecation-contracts": "^2.5|^3",
"tijsverkoyen/css-to-inline-styles": "^2.0",
"twig/twig": "^3.13|^4.0"
@@ -14475,7 +14192,7 @@
"twig"
],
"support": {
- "source": "https://github.com/twigphp/cssinliner-extra/tree/v3.13.0"
+ "source": "https://github.com/twigphp/cssinliner-extra/tree/v3.21.0"
},
"funding": [
{
@@ -14487,27 +14204,27 @@
"type": "tidelift"
}
],
- "time": "2024-09-03T13:08:40+00:00"
+ "time": "2025-01-31T20:45:36+00:00"
},
{
"name": "twig/extra-bundle",
- "version": "v3.13.0",
+ "version": "v3.21.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/twig-extra-bundle.git",
- "reference": "21a9a7aa9f79d4493bb6fed4eb2794339f9551f5"
+ "reference": "62d1cf47a1aa009cbd07b21045b97d3d5cb79896"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/21a9a7aa9f79d4493bb6fed4eb2794339f9551f5",
- "reference": "21a9a7aa9f79d4493bb6fed4eb2794339f9551f5",
+ "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/62d1cf47a1aa009cbd07b21045b97d3d5cb79896",
+ "reference": "62d1cf47a1aa009cbd07b21045b97d3d5cb79896",
"shasum": ""
},
"require": {
- "php": ">=8.0.2",
+ "php": ">=8.1.0",
"symfony/framework-bundle": "^5.4|^6.4|^7.0",
"symfony/twig-bundle": "^5.4|^6.4|^7.0",
- "twig/twig": "^3.0|^4.0"
+ "twig/twig": "^3.2|^4.0"
},
"require-dev": {
"league/commonmark": "^1.0|^2.0",
@@ -14549,7 +14266,7 @@
"twig"
],
"support": {
- "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.13.0"
+ "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.21.0"
},
"funding": [
{
@@ -14561,24 +14278,24 @@
"type": "tidelift"
}
],
- "time": "2024-09-01T20:39:12+00:00"
+ "time": "2025-02-19T14:29:33+00:00"
},
{
"name": "twig/html-extra",
- "version": "v3.13.0",
+ "version": "v3.21.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/html-extra.git",
- "reference": "8229e750091171c1f11801a525927811c7ac5a7e"
+ "reference": "5442dd707601c83b8cd4233e37bb10ab8489a90f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/html-extra/zipball/8229e750091171c1f11801a525927811c7ac5a7e",
- "reference": "8229e750091171c1f11801a525927811c7ac5a7e",
+ "url": "https://api.github.com/repos/twigphp/html-extra/zipball/5442dd707601c83b8cd4233e37bb10ab8489a90f",
+ "reference": "5442dd707601c83b8cd4233e37bb10ab8489a90f",
"shasum": ""
},
"require": {
- "php": ">=8.0.2",
+ "php": ">=8.1.0",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/mime": "^5.4|^6.4|^7.0",
"twig/twig": "^3.13|^4.0"
@@ -14617,7 +14334,7 @@
"twig"
],
"support": {
- "source": "https://github.com/twigphp/html-extra/tree/v3.13.0"
+ "source": "https://github.com/twigphp/html-extra/tree/v3.21.0"
},
"funding": [
{
@@ -14629,25 +14346,25 @@
"type": "tidelift"
}
],
- "time": "2024-09-03T13:08:40+00:00"
+ "time": "2025-02-19T14:29:33+00:00"
},
{
"name": "twig/inky-extra",
- "version": "v3.13.0",
+ "version": "v3.21.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/inky-extra.git",
- "reference": "60c92c2a435ccd95d7a852229f01098aaf7fbced"
+ "reference": "aacd79d94534b4a7fd6533cb5c33c4ee97239a0d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/inky-extra/zipball/60c92c2a435ccd95d7a852229f01098aaf7fbced",
- "reference": "60c92c2a435ccd95d7a852229f01098aaf7fbced",
+ "url": "https://api.github.com/repos/twigphp/inky-extra/zipball/aacd79d94534b4a7fd6533cb5c33c4ee97239a0d",
+ "reference": "aacd79d94534b4a7fd6533cb5c33c4ee97239a0d",
"shasum": ""
},
"require": {
"lorenzo/pinky": "^1.0.5",
- "php": ">=8.0.2",
+ "php": ">=8.1.0",
"symfony/deprecation-contracts": "^2.5|^3",
"twig/twig": "^3.13|^4.0"
},
@@ -14687,7 +14404,7 @@
"twig"
],
"support": {
- "source": "https://github.com/twigphp/inky-extra/tree/v3.13.0"
+ "source": "https://github.com/twigphp/inky-extra/tree/v3.21.0"
},
"funding": [
{
@@ -14699,24 +14416,24 @@
"type": "tidelift"
}
],
- "time": "2024-09-03T13:08:40+00:00"
+ "time": "2025-01-31T20:45:36+00:00"
},
{
"name": "twig/intl-extra",
- "version": "v3.13.0",
+ "version": "v3.21.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/intl-extra.git",
- "reference": "1b8d78c5db08bdc61015fd55009d2e84b3aa7e38"
+ "reference": "05bc5d46b9df9e62399eae53e7c0b0633298b146"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/1b8d78c5db08bdc61015fd55009d2e84b3aa7e38",
- "reference": "1b8d78c5db08bdc61015fd55009d2e84b3aa7e38",
+ "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/05bc5d46b9df9e62399eae53e7c0b0633298b146",
+ "reference": "05bc5d46b9df9e62399eae53e7c0b0633298b146",
"shasum": ""
},
"require": {
- "php": ">=8.0.2",
+ "php": ">=8.1.0",
"symfony/intl": "^5.4|^6.4|^7.0",
"twig/twig": "^3.13|^4.0"
},
@@ -14751,7 +14468,7 @@
"twig"
],
"support": {
- "source": "https://github.com/twigphp/intl-extra/tree/v3.13.0"
+ "source": "https://github.com/twigphp/intl-extra/tree/v3.21.0"
},
"funding": [
{
@@ -14763,29 +14480,29 @@
"type": "tidelift"
}
],
- "time": "2024-09-03T13:08:40+00:00"
+ "time": "2025-01-31T20:45:36+00:00"
},
{
"name": "twig/markdown-extra",
- "version": "v3.13.0",
+ "version": "v3.21.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/markdown-extra.git",
- "reference": "25f23c02936f8c7157a8413154c06a462c9c20d3"
+ "reference": "f4616e1dd375209dacf6026f846e6b537d036ce4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/25f23c02936f8c7157a8413154c06a462c9c20d3",
- "reference": "25f23c02936f8c7157a8413154c06a462c9c20d3",
+ "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/f4616e1dd375209dacf6026f846e6b537d036ce4",
+ "reference": "f4616e1dd375209dacf6026f846e6b537d036ce4",
"shasum": ""
},
"require": {
- "php": ">=8.0.2",
+ "php": ">=8.1.0",
"symfony/deprecation-contracts": "^2.5|^3",
"twig/twig": "^3.13|^4.0"
},
"require-dev": {
- "erusev/parsedown": "^1.7",
+ "erusev/parsedown": "dev-master as 1.x-dev",
"league/commonmark": "^1.0|^2.0",
"league/html-to-markdown": "^4.8|^5.0",
"michelf/php-markdown": "^1.8|^2.0",
@@ -14823,7 +14540,7 @@
"twig"
],
"support": {
- "source": "https://github.com/twigphp/markdown-extra/tree/v3.13.0"
+ "source": "https://github.com/twigphp/markdown-extra/tree/v3.21.0"
},
"funding": [
{
@@ -14835,24 +14552,24 @@
"type": "tidelift"
}
],
- "time": "2024-09-03T20:17:35+00:00"
+ "time": "2025-01-31T20:45:36+00:00"
},
{
"name": "twig/string-extra",
- "version": "v3.13.0",
+ "version": "v3.21.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/string-extra.git",
- "reference": "148e869d87cf4bea9d97896ab49e048e4add3310"
+ "reference": "4b3337544ac8f76c280def94e32b53acfaec0589"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/string-extra/zipball/148e869d87cf4bea9d97896ab49e048e4add3310",
- "reference": "148e869d87cf4bea9d97896ab49e048e4add3310",
+ "url": "https://api.github.com/repos/twigphp/string-extra/zipball/4b3337544ac8f76c280def94e32b53acfaec0589",
+ "reference": "4b3337544ac8f76c280def94e32b53acfaec0589",
"shasum": ""
},
"require": {
- "php": ">=8.0.2",
+ "php": ">=8.1.0",
"symfony/string": "^5.4|^6.4|^7.0",
"symfony/translation-contracts": "^1.1|^2|^3",
"twig/twig": "^3.13|^4.0"
@@ -14890,7 +14607,7 @@
"unicode"
],
"support": {
- "source": "https://github.com/twigphp/string-extra/tree/v3.13.0"
+ "source": "https://github.com/twigphp/string-extra/tree/v3.21.0"
},
"funding": [
{
@@ -14902,30 +14619,30 @@
"type": "tidelift"
}
],
- "time": "2024-09-03T13:08:40+00:00"
+ "time": "2025-01-31T20:45:36+00:00"
},
{
"name": "twig/twig",
- "version": "v3.14.0",
+ "version": "v3.21.1",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
- "reference": "126b2c97818dbff0cdf3fbfc881aedb3d40aae72"
+ "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/Twig/zipball/126b2c97818dbff0cdf3fbfc881aedb3d40aae72",
- "reference": "126b2c97818dbff0cdf3fbfc881aedb3d40aae72",
+ "url": "https://api.github.com/repos/twigphp/Twig/zipball/285123877d4dd97dd7c11842ac5fb7e86e60d81d",
+ "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d",
"shasum": ""
},
"require": {
- "php": ">=8.0.2",
+ "php": ">=8.1.0",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-ctype": "^1.8",
- "symfony/polyfill-mbstring": "^1.3",
- "symfony/polyfill-php81": "^1.29"
+ "symfony/polyfill-mbstring": "^1.3"
},
"require-dev": {
+ "phpstan/phpstan": "^2.0",
"psr/container": "^1.0|^2.0",
"symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0"
},
@@ -14969,7 +14686,7 @@
],
"support": {
"issues": "https://github.com/twigphp/Twig/issues",
- "source": "https://github.com/twigphp/Twig/tree/v3.14.0"
+ "source": "https://github.com/twigphp/Twig/tree/v3.21.1"
},
"funding": [
{
@@ -14981,7 +14698,7 @@
"type": "tidelift"
}
],
- "time": "2024-09-09T17:55:12+00:00"
+ "time": "2025-05-03T07:21:55+00:00"
},
{
"name": "ua-parser/uap-php",
@@ -15130,16 +14847,16 @@
},
{
"name": "web-auth/webauthn-lib",
- "version": "4.9.1",
+ "version": "4.9.2",
"source": {
"type": "git",
"url": "https://github.com/web-auth/webauthn-lib.git",
- "reference": "fd7a0943c663b325e92ad562c2bcc943e77beeac"
+ "reference": "008b25171c27cf4813420d0de31cc059bcc71f1a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/web-auth/webauthn-lib/zipball/fd7a0943c663b325e92ad562c2bcc943e77beeac",
- "reference": "fd7a0943c663b325e92ad562c2bcc943e77beeac",
+ "url": "https://api.github.com/repos/web-auth/webauthn-lib/zipball/008b25171c27cf4813420d0de31cc059bcc71f1a",
+ "reference": "008b25171c27cf4813420d0de31cc059bcc71f1a",
"shasum": ""
},
"require": {
@@ -15173,8 +14890,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "web-auth/webauthn-framework",
- "url": "https://github.com/web-auth/webauthn-framework"
+ "url": "https://github.com/web-auth/webauthn-framework",
+ "name": "web-auth/webauthn-framework"
}
},
"autoload": {
@@ -15204,7 +14921,7 @@
"webauthn"
],
"support": {
- "source": "https://github.com/web-auth/webauthn-lib/tree/4.9.1"
+ "source": "https://github.com/web-auth/webauthn-lib/tree/4.9.2"
},
"funding": [
{
@@ -15216,20 +14933,20 @@
"type": "patreon"
}
],
- "time": "2024-07-16T18:36:36+00:00"
+ "time": "2025-01-04T09:47:58+00:00"
},
{
"name": "web-auth/webauthn-symfony-bundle",
- "version": "4.9.1",
+ "version": "4.9.2",
"source": {
"type": "git",
"url": "https://github.com/web-auth/webauthn-symfony-bundle.git",
- "reference": "fa6dfa596db1cbf159079c0bb76d746ed84c4a26"
+ "reference": "80aa16fa6f16ab8f017a4108ffcd2ecc12264c07"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/web-auth/webauthn-symfony-bundle/zipball/fa6dfa596db1cbf159079c0bb76d746ed84c4a26",
- "reference": "fa6dfa596db1cbf159079c0bb76d746ed84c4a26",
+ "url": "https://api.github.com/repos/web-auth/webauthn-symfony-bundle/zipball/80aa16fa6f16ab8f017a4108ffcd2ecc12264c07",
+ "reference": "80aa16fa6f16ab8f017a4108ffcd2ecc12264c07",
"shasum": ""
},
"require": {
@@ -15255,8 +14972,8 @@
"type": "symfony-bundle",
"extra": {
"thanks": {
- "name": "web-auth/webauthn-framework",
- "url": "https://github.com/web-auth/webauthn-framework"
+ "url": "https://github.com/web-auth/webauthn-framework",
+ "name": "web-auth/webauthn-framework"
}
},
"autoload": {
@@ -15289,7 +15006,7 @@
"webauthn"
],
"support": {
- "source": "https://github.com/web-auth/webauthn-symfony-bundle/tree/4.9.1"
+ "source": "https://github.com/web-auth/webauthn-symfony-bundle/tree/4.9.2"
},
"funding": [
{
@@ -15301,20 +15018,20 @@
"type": "patreon"
}
],
- "time": "2024-07-11T09:06:25+00:00"
+ "time": "2025-01-04T09:38:56+00:00"
},
{
"name": "web-token/jwt-library",
- "version": "3.4.6",
+ "version": "3.4.8",
"source": {
"type": "git",
"url": "https://github.com/web-token/jwt-library.git",
- "reference": "1a25c8ced3e2b3c31d32dcfad215cbd8cb812f28"
+ "reference": "92445671cc788fa5f639898a67c06f9fd0bf491f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/web-token/jwt-library/zipball/1a25c8ced3e2b3c31d32dcfad215cbd8cb812f28",
- "reference": "1a25c8ced3e2b3c31d32dcfad215cbd8cb812f28",
+ "url": "https://api.github.com/repos/web-token/jwt-library/zipball/92445671cc788fa5f639898a67c06f9fd0bf491f",
+ "reference": "92445671cc788fa5f639898a67c06f9fd0bf491f",
"shasum": ""
},
"require": {
@@ -15324,7 +15041,7 @@
"paragonie/constant_time_encoding": "^2.6|^3.0",
"paragonie/sodium_compat": "^1.20|^2.0",
"php": ">=8.1",
- "psr/cache": "^3.0",
+ "psr/cache": "^2.0|^3.0",
"psr/clock": "^1.0",
"psr/http-client": "^1.0",
"psr/http-factory": "^1.0",
@@ -15387,7 +15104,7 @@
],
"support": {
"issues": "https://github.com/web-token/jwt-library/issues",
- "source": "https://github.com/web-token/jwt-library/tree/3.4.6"
+ "source": "https://github.com/web-token/jwt-library/tree/3.4.8"
},
"funding": [
{
@@ -15399,7 +15116,7 @@
"type": "patreon"
}
],
- "time": "2024-07-02T16:35:11+00:00"
+ "time": "2025-05-07T09:11:18+00:00"
},
{
"name": "webmozart/assert",
@@ -15519,16 +15236,16 @@
"packages-dev": [
{
"name": "dama/doctrine-test-bundle",
- "version": "v8.2.0",
+ "version": "v8.2.2",
"source": {
"type": "git",
"url": "https://github.com/dmaicher/doctrine-test-bundle.git",
- "reference": "1f81a280ea63f049d24e9c8ce00e557b18e0ff2f"
+ "reference": "eefe54fdf00d910f808efea9cfce9cc261064a0a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/dmaicher/doctrine-test-bundle/zipball/1f81a280ea63f049d24e9c8ce00e557b18e0ff2f",
- "reference": "1f81a280ea63f049d24e9c8ce00e557b18e0ff2f",
+ "url": "https://api.github.com/repos/dmaicher/doctrine-test-bundle/zipball/eefe54fdf00d910f808efea9cfce9cc261064a0a",
+ "reference": "eefe54fdf00d910f808efea9cfce9cc261064a0a",
"shasum": ""
},
"require": {
@@ -15542,9 +15259,9 @@
"require-dev": {
"behat/behat": "^3.0",
"friendsofphp/php-cs-fixer": "^3.27",
- "phpstan/phpstan": "^1.2",
+ "phpstan/phpstan": "^2.0",
"phpunit/phpunit": "^8.0 || ^9.0 || ^10.0 || ^11.0",
- "symfony/phpunit-bridge": "^6.3",
+ "symfony/phpunit-bridge": "^7.2",
"symfony/process": "^5.4 || ^6.3 || ^7.0",
"symfony/yaml": "^5.4 || ^6.3 || ^7.0"
},
@@ -15580,46 +15297,45 @@
],
"support": {
"issues": "https://github.com/dmaicher/doctrine-test-bundle/issues",
- "source": "https://github.com/dmaicher/doctrine-test-bundle/tree/v8.2.0"
+ "source": "https://github.com/dmaicher/doctrine-test-bundle/tree/v8.2.2"
},
- "time": "2024-05-28T15:41:06+00:00"
+ "time": "2025-02-04T14:37:36+00:00"
},
{
"name": "doctrine/doctrine-fixtures-bundle",
- "version": "3.6.1",
+ "version": "4.1.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/DoctrineFixturesBundle.git",
- "reference": "d13a08ebf244f74c8adb8ff15aa55d01c404e534"
+ "reference": "a06db6b81ff20a2980bf92063d80c013bb8b4b7c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/d13a08ebf244f74c8adb8ff15aa55d01c404e534",
- "reference": "d13a08ebf244f74c8adb8ff15aa55d01c404e534",
+ "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/a06db6b81ff20a2980bf92063d80c013bb8b4b7c",
+ "reference": "a06db6b81ff20a2980bf92063d80c013bb8b4b7c",
"shasum": ""
},
"require": {
- "doctrine/data-fixtures": "^1.3",
+ "doctrine/data-fixtures": "^2.0",
"doctrine/doctrine-bundle": "^2.2",
"doctrine/orm": "^2.14.0 || ^3.0",
- "doctrine/persistence": "^2.4|^3.0",
- "php": "^7.4 || ^8.0",
- "symfony/config": "^5.4|^6.0|^7.0",
- "symfony/console": "^5.4|^6.0|^7.0",
- "symfony/dependency-injection": "^5.4|^6.0|^7.0",
- "symfony/deprecation-contracts": "^2.1|^3",
- "symfony/doctrine-bridge": "^5.4|^6.0|^7.0",
- "symfony/http-kernel": "^5.4|^6.0|^7.0"
+ "doctrine/persistence": "^2.4 || ^3.0 || ^4.0",
+ "php": "^8.1",
+ "psr/log": "^2 || ^3",
+ "symfony/config": "^6.4 || ^7.0",
+ "symfony/console": "^6.4 || ^7.0",
+ "symfony/dependency-injection": "^6.4 || ^7.0",
+ "symfony/deprecation-contracts": "^2.1 || ^3",
+ "symfony/doctrine-bridge": "^6.4.16 || ^7.1.9",
+ "symfony/http-kernel": "^6.4 || ^7.0"
},
"conflict": {
"doctrine/dbal": "< 3"
},
"require-dev": {
- "doctrine/coding-standard": "^12",
- "phpstan/phpstan": "^1.10.39",
- "phpunit/phpunit": "^9.6.13",
- "symfony/phpunit-bridge": "^6.3.6",
- "vimeo/psalm": "^5.15"
+ "doctrine/coding-standard": "13.0.0",
+ "phpstan/phpstan": "2.1.11",
+ "phpunit/phpunit": "^10.5.38 || 11.4.14"
},
"type": "symfony-bundle",
"autoload": {
@@ -15653,7 +15369,7 @@
],
"support": {
"issues": "https://github.com/doctrine/DoctrineFixturesBundle/issues",
- "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.6.1"
+ "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/4.1.0"
},
"funding": [
{
@@ -15669,43 +15385,43 @@
"type": "tidelift"
}
],
- "time": "2024-05-07T07:16:35+00:00"
+ "time": "2025-03-26T10:56:26+00:00"
},
{
"name": "ekino/phpstan-banned-code",
- "version": "v1.0.0",
+ "version": "v3.0.0",
"source": {
"type": "git",
"url": "https://github.com/ekino/phpstan-banned-code.git",
- "reference": "4f0d7c8a0c9f5d222ffc24234aa6c5b3b71bf4c3"
+ "reference": "27122aa1783d6521e500c0c397c53244cfbde26f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ekino/phpstan-banned-code/zipball/4f0d7c8a0c9f5d222ffc24234aa6c5b3b71bf4c3",
- "reference": "4f0d7c8a0c9f5d222ffc24234aa6c5b3b71bf4c3",
+ "url": "https://api.github.com/repos/ekino/phpstan-banned-code/zipball/27122aa1783d6521e500c0c397c53244cfbde26f",
+ "reference": "27122aa1783d6521e500c0c397c53244cfbde26f",
"shasum": ""
},
"require": {
- "php": "^7.3 || ^8.0",
- "phpstan/phpstan": "^1.0"
+ "php": "^8.1",
+ "phpstan/phpstan": "^2.0"
},
"require-dev": {
"ergebnis/composer-normalize": "^2.6",
"friendsofphp/php-cs-fixer": "^3.0",
"nikic/php-parser": "^4.3",
- "phpstan/phpstan-phpunit": "^1.0",
+ "phpstan/phpstan-phpunit": "^2.0",
"phpunit/phpunit": "^9.5",
"symfony/var-dumper": "^5.0"
},
"type": "phpstan-extension",
"extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- },
"phpstan": {
"includes": [
"extension.neon"
]
+ },
+ "branch-alias": {
+ "dev-master": "1.0-dev"
}
},
"autoload": {
@@ -15728,26 +15444,27 @@
"homepage": "https://github.com/ekino/phpstan-banned-code",
"keywords": [
"PHPStan",
- "code quality"
+ "code quality",
+ "static analysis"
],
"support": {
"issues": "https://github.com/ekino/phpstan-banned-code/issues",
- "source": "https://github.com/ekino/phpstan-banned-code/tree/v1.0.0"
+ "source": "https://github.com/ekino/phpstan-banned-code/tree/v3.0.0"
},
- "time": "2021-11-02T08:37:34+00:00"
+ "time": "2024-11-13T09:57:22+00:00"
},
{
"name": "jbtronics/translation-editor-bundle",
- "version": "v1.0",
+ "version": "v1.1.1",
"source": {
"type": "git",
"url": "https://github.com/jbtronics/translation-editor-bundle.git",
- "reference": "4e771c290bf73dded061808bc3ba3c56bc35aa06"
+ "reference": "fa003c38f3f61060a368734b91aeb40d788b0825"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/jbtronics/translation-editor-bundle/zipball/4e771c290bf73dded061808bc3ba3c56bc35aa06",
- "reference": "4e771c290bf73dded061808bc3ba3c56bc35aa06",
+ "url": "https://api.github.com/repos/jbtronics/translation-editor-bundle/zipball/fa003c38f3f61060a368734b91aeb40d788b0825",
+ "reference": "fa003c38f3f61060a368734b91aeb40d788b0825",
"shasum": ""
},
"require": {
@@ -15792,7 +15509,7 @@
],
"support": {
"issues": "https://github.com/jbtronics/translation-editor-bundle/issues",
- "source": "https://github.com/jbtronics/translation-editor-bundle/tree/v1.0"
+ "source": "https://github.com/jbtronics/translation-editor-bundle/tree/v1.1.1"
},
"funding": [
{
@@ -15804,20 +15521,20 @@
"type": "github"
}
],
- "time": "2024-09-03T16:44:00+00:00"
+ "time": "2025-03-29T15:14:31+00:00"
},
{
"name": "myclabs/deep-copy",
- "version": "1.12.0",
+ "version": "1.13.1",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c"
+ "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c",
- "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/1720ddd719e16cf0db4eb1c6eca108031636d46c",
+ "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c",
"shasum": ""
},
"require": {
@@ -15856,7 +15573,7 @@
],
"support": {
"issues": "https://github.com/myclabs/DeepCopy/issues",
- "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0"
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.13.1"
},
"funding": [
{
@@ -15864,20 +15581,20 @@
"type": "tidelift"
}
],
- "time": "2024-06-12T14:39:25+00:00"
+ "time": "2025-04-29T12:36:36+00:00"
},
{
"name": "nikic/php-parser",
- "version": "v5.1.0",
+ "version": "v5.4.0",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1"
+ "reference": "447a020a1f875a434d62f2a401f53b82a396e494"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/683130c2ff8c2739f4822ff7ac5c873ec529abd1",
- "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494",
+ "reference": "447a020a1f875a434d62f2a401f53b82a396e494",
"shasum": ""
},
"require": {
@@ -15920,9 +15637,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v5.1.0"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0"
},
- "time": "2024-07-01T20:03:41+00:00"
+ "time": "2024-12-30T11:07:19+00:00"
},
{
"name": "phar-io/manifest",
@@ -16092,20 +15809,20 @@
},
{
"name": "phpstan/phpstan",
- "version": "1.12.3",
+ "version": "2.1.16",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
- "reference": "0fcbf194ab63d8159bb70d9aa3e1350051632009"
+ "reference": "b8c1cf533cba0c305d91c6ccd23f3dd0566ba5f9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0fcbf194ab63d8159bb70d9aa3e1350051632009",
- "reference": "0fcbf194ab63d8159bb70d9aa3e1350051632009",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/b8c1cf533cba0c305d91c6ccd23f3dd0566ba5f9",
+ "reference": "b8c1cf533cba0c305d91c6ccd23f3dd0566ba5f9",
"shasum": ""
},
"require": {
- "php": "^7.2|^8.0"
+ "php": "^7.4|^8.0"
},
"conflict": {
"phpstan/phpstan-shim": "*"
@@ -16146,25 +15863,25 @@
"type": "github"
}
],
- "time": "2024-09-09T08:10:35+00:00"
+ "time": "2025-05-16T09:40:10+00:00"
},
{
"name": "phpstan/phpstan-doctrine",
- "version": "1.5.3",
+ "version": "2.0.3",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-doctrine.git",
- "reference": "38db3bad8f1567d7bf64806738d724261f8a2b5c"
+ "reference": "4497663eb17b9d29211830df5aceaa3a4d256a35"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/38db3bad8f1567d7bf64806738d724261f8a2b5c",
- "reference": "38db3bad8f1567d7bf64806738d724261f8a2b5c",
+ "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/4497663eb17b9d29211830df5aceaa3a4d256a35",
+ "reference": "4497663eb17b9d29211830df5aceaa3a4d256a35",
"shasum": ""
},
"require": {
- "php": "^7.2 || ^8.0",
- "phpstan/phpstan": "^1.11.7"
+ "php": "^7.4 || ^8.0",
+ "phpstan/phpstan": "^2.1.13"
},
"conflict": {
"doctrine/collections": "<1.0",
@@ -16177,21 +15894,21 @@
"cache/array-adapter": "^1.1",
"composer/semver": "^3.3.2",
"cweagans/composer-patches": "^1.7.3",
- "doctrine/annotations": "^1.11 || ^2.0",
+ "doctrine/annotations": "^2.0",
"doctrine/collections": "^1.6 || ^2.1",
"doctrine/common": "^2.7 || ^3.0",
- "doctrine/dbal": "^2.13.8 || ^3.3.3",
+ "doctrine/dbal": "^3.3.8",
"doctrine/lexer": "^2.0 || ^3.0",
- "doctrine/mongodb-odm": "^1.3 || ^2.4.3",
+ "doctrine/mongodb-odm": "^2.4.3",
"doctrine/orm": "^2.16.0",
"doctrine/persistence": "^2.2.1 || ^3.2",
"gedmo/doctrine-extensions": "^3.8",
"nesbot/carbon": "^2.49",
- "nikic/php-parser": "^4.13.2",
"php-parallel-lint/php-parallel-lint": "^1.2",
- "phpstan/phpstan-phpunit": "^1.3.13",
- "phpstan/phpstan-strict-rules": "^1.5.1",
- "phpunit/phpunit": "^9.6.16",
+ "phpstan/phpstan-deprecation-rules": "^2.0.2",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpstan/phpstan-strict-rules": "^2.0",
+ "phpunit/phpunit": "^9.6.20",
"ramsey/uuid": "^4.2",
"symfony/cache": "^5.4"
},
@@ -16216,34 +15933,33 @@
"description": "Doctrine extensions for PHPStan",
"support": {
"issues": "https://github.com/phpstan/phpstan-doctrine/issues",
- "source": "https://github.com/phpstan/phpstan-doctrine/tree/1.5.3"
+ "source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.3"
},
- "time": "2024-09-01T13:17:34+00:00"
+ "time": "2025-05-05T15:28:52+00:00"
},
{
"name": "phpstan/phpstan-strict-rules",
- "version": "1.6.0",
+ "version": "2.0.4",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-strict-rules.git",
- "reference": "363f921dd8441777d4fc137deb99beb486c77df1"
+ "reference": "3e139cbe67fafa3588e1dbe27ca50f31fdb6236a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/363f921dd8441777d4fc137deb99beb486c77df1",
- "reference": "363f921dd8441777d4fc137deb99beb486c77df1",
+ "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/3e139cbe67fafa3588e1dbe27ca50f31fdb6236a",
+ "reference": "3e139cbe67fafa3588e1dbe27ca50f31fdb6236a",
"shasum": ""
},
"require": {
- "php": "^7.2 || ^8.0",
- "phpstan/phpstan": "^1.11"
+ "php": "^7.4 || ^8.0",
+ "phpstan/phpstan": "^2.0.4"
},
"require-dev": {
- "nikic/php-parser": "^4.13.0",
"php-parallel-lint/php-parallel-lint": "^1.2",
- "phpstan/phpstan-deprecation-rules": "^1.1",
- "phpstan/phpstan-phpunit": "^1.0",
- "phpunit/phpunit": "^9.5"
+ "phpstan/phpstan-deprecation-rules": "^2.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpunit/phpunit": "^9.6"
},
"type": "phpstan-extension",
"extra": {
@@ -16265,39 +15981,38 @@
"description": "Extra strict and opinionated rules for PHPStan",
"support": {
"issues": "https://github.com/phpstan/phpstan-strict-rules/issues",
- "source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.6.0"
+ "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.4"
},
- "time": "2024-04-20T06:37:51+00:00"
+ "time": "2025-03-18T11:42:40+00:00"
},
{
"name": "phpstan/phpstan-symfony",
- "version": "1.4.9",
+ "version": "2.0.6",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-symfony.git",
- "reference": "51ab2438fb2695467cf96b58d2f8f28d4dd1e3e9"
+ "reference": "5005288e07583546ea00b52de4a9ac412eb869d7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/51ab2438fb2695467cf96b58d2f8f28d4dd1e3e9",
- "reference": "51ab2438fb2695467cf96b58d2f8f28d4dd1e3e9",
+ "url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/5005288e07583546ea00b52de4a9ac412eb869d7",
+ "reference": "5005288e07583546ea00b52de4a9ac412eb869d7",
"shasum": ""
},
"require": {
"ext-simplexml": "*",
- "php": "^7.2 || ^8.0",
- "phpstan/phpstan": "^1.12"
+ "php": "^7.4 || ^8.0",
+ "phpstan/phpstan": "^2.1.13"
},
"conflict": {
"symfony/framework-bundle": "<3.0"
},
"require-dev": {
- "nikic/php-parser": "^4.13.0",
"php-parallel-lint/php-parallel-lint": "^1.2",
- "phpstan/phpstan-phpunit": "^1.3.11",
- "phpstan/phpstan-strict-rules": "^1.5.1",
- "phpunit/phpunit": "^8.5.29 || ^9.5",
- "psr/container": "1.0 || 1.1.1",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpstan/phpstan-strict-rules": "^2.0",
+ "phpunit/phpunit": "^9.6",
+ "psr/container": "1.1.2",
"symfony/config": "^5.4 || ^6.1",
"symfony/console": "^5.4 || ^6.1",
"symfony/dependency-injection": "^5.4 || ^6.1",
@@ -16337,9 +16052,9 @@
"description": "Symfony Framework extensions and rules for PHPStan",
"support": {
"issues": "https://github.com/phpstan/phpstan-symfony/issues",
- "source": "https://github.com/phpstan/phpstan-symfony/tree/1.4.9"
+ "source": "https://github.com/phpstan/phpstan-symfony/tree/2.0.6"
},
- "time": "2024-09-05T16:15:09+00:00"
+ "time": "2025-05-14T07:00:05+00:00"
},
{
"name": "phpunit/php-code-coverage",
@@ -16662,16 +16377,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "9.6.20",
+ "version": "9.6.23",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "49d7820565836236411f5dc002d16dd689cde42f"
+ "reference": "43d2cb18d0675c38bd44982a5d1d88f6d53d8d95"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/49d7820565836236411f5dc002d16dd689cde42f",
- "reference": "49d7820565836236411f5dc002d16dd689cde42f",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/43d2cb18d0675c38bd44982a5d1d88f6d53d8d95",
+ "reference": "43d2cb18d0675c38bd44982a5d1d88f6d53d8d95",
"shasum": ""
},
"require": {
@@ -16682,11 +16397,11 @@
"ext-mbstring": "*",
"ext-xml": "*",
"ext-xmlwriter": "*",
- "myclabs/deep-copy": "^1.12.0",
+ "myclabs/deep-copy": "^1.13.1",
"phar-io/manifest": "^2.0.4",
"phar-io/version": "^3.2.1",
"php": ">=7.3",
- "phpunit/php-code-coverage": "^9.2.31",
+ "phpunit/php-code-coverage": "^9.2.32",
"phpunit/php-file-iterator": "^3.0.6",
"phpunit/php-invoker": "^3.1.1",
"phpunit/php-text-template": "^2.0.4",
@@ -16745,7 +16460,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.20"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.23"
},
"funding": [
{
@@ -16756,30 +16471,38 @@
"url": "https://github.com/sebastianbergmann",
"type": "github"
},
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
"type": "tidelift"
}
],
- "time": "2024-07-10T11:45:39+00:00"
+ "time": "2025-05-02T06:40:34+00:00"
},
{
"name": "rector/rector",
- "version": "1.2.5",
+ "version": "2.0.16",
"source": {
"type": "git",
"url": "https://github.com/rectorphp/rector.git",
- "reference": "e98aa793ca3fcd17e893cfaf9103ac049775d339"
+ "reference": "f1366d1f8c7490541c8f7af6e5c7cef7cca1b5a2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/rectorphp/rector/zipball/e98aa793ca3fcd17e893cfaf9103ac049775d339",
- "reference": "e98aa793ca3fcd17e893cfaf9103ac049775d339",
+ "url": "https://api.github.com/repos/rectorphp/rector/zipball/f1366d1f8c7490541c8f7af6e5c7cef7cca1b5a2",
+ "reference": "f1366d1f8c7490541c8f7af6e5c7cef7cca1b5a2",
"shasum": ""
},
"require": {
- "php": "^7.2|^8.0",
- "phpstan/phpstan": "^1.12.2"
+ "php": "^7.4|^8.0",
+ "phpstan/phpstan": "^2.1.14"
},
"conflict": {
"rector/rector-doctrine": "*",
@@ -16812,7 +16535,7 @@
],
"support": {
"issues": "https://github.com/rectorphp/rector/issues",
- "source": "https://github.com/rectorphp/rector/tree/1.2.5"
+ "source": "https://github.com/rectorphp/rector/tree/2.0.16"
},
"funding": [
{
@@ -16820,7 +16543,7 @@
"type": "github"
}
],
- "time": "2024-09-08T17:43:24+00:00"
+ "time": "2025-05-12T16:37:16+00:00"
},
{
"name": "roave/security-advisories",
@@ -16828,40 +16551,44 @@
"source": {
"type": "git",
"url": "https://github.com/Roave/SecurityAdvisories.git",
- "reference": "791bcaf99c75b0851de23d9e802e32770243193b"
+ "reference": "0cc529f6cf08a858fcb7a2c5617780fcdc20d1fe"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/791bcaf99c75b0851de23d9e802e32770243193b",
- "reference": "791bcaf99c75b0851de23d9e802e32770243193b",
+ "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/0cc529f6cf08a858fcb7a2c5617780fcdc20d1fe",
+ "reference": "0cc529f6cf08a858fcb7a2c5617780fcdc20d1fe",
"shasum": ""
},
"conflict": {
"3f/pygmentize": "<1.2",
- "admidio/admidio": "<4.3.10",
- "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3",
+ "adaptcms/adaptcms": "<=1.3",
+ "admidio/admidio": "<4.3.12",
+ "adodb/adodb-php": "<=5.22.8",
"aheinze/cockpit": "<2.2",
- "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.04.6",
+ "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2",
"aimeos/ai-admin-jsonadm": "<2020.10.13|>=2021.04.1,<2021.10.6|>=2022.04.1,<2022.10.3|>=2023.04.1,<2023.10.4|==2024.04.1",
"aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7",
- "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9",
+ "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9|==2024.04.1",
"aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7",
"aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5",
"airesvsg/acf-to-rest-api": "<=3.1",
"akaunting/akaunting": "<2.1.13",
"akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53",
- "alextselegidis/easyappointments": "<1.5",
+ "alextselegidis/easyappointments": "<=1.5.1",
"alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1",
"amazing/media2click": ">=1,<1.3.3",
+ "ameos/ameos_tarteaucitron": "<1.2.23",
"amphp/artax": "<1.0.6|>=2,<2.0.6",
"amphp/http": "<=1.7.2|>=2,<=2.1",
"amphp/http-client": ">=4,<4.4",
"anchorcms/anchor-cms": "<=0.12.7",
"andreapollastri/cipi": "<=3.1.15",
"andrewhaine/silverstripe-form-capture": ">=0.2,<=0.2.3|>=1,<1.0.2|>=2,<2.2.5",
+ "aoe/restler": "<1.7.1",
"apache-solr-for-typo3/solr": "<2.8.3",
"apereo/phpcas": "<1.6",
- "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6|>=2.6,<2.7.10|>=3,<3.0.12|>=3.1,<3.1.3",
+ "api-platform/core": "<3.4.17|>=4.0.0.0-alpha1,<4.0.22",
+ "api-platform/graphql": "<3.4.17|>=4.0.0.0-alpha1,<4.0.22",
"appwrite/server-ce": "<=1.2.1",
"arc/web": "<3",
"area17/twill": "<1.2.5|>=2,<2.5.3",
@@ -16869,15 +16596,21 @@
"asymmetricrypt/asymmetricrypt": "<9.9.99",
"athlon1600/php-proxy": "<=5.1",
"athlon1600/php-proxy-app": "<=3",
+ "athlon1600/youtube-downloader": "<=4",
"austintoddj/canvas": "<=3.4.2",
- "auth0/wordpress": "<=4.6",
+ "auth0/auth0-php": ">=8.0.0.0-beta1,<8.14",
+ "auth0/login": "<7.17",
+ "auth0/symfony": "<5.4",
+ "auth0/wordpress": "<5.3",
"automad/automad": "<2.0.0.0-alpha5",
"automattic/jetpack": "<9.8",
"awesome-support/awesome-support": "<=6.0.7",
"aws/aws-sdk-php": "<3.288.1",
"azuracast/azuracast": "<0.18.3",
+ "b13/seo_basics": "<0.8.2",
"backdrop/backdrop": "<1.27.3|>=1.28,<1.28.2",
"backpack/crud": "<3.4.9",
+ "backpack/filemanager": "<2.0.2|>=3,<3.0.9",
"bacula-web/bacula-web": "<8.0.0.0-RC2-dev",
"badaso/core": "<2.7",
"bagisto/bagisto": "<2.1",
@@ -16885,11 +16618,12 @@
"barrelstrength/sprout-forms": "<3.9",
"barryvdh/laravel-translation-manager": "<0.6.2",
"barzahlen/barzahlen-php": "<2.0.1",
- "baserproject/basercms": "<5.0.9",
+ "baserproject/basercms": "<=5.1.1",
"bassjobsen/bootstrap-3-typeahead": ">4.0.2",
"bbpress/bbpress": "<2.6.5",
"bcosca/fatfree": "<3.7.2",
"bedita/bedita": "<4",
+ "bednee/cooluri": "<1.0.30",
"bigfork/silverstripe-form-capture": ">=3,<3.1.1",
"billz/raspap-webgui": "<=3.1.4",
"bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3",
@@ -16906,6 +16640,7 @@
"brotkrueml/typo3-matomo-integration": "<1.3.2",
"buddypress/buddypress": "<7.2.1",
"bugsnag/bugsnag-laravel": ">=2,<2.0.2",
+ "bvbmedia/multishop": "<2.0.39",
"bytefury/crater": "<6.0.2",
"cachethq/cachet": "<2.5.1",
"cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10",
@@ -16916,47 +16651,59 @@
"cart2quote/module-quotation-encoded": ">=4.1.6,<=4.4.5|>=5,<5.4.4",
"cartalyst/sentry": "<=2.1.6",
"catfan/medoo": "<1.7.5",
- "causal/oidc": "<2.1",
+ "causal/oidc": "<4",
"cecil/cecil": "<7.47.1",
"centreon/centreon": "<22.10.15",
"cesnet/simplesamlphp-module-proxystatistics": "<3.1",
"chriskacerguis/codeigniter-restserver": "<=2.7.1",
"civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3",
- "ckeditor/ckeditor": "<4.24",
+ "ckeditor/ckeditor": "<4.25",
+ "clickstorm/cs-seo": ">=6,<6.7|>=7,<7.4|>=8,<8.3|>=9,<9.2",
+ "co-stack/fal_sftp": "<0.2.6",
"cockpit-hq/cockpit": "<2.7|==2.7",
"codeception/codeception": "<3.1.3|>=4,<4.1.22",
"codeigniter/framework": "<3.1.9",
- "codeigniter4/framework": "<4.4.7",
+ "codeigniter4/framework": "<4.5.8",
"codeigniter4/shield": "<1.0.0.0-beta8",
"codiad/codiad": "<=2.8.4",
+ "codingms/additional-tca": ">=1.7,<1.15.17|>=1.16,<1.16.9",
+ "commerceteam/commerce": ">=0.9.6,<0.9.9",
+ "components/jquery": ">=1.0.3,<3.5",
"composer/composer": "<1.10.27|>=2,<2.2.24|>=2.3,<2.7.7",
- "concrete5/concrete5": "<9.3.3",
+ "concrete5/concrete5": "<9.4.0.0-RC2-dev",
"concrete5/core": "<8.5.8|>=9,<9.1",
"contao-components/mediaelement": ">=2.14.2,<2.21.1",
"contao/comments-bundle": ">=2,<4.13.40|>=5.0.0.0-RC1-dev,<5.3.4",
"contao/contao": ">=3,<3.5.37|>=4,<4.4.56|>=4.5,<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4",
"contao/core": "<3.5.39",
- "contao/core-bundle": "<4.13.40|>=5,<5.3.4",
+ "contao/core-bundle": "<4.13.54|>=5,<5.3.30|>=5.4,<5.5.6",
"contao/listing-bundle": ">=3,<=3.5.30|>=4,<4.4.8",
"contao/managed-edition": "<=1.5",
"corveda/phpsandbox": "<1.3.5",
"cosenary/instagram": "<=2.3",
- "craftcms/cms": "<4.6.2|>=5,<=5.2.2",
+ "craftcms/cms": "<4.15.3|>=5,<5.7.5",
"croogo/croogo": "<4",
"cuyz/valinor": "<0.12",
+ "czim/file-handling": "<1.5|>=2,<2.3",
"czproject/git-php": "<4.0.3",
+ "damienharper/auditor-bundle": "<5.2.6",
"dapphp/securimage": "<3.6.6",
"darylldoyle/safe-svg": "<1.9.10",
"datadog/dd-trace": ">=0.30,<0.30.2",
"datatables/datatables": "<1.10.10",
"david-garcia/phpwhois": "<=4.3.1",
"dbrisinajumi/d2files": "<1",
- "dcat/laravel-admin": "<=2.1.3",
+ "dcat/laravel-admin": "<=2.1.3|==2.2.0.0-beta|==2.2.2.0-beta",
"derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3",
"derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1|>=7,<7.4",
"desperado/xml-bundle": "<=0.1.7",
+ "dev-lancer/minecraft-motd-parser": "<=1.0.5",
"devgroup/dotplant": "<2020.09.14-dev",
+ "digimix/wp-svg-upload": "<=1",
"directmailteam/direct-mail": "<6.0.3|>=7,<7.0.3|>=8,<9.5.2",
+ "dl/yag": "<3.0.1",
+ "dmk/webkitpdf": "<1.1.4",
+ "dnadesign/silverstripe-elemental": "<5.3.12",
"doctrine/annotations": "<1.2.7",
"doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2",
"doctrine/common": "<2.4.3|>=2.5,<2.5.1",
@@ -16966,12 +16713,28 @@
"doctrine/mongodb-odm": "<1.0.2",
"doctrine/mongodb-odm-bundle": "<3.0.1",
"doctrine/orm": ">=1,<1.2.4|>=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4",
- "dolibarr/dolibarr": "<19.0.2",
+ "dolibarr/dolibarr": "<19.0.2|==21.0.0.0-beta",
"dompdf/dompdf": "<2.0.4",
"doublethreedigital/guest-entries": "<3.1.2",
- "drupal/core": ">=6,<6.38|>=7,<7.96|>=8,<10.1.8|>=10.2,<10.2.2|==11.9999999.9999999.9999999-dev",
- "drupal/core-recommended": "==11.9999999.9999999.9999999-dev",
- "drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4|==11.9999999.9999999.9999999-dev",
+ "drupal/ai": "<1.0.5",
+ "drupal/alogin": "<2.0.6",
+ "drupal/cache_utility": "<1.2.1",
+ "drupal/config_split": "<1.10|>=2,<2.0.2",
+ "drupal/core": ">=6,<6.38|>=7,<7.102|>=8,<10.3.14|>=10.4,<10.4.5|>=11,<11.0.13|>=11.1,<11.1.5",
+ "drupal/core-recommended": ">=7,<7.102|>=8,<10.2.11|>=10.3,<10.3.9|>=11,<11.0.8",
+ "drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.102|>=8,<10.2.11|>=10.3,<10.3.9|>=11,<11.0.8",
+ "drupal/formatter_suite": "<2.1",
+ "drupal/gdpr": "<3.0.1|>=3.1,<3.1.2",
+ "drupal/google_tag": "<1.8|>=2,<2.0.8",
+ "drupal/ignition": "<1.0.4",
+ "drupal/link_field_display_mode_formatter": "<1.6",
+ "drupal/matomo": "<1.24",
+ "drupal/oauth2_client": "<4.1.3",
+ "drupal/oauth2_server": "<2.1",
+ "drupal/obfuscate": "<2.0.1",
+ "drupal/rapidoc_elements_field_formatter": "<1.0.1",
+ "drupal/spamspan": "<3.2.1",
+ "drupal/tfa": "<1.10",
"duncanmcclean/guest-entries": "<3.1.2",
"dweeves/magmi": "<=0.7.24",
"ec-cube/ec-cube": "<2.4.4|>=2.11,<=2.17.1|>=3,<=3.0.18.0-patch4|>=4,<=4.1.2",
@@ -16998,32 +16761,36 @@
"ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.26|>=3.3,<3.3.39",
"ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1",
"ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12",
+ "ezsystems/ezplatform-http-cache": "<2.3.16",
"ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.35",
"ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8",
- "ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1-dev|>=3.3,<3.3.40",
+ "ezsystems/ezplatform-richtext": ">=2.3,<2.3.26|>=3.3,<3.3.40",
"ezsystems/ezplatform-solr-search-engine": ">=1.7,<1.7.12|>=2,<2.0.2|>=3.3,<3.3.15",
"ezsystems/ezplatform-user": ">=1,<1.0.1",
"ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.31",
"ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.03.5.1",
"ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3",
"ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15",
- "ezyang/htmlpurifier": "<4.1.1",
+ "ezyang/htmlpurifier": "<=4.2",
"facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2",
"facturascripts/facturascripts": "<=2022.08",
"fastly/magento2": "<1.2.26",
"feehi/cms": "<=2.1.1",
"feehi/feehicms": "<=2.1.1",
"fenom/fenom": "<=2.12.1",
+ "filament/actions": ">=3.2,<3.2.123",
+ "filament/infolists": ">=3,<3.2.115",
+ "filament/tables": ">=3,<3.2.115",
"filegator/filegator": "<7.8",
"filp/whoops": "<2.1.13",
"fineuploader/php-traditional-server": "<=1.2.2",
"firebase/php-jwt": "<6",
"fisharebest/webtrees": "<=2.1.18",
"fixpunkt/fp-masterquiz": "<2.2.1|>=3,<3.5.2",
- "fixpunkt/fp-newsletter": "<1.1.1|>=2,<2.1.2|>=2.2,<3.2.6",
- "flarum/core": "<1.8.5",
+ "fixpunkt/fp-newsletter": "<1.1.1|>=1.2,<2.1.2|>=2.2,<3.2.6",
+ "flarum/core": "<1.8.10",
"flarum/flarum": "<0.1.0.0-beta8",
- "flarum/framework": "<1.8.5",
+ "flarum/framework": "<1.8.10",
"flarum/mentions": "<1.6.3",
"flarum/sticky": ">=0.1.0.0-beta14,<=0.1.0.0-beta15",
"flarum/tags": "<=0.1.0.0-beta13",
@@ -17044,22 +16811,25 @@
"friendsofsymfony1/symfony1": ">=1.1,<1.5.19",
"friendsoftypo3/mediace": ">=7.6.2,<7.6.5",
"friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6",
- "froala/wysiwyg-editor": "<3.2.7|>=4.0.1,<=4.1.3",
- "froxlor/froxlor": "<=2.2.0.0-RC3",
+ "froala/wysiwyg-editor": "<=4.3",
+ "froxlor/froxlor": "<=2.2.5",
"frozennode/administrator": "<=5.0.12",
"fuel/core": "<1.8.1",
- "funadmin/funadmin": "<=3.2|>=3.3.2,<=3.3.3",
+ "funadmin/funadmin": "<=5.0.2",
"gaoming13/wechat-php-sdk": "<=1.10.2",
"genix/cms": "<=1.1.11",
- "getformwork/formwork": "<1.13.1|==2.0.0.0-beta1",
+ "georgringer/news": "<1.3.3",
+ "geshi/geshi": "<1.0.8.11-dev",
+ "getformwork/formwork": "<1.13.1|>=2.0.0.0-beta1,<2.0.0.0-beta4",
"getgrav/grav": "<1.7.46",
- "getkirby/cms": "<=3.6.6.5|>=3.7,<=3.7.5.4|>=3.8,<=3.8.4.3|>=3.9,<=3.9.8.1|>=3.10,<=3.10.1|>=4,<=4.3",
- "getkirby/kirby": "<=2.5.12",
+ "getkirby/cms": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1",
+ "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1",
"getkirby/panel": "<2.5.14",
"getkirby/starterkit": "<=3.7.0.2",
"gilacms/gila": "<=1.15.4",
"gleez/cms": "<=1.3|==2",
"globalpayments/php-sdk": "<2",
+ "goalgorilla/open_social": "<12.3.11|>=12.4,<12.4.10|>=13.0.0.0-alpha1,<13.0.0.0-alpha11",
"gogentooss/samlbase": "<1.2.7",
"google/protobuf": "<3.15",
"gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3",
@@ -17068,6 +16838,7 @@
"grumpydictator/firefly-iii": "<6.1.17",
"gugoan/economizzer": "<=0.9.0.0-beta1",
"guzzlehttp/guzzle": "<6.5.8|>=7,<7.4.5",
+ "guzzlehttp/oauth-subscriber": "<0.8.1",
"guzzlehttp/psr7": "<1.9.1|>=2,<2.4.5",
"haffner/jh_captcha": "<=2.1.3|>=3,<=3.0.2",
"harvesthq/chosen": "<1.8.7",
@@ -17079,11 +16850,12 @@
"hov/jobfair": "<1.0.13|>=2,<2.0.2",
"httpsoft/http-message": "<1.0.12",
"hyn/multi-tenant": ">=5.6,<5.7.2",
- "ibexa/admin-ui": ">=4.2,<4.2.3|>=4.6.0.0-beta1,<4.6.9",
+ "ibexa/admin-ui": ">=4.2,<4.2.3|>=4.6,<4.6.14",
"ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3|>=4.5,<4.5.6|>=4.6,<4.6.2",
- "ibexa/fieldtype-richtext": ">=4.6,<4.6.10",
+ "ibexa/fieldtype-richtext": ">=4.6,<4.6.19",
"ibexa/graphql": ">=2.5,<2.5.31|>=3.3,<3.3.28|>=4.2,<4.2.3",
- "ibexa/post-install": "<=1.0.4",
+ "ibexa/http-cache": ">=4.6,<4.6.14",
+ "ibexa/post-install": "<1.0.16|>=4.6,<4.6.14",
"ibexa/solr": ">=4.5,<4.5.4",
"ibexa/user": ">=4,<4.4.3",
"icecoder/icecoder": "<=8.1",
@@ -17096,89 +16868,114 @@
"illuminate/view": "<6.20.42|>=7,<7.30.6|>=8,<8.75",
"imdbphp/imdbphp": "<=5.1.1",
"impresscms/impresscms": "<=1.4.5",
- "impresspages/impresspages": "<=1.0.12",
+ "impresspages/impresspages": "<1.0.13",
"in2code/femanager": "<5.5.3|>=6,<6.3.4|>=7,<7.2.3",
"in2code/ipandlanguageredirect": "<5.1.2",
"in2code/lux": "<17.6.1|>=18,<24.0.2",
- "in2code/powermail": "<7.5|>=8,<8.5|>=9,<10.9|>=11,<12.4",
+ "in2code/powermail": "<7.5.1|>=8,<8.5.1|>=9,<10.9.1|>=11,<12.4.1",
"innologi/typo3-appointments": "<2.0.6",
"intelliants/subrion": "<4.2.2",
"inter-mediator/inter-mediator": "==5.5",
"ipl/web": "<0.10.1",
+ "islandora/crayfish": "<4.1",
"islandora/islandora": ">=2,<2.4.1",
"ivankristianto/phpwhois": "<=4.3",
"jackalope/jackalope-doctrine-dbal": "<1.7.4",
+ "jambagecom/div2007": "<0.10.2",
"james-heinrich/getid3": "<1.9.21",
"james-heinrich/phpthumb": "<1.7.12",
"jasig/phpcas": "<1.3.3",
+ "jbartels/wec-map": "<3.0.3",
"jcbrand/converse.js": "<3.3.3",
+ "joelbutcher/socialstream": "<5.6|>=6,<6.2",
"johnbillion/wp-crontrol": "<1.16.2",
"joomla/application": "<1.0.13",
"joomla/archive": "<1.1.12|>=2,<2.0.1",
+ "joomla/database": ">=1,<2.2|>=3,<3.4",
"joomla/filesystem": "<1.6.2|>=2,<2.0.1",
"joomla/filter": "<1.4.4|>=2,<2.0.1",
"joomla/framework": "<1.5.7|>=2.5.4,<=3.8.12",
"joomla/input": ">=2,<2.0.2",
- "joomla/joomla-cms": ">=2.5,<3.9.12",
+ "joomla/joomla-cms": "<3.9.12|>=4,<4.4.13|>=5,<5.2.6",
+ "joomla/joomla-platform": "<1.5.4",
"joomla/session": "<1.3.1",
"joyqi/hyper-down": "<=2.4.27",
"jsdecena/laracom": "<2.0.9",
"jsmitty12/phpwhois": "<5.1",
"juzaweb/cms": "<=3.4",
"jweiland/events2": "<8.3.8|>=9,<9.0.6",
+ "jweiland/kk-downloader": "<1.2.2",
"kazist/phpwhois": "<=4.2.6",
"kelvinmo/simplexrd": "<3.1.1",
"kevinpapst/kimai2": "<1.16.7",
"khodakhah/nodcms": "<=3",
- "kimai/kimai": "<2.16",
+ "kimai/kimai": "<=2.20.1",
"kitodo/presentation": "<3.2.3|>=3.3,<3.3.4",
"klaviyo/magento2-extension": ">=1,<3",
"knplabs/knp-snappy": "<=1.4.2",
"kohana/core": "<3.3.3",
- "krayin/laravel-crm": "<1.2.2",
+ "koillection/koillection": "<1.6.12",
+ "krayin/laravel-crm": "<=1.3",
"kreait/firebase-php": ">=3.2,<3.8.1",
"kumbiaphp/kumbiapp": "<=1.1.1",
"la-haute-societe/tcpdf": "<6.2.22",
"laminas/laminas-diactoros": "<2.18.1|==2.19|==2.20|==2.21|==2.22|==2.23|>=2.24,<2.24.2|>=2.25,<2.25.2",
"laminas/laminas-form": "<2.17.1|>=3,<3.0.2|>=3.1,<3.1.1",
"laminas/laminas-http": "<2.14.2",
+ "lara-zeus/artemis": ">=1,<=1.0.6",
+ "lara-zeus/dynamic-dashboard": ">=3,<=3.0.1",
"laravel/fortify": "<1.11.1",
- "laravel/framework": "<6.20.44|>=7,<7.30.6|>=8,<8.75",
+ "laravel/framework": "<10.48.29|>=11,<11.44.1|>=12,<12.1.1",
"laravel/laravel": ">=5.4,<5.4.22",
+ "laravel/pulse": "<1.3.1",
+ "laravel/reverb": "<1.4",
"laravel/socialite": ">=1,<2.0.10",
"latte/latte": "<2.10.8",
"lavalite/cms": "<=9|==10.1",
"lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5",
- "league/commonmark": "<0.18.3",
+ "league/commonmark": "<2.7",
"league/flysystem": "<1.1.4|>=2,<2.1.1",
"league/oauth2-server": ">=8.3.2,<8.4.2|>=8.5,<8.5.3",
+ "leantime/leantime": "<3.3",
"lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3",
"libreform/libreform": ">=2,<=2.0.8",
"librenms/librenms": "<2017.08.18",
"liftkit/database": "<2.13.2",
"lightsaml/lightsaml": "<1.3.5",
- "limesurvey/limesurvey": "<3.27.19",
+ "limesurvey/limesurvey": "<6.5.12",
"livehelperchat/livehelperchat": "<=3.91",
- "livewire/livewire": ">2.2.4,<2.2.6|>=3.3.5,<3.4.9",
+ "livewire/livewire": "<2.12.7|>=3.0.0.0-beta1,<3.5.2",
+ "livewire/volt": "<1.7",
"lms/routes": "<2.1.1",
"localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2",
+ "luracast/restler": "<3.1",
"luyadev/yii-helpers": "<1.2.1",
- "magento/community-edition": "<2.4.5|==2.4.5|>=2.4.5.0-patch1,<2.4.5.0-patch8|==2.4.6|>=2.4.6.0-patch1,<2.4.6.0-patch6|==2.4.7",
+ "macropay-solutions/laravel-crud-wizard-free": "<3.4.17",
+ "maestroerror/php-heic-to-jpg": "<1.0.5",
+ "magento/community-edition": "<2.4.5|==2.4.5|>=2.4.5.0-patch1,<2.4.5.0-patch12|==2.4.6|>=2.4.6.0-patch1,<2.4.6.0-patch10|>=2.4.7.0-beta1,<2.4.7.0-patch5|>=2.4.8.0-beta1,<2.4.8.0-beta2",
"magento/core": "<=1.9.4.5",
"magento/magento1ce": "<1.9.4.3-dev",
"magento/magento1ee": ">=1,<1.14.4.3-dev",
"magento/product-community-edition": "<2.4.4.0-patch9|>=2.4.5,<2.4.5.0-patch8|>=2.4.6,<2.4.6.0-patch6|>=2.4.7,<2.4.7.0-patch1",
+ "magento/project-community-edition": "<=2.0.2",
"magneto/core": "<1.9.4.4-dev",
"maikuolan/phpmussel": ">=1,<1.6",
"mainwp/mainwp": "<=4.4.3.3",
- "mantisbt/mantisbt": "<2.26.2",
+ "mantisbt/mantisbt": "<=2.26.3",
"marcwillmann/turn": "<0.3.3",
+ "matomo/matomo": "<1.11",
"matyhtf/framework": "<3.0.6",
- "mautic/core": "<4.4.12|>=5.0.0.0-alpha,<5.0.4",
+ "mautic/core": "<5.2.3",
+ "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1",
+ "maximebf/debugbar": "<1.19",
"mdanter/ecc": "<2",
- "mediawiki/core": "<1.36.2",
+ "mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2",
+ "mediawiki/cargo": "<3.6.1",
+ "mediawiki/core": "<1.39.5|==1.40",
+ "mediawiki/data-transfer": ">=1.39,<1.39.11|>=1.41,<1.41.3|>=1.42,<1.42.2",
"mediawiki/matomo": "<2.4.3",
"mediawiki/semantic-media-wiki": "<4.0.2",
+ "mehrwert/phpmyadmin": "<3.2",
"melisplatform/melis-asset-manager": "<5.0.1",
"melisplatform/melis-cms": "<5.0.1",
"melisplatform/melis-front": "<5.0.1",
@@ -17192,11 +16989,11 @@
"miniorange/miniorange-saml": "<1.4.3",
"mittwald/typo3_forum": "<1.2.1",
"mobiledetect/mobiledetectlib": "<2.8.32",
- "modx/revolution": "<=2.8.3.0-patch",
+ "modx/revolution": "<=3.1",
"mojo42/jirafeau": "<4.4",
"mongodb/mongodb": ">=1,<1.9.2",
"monolog/monolog": ">=1.8,<1.12",
- "moodle/moodle": "<4.3.5|>=4.4.0.0-beta,<4.4.1",
+ "moodle/moodle": "<4.3.12|>=4.4,<4.4.8|>=4.5.0.0-beta,<4.5.4",
"mos/cimage": "<0.7.19",
"movim/moxl": ">=0.8,<=0.10",
"movingbytes/social-network": "<=1.2.1",
@@ -17208,7 +17005,9 @@
"munkireport/reportdata": "<3.5",
"munkireport/softwareupdate": "<1.6",
"mustache/mustache": ">=2,<2.14.1",
+ "mwdelaney/wp-enable-svg": "<=0.2",
"namshi/jose": "<2.2",
+ "nasirkhan/laravel-starter": "<11.11",
"nategood/httpful": "<1",
"neoan3-apps/template": "<1.1.1",
"neorazorx/facturascripts": "<2022.04",
@@ -17217,10 +17016,12 @@
"neos/media-browser": "<7.3.19|>=8,<8.0.16|>=8.1,<8.1.11|>=8.2,<8.2.11|>=8.3,<8.3.9",
"neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<5.3.10|>=7,<7.0.9|>=7.1,<7.1.7|>=7.2,<7.2.6|>=7.3,<7.3.4|>=8,<8.0.2",
"neos/swiftmailer": "<5.4.5",
+ "nesbot/carbon": "<2.72.6|>=3,<3.8.4",
+ "netcarver/textile": "<=4.1.2",
"netgen/tagsbundle": ">=3.4,<3.4.11|>=4,<4.0.15",
"nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6",
"nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13",
- "nilsteampassnet/teampass": "<3.0.10",
+ "nilsteampassnet/teampass": "<3.1.3.1-dev",
"nonfiction/nterchange": "<4.1.1",
"notrinos/notrinos-erp": "<=0.7",
"noumo/easyii": "<=0.9",
@@ -17232,19 +17033,20 @@
"nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1",
"october/backend": "<1.1.2",
"october/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1",
- "october/october": "<=3.4.4",
+ "october/october": "<3.7.5",
"october/rain": "<1.0.472|>=1.1,<1.1.2",
- "october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.5.15",
+ "october/system": "<3.7.5",
+ "oliverklee/phpunit": "<3.5.15",
"omeka/omeka-s": "<4.0.3",
"onelogin/php-saml": "<2.10.4",
"oneup/uploader-bundle": ">=1,<1.9.3|>=2,<2.1.5",
"open-web-analytics/open-web-analytics": "<1.7.4",
"opencart/opencart": ">=0",
"openid/php-openid": "<2.3",
- "openmage/magento-lts": "<20.10.1",
+ "openmage/magento-lts": "<20.12.3",
"opensolutions/vimbadmin": "<=3.0.15",
- "opensource-workshop/connect-cms": "<1.7.2|>=2,<2.3.2",
- "orchid/platform": ">=9,<9.4.4|>=14.0.0.0-alpha4,<14.5",
+ "opensource-workshop/connect-cms": "<1.8.7|>=2,<2.4.7",
+ "orchid/platform": ">=8,<14.43",
"oro/calendar-bundle": ">=4.2,<=4.2.6|>=5,<=5.0.6|>=5.1,<5.1.1",
"oro/commerce": ">=4.1,<5.0.11|>=5.1,<5.1.1",
"oro/crm": ">=1.7,<1.7.4|>=3.1,<4.1.17|>=4.2,<4.2.7",
@@ -17252,7 +17054,7 @@
"oro/customer-portal": ">=4.1,<=4.1.13|>=4.2,<=4.2.10|>=5,<=5.0.11|>=5.1,<=5.1.3",
"oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<=4.2.10|>=5,<=5.0.12|>=5.1,<=5.1.3",
"oveleon/contao-cookiebar": "<1.16.3|>=2,<2.1.3",
- "oxid-esales/oxideshop-ce": "<4.5",
+ "oxid-esales/oxideshop-ce": "<=7.0.5",
"oxid-esales/paymorrow-module": ">=1,<1.0.2|>=2,<2.0.1",
"packbackbooks/lti-1-3-php-library": "<5",
"padraic/humbug_get_contents": "<1.1.2",
@@ -17268,6 +17070,7 @@
"pear/archive_tar": "<1.4.14",
"pear/auth": "<1.2.4",
"pear/crypt_gpg": "<1.6.7",
+ "pear/http_request2": "<2.7",
"pear/pear": "<=1.10.1",
"pegasus/google-for-jobs": "<1.5.1|>=2,<2.1.1",
"personnummer/personnummer": "<3.0.2",
@@ -17275,16 +17078,16 @@
"phenx/php-svg-lib": "<0.5.2",
"php-censor/php-censor": "<2.0.13|>=2.1,<2.1.5",
"php-mod/curl": "<2.3.2",
- "phpbb/phpbb": "<3.2.10|>=3.3,<3.3.1",
+ "phpbb/phpbb": "<3.3.11",
"phpems/phpems": ">=6,<=6.1.3",
"phpfastcache/phpfastcache": "<6.1.5|>=7,<7.1.2|>=8,<8.0.7",
"phpmailer/phpmailer": "<6.5",
"phpmussel/phpmussel": ">=1,<1.6",
- "phpmyadmin/phpmyadmin": "<5.2.1",
- "phpmyfaq/phpmyfaq": "<3.2.5|==3.2.5",
+ "phpmyadmin/phpmyadmin": "<5.2.2",
+ "phpmyfaq/phpmyfaq": "<3.2.5|==3.2.5|>=3.2.10,<=4.0.1",
"phpoffice/common": "<0.2.9",
- "phpoffice/phpexcel": "<1.8",
- "phpoffice/phpspreadsheet": "<1.29.1|>=2,<2.2.1",
+ "phpoffice/phpexcel": "<=1.8.2",
+ "phpoffice/phpspreadsheet": "<1.29.9|>=2,<2.1.8|>=2.2,<2.3.7|>=3,<3.9",
"phpseclib/phpseclib": "<2.0.47|>=3,<3.0.36",
"phpservermon/phpservermon": "<3.6",
"phpsysinfo/phpsysinfo": "<3.4.3",
@@ -17293,18 +17096,19 @@
"phpxmlrpc/extras": "<0.6.1",
"phpxmlrpc/phpxmlrpc": "<4.9.2",
"pi/pi": "<=2.5",
- "pimcore/admin-ui-classic-bundle": "<1.5.4",
- "pimcore/customer-management-framework-bundle": "<4.0.6",
+ "pimcore/admin-ui-classic-bundle": "<1.7.6",
+ "pimcore/customer-management-framework-bundle": "<4.2.1",
"pimcore/data-hub": "<1.2.4",
"pimcore/data-importer": "<1.8.9|>=1.9,<1.9.3",
"pimcore/demo": "<10.3",
"pimcore/ecommerce-framework-bundle": "<1.0.10",
"pimcore/perspective-editor": "<1.5.1",
- "pimcore/pimcore": "<11.2.4",
- "pixelfed/pixelfed": "<0.11.11",
+ "pimcore/pimcore": "<11.5.4",
+ "piwik/piwik": "<1.11",
+ "pixelfed/pixelfed": "<0.12.5",
"plotly/plotly.js": "<2.25.2",
"pocketmine/bedrock-protocol": "<8.0.2",
- "pocketmine/pocketmine-mp": "<5.11.2",
+ "pocketmine/pocketmine-mp": "<5.25.2",
"pocketmine/raklib": ">=0.14,<0.14.6|>=0.15,<0.15.1",
"pressbooks/pressbooks": "<5.18",
"prestashop/autoupgrade": ">=4,<4.10.1",
@@ -17314,6 +17118,7 @@
"prestashop/gamification": "<2.3.2",
"prestashop/prestashop": "<8.1.6",
"prestashop/productcomments": "<5.0.2",
+ "prestashop/ps_contactinfo": "<=3.3.2",
"prestashop/ps_emailsubscription": "<2.6.1",
"prestashop/ps_facetedsearch": "<3.4.1",
"prestashop/ps_linklist": "<3.1",
@@ -17321,13 +17126,14 @@
"processwire/processwire": "<=3.0.229",
"propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7",
"propel/propel1": ">=1,<=1.7.1",
- "pterodactyl/panel": "<1.11.6",
+ "pterodactyl/panel": "<1.11.8",
"ptheofan/yii2-statemachine": ">=2.0.0.0-RC1-dev,<=2",
"ptrofimov/beanstalk_console": "<1.7.14",
"pubnub/pubnub": "<6.1",
+ "punktde/pt_extbase": "<1.5.1",
"pusher/pusher-php-server": "<2.2.1",
"pwweb/laravel-core": "<=0.3.6.0-beta",
- "pxlrbt/filament-excel": "<2.3.3",
+ "pxlrbt/filament-excel": "<1.1.14|>=2.0.0.0-alpha,<2.3.3",
"pyrocms/pyrocms": "<=3.9.1",
"qcubed/qcubed": "<=3.1.1",
"quickapps/cms": "<=2.0.0.0-beta2",
@@ -17338,7 +17144,7 @@
"rap2hpoutre/laravel-log-viewer": "<0.13",
"react/http": ">=0.7,<1.9",
"really-simple-plugins/complianz-gdpr": "<6.4.2",
- "redaxo/source": "<=5.15.1",
+ "redaxo/source": "<5.18.3",
"remdex/livehelperchat": "<4.29",
"reportico-web/reportico": "<=8.1",
"rhukster/dom-sanitizer": "<1.0.7",
@@ -17346,29 +17152,32 @@
"robrichards/xmlseclibs": ">=1,<3.0.4",
"roots/soil": "<4.1",
"rudloff/alltube": "<3.0.3",
+ "rudloff/rtmpdump-bin": "<=2.3.1",
"s-cart/core": "<6.9",
"s-cart/s-cart": "<6.9",
"sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1",
"sabre/dav": ">=1.6,<1.7.11|>=1.8,<1.8.9",
+ "samwilson/unlinked-wikibase": "<1.42",
"scheb/two-factor-bundle": "<3.26|>=4,<4.11",
"sensiolabs/connect": "<4.2.3",
"serluck/phpwhois": "<=4.2.6",
"sfroemken/url_redirect": "<=1.2.1",
- "sheng/yiicms": "<=1.2",
- "shopware/core": "<=6.5.8.12|>=6.6,<=6.6.5",
- "shopware/platform": "<=6.5.8.12|>=6.6,<=6.6.5",
+ "sheng/yiicms": "<1.2.1",
+ "shopware/core": "<6.5.8.18-dev|>=6.6,<6.6.10.3-dev|>=6.7.0.0-RC1-dev,<6.7.0.0-RC2-dev",
+ "shopware/platform": "<6.5.8.18-dev|>=6.6,<6.6.10.3-dev|>=6.7.0.0-RC1-dev,<6.7.0.0-RC2-dev",
"shopware/production": "<=6.3.5.2",
"shopware/shopware": "<=5.7.17",
"shopware/storefront": "<=6.4.8.1|>=6.5.8,<6.5.8.7-dev",
- "shopxo/shopxo": "<=6.1",
+ "shopxo/shopxo": "<=6.4",
"showdoc/showdoc": "<2.10.4",
+ "shuchkin/simplexlsx": ">=1.0.12,<1.1.13",
"silverstripe-australia/advancedreports": ">=1,<=2",
"silverstripe/admin": "<1.13.19|>=2,<2.1.8",
"silverstripe/assets": ">=1,<1.11.1",
"silverstripe/cms": "<4.11.3",
"silverstripe/comments": ">=1.3,<3.1.1",
"silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3",
- "silverstripe/framework": "<5.2.16",
+ "silverstripe/framework": "<5.3.23",
"silverstripe/graphql": ">=2,<2.0.5|>=3,<3.8.2|>=4,<4.3.7|>=5,<5.1.3",
"silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1",
"silverstripe/recipe-cms": ">=4.5,<4.5.3",
@@ -17381,46 +17190,54 @@
"silverstripe/userforms": "<3|>=5,<5.4.2",
"silverstripe/versioned-admin": ">=1,<1.11.1",
"simple-updates/phpwhois": "<=1",
- "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4|==5.0.0.0-alpha12",
+ "simplesamlphp/saml2": "<=4.16.15|>=5.0.0.0-alpha1,<=5.0.0.0-alpha19",
+ "simplesamlphp/saml2-legacy": "<=4.16.15",
"simplesamlphp/simplesamlphp": "<1.18.6",
"simplesamlphp/simplesamlphp-module-infocard": "<1.0.1",
"simplesamlphp/simplesamlphp-module-openid": "<1",
"simplesamlphp/simplesamlphp-module-openidprovider": "<0.9",
+ "simplesamlphp/xml-common": "<1.20",
"simplesamlphp/xml-security": "==1.6.11",
"simplito/elliptic-php": "<1.0.6",
"sitegeist/fluid-components": "<3.5",
+ "sjbr/sr-feuser-register": "<2.6.2",
"sjbr/sr-freecap": "<2.4.6|>=2.5,<2.5.3",
+ "sjbr/static-info-tables": "<2.3.1",
"slim/psr7": "<1.4.1|>=1.5,<1.5.1|>=1.6,<1.6.1",
"slim/slim": "<2.6",
"slub/slub-events": "<3.0.3",
"smarty/smarty": "<4.5.3|>=5,<5.1.1",
- "snipe/snipe-it": "<6.4.2",
+ "snipe/snipe-it": "<8.1",
"socalnick/scn-social-auth": "<1.15.2",
"socialiteproviders/steam": "<1.1",
- "spatie/browsershot": "<3.57.4",
+ "spatie/browsershot": "<5.0.5",
"spatie/image-optimizer": "<1.7.3",
+ "spencer14420/sp-php-email-handler": "<1",
"spipu/html2pdf": "<5.2.8",
"spoon/library": "<1.4.1",
"spoonity/tcpdf": "<6.2.22",
"squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1",
"ssddanbrown/bookstack": "<24.05.1",
- "statamic/cms": "<4.46|>=5.3,<5.6.2",
+ "starcitizentools/citizen-skin": ">=2.6.3,<2.31",
+ "starcitizentools/tabber-neue": ">=1.9.1,<2.7.2",
+ "statamic/cms": "<=5.16",
"stormpath/sdk": "<9.9.99",
"studio-42/elfinder": "<=2.1.64",
"studiomitte/friendlycaptcha": "<0.1.4",
"subhh/libconnect": "<7.0.8|>=8,<8.1",
"sukohi/surpass": "<1",
"sulu/form-bundle": ">=2,<2.5.3",
- "sulu/sulu": "<1.6.44|>=2,<2.4.17|>=2.5,<2.5.13",
+ "sulu/sulu": "<1.6.44|>=2,<2.5.25|>=2.6,<2.6.9|>=3.0.0.0-alpha1,<3.0.0.0-alpha3",
"sumocoders/framework-user-bundle": "<1.4",
"superbig/craft-audit": "<3.0.2",
+ "svewap/a21glossary": "<=0.4.10",
"swag/paypal": "<5.4.4",
"swiftmailer/swiftmailer": "<6.2.5",
"swiftyedit/swiftyedit": "<1.2",
"sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2",
"sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1",
"sylius/grid-bundle": "<1.10.1",
- "sylius/paypal-plugin": ">=1,<1.2.4|>=1.3,<1.3.1",
+ "sylius/paypal-plugin": "<1.6.2|>=1.7,<1.7.2|>=2,<2.0.2",
"sylius/resource-bundle": ">=1,<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4",
"sylius/sylius": "<1.12.19|>=1.13.0.0-alpha1,<1.13.4",
"symbiote/silverstripe-multivaluefield": ">=3,<3.1",
@@ -17433,7 +17250,8 @@
"symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4",
"symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1",
"symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<5.3.15|>=5.4.3,<5.4.4|>=6.0.3,<6.0.4",
- "symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7",
+ "symfony/http-client": ">=4.3,<5.4.47|>=6,<6.4.15|>=7,<7.1.8",
+ "symfony/http-foundation": "<5.4.46|>=6,<6.4.14|>=7,<7.1.7",
"symfony/http-kernel": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6",
"symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
"symfony/maker-bundle": ">=1.27,<1.29.2|>=1.30,<1.31.1",
@@ -17441,20 +17259,22 @@
"symfony/phpunit-bridge": ">=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7",
"symfony/polyfill": ">=1,<1.10",
"symfony/polyfill-php55": ">=1,<1.10",
+ "symfony/process": "<5.4.46|>=6,<6.4.14|>=7,<7.1.7",
"symfony/proxy-manager-bridge": ">=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7",
"symfony/routing": ">=2,<2.0.19",
+ "symfony/runtime": ">=5.3,<5.4.46|>=6,<6.4.14|>=7,<7.1.7",
"symfony/security": ">=2,<2.7.51|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.8",
- "symfony/security-bundle": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6",
+ "symfony/security-bundle": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.4.10|>=7,<7.0.10|>=7.1,<7.1.3",
"symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.9",
"symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11",
"symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8",
- "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.3.2|>=5.4,<5.4.31|>=6,<6.3.8",
+ "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.4.47|>=6,<6.4.15|>=7,<7.1.8",
"symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12",
- "symfony/symfony": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8",
+ "symfony/symfony": "<5.4.47|>=6,<6.4.15|>=7,<7.1.8",
"symfony/translation": ">=2,<2.0.17",
"symfony/twig-bridge": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8",
"symfony/ux-autocomplete": "<2.11.2",
- "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3",
+ "symfony/validator": "<5.4.43|>=6,<6.4.11|>=7,<7.1.4",
"symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8",
"symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4",
"symfony/webhook": ">=6.3,<6.3.8",
@@ -17463,40 +17283,50 @@
"t3/dce": "<0.11.5|>=2.2,<2.6.2",
"t3g/svg-sanitizer": "<1.0.3",
"t3s/content-consent": "<1.0.3|>=2,<2.0.2",
- "tastyigniter/tastyigniter": "<3.3",
- "tcg/voyager": "<=1.4",
- "tecnickcom/tcpdf": "<=6.7.4",
+ "tastyigniter/tastyigniter": "<4",
+ "tcg/voyager": "<=1.8",
+ "tecnickcom/tc-lib-pdf-font": "<2.6.4",
+ "tecnickcom/tcpdf": "<6.8",
"terminal42/contao-tablelookupwizard": "<3.3.5",
"thelia/backoffice-default-template": ">=2.1,<2.1.2",
"thelia/thelia": ">=2.1,<2.1.3",
"theonedemon/phpwhois": "<=4.2.5",
"thinkcmf/thinkcmf": "<6.0.8",
- "thorsten/phpmyfaq": "<3.2.2",
+ "thorsten/phpmyfaq": "<=4.0.1",
"tikiwiki/tiki-manager": "<=17.1",
"timber/timber": ">=0.16.6,<1.23.1|>=1.24,<1.24.1|>=2,<2.1",
"tinymce/tinymce": "<7.2",
"tinymighty/wiki-seo": "<1.2.2",
"titon/framework": "<9.9.99",
+ "tltneon/lgsl": "<7",
"tobiasbg/tablepress": "<=2.0.0.0-RC1",
- "topthink/framework": "<6.0.17|>=6.1,<6.1.5|>=8,<8.0.4",
+ "topthink/framework": "<6.0.17|>=6.1,<=8.0.4",
"topthink/think": "<=6.1.1",
- "topthink/thinkphp": "<=3.2.3",
+ "topthink/thinkphp": "<=3.2.3|>=6.1.3,<=8.0.4",
"torrentpier/torrentpier": "<=2.4.3",
"tpwd/ke_search": "<4.0.3|>=4.1,<4.6.6|>=5,<5.0.2",
- "tribalsystems/zenario": "<9.5.60602",
+ "tribalsystems/zenario": "<=9.7.61188",
"truckersmp/phpwhois": "<=4.3.1",
"ttskch/pagination-service-provider": "<1",
"twbs/bootstrap": "<=3.4.1|>=4,<=4.6.2",
- "twig/twig": "<1.44.7|>=2,<2.15.3|>=3,<3.4.3",
+ "twig/twig": "<3.11.2|>=3.12,<3.14.1|>=3.16,<3.19",
"typo3/cms": "<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2",
- "typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1",
- "typo3/cms-core": "<=8.7.56|>=9,<=9.5.47|>=10,<=10.4.44|>=11,<=11.5.36|>=12,<=12.4.14|>=13,<=13.1",
+ "typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<10.4.46|>=11,<11.5.40|>=12,<12.4.21|>=13,<13.3.1",
+ "typo3/cms-belog": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2",
+ "typo3/cms-beuser": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2",
+ "typo3/cms-core": "<=8.7.56|>=9,<=9.5.48|>=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2",
+ "typo3/cms-dashboard": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2",
"typo3/cms-extbase": "<6.2.24|>=7,<7.6.8|==8.1.1",
+ "typo3/cms-extensionmanager": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2",
+ "typo3/cms-felogin": ">=4.2,<4.2.3",
"typo3/cms-fluid": "<4.3.4|>=4.4,<4.4.1",
- "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1",
+ "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2",
"typo3/cms-frontend": "<4.3.9|>=4.4,<4.4.5",
- "typo3/cms-install": "<4.1.14|>=4.2,<4.2.16|>=4.3,<4.3.9|>=4.4,<4.4.5|>=12.2,<12.4.8",
+ "typo3/cms-indexed-search": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2",
+ "typo3/cms-install": "<4.1.14|>=4.2,<4.2.16|>=4.3,<4.3.9|>=4.4,<4.4.5|>=12.2,<12.4.8|==13.4.2",
+ "typo3/cms-lowlevel": ">=11,<=11.5.41",
"typo3/cms-rte-ckeditor": ">=9.5,<9.5.42|>=10,<10.4.39|>=11,<11.5.30",
+ "typo3/cms-scheduler": ">=11,<=11.5.41",
"typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6",
"typo3/html-sanitizer": ">=1,<=1.5.2|>=2,<=2.1.3",
"typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.3.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3",
@@ -17505,28 +17335,32 @@
"typo3fluid/fluid": ">=2,<2.0.8|>=2.1,<2.1.7|>=2.2,<2.2.4|>=2.3,<2.3.7|>=2.4,<2.4.4|>=2.5,<2.5.11|>=2.6,<2.6.10",
"ua-parser/uap-php": "<3.8",
"uasoft-indonesia/badaso": "<=2.9.7",
- "unisharp/laravel-filemanager": "<2.6.4",
+ "unisharp/laravel-filemanager": "<2.9.1",
+ "unopim/unopim": "<0.1.5",
"userfrosting/userfrosting": ">=0.3.1,<4.6.3",
"usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2",
"uvdesk/community-skeleton": "<=1.1.1",
"uvdesk/core-framework": "<=1.1.1",
"vanilla/safecurl": "<0.9.2",
"verbb/comments": "<1.5.5",
- "verbb/formie": "<2.1.6",
+ "verbb/formie": "<=2.1.43",
"verbb/image-resizer": "<2.0.9",
"verbb/knock-knock": "<1.2.8",
"verot/class.upload.php": "<=2.1.6",
+ "vertexvaar/falsftp": "<0.2.6",
"villagedefrance/opencart-overclocked": "<=1.11.1",
"vova07/yii2-fileapi-widget": "<0.1.9",
"vrana/adminer": "<4.8.1",
"vufind/vufind": ">=2,<9.1.1",
"waldhacker/hcaptcha": "<2.1.2",
"wallabag/tcpdf": "<6.2.22",
- "wallabag/wallabag": "<2.6.7",
+ "wallabag/wallabag": "<2.6.11",
"wanglelecc/laracms": "<=1.0.3",
+ "wapplersystems/a21glossary": "<=0.4.10",
"web-auth/webauthn-framework": ">=3.3,<3.3.4|>=4.5,<4.9",
"web-auth/webauthn-lib": ">=4.5,<4.9",
"web-feet/coastercms": "==5.5",
+ "web-tp3/wec_map": "<3.0.3",
"webbuilders-group/silverstripe-kapost-bridge": "<0.4",
"webcoast/deferred-image-processing": "<1.0.2",
"webklex/laravel-imap": "<5.3",
@@ -17536,9 +17370,11 @@
"wikimedia/parsoid": "<0.12.2",
"willdurand/js-translation-bundle": "<2.1.1",
"winter/wn-backend-module": "<1.2.4",
+ "winter/wn-cms-module": "<1.0.476|>=1.1,<1.1.11|>=1.2,<1.2.7",
"winter/wn-dusk-plugin": "<2.1",
"winter/wn-system-module": "<1.2.4",
"wintercms/winter": "<=1.2.3",
+ "wireui/wireui": "<1.19.3|>=2,<2.1.3",
"woocommerce/woocommerce": "<6.6|>=8.8,<8.8.5|>=8.9,<8.9.3",
"wp-cli/wp-cli": ">=0.12,<2.5",
"wp-graphql/wp-graphql": "<=1.14.5",
@@ -17550,15 +17386,15 @@
"xataface/xataface": "<3",
"xpressengine/xpressengine": "<3.0.15",
"yab/quarx": "<2.4.5",
- "yeswiki/yeswiki": "<4.1",
- "yetiforce/yetiforce-crm": "<=6.4",
+ "yeswiki/yeswiki": "<4.5.4",
+ "yetiforce/yetiforce-crm": "<6.5",
"yidashi/yii2cmf": "<=2",
"yii2mod/yii2-cms": "<1.9.2",
- "yiisoft/yii": "<1.1.29",
- "yiisoft/yii2": "<2.0.49.4-dev",
+ "yiisoft/yii": "<1.1.31",
+ "yiisoft/yii2": "<2.0.52",
"yiisoft/yii2-authclient": "<2.2.15",
"yiisoft/yii2-bootstrap": "<2.0.4",
- "yiisoft/yii2-dev": "<2.0.43",
+ "yiisoft/yii2-dev": "<=2.0.45",
"yiisoft/yii2-elasticsearch": "<2.0.5",
"yiisoft/yii2-gii": "<=2.2.4",
"yiisoft/yii2-jui": "<2.0.4",
@@ -17641,7 +17477,7 @@
"type": "tidelift"
}
],
- "time": "2024-09-09T19:04:19+00:00"
+ "time": "2025-05-17T16:05:20+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -18608,16 +18444,16 @@
},
{
"name": "symfony/browser-kit",
- "version": "v6.4.8",
+ "version": "v6.4.19",
"source": {
"type": "git",
"url": "https://github.com/symfony/browser-kit.git",
- "reference": "62ab90b92066ef6cce5e79365625b4b1432464c8"
+ "reference": "ce95f3e3239159e7fa3be7690c6ce95a4714637f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/browser-kit/zipball/62ab90b92066ef6cce5e79365625b4b1432464c8",
- "reference": "62ab90b92066ef6cce5e79365625b4b1432464c8",
+ "url": "https://api.github.com/repos/symfony/browser-kit/zipball/ce95f3e3239159e7fa3be7690c6ce95a4714637f",
+ "reference": "ce95f3e3239159e7fa3be7690c6ce95a4714637f",
"shasum": ""
},
"require": {
@@ -18656,7 +18492,7 @@
"description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/browser-kit/tree/v6.4.8"
+ "source": "https://github.com/symfony/browser-kit/tree/v6.4.19"
},
"funding": [
{
@@ -18672,20 +18508,20 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2025-02-14T11:23:16+00:00"
},
{
"name": "symfony/debug-bundle",
- "version": "v6.4.8",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug-bundle.git",
- "reference": "689f1bcb0bd3b945e3c671cbd06274b127c64dc9"
+ "reference": "7bcfaff39e094cc09455201916d016d9b2ae08ff"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/689f1bcb0bd3b945e3c671cbd06274b127c64dc9",
- "reference": "689f1bcb0bd3b945e3c671cbd06274b127c64dc9",
+ "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/7bcfaff39e094cc09455201916d016d9b2ae08ff",
+ "reference": "7bcfaff39e094cc09455201916d016d9b2ae08ff",
"shasum": ""
},
"require": {
@@ -18730,7 +18566,7 @@
"description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/debug-bundle/tree/v6.4.8"
+ "source": "https://github.com/symfony/debug-bundle/tree/v6.4.13"
},
"funding": [
{
@@ -18746,92 +18582,25 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
- },
- {
- "name": "symfony/dom-crawler",
- "version": "v6.4.8",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/dom-crawler.git",
- "reference": "105b56a0305d219349edeb60a800082eca864e4b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/105b56a0305d219349edeb60a800082eca864e4b",
- "reference": "105b56a0305d219349edeb60a800082eca864e4b",
- "shasum": ""
- },
- "require": {
- "masterminds/html5": "^2.6",
- "php": ">=8.1",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-mbstring": "~1.0"
- },
- "require-dev": {
- "symfony/css-selector": "^5.4|^6.0|^7.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\DomCrawler\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Eases DOM navigation for HTML and XML documents",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/dom-crawler/tree/v6.4.8"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-09-25T14:18:03+00:00"
},
{
"name": "symfony/maker-bundle",
- "version": "v1.61.0",
+ "version": "v1.63.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/maker-bundle.git",
- "reference": "a3b7f14d349f8f44ed752d4dde2263f77510cc18"
+ "reference": "69478ab39bc303abfbe3293006a78b09a8512425"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/a3b7f14d349f8f44ed752d4dde2263f77510cc18",
- "reference": "a3b7f14d349f8f44ed752d4dde2263f77510cc18",
+ "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/69478ab39bc303abfbe3293006a78b09a8512425",
+ "reference": "69478ab39bc303abfbe3293006a78b09a8512425",
"shasum": ""
},
"require": {
"doctrine/inflector": "^2.0",
- "nikic/php-parser": "^4.18|^5.0",
+ "nikic/php-parser": "^5.0",
"php": ">=8.1",
"symfony/config": "^6.4|^7.0",
"symfony/console": "^6.4|^7.0",
@@ -18889,7 +18658,7 @@
],
"support": {
"issues": "https://github.com/symfony/maker-bundle/issues",
- "source": "https://github.com/symfony/maker-bundle/tree/v1.61.0"
+ "source": "https://github.com/symfony/maker-bundle/tree/v1.63.0"
},
"funding": [
{
@@ -18905,20 +18674,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-29T22:50:23+00:00"
+ "time": "2025-04-26T01:41:37+00:00"
},
{
"name": "symfony/phpunit-bridge",
- "version": "v6.4.11",
+ "version": "v6.4.16",
"source": {
"type": "git",
"url": "https://github.com/symfony/phpunit-bridge.git",
- "reference": "168f412dcd6caf3813a9cc0f286cd68f6a76f070"
+ "reference": "cebafe2f1ad2d1e745c1015b7c2519592341e4e6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/168f412dcd6caf3813a9cc0f286cd68f6a76f070",
- "reference": "168f412dcd6caf3813a9cc0f286cd68f6a76f070",
+ "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/cebafe2f1ad2d1e745c1015b7c2519592341e4e6",
+ "reference": "cebafe2f1ad2d1e745c1015b7c2519592341e4e6",
"shasum": ""
},
"require": {
@@ -18938,8 +18707,8 @@
"type": "symfony-bridge",
"extra": {
"thanks": {
- "name": "phpunit/phpunit",
- "url": "https://github.com/sebastianbergmann/phpunit"
+ "url": "https://github.com/sebastianbergmann/phpunit",
+ "name": "phpunit/phpunit"
}
},
"autoload": {
@@ -18971,7 +18740,7 @@
"description": "Provides utilities for PHPUnit, especially user deprecation notices management",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/phpunit-bridge/tree/v6.4.11"
+ "source": "https://github.com/symfony/phpunit-bridge/tree/v6.4.16"
},
"funding": [
{
@@ -18987,20 +18756,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-13T14:27:37+00:00"
+ "time": "2024-11-13T15:06:22+00:00"
},
{
"name": "symfony/web-profiler-bundle",
- "version": "v6.4.11",
+ "version": "v6.4.19",
"source": {
"type": "git",
"url": "https://github.com/symfony/web-profiler-bundle.git",
- "reference": "ef4b8b4f9f51260d18abec40ceacc4bc9c5555e3"
+ "reference": "7d1026a8e950d416cb5148ae88ac23db5d264839"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/ef4b8b4f9f51260d18abec40ceacc4bc9c5555e3",
- "reference": "ef4b8b4f9f51260d18abec40ceacc4bc9c5555e3",
+ "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/7d1026a8e950d416cb5148ae88ac23db5d264839",
+ "reference": "7d1026a8e950d416cb5148ae88ac23db5d264839",
"shasum": ""
},
"require": {
@@ -19053,7 +18822,7 @@
"dev"
],
"support": {
- "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.4.11"
+ "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.4.19"
},
"funding": [
{
@@ -19069,20 +18838,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-12T09:55:28+00:00"
+ "time": "2025-02-14T12:21:59+00:00"
},
{
"name": "symplify/easy-coding-standard",
- "version": "12.3.5",
+ "version": "12.5.18",
"source": {
"type": "git",
"url": "https://github.com/easy-coding-standard/easy-coding-standard.git",
- "reference": "0d7c2cfee3debdf11c12135e90d69d1d9f4eef03"
+ "reference": "451dfeba3770f2d7476468b891a789c451ae4b34"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/0d7c2cfee3debdf11c12135e90d69d1d9f4eef03",
- "reference": "0d7c2cfee3debdf11c12135e90d69d1d9f4eef03",
+ "url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/451dfeba3770f2d7476468b891a789c451ae4b34",
+ "reference": "451dfeba3770f2d7476468b891a789c451ae4b34",
"shasum": ""
},
"require": {
@@ -19118,7 +18887,7 @@
],
"support": {
"issues": "https://github.com/easy-coding-standard/easy-coding-standard/issues",
- "source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/12.3.5"
+ "source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/12.5.18"
},
"funding": [
{
@@ -19130,7 +18899,7 @@
"type": "github"
}
],
- "time": "2024-08-08T08:43:50+00:00"
+ "time": "2025-05-14T09:38:08+00:00"
},
{
"name": "theseer/tokenizer",
diff --git a/config/packages/api_platform.yaml b/config/packages/api_platform.yaml
index b32ddac7..d55f91ea 100644
--- a/config/packages/api_platform.yaml
+++ b/config/packages/api_platform.yaml
@@ -34,4 +34,8 @@ api_platform:
keep_legacy_inflector: false
# Need to be true, or some tests will fail
- use_symfony_listeners: true
\ No newline at end of file
+ use_symfony_listeners: true
+
+ serializer:
+ # Change this to false later, to remove the hydra prefix on the API
+ hydra_prefix: true
\ No newline at end of file
diff --git a/config/packages/datatables.yaml b/config/packages/datatables.yaml
index dc116f97..6076a6c7 100644
--- a/config/packages/datatables.yaml
+++ b/config/packages/datatables.yaml
@@ -8,15 +8,14 @@ datatables:
# Set options, as documented at https://datatables.net/reference/option/
options:
- lengthMenu : [[10, 25, 50, 100, -1], [10, 25, 50, 100, "All"]]
+ lengthMenu : [[10, 25, 50, 100], [10, 25, 50, 100]] # We add the "All" option, when part tables are generated
pageLength: '%partdb.table.default_page_size%' # Set to -1 to disable pagination (i.e. show all rows) by default
- #dom: "<'row' <'col-sm-12' tr>><'row' <'col-sm-6'l><'col-sm-6 text-right'pif>>"
- dom: " <'row'<'col mb-2 input-group' B l> <'col mb-2' <'pull-end' p>>>
- <'card'
- rt
- <'card-footer card-footer-table text-muted' i >
- >
- <'row'<'col mt-2 input-group' B l> <'col mt-2' <'pull-right' p>>>"
+ dom: " <'row' <'col mb-2 input-group flex-nowrap' B l > <'col-auto mb-2' < p >>>
+ <'card'
+ rt
+ <'card-footer card-footer-table text-muted' i >
+ >
+ <'row' <'col mt-2 input-group flex-nowrap' B l > <'col-auto mt-2' < p >>>"
pagingType: 'simple_numbers'
searching: true
stateSave: true
diff --git a/config/packages/doctrine.yaml b/config/packages/doctrine.yaml
index 0986565f..3211fbbe 100644
--- a/config/packages/doctrine.yaml
+++ b/config/packages/doctrine.yaml
@@ -57,6 +57,7 @@ doctrine:
field2: App\Doctrine\Functions\Field2
natsort: App\Doctrine\Functions\Natsort
array_position: App\Doctrine\Functions\ArrayPosition
+ ilike: App\Doctrine\Functions\ILike
when@test:
doctrine:
diff --git a/config/packages/monolog.yaml b/config/packages/monolog.yaml
index 8938cc13..44a078b8 100644
--- a/config/packages/monolog.yaml
+++ b/config/packages/monolog.yaml
@@ -50,7 +50,6 @@ when@prod:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
level: debug
- formatter: monolog.formatter.json
console:
type: console
process_psr_3_messages: false
@@ -74,7 +73,6 @@ when@docker:
type: stream
path: "php://stderr"
level: debug
- formatter: monolog.formatter.json
console:
type: console
process_psr_3_messages: false
diff --git a/config/packages/nelmio_security.yaml b/config/packages/nelmio_security.yaml
index 075ce930..1cb74da7 100644
--- a/config/packages/nelmio_security.yaml
+++ b/config/packages/nelmio_security.yaml
@@ -51,12 +51,16 @@ nelmio_security:
img-src:
- '*'
- 'data:'
+ # Required for be able to load pictures in the QR code scanner
+ - 'blob:'
style-src:
- 'self'
- 'unsafe-inline'
- 'data:'
script-src:
- 'self'
+ # Required for loading the Wasm for the barcode scanner:
+ - 'wasm-unsafe-eval'
object-src:
- 'self'
- 'data:'
diff --git a/config/parameters.yaml b/config/parameters.yaml
index 3c4b9c0a..b2c10893 100644
--- a/config/parameters.yaml
+++ b/config/parameters.yaml
@@ -11,7 +11,7 @@ parameters:
partdb.banner: '%env(trim:string:BANNER)%' # The info text shown in the homepage, if empty config/banner.md is used
partdb.default_currency: '%env(string:BASE_CURRENCY)%' # The currency that is used inside the DB (and is assumed when no currency is set). This can not be changed later, so be sure to set it the currency used in your country
partdb.global_theme: '' # The theme to use globally (see public/build/themes/ for choices, use name without .css). Set to '' for default bootstrap theme
- partdb.locale_menu: ['en', 'de', 'it', 'fr', 'ru', 'ja', 'cs', 'da', 'zh'] # The languages that are shown in user drop down menu
+ partdb.locale_menu: ['en', 'de', 'it', 'fr', 'ru', 'ja', 'cs', 'da', 'zh', 'pl'] # The languages that are shown in user drop down menu
partdb.enforce_change_comments_for: '%env(csv:ENFORCE_CHANGE_COMMENTS_FOR)%' # The actions for which a change comment is required (e.g. "part_edit", "part_create", etc.). If this is empty, change comments are not required at all.
partdb.default_uri: '%env(string:DEFAULT_URI)%' # The default URI to use for the Part-DB instance (e.g. https://part-db.example.com/). This is used for generating links in emails
diff --git a/docs/concepts.md b/docs/concepts.md
index b6221026..ddf38633 100644
--- a/docs/concepts.md
+++ b/docs/concepts.md
@@ -23,7 +23,7 @@ each other so that it does not matter which one of your 1000 things of Part you
A part entity has many fields, which can be used to describe it better. Most of the fields are optional:
* **Name** (Required): The name of the part or how you want to call it. This could be a manufacturer-provided name, or a
- name you thought of yourself. The name have to be unique in a single category.
+ name you thought of yourself. Each name needs to be unique and must exist in a single category.
* **Description**: A short (single-line) description of what this part is/does. For longer information, you should use
the comment field or the specifications
* **Category** (Required): The category (see there) to which this part belongs to.
@@ -239,4 +239,4 @@ replaced with data for the actual thing.
You do not have to define a label profile to generate labels (you can just set the settings on the fly in the label
dialog), however, if you want to generate many labels, it is recommended to save the settings as a label profile, to save
-it for later usage. This ensures that all generated labels look the same.
\ No newline at end of file
+it for later usage. This ensures that all generated labels look the same.
diff --git a/docs/configuration.md b/docs/configuration.md
index c0daa407..0ad30a00 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -32,11 +32,16 @@ options listed, see `.env` file for the full list of possible env variables.
### General options
-* `DATABASE_URL`: Configures the database which Part-DB uses. For mysql use a string in the form
- of `mysql://:@:/` here
- (e.g. `DATABASE_URL=mysql://user:password@127.0.0.1:3306/part-db`). For SQLite use the following format to specify the
+* `DATABASE_URL`: Configures the database which Part-DB uses:
+ * For MySQL (or MariaDB) use a string in the form of `mysql://:@:/` here
+ (e.g. `DATABASE_URL=mysql://user:password@127.0.0.1:3306/part-db`).
+ * For SQLite use the following format to specify the
absolute path where it should be located `sqlite:///path/part/app.db`. You can use `%kernel.project_dir%` as
placeholder for the Part-DB root folder (e.g. `sqlite:///%kernel.project_dir%/var/app.db`)
+ * For Postgresql use a string in the form of `DATABASE_URL=postgresql://user:password@127.0.0.1:5432/part-db?serverVersion=x.y`.
+
+ Please note that **`serverVersion=x.y`** variable is required due to dependency of Symfony framework.
+
* `DATABASE_MYSQL_USE_SSL_CA`: If this value is set to `1` or `true` and a MySQL connection is used, then the connection
is encrypted by SSL/TLS and the server certificate is verified against the system CA certificates or the CA certificate
bundled with Part-DB. Set `DATABASE_MYSQL_SSL_VERIFY_CERT` if you want to accept all certificates.
@@ -86,6 +91,10 @@ bundled with Part-DB. Set `DATABASE_MYSQL_SSL_VERIFY_CERT` if you want to accept
* `datastructure_create`: Creation of a new datastructure (e.g. category, manufacturer, ...)
* `CHECK_FOR_UPDATES` (default `1`): Set this to 0, if you do not want Part-DB to connect to GitHub to check for new
versions, or if your server can not connect to the internet.
+* `APP_SECRET`: This variable is a configuration parameter used for various security-related purposes,
+ particularly for securing and protecting various aspects of your application. It's a secret key that is used for
+ cryptographic operations and security measures (session management, CSRF protection, etc..). Therefore this
+ value should be handled as confidential data and not shared publicly.
### E-Mail settings
@@ -243,4 +252,4 @@ The following options are available:
number of sidebar panels by changing the number of items in this list.
* `partdb.sidebar.root_node_enable`: Show a root node in the sidebar trees, of which all nodes are children of
* `partdb.sidebar.root_expanded`: Expand the root node in the sidebar trees by default
-* `partdb.available_themes`: The list of available themes a user can choose from.
\ No newline at end of file
+* `partdb.available_themes`: The list of available themes a user can choose from.
diff --git a/docs/installation/choosing_database.md b/docs/installation/choosing_database.md
index 69dc810e..cd9657d4 100644
--- a/docs/installation/choosing_database.md
+++ b/docs/installation/choosing_database.md
@@ -150,9 +150,9 @@ In the `serverVersion` parameter you can specify the version of the PostgreSQL s
The `charset` parameter specify the character set of the database. It should be set to `utf8` to ensure that all characters are stored correctly.
-If you want to use a unix socket for the connection instead of a TCP connnection, you can specify the socket path in the `unix_socket` parameter.
+If you want to use a unix socket for the connection instead of a TCP connnection, you can specify the socket path in the `host` parameter.
```shell
-DATABASE_URL="postgresql://db_user:db_password@localhost/db_name?serverVersion=12.19&charset=utf8&unix_socket=/var/run/postgresql/.s.PGSQL.5432"
+DATABASE_URL="postgresql://db_user@localhost/db_name?serverVersion=16.6&charset=utf8&host=/var/run/postgresql"
```
diff --git a/docs/installation/index.md b/docs/installation/index.md
index e7b59104..217f702a 100644
--- a/docs/installation/index.md
+++ b/docs/installation/index.md
@@ -6,4 +6,6 @@ has_children: true
---
# Installation
-Below you can find some guides to install Part-DB.
\ No newline at end of file
+Below you can find some guides to install Part-DB.
+
+For the hobbyists without much experience, we recommend the docker installation or direct installation on debian.
\ No newline at end of file
diff --git a/docs/installation/installation_docker.md b/docs/installation/installation_docker.md
index 5d357ae5..c9b46fdb 100644
--- a/docs/installation/installation_docker.md
+++ b/docs/installation/installation_docker.md
@@ -47,6 +47,12 @@ services:
- DATABASE_URL=sqlite:///%kernel.project_dir%/var/db/app.db
# In docker env logs will be redirected to stderr
- APP_ENV=docker
+
+ # Uncomment this, if you want to use the automatic database migration feature. With this you have you do not have to
+ # run the doctrine:migrations:migrate commands on installation or upgrade. A database backup is written to the uploads/
+ # folder (under .automigration-backup), so you can restore it, if the migration fails.
+ # This feature is currently experimental, so use it at your own risk!
+ # - DB_AUTOMIGRATE=true
# You can configure Part-DB using environment variables
# Below you can find the most essential ones predefined
@@ -130,6 +136,12 @@ services:
# In docker env logs will be redirected to stderr
- APP_ENV=docker
+ # Uncomment this, if you want to use the automatic database migration feature. With this you have you do not have to
+ # run the doctrine:migrations:migrate commands on installation or upgrade. A database backup is written to the uploads/
+ # folder (under .automigration-backup), so you can restore it, if the migration fails.
+ # This feature is currently experimental, so use it at your own risk!
+ # - DB_AUTOMIGRATE=true
+
# You can configure Part-DB using environment variables
# Below you can find the most essential ones predefined
# However you can add add any other environment configuration you want here
@@ -201,6 +213,10 @@ You also have to create the database as described above in step 4.
You can run the console commands described in README by
executing `docker exec --user=www-data -it partdb bin/console [command]`
+{: .warning }
+> If you run a root console inside the container, and wanna execute commands on the webserver behalf, be sure to use `sudo -E` command (with the `-E` flag) to preserve env variables from the current shell.
+> Otherwise Part-DB console might use the wrong configuration to execute commands.
+
## Troubleshooting
*Login is not possible. Login page is just reloading and no error message is shown or something like "CSFR token invalid"*:
diff --git a/docs/installation/kubernetes.md b/docs/installation/kubernetes.md
new file mode 100644
index 00000000..86504af2
--- /dev/null
+++ b/docs/installation/kubernetes.md
@@ -0,0 +1,42 @@
+---
+title: Kubernetes / Helm
+layout: default
+parent: Installation
+nav_order: 5
+---
+
+# Kubernetes / Helm Charts
+
+If you are using Kubernetes, you can use the [helm charts](https://helm.sh/) provided in this [repository](https://github.com/Part-DB/helm-charts).
+
+## Usage
+
+[Helm](https://helm.sh) must be installed to use the charts. Please refer to
+Helm's [documentation](https://helm.sh/docs) to get started.
+
+Once Helm has been set up correctly, add the repo as follows:
+
+`helm repo add part-db https://part-db.github.io/helm-charts`
+
+If you had already added this repo earlier, run `helm repo update` to retrieve
+the latest versions of the packages. You can then run `helm search repo
+part-db` to see the charts.
+
+To install the part-db chart:
+
+ helm install my-part-db part-db/part-db
+
+To uninstall the chart:
+
+ helm delete my-part-db
+
+This repository is also available at [ArtifactHUB](https://artifacthub.io/packages/search?repo=part-db).
+
+## Configuration
+
+See the README in the [chart directory](https://github.com/Part-DB/helm-charts/tree/main/charts/part-db) for more
+information on the available configuration options.
+
+## Bugreports
+
+If you find issues related to the helm charts, please open an issue in the [helm-charts repository](https://github.com/Part-DB/helm-charts).
\ No newline at end of file
diff --git a/docs/installation/nginx.md b/docs/installation/nginx.md
index 82a2e4cf..84305975 100644
--- a/docs/installation/nginx.md
+++ b/docs/installation/nginx.md
@@ -52,6 +52,11 @@ server {
location ~ \.php$ {
return 404;
}
+
+ # Set Content-Security-Policy for svg files, to block embedded javascript in there
+ location ~* \.svg$ {
+ add_header Content-Security-Policy "default-src 'self'; script-src 'none'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; frame-ancestors 'none';";
+ }
error_log /var/log/nginx/parts.error.log;
access_log /var/log/nginx/parts.access.log;
diff --git a/docs/installation/proxmox.md b/docs/installation/proxmox.md
new file mode 100644
index 00000000..865d2bf4
--- /dev/null
+++ b/docs/installation/proxmox.md
@@ -0,0 +1,31 @@
+---
+title: Proxmox VE LXC
+layout: default
+parent: Installation
+nav_order: 6
+---
+
+# Proxmox VE LXC
+
+{: .warning }
+> The proxmox VE LXC script for Part-DB is developed and maintained by [Proxmox VE Helper-Scripts](https://community-scripts.github.io/ProxmoxVE/)
+> and not by the Part-DB developers. Keep in mind that the script is not officially supported by the Part-DB developers.
+
+If you are using Proxmox VE you can use the scripts provided by [Proxmox VE Helper-Scripts community](https://community-scripts.github.io/ProxmoxVE/scripts?id=part-db)
+to easily install Part-DB in a LXC container.
+
+## Usage
+
+To create a new LXC container with Part-DB, you can use the following command in the Proxmox VE shell:
+
+```bash
+bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/part-db.sh)"
+```
+
+The same command can be used to update an existing Part-DB container.
+
+See the [helper script website](https://community-scripts.github.io/ProxmoxVE/scripts?id=part-db) for more information.
+
+## Bugreports
+
+If you find issues related to the proxmox VE LXC script, please open an issue in the [Proxmox VE Helper-Scripts repository](https://github.com/community-scripts/ProxmoxVE).
diff --git a/docs/usage/console_commands.md b/docs/usage/console_commands.md
index 00431a34..e5197251 100644
--- a/docs/usage/console_commands.md
+++ b/docs/usage/console_commands.md
@@ -25,6 +25,12 @@ is named `partdb`, you can execute the command `php bin/console cache:clear` wit
docker exec --user=www-data partdb php bin/console cache:clear
```
+{: .warning }
+> If you run a root console inside the docker container, and wanna execute commands on the webserver behalf, be sure to use `sudo -E` command (with the `-E` flag) to preserve env variables from the current shell.
+> Otherwise Part-DB console might use the wrong configuration to execute commands.
+
+## Troubleshooting
+
## User management commands
* `php bin/console partdb:users:list`: List all users of this Part-DB instance
@@ -64,4 +70,10 @@ docker exec --user=www-data partdb php bin/console cache:clear
## Database commands
* `php bin/console doctrine:migrations:migrate`: Migrate the database to the latest version
-* `php bin/console doctrine:migrations:up-to-date`: Check if the database is up-to-date
\ No newline at end of file
+* `php bin/console doctrine:migrations:up-to-date`: Check if the database is up-to-date
+
+## Attachment commands
+
+* `php bin/console partdb:attachments:download`: Download all attachments, which are not already downloaded, to the
+ local filesystem. This is useful to create local backups of the attachments, no matter what happens on the remote and
+ also makes pictures thumbnails available for the frontend for them
\ No newline at end of file
diff --git a/docs/usage/information_provider_system.md b/docs/usage/information_provider_system.md
index ee9fd394..8de83a8e 100644
--- a/docs/usage/information_provider_system.md
+++ b/docs/usage/information_provider_system.md
@@ -107,7 +107,7 @@ The following env configuration options are available:
default: `EUR`). If an offer is only available in a certain currency,
Part-DB will save the prices in their native currency, and you can use Part-DB currency conversion feature to convert
it to your preferred currency.
-* `PROVIDER_OCOTPART_COUNTRY`: The country you want to get prices in if available (optional, 2 letter ISO-code,
+* `PROVIDER_OCTOPART_COUNTRY`: The country you want to get prices in if available (optional, 2 letter ISO-code,
default: `DE`). To get the correct prices, you have to set this and the currency setting to the correct value.
* `PROVIDER_OCTOPART_SEARCH_LIMIT`: The maximum number of results to return per search (optional, default: `10`). This
affects how quickly your monthly limit is used up.
@@ -232,6 +232,26 @@ The following env configuration options are available:
completeness (prioritizing items with the most detailed information). If set to 'M', it further sorts by manufacturer name.
If set to any other value, no sorting is performed.
+### Reichelt
+
+The reichelt provider uses webscraping from [reichelt.com](https://reichelt.com/) to get part information.
+This is not an official API and could break at any time. So use it at your own risk.
+
+The following env configuration options are available:
+* `PROVIDER_REICHELT_ENABLED`: Set this to `1` to enable the Reichelt provider
+* `PROVIDER_REICHELT_CURRENCY`: The currency you want to get prices in. Only possible for countries which use Non-EUR (optional, default: `EUR`)
+* `PROVIDER_REICHELT_COUNTRY`: The country you want to get the prices for (optional, default: `DE`)
+* `PROVIDER_REICHELT_LANGUAGE`: The language you want to get the descriptions in (optional, default: `en`)
+* `PROVIDER_REICHELT_INCLUDE_VAT`: If set to `1`, the prices will be gross prices (including tax), otherwise net prices (optional, default: `1`)
+
+### Pollin
+
+The pollin provider uses webscraping from [pollin.de](https://www.pollin.de/) to get part information.
+This is not an official API and could break at any time. So use it at your own risk.
+
+The following env configuration options are available:
+* `PROVIDER_POLLIN_ENABLED`: Set this to `1` to enable the Pollin provider
+
### Custom provider
To create a custom provider, you have to create a new class implementing the `InfoProviderInterface` interface. As long
diff --git a/docs/usage/keybindings.md b/docs/usage/keybindings.md
index 698524c5..771d7684 100644
--- a/docs/usage/keybindings.md
+++ b/docs/usage/keybindings.md
@@ -117,6 +117,6 @@ For a German keyboard layout, replace `[` with `0`, and `]` with `´`.
| Key | Character |
|--------------------------------|--------------------|
| **Alt + [** (code 219) | © (Copyright char) |
-| **Alt + Shift + [** (code 219) | (Registered char) |
+| **Alt + Shift + [** (code 219) | ® (Registered char) |
| **Alt + ]** (code 221) | ™ (Trademark char) |
-| **Alt + Shift + ]** (code 221) | (Degree char) |
+| **Alt + Shift + ]** (code 221) | ° (Degree char) |
diff --git a/migrations/Version20250220215048.php b/migrations/Version20250220215048.php
new file mode 100644
index 00000000..90a73eb1
--- /dev/null
+++ b/migrations/Version20250220215048.php
@@ -0,0 +1,42 @@
+addSql('ALTER TABLE attachments ADD internal_path VARCHAR(255) DEFAULT NULL');
+ $this->addSql('ALTER TABLE attachments ADD external_path VARCHAR(255) DEFAULT NULL');
+
+ //Copy the data from path to external_path and remove the path column
+ $this->addSql('UPDATE attachments SET external_path=path');
+ $this->addSql('ALTER TABLE attachments DROP COLUMN path');
+
+
+ $this->addSql('UPDATE attachments SET internal_path=external_path WHERE external_path LIKE \'#%MEDIA#%%\' ESCAPE \'#\'');
+ $this->addSql('UPDATE attachments SET internal_path=external_path WHERE external_path LIKE \'#%BASE#%%\' ESCAPE \'#\'');
+ $this->addSql('UPDATE attachments SET internal_path=external_path WHERE external_path LIKE \'#%SECURE#%%\' ESCAPE \'#\'');
+ $this->addSql('UPDATE attachments SET internal_path=external_path WHERE external_path LIKE \'#%FOOTPRINTS#%%\' ESCAPE \'#\'');
+ $this->addSql('UPDATE attachments SET internal_path=external_path WHERE external_path LIKE \'#%FOOTPRINTS3D#%%\' ESCAPE \'#\'');
+ $this->addSql('UPDATE attachments SET external_path=NULL WHERE internal_path IS NOT NULL');
+ }
+
+ public function down(Schema $schema): void
+ {
+ $this->addSql('UPDATE attachments SET external_path=internal_path WHERE internal_path IS NOT NULL');
+ $this->addSql('ALTER TABLE attachments DROP COLUMN internal_path');
+ $this->addSql('ALTER TABLE attachments RENAME COLUMN external_path TO path');
+ }
+}
diff --git a/migrations/Version20250222165240.php b/migrations/Version20250222165240.php
new file mode 100644
index 00000000..57cd3970
--- /dev/null
+++ b/migrations/Version20250222165240.php
@@ -0,0 +1,31 @@
+addSql("UPDATE attachments SET class_name = 'Part' WHERE class_name = 'PartDB\Part'");
+ $this->addSql("UPDATE attachments SET class_name = 'Device' WHERE class_name = 'PartDB\Device'");
+ }
+
+ public function down(Schema $schema): void
+ {
+ //No down required, as the new format can also be read by older Part-DB version
+ }
+}
diff --git a/package.json b/package.json
index bafa31e2..38656c72 100644
--- a/package.json
+++ b/package.json
@@ -9,7 +9,7 @@
"@symfony/stimulus-bridge": "^3.2.0",
"@symfony/ux-translator": "file:vendor/symfony/ux-translator/assets",
"@symfony/ux-turbo": "file:vendor/symfony/ux-turbo/assets",
- "@symfony/webpack-encore": "^4.1.0",
+ "@symfony/webpack-encore": "^5.0.0",
"bootstrap": "^5.1.3",
"core-js": "^3.23.0",
"intl-messageformat": "^10.2.5",
@@ -18,7 +18,7 @@
"regenerator-runtime": "^0.13.9",
"webpack": "^5.74.0",
"webpack-bundle-analyzer": "^4.3.0",
- "webpack-cli": "^4.10.0",
+ "webpack-cli": "^5.1.0",
"webpack-notifier": "^1.15.0"
},
"license": "AGPL-3.0-or-later",
@@ -33,50 +33,52 @@
"@algolia/autocomplete-js": "^1.17.0",
"@algolia/autocomplete-plugin-recent-searches": "^1.17.0",
"@algolia/autocomplete-theme-classic": "^1.17.0",
- "@ckeditor/ckeditor5-alignment": "^41.0.0",
- "@ckeditor/ckeditor5-autoformat": "^41.0.0",
- "@ckeditor/ckeditor5-basic-styles": "^41.0.0",
- "@ckeditor/ckeditor5-block-quote": "^41.0.0",
- "@ckeditor/ckeditor5-code-block": "^41.0.0",
- "@ckeditor/ckeditor5-dev-translations": "^39.1.0",
- "@ckeditor/ckeditor5-dev-utils": "^39.1.0",
- "@ckeditor/ckeditor5-editor-classic": "^41.0.0",
- "@ckeditor/ckeditor5-essentials": "^41.0.0",
- "@ckeditor/ckeditor5-find-and-replace": "^41.0.0",
- "@ckeditor/ckeditor5-font": "^41.0.0",
- "@ckeditor/ckeditor5-heading": "^41.0.0",
- "@ckeditor/ckeditor5-highlight": "^41.0.0",
- "@ckeditor/ckeditor5-horizontal-line": "^41.0.0",
- "@ckeditor/ckeditor5-html-embed": "^41.0.0",
- "@ckeditor/ckeditor5-html-support": "^41.0.0",
- "@ckeditor/ckeditor5-image": "^41.0.0",
- "@ckeditor/ckeditor5-indent": "^41.0.0",
- "@ckeditor/ckeditor5-link": "^41.0.0",
- "@ckeditor/ckeditor5-list": "^41.0.0",
- "@ckeditor/ckeditor5-markdown-gfm": "^41.0.0",
- "@ckeditor/ckeditor5-media-embed": "^41.0.0",
- "@ckeditor/ckeditor5-paragraph": "^41.0.0",
- "@ckeditor/ckeditor5-paste-from-office": "^41.0.0",
- "@ckeditor/ckeditor5-remove-format": "^41.0.0",
- "@ckeditor/ckeditor5-source-editing": "^41.0.0",
- "@ckeditor/ckeditor5-special-characters": "^41.0.0",
- "@ckeditor/ckeditor5-table": "^41.0.0",
- "@ckeditor/ckeditor5-theme-lark": "^41.0.0",
- "@ckeditor/ckeditor5-upload": "^41.0.0",
- "@ckeditor/ckeditor5-watchdog": "^41.0.0",
- "@ckeditor/ckeditor5-word-count": "^41.0.0",
+ "@ckeditor/ckeditor5-alignment": "^44.0.0",
+ "@ckeditor/ckeditor5-autoformat": "^44.0.0",
+ "@ckeditor/ckeditor5-basic-styles": "^44.0.0",
+ "@ckeditor/ckeditor5-block-quote": "^44.0.0",
+ "@ckeditor/ckeditor5-code-block": "^44.0.0",
+ "@ckeditor/ckeditor5-dev-translations": "^43.0.1",
+ "@ckeditor/ckeditor5-dev-utils": "^43.0.1",
+ "@ckeditor/ckeditor5-editor-classic": "^44.0.0",
+ "@ckeditor/ckeditor5-essentials": "^44.0.0",
+ "@ckeditor/ckeditor5-find-and-replace": "^44.0.0",
+ "@ckeditor/ckeditor5-font": "^44.0.0",
+ "@ckeditor/ckeditor5-heading": "^44.0.0",
+ "@ckeditor/ckeditor5-highlight": "^44.0.0",
+ "@ckeditor/ckeditor5-horizontal-line": "^44.0.0",
+ "@ckeditor/ckeditor5-html-embed": "^44.0.0",
+ "@ckeditor/ckeditor5-html-support": "^44.0.0",
+ "@ckeditor/ckeditor5-image": "^44.0.0",
+ "@ckeditor/ckeditor5-indent": "^44.0.0",
+ "@ckeditor/ckeditor5-link": "^44.0.0",
+ "@ckeditor/ckeditor5-list": "^44.0.0",
+ "@ckeditor/ckeditor5-markdown-gfm": "^44.0.0",
+ "@ckeditor/ckeditor5-media-embed": "^44.0.0",
+ "@ckeditor/ckeditor5-paragraph": "^44.0.0",
+ "@ckeditor/ckeditor5-paste-from-office": "^44.0.0",
+ "@ckeditor/ckeditor5-remove-format": "^44.0.0",
+ "@ckeditor/ckeditor5-source-editing": "^44.0.0",
+ "@ckeditor/ckeditor5-special-characters": "^44.0.0",
+ "@ckeditor/ckeditor5-table": "^44.0.0",
+ "@ckeditor/ckeditor5-theme-lark": "^44.0.0",
+ "@ckeditor/ckeditor5-upload": "^44.0.0",
+ "@ckeditor/ckeditor5-watchdog": "^44.0.0",
+ "@ckeditor/ckeditor5-word-count": "^44.0.0",
"@jbtronics/bs-treeview": "^1.0.1",
+ "@part-db/html5-qrcode": "^3.1.0",
"@zxcvbn-ts/core": "^3.0.2",
"@zxcvbn-ts/language-common": "^3.0.3",
"@zxcvbn-ts/language-de": "^3.0.1",
"@zxcvbn-ts/language-en": "^3.0.1",
"@zxcvbn-ts/language-fr": "^3.0.1",
"@zxcvbn-ts/language-ja": "^3.0.1",
+ "barcode-detector": "^2.3.1",
"bootbox": "^6.0.0",
"bootswatch": "^5.1.3",
"bs-custom-file-input": "^1.3.4",
"clipboard": "^2.0.4",
- "compression-webpack-plugin": "^10.0.0",
+ "compression-webpack-plugin": "^11.1.0",
"datatables.net": "^2.0.0",
"datatables.net-bs5": "^2.0.0",
"datatables.net-buttons-bs5": "^3.0.0",
@@ -86,18 +88,17 @@
"datatables.net-select-bs5": "^2.0.0",
"dompurify": "^3.0.3",
"emoji.json": "^15.0.0",
- "exports-loader": "^3.0.0",
- "html5-qrcode": "^2.2.1",
+ "exports-loader": "^5.0.0",
"json-formatter-js": "^2.3.4",
"jszip": "^3.2.0",
"katex": "^0.16.0",
- "marked": "^12.0.0",
- "marked-gfm-heading-id": "^3.0.4",
+ "marked": "^15.0.4",
+ "marked-gfm-heading-id": "^4.1.1",
"marked-mangle": "^1.0.1",
"pdfmake": "^0.2.2",
"stimulus-use": "^0.52.0",
"tom-select": "^2.1.0",
"ts-loader": "^9.2.6",
- "typescript": "^4.0.2"
+ "typescript": "^5.7.2"
}
}
diff --git a/phpstan.dist.neon b/phpstan.dist.neon
index feccdcf6..fc7b3524 100644
--- a/phpstan.dist.neon
+++ b/phpstan.dist.neon
@@ -12,6 +12,7 @@ parameters:
- src/Doctrine/Purger/*
- src/DataTables/Adapters/TwoStepORMAdapter.php
- src/Form/Fixes/*
+ - src/Translation/Fixes/*
@@ -19,7 +20,7 @@ parameters:
treatPhpDocTypesAsCertain: false
symfony:
- container_xml_path: '%rootDir%/../../../var/cache/dev/App_KernelDevDebugContainer.xml'
+ containerXmlPath: '%rootDir%/../../../var/cache/dev/App_KernelDevDebugContainer.xml'
doctrine:
objectManagerLoader: tests/object-manager.php
@@ -29,11 +30,6 @@ parameters:
checkFunctionNameCase: false
- checkAlwaysTrueInstanceof: false
- checkAlwaysTrueCheckTypeFunctionCall: false
- checkAlwaysTrueStrictComparison: false
- reportAlwaysTrueInLastCondition: false
-
reportMaybesInPropertyPhpDocTypes: false
reportMaybesInMethodSignatures: false
@@ -42,14 +38,14 @@ parameters:
booleansInConditions: false
uselessCast: false
requireParentConstructorCall: true
- disallowedConstructs: false
overwriteVariablesWithLoop: false
closureUsesThis: false
matchingInheritedMethodNames: true
numericOperandsInArithmeticOperators: true
- strictCalls: true
switchConditionsMatchingType: false
noVariableVariables: false
+ disallowedEmpty: false
+ disallowedShortTernary: false
ignoreErrors:
# Ignore errors caused by complex mapping with AbstractStructuralDBElement
@@ -61,4 +57,7 @@ parameters:
- '#Part::getParameters\(\) should return .*AbstractParameter#'
# Ignore doctrine type mapping mismatch
- - '#Property .* type mapping mismatch: property can contain .* but database expects .*#'
\ No newline at end of file
+ - '#Property .* type mapping mismatch: property can contain .* but database expects .*#'
+
+ # Ignore error of unused WithPermPresetsTrait, as it is used in the migrations which are not analyzed by Phpstan
+ - '#Trait App\\Migration\\WithPermPresetsTrait is used zero times and is not analysed#'
diff --git a/public/.htaccess b/public/.htaccess
index ee3b5450..bfaab5de 100644
--- a/public/.htaccess
+++ b/public/.htaccess
@@ -118,3 +118,10 @@ DirectoryIndex index.php
# RedirectTemp cannot be used instead
+
+# Set Content-Security-Policy for svg files (and compressed variants), to block embedded javascript in there
+
+
+ Header set Content-Security-Policy "default-src 'self'; script-src 'none'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; frame-ancestors 'none';"
+
+
\ No newline at end of file
diff --git a/public/kicad/footprints.txt b/public/kicad/footprints.txt
index 0f65227e..8f0f944c 100644
--- a/public/kicad/footprints.txt
+++ b/public/kicad/footprints.txt
@@ -1,6 +1,6 @@
# This file contains all the KiCad footprints available in the official library
# Generated by footprints.sh
-# on Sat Dec 2 19:52:08 CET 2023
+# on Sun Feb 16 21:19:56 CET 2025
Audio_Module:Reverb_BTDR-1H
Audio_Module:Reverb_BTDR-1V
Battery:BatteryClip_Keystone_54_D16-19mm
@@ -38,6 +38,8 @@ Battery:BatteryHolder_MPD_BC2003_1x2032
Battery:BatteryHolder_MPD_BC2AAPC_2xAA
Battery:BatteryHolder_MPD_BH-18650-PC2
Battery:BatteryHolder_Multicomp_BC-2001_1x2032
+Battery:BatteryHolder_MYOUNG_BS-07-A1BJ001_CR2032
+Battery:BatteryHolder_Renata_SMTU2032-LF_1x2032
Battery:BatteryHolder_Seiko_MS621F
Battery:BatteryHolder_TruPower_BH-331P_3xAA
Battery:Battery_CR1225
@@ -45,6 +47,7 @@ Battery:Battery_Panasonic_CR1025-VSK_Vertical_CircularHoles
Battery:Battery_Panasonic_CR1220-VCN_Vertical_CircularHoles
Battery:Battery_Panasonic_CR1632-V1AN_Vertical_CircularHoles
Battery:Battery_Panasonic_CR2025-V1AK_Vertical_CircularHoles
+Battery:Battery_Panasonic_CR2032-HFN_Horizontal_CircularHoles
Battery:Battery_Panasonic_CR2032-VS1N_Vertical_CircularHoles
Battery:Battery_Panasonic_CR2354-VCN_Vertical_CircularHoles
Battery:Battery_Panasonic_CR2450-VAN_Vertical_CircularHoles
@@ -177,16 +180,16 @@ Button_Switch_SMD:SW_DPDT_CK_JS202011JCQN
Button_Switch_SMD:SW_MEC_5GSH9
Button_Switch_SMD:SW_Push_1P1T-MP_NO_Horizontal_Alps_SKRTLAE010
Button_Switch_SMD:SW_Push_1P1T-SH_NO_CK_KMR2xxG
-Button_Switch_SMD:SW_Push_1P1T_NO_6x6mm_H9.5mm
Button_Switch_SMD:SW_Push_1P1T_NO_CK_KMR2
Button_Switch_SMD:SW_Push_1P1T_NO_CK_KSC6xxJ
Button_Switch_SMD:SW_Push_1P1T_NO_CK_KSC7xxJ
Button_Switch_SMD:SW_Push_1P1T_NO_CK_PTS125Sx43PSMTR
Button_Switch_SMD:SW_Push_1P1T_NO_Vertical_Wuerth_434133025816
Button_Switch_SMD:SW_Push_1P1T_XKB_TS-1187A
+Button_Switch_SMD:SW_Push_1TS009xxxx-xxxx-xxxx_6x6x5mm
Button_Switch_SMD:SW_Push_SPST_NO_Alps_SKRK
Button_Switch_SMD:SW_SP3T_PCM13
-Button_Switch_SMD:SW_SPDT_CK-JS102011SAQN
+Button_Switch_SMD:SW_SPDT_CK_JS102011SAQN
Button_Switch_SMD:SW_SPDT_PCM12
Button_Switch_SMD:SW_SPDT_REED_MSDM-DT
Button_Switch_SMD:SW_SPST_B3S-1000
@@ -219,6 +222,9 @@ Button_Switch_SMD:SW_SPST_Omron_B3FS-105xP
Button_Switch_SMD:SW_SPST_Panasonic_EVQPL_3PL_5PL_PT_A08
Button_Switch_SMD:SW_SPST_Panasonic_EVQPL_3PL_5PL_PT_A15
Button_Switch_SMD:SW_SPST_PTS645
+Button_Switch_SMD:SW_SPST_PTS647_Sx38
+Button_Switch_SMD:SW_SPST_PTS647_Sx50
+Button_Switch_SMD:SW_SPST_PTS647_Sx70
Button_Switch_SMD:SW_SPST_PTS810
Button_Switch_SMD:SW_SPST_REED_CT05-XXXX-G1
Button_Switch_SMD:SW_SPST_REED_CT05-XXXX-J1
@@ -235,9 +241,8 @@ Button_Switch_SMD:SW_Tactile_SPST_NO_Straight_CK_PTS636Sx25SMTRLFS
Button_Switch_THT:KSA_Tactile_SPST
Button_Switch_THT:Nidec_Copal_SH-7010C
Button_Switch_THT:Push_E-Switch_KS01Q01
-Button_Switch_THT:SW_CuK_JS202011AQN_DPDT_Angled
-Button_Switch_THT:SW_CuK_JS202011CQN_DPDT_Straight
-Button_Switch_THT:SW_CuK_OS102011MA1QN1_SPDT_Angled
+Button_Switch_THT:SW_CK_JS202011AQN_DPDT_Angled
+Button_Switch_THT:SW_CK_JS202011CQN_DPDT_Straight
Button_Switch_THT:SW_CW_GPTS203211B
Button_Switch_THT:SW_DIP_SPSTx01_Piano_10.8x4.1mm_W7.62mm_P2.54mm
Button_Switch_THT:SW_DIP_SPSTx01_Slide_6.7x4.1mm_W7.62mm_P2.54mm_LowProfile
@@ -322,8 +327,12 @@ Button_Switch_THT:SW_PUSH_6mm_H9.5mm
Button_Switch_THT:SW_PUSH_E-Switch_FS5700DP_DPDT
Button_Switch_THT:SW_PUSH_LCD_E3_SAxxxx
Button_Switch_THT:SW_PUSH_LCD_E3_SAxxxx_SocketPins
-Button_Switch_THT:SW_Slide_1P2T_CK_OS102011MS2Q
+Button_Switch_THT:SW_Slide-03_Wuerth-WS-SLTV_10x2.5x6.4_P2.54mm
+Button_Switch_THT:SW_Slide_SPDT_Angled_CK_OS102011MA1Q
+Button_Switch_THT:SW_Slide_SPDT_Straight_CK_OS102011MS2Q
Button_Switch_THT:SW_SPST_Omron_B3F-315x_Angled
+Button_Switch_THT:SW_SPST_Omron_B3F-40xx
+Button_Switch_THT:SW_SPST_Omron_B3F-50xx
Button_Switch_THT:SW_Tactile_SKHH_Angled
Button_Switch_THT:SW_Tactile_SPST_Angled_PTS645Vx31-2LFS
Button_Switch_THT:SW_Tactile_SPST_Angled_PTS645Vx39-2LFS
@@ -332,6 +341,9 @@ Button_Switch_THT:SW_Tactile_SPST_Angled_PTS645Vx83-2LFS
Button_Switch_THT:SW_Tactile_Straight_KSA0Axx1LFTR
Button_Switch_THT:SW_Tactile_Straight_KSL0Axx1LFTR
Button_Switch_THT:SW_TH_Tactile_Omron_B3F-10xx
+Button_Switch_THT:SW_XKB_DM1-16UC-1
+Button_Switch_THT:SW_XKB_DM1-16UD-1
+Button_Switch_THT:SW_XKB_DM1-16UP-1
Buzzer_Beeper:Buzzer_12x9.5RM7.6
Buzzer_Beeper:Buzzer_15x7.5RM7.6
Buzzer_Beeper:Buzzer_CUI_CPT-9019S-SMT
@@ -442,6 +454,8 @@ Capacitor_SMD:C_1206_3216Metric
Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder
Capacitor_SMD:C_1210_3225Metric
Capacitor_SMD:C_1210_3225Metric_Pad1.33x2.70mm_HandSolder
+Capacitor_SMD:C_1808_4520Metric
+Capacitor_SMD:C_1808_4520Metric_Pad1.72x2.30mm_HandSolder
Capacitor_SMD:C_1812_4532Metric
Capacitor_SMD:C_1812_4532Metric_Pad1.57x3.40mm_HandSolder
Capacitor_SMD:C_1825_4564Metric
@@ -910,7 +924,12 @@ Capacitor_THT:C_Rect_L9.0mm_W9.8mm_P7.50mm_MKT
Capacitor_THT:DX_5R5HxxxxU_D11.5mm_P10.00mm
Capacitor_THT:DX_5R5VxxxxU_D11.5mm_P5.00mm
Capacitor_THT:DX_5R5VxxxxU_D19.0mm_P5.00mm
-Connector:Banana_Cliff_FCR7350x_S16N-PC_Horizontal
+Connector:Banana_Cliff_FCR7350B_S16N-PC_Horizontal
+Connector:Banana_Cliff_FCR7350G_S16N-PC_Horizontal
+Connector:Banana_Cliff_FCR7350L_S16N-PC_Horizontal
+Connector:Banana_Cliff_FCR7350N_S16N-PC_Horizontal
+Connector:Banana_Cliff_FCR7350R_S16N-PC_Horizontal
+Connector:Banana_Cliff_FCR7350Y_S16N-PC_Horizontal
Connector:Banana_Jack_1Pin
Connector:Banana_Jack_2Pin
Connector:Banana_Jack_3Pin
@@ -948,9 +967,13 @@ Connector_AMASS:AMASS_XT60-M_1x02_P7.20mm_Vertical
Connector_AMASS:AMASS_XT60IPW-M_1x03_P7.20mm_Horizontal
Connector_AMASS:AMASS_XT60PW-F_1x02_P7.20mm_Horizontal
Connector_AMASS:AMASS_XT60PW-M_1x02_P7.20mm_Horizontal
+Connector_AMASS:AMASS_XT90PW-M_1x02_P10.90mm_Horizontal
Connector_Amphenol:Amphenol_M8S-03PMMR-SF8001
Connector_Audio:Jack_3.5mm_CUI_SJ-3523-SMT_Horizontal
Connector_Audio:Jack_3.5mm_CUI_SJ-3524-SMT_Horizontal
+Connector_Audio:Jack_3.5mm_CUI_SJ1-3513N_Horizontal
+Connector_Audio:Jack_3.5mm_CUI_SJ1-3514N_Horizontal
+Connector_Audio:Jack_3.5mm_CUI_SJ1-3515N_Horizontal
Connector_Audio:Jack_3.5mm_CUI_SJ1-3523N_Horizontal
Connector_Audio:Jack_3.5mm_CUI_SJ1-3524N_Horizontal
Connector_Audio:Jack_3.5mm_CUI_SJ1-3525N_Horizontal
@@ -1161,11 +1184,14 @@ Connector_BarrelJack:BarrelJack_CLIFF_FC681465S_SMT_Horizontal
Connector_BarrelJack:BarrelJack_CUI_PJ-036AH-SMT_Horizontal
Connector_BarrelJack:BarrelJack_CUI_PJ-063AH_Horizontal
Connector_BarrelJack:BarrelJack_CUI_PJ-063AH_Horizontal_CircularHoles
+Connector_BarrelJack:BarrelJack_CUI_PJ-079BH_Horizontal
Connector_BarrelJack:BarrelJack_CUI_PJ-102AH_Horizontal
Connector_BarrelJack:BarrelJack_GCT_DCJ200-10-A_Horizontal
Connector_BarrelJack:BarrelJack_Horizontal
Connector_BarrelJack:BarrelJack_Kycon_KLDX-0202-xC_Horizontal
Connector_BarrelJack:BarrelJack_SwitchcraftConxall_RAPC10U_Horizontal
+Connector_BarrelJack:BarrelJack_Wuerth_694102107102_1.0x3.9mm
+Connector_BarrelJack:BarrelJack_Wuerth_694103107102_1.35x3.9mm
Connector_BarrelJack:BarrelJack_Wuerth_694106106102_2.0x5.5mm
Connector_BarrelJack:BarrelJack_Wuerth_694108106102_2.5x5.5mm
Connector_BarrelJack:BarrelJack_Wuerth_6941xx301002
@@ -1178,6 +1204,11 @@ Connector_Card:microSD_HC_Molex_104031-0811
Connector_Card:microSD_HC_Molex_47219-2001
Connector_Card:microSD_HC_Wuerth_693072010801
Connector_Card:microSIM_JAE_SF53S006VCBR2000
+Connector_Card:nanoSIM_GCT_SIM8060-6-0-14-00
+Connector_Card:nanoSIM_GCT_SIM8060-6-1-14-00
+Connector_Card:nanoSIM_Hinged_CUI_NSIM-2-C
+Connector_Card:SD-SIM_microSD-microSIM_Molex_104168-1620
+Connector_Card:SD_Card_Device_16mm_SlotDepth
Connector_Card:SD_Hirose_DM1AA_SF_PEJ82
Connector_Card:SD_Kyocera_145638009211859+
Connector_Card:SD_Kyocera_145638009511859+
@@ -1192,6 +1223,8 @@ Connector_Coaxial:BNC_TEConnectivity_1478035_Horizontal
Connector_Coaxial:BNC_TEConnectivity_1478204_Vertical
Connector_Coaxial:BNC_Win_364A2x95_Horizontal
Connector_Coaxial:CoaxialSwitch_Hirose_MS-156C3_Horizontal
+Connector_Coaxial:LEMO-EPG.00.302.NLN
+Connector_Coaxial:LEMO-EPL.00.250.NTN
Connector_Coaxial:MMCX_Molex_73415-0961_Horizontal_0.8mm-PCB
Connector_Coaxial:MMCX_Molex_73415-0961_Horizontal_1.0mm-PCB
Connector_Coaxial:MMCX_Molex_73415-0961_Horizontal_1.6mm-PCB
@@ -1207,10 +1240,11 @@ Connector_Coaxial:SMA_Amphenol_132291-12_Vertical
Connector_Coaxial:SMA_Amphenol_132291_Vertical
Connector_Coaxial:SMA_Amphenol_901-143_Horizontal
Connector_Coaxial:SMA_Amphenol_901-144_Vertical
+Connector_Coaxial:SMA_BAT_Wireless_BWSMA-KWE-Z001
Connector_Coaxial:SMA_Molex_73251-1153_EdgeMount_Horizontal
Connector_Coaxial:SMA_Molex_73251-2120_EdgeMount_Horizontal
Connector_Coaxial:SMA_Molex_73251-2200_Horizontal
-Connector_Coaxial:SMA_Samtec_SMA-J-P-X-ST-EM1_EdgeMount
+Connector_Coaxial:SMA_Samtec_SMA-J-P-H-ST-EM1_EdgeMount
Connector_Coaxial:SMA_Wurth_60312002114503_Vertical
Connector_Coaxial:SMA_Wurth_60312102114405_Vertical
Connector_Coaxial:SMB_Jack_Vertical
@@ -1290,126 +1324,110 @@ Connector_DIN:DIN41612_R_3x16_Female_Horizontal_THT
Connector_DIN:DIN41612_R_3x16_Male_Vertical_THT
Connector_DIN:DIN41612_R_3x32_Female_Horizontal_THT
Connector_DIN:DIN41612_R_3x32_Male_Vertical_THT
-Connector_Dsub:DSUB-15-HD_Female_Horizontal_P2.29x1.98mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm
-Connector_Dsub:DSUB-15-HD_Female_Horizontal_P2.29x1.98mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm
-Connector_Dsub:DSUB-15-HD_Female_Horizontal_P2.29x1.98mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-15-HD_Female_Horizontal_P2.29x2.54mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-15-HD_Female_Vertical_P2.29x1.98mm_MountingHoles
-Connector_Dsub:DSUB-15-HD_Male_Horizontal_P2.29x1.98mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm
-Connector_Dsub:DSUB-15-HD_Male_Horizontal_P2.29x1.98mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm
-Connector_Dsub:DSUB-15-HD_Male_Horizontal_P2.29x1.98mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-15-HD_Male_Horizontal_P2.29x2.54mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-15-HD_Male_Vertical_P2.29x1.98mm_MountingHoles
-Connector_Dsub:DSUB-15_Female_EdgeMount_P2.77mm
-Connector_Dsub:DSUB-15_Female_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-15_Female_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm
-Connector_Dsub:DSUB-15_Female_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm
-Connector_Dsub:DSUB-15_Female_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset7.48mm
-Connector_Dsub:DSUB-15_Female_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm
-Connector_Dsub:DSUB-15_Female_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-15_Female_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm
-Connector_Dsub:DSUB-15_Female_Vertical_P2.77x2.84mm
-Connector_Dsub:DSUB-15_Female_Vertical_P2.77x2.84mm_MountingHoles
-Connector_Dsub:DSUB-15_Male_EdgeMount_P2.77mm
-Connector_Dsub:DSUB-15_Male_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-15_Male_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm
-Connector_Dsub:DSUB-15_Male_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm
-Connector_Dsub:DSUB-15_Male_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset7.48mm
-Connector_Dsub:DSUB-15_Male_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm
-Connector_Dsub:DSUB-15_Male_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-15_Male_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm
-Connector_Dsub:DSUB-15_Male_Vertical_P2.77x2.84mm
-Connector_Dsub:DSUB-15_Male_Vertical_P2.77x2.84mm_MountingHoles
-Connector_Dsub:DSUB-25_Female_EdgeMount_P2.77mm
-Connector_Dsub:DSUB-25_Female_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-25_Female_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm
-Connector_Dsub:DSUB-25_Female_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm
-Connector_Dsub:DSUB-25_Female_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset7.48mm
-Connector_Dsub:DSUB-25_Female_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm
-Connector_Dsub:DSUB-25_Female_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-25_Female_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm
-Connector_Dsub:DSUB-25_Female_Vertical_P2.77x2.84mm
-Connector_Dsub:DSUB-25_Female_Vertical_P2.77x2.84mm_MountingHoles
-Connector_Dsub:DSUB-25_Male_EdgeMount_P2.77mm
-Connector_Dsub:DSUB-25_Male_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-25_Male_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm
-Connector_Dsub:DSUB-25_Male_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm
-Connector_Dsub:DSUB-25_Male_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset7.48mm
-Connector_Dsub:DSUB-25_Male_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm
-Connector_Dsub:DSUB-25_Male_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-25_Male_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm
-Connector_Dsub:DSUB-25_Male_Vertical_P2.77x2.84mm
-Connector_Dsub:DSUB-25_Male_Vertical_P2.77x2.84mm_MountingHoles
-Connector_Dsub:DSUB-26-HD_Female_Horizontal_P2.29x1.98mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm
-Connector_Dsub:DSUB-26-HD_Female_Horizontal_P2.29x1.98mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm
-Connector_Dsub:DSUB-26-HD_Female_Horizontal_P2.29x1.98mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-26-HD_Female_Horizontal_P2.29x2.54mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-26-HD_Female_Vertical_P2.29x1.98mm_MountingHoles
-Connector_Dsub:DSUB-26-HD_Male_Horizontal_P2.29x1.98mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm
-Connector_Dsub:DSUB-26-HD_Male_Horizontal_P2.29x1.98mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm
-Connector_Dsub:DSUB-26-HD_Male_Horizontal_P2.29x1.98mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-26-HD_Male_Horizontal_P2.29x2.54mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-26-HD_Male_Vertical_P2.29x1.98mm_MountingHoles
-Connector_Dsub:DSUB-37_Female_EdgeMount_P2.77mm
-Connector_Dsub:DSUB-37_Female_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-37_Female_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm
-Connector_Dsub:DSUB-37_Female_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm
-Connector_Dsub:DSUB-37_Female_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset7.48mm
-Connector_Dsub:DSUB-37_Female_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm
-Connector_Dsub:DSUB-37_Female_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-37_Female_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm
-Connector_Dsub:DSUB-37_Female_Vertical_P2.77x2.84mm
-Connector_Dsub:DSUB-37_Female_Vertical_P2.77x2.84mm_MountingHoles
-Connector_Dsub:DSUB-37_Male_EdgeMount_P2.77mm
-Connector_Dsub:DSUB-37_Male_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-37_Male_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm
-Connector_Dsub:DSUB-37_Male_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm
-Connector_Dsub:DSUB-37_Male_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset7.48mm
-Connector_Dsub:DSUB-37_Male_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm
-Connector_Dsub:DSUB-37_Male_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-37_Male_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm
-Connector_Dsub:DSUB-37_Male_Vertical_P2.77x2.84mm
-Connector_Dsub:DSUB-37_Male_Vertical_P2.77x2.84mm_MountingHoles
-Connector_Dsub:DSUB-44-HD_Female_Horizontal_P2.29x1.98mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm
-Connector_Dsub:DSUB-44-HD_Female_Horizontal_P2.29x1.98mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm
-Connector_Dsub:DSUB-44-HD_Female_Horizontal_P2.29x1.98mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-44-HD_Female_Horizontal_P2.29x2.54mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-44-HD_Female_Vertical_P2.29x1.98mm_MountingHoles
-Connector_Dsub:DSUB-44-HD_Male_Horizontal_P2.29x1.98mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm
-Connector_Dsub:DSUB-44-HD_Male_Horizontal_P2.29x1.98mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm
-Connector_Dsub:DSUB-44-HD_Male_Horizontal_P2.29x1.98mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-44-HD_Male_Horizontal_P2.29x2.54mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-44-HD_Male_Vertical_P2.29x1.98mm_MountingHoles
-Connector_Dsub:DSUB-62-HD_Female_Horizontal_P2.41x1.98mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm
-Connector_Dsub:DSUB-62-HD_Female_Horizontal_P2.41x1.98mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm
-Connector_Dsub:DSUB-62-HD_Female_Horizontal_P2.41x1.98mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-62-HD_Female_Horizontal_P2.41x2.54mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-62-HD_Female_Vertical_P2.41x1.98mm_MountingHoles
-Connector_Dsub:DSUB-62-HD_Male_Horizontal_P2.41x1.98mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm
-Connector_Dsub:DSUB-62-HD_Male_Horizontal_P2.41x1.98mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm
-Connector_Dsub:DSUB-62-HD_Male_Horizontal_P2.41x1.98mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-62-HD_Male_Horizontal_P2.41x2.54mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-62-HD_Male_Vertical_P2.41x1.98mm_MountingHoles
-Connector_Dsub:DSUB-9_Female_EdgeMount_P2.77mm
-Connector_Dsub:DSUB-9_Female_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-9_Female_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm
-Connector_Dsub:DSUB-9_Female_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm
-Connector_Dsub:DSUB-9_Female_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset7.48mm
-Connector_Dsub:DSUB-9_Female_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm
-Connector_Dsub:DSUB-9_Female_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-9_Female_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm
-Connector_Dsub:DSUB-9_Female_Vertical_P2.77x2.84mm
-Connector_Dsub:DSUB-9_Female_Vertical_P2.77x2.84mm_MountingHoles
-Connector_Dsub:DSUB-9_Male_EdgeMount_P2.77mm
-Connector_Dsub:DSUB-9_Male_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-9_Male_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm
-Connector_Dsub:DSUB-9_Male_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm
-Connector_Dsub:DSUB-9_Male_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset7.48mm
-Connector_Dsub:DSUB-9_Male_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm
-Connector_Dsub:DSUB-9_Male_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm
-Connector_Dsub:DSUB-9_Male_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm
-Connector_Dsub:DSUB-9_Male_Vertical_P2.77x2.84mm
-Connector_Dsub:DSUB-9_Male_Vertical_P2.77x2.84mm_MountingHoles
+Connector_Dsub:DSUB-15-HD_Pins_Horizontal_P2.29x1.90mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm
+Connector_Dsub:DSUB-15-HD_Pins_Horizontal_P2.29x2.54mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm
+Connector_Dsub:DSUB-15-HD_Pins_Vertical_P2.29x1.98mm_MountingHoles
+Connector_Dsub:DSUB-15-HD_Socket_Horizontal_P2.29x1.90mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm
+Connector_Dsub:DSUB-15-HD_Socket_Horizontal_P2.29x2.54mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm
+Connector_Dsub:DSUB-15-HD_Socket_Vertical_P2.29x1.98mm_MountingHoles
+Connector_Dsub:DSUB-15_Pins_EdgeMount_P2.77mm
+Connector_Dsub:DSUB-15_Pins_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm
+Connector_Dsub:DSUB-15_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm
+Connector_Dsub:DSUB-15_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm
+Connector_Dsub:DSUB-15_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset4.94mm
+Connector_Dsub:DSUB-15_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm
+Connector_Dsub:DSUB-15_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm
+Connector_Dsub:DSUB-15_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm
+Connector_Dsub:DSUB-15_Pins_Vertical_P2.77x2.84mm
+Connector_Dsub:DSUB-15_Pins_Vertical_P2.77x2.84mm_MountingHoles
+Connector_Dsub:DSUB-15_Socket_EdgeMount_P2.77mm
+Connector_Dsub:DSUB-15_Socket_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm
+Connector_Dsub:DSUB-15_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm
+Connector_Dsub:DSUB-15_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm
+Connector_Dsub:DSUB-15_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset4.94mm
+Connector_Dsub:DSUB-15_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm
+Connector_Dsub:DSUB-15_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm
+Connector_Dsub:DSUB-15_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm
+Connector_Dsub:DSUB-15_Socket_Vertical_P2.77x2.84mm
+Connector_Dsub:DSUB-15_Socket_Vertical_P2.77x2.84mm_MountingHoles
+Connector_Dsub:DSUB-25_Pins_EdgeMount_P2.77mm
+Connector_Dsub:DSUB-25_Pins_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm
+Connector_Dsub:DSUB-25_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm
+Connector_Dsub:DSUB-25_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm
+Connector_Dsub:DSUB-25_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset4.94mm
+Connector_Dsub:DSUB-25_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm
+Connector_Dsub:DSUB-25_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm
+Connector_Dsub:DSUB-25_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm
+Connector_Dsub:DSUB-25_Pins_Vertical_P2.77x2.84mm
+Connector_Dsub:DSUB-25_Pins_Vertical_P2.77x2.84mm_MountingHoles
+Connector_Dsub:DSUB-25_Socket_EdgeMount_P2.77mm
+Connector_Dsub:DSUB-25_Socket_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm
+Connector_Dsub:DSUB-25_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm
+Connector_Dsub:DSUB-25_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm
+Connector_Dsub:DSUB-25_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset4.94mm
+Connector_Dsub:DSUB-25_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm
+Connector_Dsub:DSUB-25_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm
+Connector_Dsub:DSUB-25_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm
+Connector_Dsub:DSUB-25_Socket_Vertical_P2.77x2.84mm
+Connector_Dsub:DSUB-25_Socket_Vertical_P2.77x2.84mm_MountingHoles
+Connector_Dsub:DSUB-26-HD_Pins_Horizontal_P2.29x1.90mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm
+Connector_Dsub:DSUB-26-HD_Pins_Horizontal_P2.29x2.54mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm
+Connector_Dsub:DSUB-26-HD_Pins_Vertical_P2.29x1.98mm_MountingHoles
+Connector_Dsub:DSUB-26-HD_Socket_Horizontal_P2.29x1.90mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm
+Connector_Dsub:DSUB-26-HD_Socket_Horizontal_P2.29x2.54mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm
+Connector_Dsub:DSUB-26-HD_Socket_Vertical_P2.29x1.98mm_MountingHoles
+Connector_Dsub:DSUB-37_Pins_EdgeMount_P2.77mm
+Connector_Dsub:DSUB-37_Pins_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm
+Connector_Dsub:DSUB-37_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm
+Connector_Dsub:DSUB-37_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm
+Connector_Dsub:DSUB-37_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset4.94mm
+Connector_Dsub:DSUB-37_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm
+Connector_Dsub:DSUB-37_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm
+Connector_Dsub:DSUB-37_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm
+Connector_Dsub:DSUB-37_Pins_Vertical_P2.77x2.84mm
+Connector_Dsub:DSUB-37_Pins_Vertical_P2.77x2.84mm_MountingHoles
+Connector_Dsub:DSUB-37_Socket_EdgeMount_P2.77mm
+Connector_Dsub:DSUB-37_Socket_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm
+Connector_Dsub:DSUB-37_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm
+Connector_Dsub:DSUB-37_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm
+Connector_Dsub:DSUB-37_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset4.94mm
+Connector_Dsub:DSUB-37_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm
+Connector_Dsub:DSUB-37_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm
+Connector_Dsub:DSUB-37_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm
+Connector_Dsub:DSUB-37_Socket_Vertical_P2.77x2.84mm
+Connector_Dsub:DSUB-37_Socket_Vertical_P2.77x2.84mm_MountingHoles
+Connector_Dsub:DSUB-44-HD_Pins_Horizontal_P2.29x1.90mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm
+Connector_Dsub:DSUB-44-HD_Pins_Horizontal_P2.29x2.54mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm
+Connector_Dsub:DSUB-44-HD_Pins_Vertical_P2.29x1.98mm_MountingHoles
+Connector_Dsub:DSUB-44-HD_Socket_Horizontal_P2.29x1.90mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm
+Connector_Dsub:DSUB-44-HD_Socket_Horizontal_P2.29x2.54mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm
+Connector_Dsub:DSUB-44-HD_Socket_Vertical_P2.29x1.98mm_MountingHoles
+Connector_Dsub:DSUB-62-HD_Pins_Horizontal_P2.41x1.90mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm
+Connector_Dsub:DSUB-62-HD_Pins_Horizontal_P2.41x2.54mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm
+Connector_Dsub:DSUB-62-HD_Pins_Vertical_P2.41x1.98mm_MountingHoles
+Connector_Dsub:DSUB-62-HD_Socket_Horizontal_P2.41x1.90mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm
+Connector_Dsub:DSUB-62-HD_Socket_Horizontal_P2.41x2.54mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm
+Connector_Dsub:DSUB-62-HD_Socket_Vertical_P2.41x1.98mm_MountingHoles
+Connector_Dsub:DSUB-9_Pins_EdgeMount_P2.77mm
+Connector_Dsub:DSUB-9_Pins_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm
+Connector_Dsub:DSUB-9_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm
+Connector_Dsub:DSUB-9_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm
+Connector_Dsub:DSUB-9_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset4.94mm
+Connector_Dsub:DSUB-9_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm
+Connector_Dsub:DSUB-9_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm
+Connector_Dsub:DSUB-9_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm
+Connector_Dsub:DSUB-9_Pins_Vertical_P2.77x2.84mm
+Connector_Dsub:DSUB-9_Pins_Vertical_P2.77x2.84mm_MountingHoles
+Connector_Dsub:DSUB-9_Socket_EdgeMount_P2.77mm
+Connector_Dsub:DSUB-9_Socket_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm
+Connector_Dsub:DSUB-9_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm
+Connector_Dsub:DSUB-9_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm
+Connector_Dsub:DSUB-9_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset4.94mm
+Connector_Dsub:DSUB-9_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm
+Connector_Dsub:DSUB-9_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm
+Connector_Dsub:DSUB-9_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm
+Connector_Dsub:DSUB-9_Socket_Vertical_P2.77x2.84mm
+Connector_Dsub:DSUB-9_Socket_Vertical_P2.77x2.84mm_MountingHoles
Connector_FFC-FPC:Hirose_FH12-10S-0.5SH_1x10-1MP_P0.50mm_Horizontal
Connector_FFC-FPC:Hirose_FH12-11S-0.5SH_1x11-1MP_P0.50mm_Horizontal
Connector_FFC-FPC:Hirose_FH12-12S-0.5SH_1x12-1MP_P0.50mm_Horizontal
@@ -1438,6 +1456,27 @@ Connector_FFC-FPC:Hirose_FH12-50S-0.5SH_1x50-1MP_P0.50mm_Horizontal
Connector_FFC-FPC:Hirose_FH12-53S-0.5SH_1x53-1MP_P0.50mm_Horizontal
Connector_FFC-FPC:Hirose_FH12-6S-0.5SH_1x06-1MP_P0.50mm_Horizontal
Connector_FFC-FPC:Hirose_FH12-8S-0.5SH_1x08-1MP_P0.50mm_Horizontal
+Connector_FFC-FPC:Hirose_FH26-13S-0.3SHW_2Rows-13Pins-1MP_P0.60mm_Horizontal
+Connector_FFC-FPC:Hirose_FH26-15S-0.3SHW_2Rows-15Pins-1MP_P0.60mm_Horizontal
+Connector_FFC-FPC:Hirose_FH26-17S-0.3SHW_2Rows-17Pins-1MP_P0.60mm_Horizontal
+Connector_FFC-FPC:Hirose_FH26-19S-0.3SHW_2Rows-19Pins-1MP_P0.60mm_Horizontal
+Connector_FFC-FPC:Hirose_FH26-21S-0.3SHW_2Rows-21Pins-1MP_P0.60mm_Horizontal
+Connector_FFC-FPC:Hirose_FH26-23S-0.3SHW_2Rows-23Pins-1MP_P0.60mm_Horizontal
+Connector_FFC-FPC:Hirose_FH26-25S-0.3SHW_2Rows-25Pins-1MP_P0.60mm_Horizontal
+Connector_FFC-FPC:Hirose_FH26-27S-0.3SHW_2Rows-27Pins-1MP_P0.60mm_Horizontal
+Connector_FFC-FPC:Hirose_FH26-29S-0.3SHW_2Rows-29Pins-1MP_P0.60mm_Horizontal
+Connector_FFC-FPC:Hirose_FH26-31S-0.3SHW_2Rows-31Pins-1MP_P0.60mm_Horizontal
+Connector_FFC-FPC:Hirose_FH26-33S-0.3SHW_2Rows-33Pins-1MP_P0.60mm_Horizontal
+Connector_FFC-FPC:Hirose_FH26-35S-0.3SHW_2Rows-35Pins-1MP_P0.60mm_Horizontal
+Connector_FFC-FPC:Hirose_FH26-37S-0.3SHW_2Rows-37Pins-1MP_P0.60mm_Horizontal
+Connector_FFC-FPC:Hirose_FH26-39S-0.3SHW_2Rows-39Pins-1MP_P0.60mm_Horizontal
+Connector_FFC-FPC:Hirose_FH26-41S-0.3SHW_2Rows-41Pins-1MP_P0.60mm_Horizontal
+Connector_FFC-FPC:Hirose_FH26-45S-0.3SHW_2Rows-45Pins-1MP_P0.60mm_Horizontal
+Connector_FFC-FPC:Hirose_FH26-51S-0.3SHW_2Rows-51Pins-1MP_P0.60mm_Horizontal
+Connector_FFC-FPC:Hirose_FH26-55S-0.3SHW_2Rows-55Pins-1MP_P0.60mm_Horizontal
+Connector_FFC-FPC:Hirose_FH26-57S-0.3SHW_2Rows-57Pins-1MP_P0.60mm_Horizontal
+Connector_FFC-FPC:Hirose_FH26-61S-0.3SHW_2Rows-61Pins-1MP_P0.60mm_Horizontal
+Connector_FFC-FPC:Hirose_FH26-71S-0.3SHW_2Rows-71Pins-1MP_P0.60mm_Horizontal
Connector_FFC-FPC:Hirose_FH41-30S-0.5SH_1x30_1MP_1SH_P0.5mm_Horizontal
Connector_FFC-FPC:JAE_FF0825SA1_2Rows-25Pins_P0.40mm_Horizontal
Connector_FFC-FPC:JAE_FF0829SA1_2Rows-29Pins_P0.40mm_Horizontal
@@ -1445,6 +1484,32 @@ Connector_FFC-FPC:JAE_FF0841SA1_2Rows-41Pins_P0.40mm_Horizontal
Connector_FFC-FPC:JAE_FF0851SA1_2Rows-51Pins_P0.40mm_Horizontal
Connector_FFC-FPC:JAE_FF0871SA1_2Rows-71Pins_P0.40mm_Horizontal
Connector_FFC-FPC:JAE_FF0881SA1_2Rows-81Pins_P0.40mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S04FCA-00_1x4-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S05FCA-00_1x5-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S06FCA-00_1x6-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S07FCA-00_1x7-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S08FCA-00_1x8-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S09FCA-00_1x9-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S10FCA-00_1x10-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S11FCA-00_1x11-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S12FCA-00_1x12-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S13FCA-00_1x13-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S14FCA-00_1x14-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S15FCA-00_1x15-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S16FCA-00_1x16-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S17FCA-00_1x17-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S18FCA-00_1x18-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S19FCA-00_1x19-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S20FCA-00_1x20-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S21FCA-00_1x21-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S22FCA-00_1x22-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S23FCA-00_1x23-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S24FCA-00_1x24-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S25FCA-00_1x25-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S26FCA-00_1x26-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S27FCA-00_1x27-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S28FCA-00_1x28-1MP_P1.0mm_Horizontal
+Connector_FFC-FPC:JUSHUO_AFA07-S29FCA-00_1x29-1MP_P1.0mm_Horizontal
Connector_FFC-FPC:Jushuo_AFC07-S06FCA-00_1x6-1MP_P0.50_Horizontal
Connector_FFC-FPC:Jushuo_AFC07-S24FCA-00_1x24-1MP_P0.50_Horizontal
Connector_FFC-FPC:Molex_200528-0040_1x04-1MP_P1.00mm_Horizontal
@@ -1721,13 +1786,8 @@ Connector_Harwin:Harwin_M20-89017xx_1x17_P2.54mm_Horizontal
Connector_Harwin:Harwin_M20-89018xx_1x18_P2.54mm_Horizontal
Connector_Harwin:Harwin_M20-89019xx_1x19_P2.54mm_Horizontal
Connector_Harwin:Harwin_M20-89020xx_1x20_P2.54mm_Horizontal
-Connector_HDMI:HDMI_A_Amphenol_10029449-x01xLF_Horizontal
-Connector_HDMI:HDMI_A_Contact_Technology_HDMI-19APL2_Horizontal
-Connector_HDMI:HDMI_A_Kycon_KDMIX-SL1-NS-WS-B15_VerticalRightAngle
-Connector_HDMI:HDMI_A_Molex_208658-1001_Horizontal
-Connector_HDMI:HDMI_Micro-D_Molex_46765-0x01
-Connector_HDMI:HDMI_Micro-D_Molex_46765-1x01
-Connector_HDMI:HDMI_Micro-D_Molex_46765-2x0x
+Connector_Hirose:Hirose_BM23FR0.6-16DP-0.35V_2x08_1MP_Vertical
+Connector_Hirose:Hirose_BM23FR0.6-16DS-0.35V_2x08_P0.35_1MP_Vertical
Connector_Hirose:Hirose_BM24_BM24-40DP-2-0.35V_2x20_P0.35mm_PowerPin2_Vertical
Connector_Hirose:Hirose_BM24_BM24-40DS-2-0.35V_2x20_P0.35mm_PowerPin2_Vertical
Connector_Hirose:Hirose_DF11-10DP-2DSA_2x05_P2.00mm_Vertical
@@ -1842,6 +1902,18 @@ Connector_Hirose:Hirose_DF63R-2P-3.96DSA_1x02_P3.96mm_Vertical
Connector_Hirose:Hirose_DF63R-3P-3.96DSA_1x03_P3.96mm_Vertical
Connector_Hirose:Hirose_DF63R-4P-3.96DSA_1x04_P3.96mm_Vertical
Connector_Hirose:Hirose_DF63R-5P-3.96DSA_1x05_P3.96mm_Vertical
+Connector_Hirose_FX8:Hirose_FX8-100P-SV_2x50_P0.6mm
+Connector_Hirose_FX8:Hirose_FX8-100S-SV_2x50_P0.6mm
+Connector_Hirose_FX8:Hirose_FX8-120P-SV_2x60_P0.6mm
+Connector_Hirose_FX8:Hirose_FX8-120S-SV_2x60_P0.6mm
+Connector_Hirose_FX8:Hirose_FX8-140P-SV_2x70_P0.6mm
+Connector_Hirose_FX8:Hirose_FX8-140S-SV_2x70_P0.6mm
+Connector_Hirose_FX8:Hirose_FX8-60P-SV_2x30_P0.6mm
+Connector_Hirose_FX8:Hirose_FX8-60S-SV_2x30_P0.6mm
+Connector_Hirose_FX8:Hirose_FX8-80P-SV_2x40_P0.6mm
+Connector_Hirose_FX8:Hirose_FX8-80S-SV_2x40_P0.6mm
+Connector_Hirose_FX8:Hirose_FX8-90P-SV_2x45_P0.6mm
+Connector_Hirose_FX8:Hirose_FX8-90S-SV_2x45_P0.6mm
Connector_IDC:IDC-Header_2x03_P2.54mm_Horizontal
Connector_IDC:IDC-Header_2x03_P2.54mm_Vertical
Connector_IDC:IDC-Header_2x03_P2.54mm_Vertical_SMD
@@ -1901,6 +1973,9 @@ Connector_IDC:IDC-Header_2x08_P2.54mm_Latch_Horizontal
Connector_IDC:IDC-Header_2x08_P2.54mm_Latch_Vertical
Connector_IDC:IDC-Header_2x08_P2.54mm_Vertical
Connector_IDC:IDC-Header_2x08_P2.54mm_Vertical_SMD
+Connector_IDC:IDC-Header_2x09_P2.54mm_Horizontal
+Connector_IDC:IDC-Header_2x09_P2.54mm_Vertical
+Connector_IDC:IDC-Header_2x09_P2.54mm_Vertical_SMD
Connector_IDC:IDC-Header_2x10-1MP_P2.54mm_Latch12.0mm_Vertical
Connector_IDC:IDC-Header_2x10-1MP_P2.54mm_Latch6.5mm_Vertical
Connector_IDC:IDC-Header_2x10-1MP_P2.54mm_Latch9.5mm_Vertical
@@ -1914,6 +1989,9 @@ Connector_IDC:IDC-Header_2x10_P2.54mm_Latch_Horizontal
Connector_IDC:IDC-Header_2x10_P2.54mm_Latch_Vertical
Connector_IDC:IDC-Header_2x10_P2.54mm_Vertical
Connector_IDC:IDC-Header_2x10_P2.54mm_Vertical_SMD
+Connector_IDC:IDC-Header_2x11_P2.54mm_Horizontal
+Connector_IDC:IDC-Header_2x11_P2.54mm_Vertical
+Connector_IDC:IDC-Header_2x11_P2.54mm_Vertical_SMD
Connector_IDC:IDC-Header_2x12-1MP_P2.54mm_Latch12.0mm_Vertical
Connector_IDC:IDC-Header_2x12-1MP_P2.54mm_Latch6.5mm_Vertical
Connector_IDC:IDC-Header_2x12-1MP_P2.54mm_Latch9.5mm_Vertical
@@ -1977,6 +2055,9 @@ Connector_IDC:IDC-Header_2x20_P2.54mm_Latch_Horizontal
Connector_IDC:IDC-Header_2x20_P2.54mm_Latch_Vertical
Connector_IDC:IDC-Header_2x20_P2.54mm_Vertical
Connector_IDC:IDC-Header_2x20_P2.54mm_Vertical_SMD
+Connector_IDC:IDC-Header_2x22_P2.54mm_Horizontal
+Connector_IDC:IDC-Header_2x22_P2.54mm_Vertical
+Connector_IDC:IDC-Header_2x22_P2.54mm_Vertical_SMD
Connector_IDC:IDC-Header_2x25-1MP_P2.54mm_Latch12.0mm_Vertical
Connector_IDC:IDC-Header_2x25-1MP_P2.54mm_Latch6.5mm_Vertical
Connector_IDC:IDC-Header_2x25-1MP_P2.54mm_Latch9.5mm_Vertical
@@ -2059,6 +2140,26 @@ Connector_JAE:JAE_LY20-8P-DLT1_2x04_P2.00mm_Horizontal
Connector_JAE:JAE_LY20-8P-DT1_2x04_P2.00mm_Vertical
Connector_JAE:JAE_MM70-314-310B1
Connector_JAE:JAE_SIM_Card_SF72S006
+Connector_JAE_WP7B:JAE_WP7B-P034VA1-R8000_2x17-1MP_P0.4mm
+Connector_JAE_WP7B:JAE_WP7B-P034VA1-R8000_Longpads_2x17-1MP_P0.4mm
+Connector_JAE_WP7B:JAE_WP7B-P040VA1-R8000_2x20-1MP_P0.4mm
+Connector_JAE_WP7B:JAE_WP7B-P040VA1-R8000_Longpads_2x20-1MP_P0.4mm
+Connector_JAE_WP7B:JAE_WP7B-P050VA1-R8000_2x25-1MP_P0.4mm
+Connector_JAE_WP7B:JAE_WP7B-P050VA1-R8000_Longpads_2x25-1MP_P0.4mm
+Connector_JAE_WP7B:JAE_WP7B-P060VA1-R8000_2x30-1MP_P0.4mm
+Connector_JAE_WP7B:JAE_WP7B-P060VA1-R8000_Longpads_2x30-1MP_P0.4mm
+Connector_JAE_WP7B:JAE_WP7B-P070VA1-R8000_2x35-1MP_P0.4mm
+Connector_JAE_WP7B:JAE_WP7B-P070VA1-R8000_Longpads_2x35-1MP_P0.4mm
+Connector_JAE_WP7B:JAE_WP7B-S034VA1-R8000_2x17-1MP_P0.4mm
+Connector_JAE_WP7B:JAE_WP7B-S034VA1-R8000_Longpads_2x17-1MP_P0.4mm
+Connector_JAE_WP7B:JAE_WP7B-S040VA1-R8000_2x20-1MP_P0.4mm
+Connector_JAE_WP7B:JAE_WP7B-S040VA1-R8000_Longpads_2x20-1MP_P0.4mm
+Connector_JAE_WP7B:JAE_WP7B-S050VA1-R8000_2x25-1MP_P0.4mm
+Connector_JAE_WP7B:JAE_WP7B-S050VA1-R8000_Longpads_2x25-1MP_P0.4mm
+Connector_JAE_WP7B:JAE_WP7B-S060VA1-R8000_2x30-1MP_P0.4mm
+Connector_JAE_WP7B:JAE_WP7B-S060VA1-R8000_Longpads_2x30-1MP_P0.4mm
+Connector_JAE_WP7B:JAE_WP7B-S070VA1-R8000_2x35-1MP_P0.4mm
+Connector_JAE_WP7B:JAE_WP7B-S070VA1-R8000_Longpads_2x35-1MP_P0.4mm
Connector_JST:JST_ACH_BM01B-ACHSS-A-GAN-ETF_1x01-1MP_P1.20mm_Vertical
Connector_JST:JST_ACH_BM02B-ACHSS-GAN-ETF_1x02-1MP_P1.20mm_Vertical
Connector_JST:JST_ACH_BM03B-ACHSS-GAN-ETF_1x03-1MP_P1.20mm_Vertical
@@ -2481,12 +2582,15 @@ Connector_JST:JST_XH_S2B-XH-A-1_1x02_P2.50mm_Horizontal
Connector_JST:JST_XH_S2B-XH-A_1x02_P2.50mm_Horizontal
Connector_JST:JST_XH_S3B-XH-A-1_1x03_P2.50mm_Horizontal
Connector_JST:JST_XH_S3B-XH-A_1x03_P2.50mm_Horizontal
+Connector_JST:JST_XH_S3B-XH-SM4-TB_1x03-1MP_P2.50mm_Horizontal
Connector_JST:JST_XH_S4B-XH-A-1_1x04_P2.50mm_Horizontal
Connector_JST:JST_XH_S4B-XH-A_1x04_P2.50mm_Horizontal
+Connector_JST:JST_XH_S4B-XH-SM4-TB_1x04-1MP_P2.50mm_Horizontal
Connector_JST:JST_XH_S5B-XH-A-1_1x05_P2.50mm_Horizontal
Connector_JST:JST_XH_S5B-XH-A_1x05_P2.50mm_Horizontal
Connector_JST:JST_XH_S6B-XH-A-1_1x06_P2.50mm_Horizontal
Connector_JST:JST_XH_S6B-XH-A_1x06_P2.50mm_Horizontal
+Connector_JST:JST_XH_S6B-XH-SM4-TB_1x06-1MP_P2.50mm_Horizontal
Connector_JST:JST_XH_S7B-XH-A-1_1x07_P2.50mm_Horizontal
Connector_JST:JST_XH_S7B-XH-A_1x07_P2.50mm_Horizontal
Connector_JST:JST_XH_S8B-XH-A-1_1x08_P2.50mm_Horizontal
@@ -2567,6 +2671,41 @@ Connector_JST:JST_ZE_SM13B-ZESS-TB_1x13-1MP_P1.50mm_Horizontal
Connector_JST:JST_ZE_SM14B-ZESS-TB_1x14-1MP_P1.50mm_Horizontal
Connector_JST:JST_ZE_SM15B-ZESS-TB_1x15-1MP_P1.50mm_Horizontal
Connector_JST:JST_ZE_SM16B-ZESS-TB_1x16-1MP_P1.50mm_Horizontal
+Connector_JST:JST_ZH_B10B-ZR-SM4-TF_1x10-1MP_P1.50mm_Vertical
+Connector_JST:JST_ZH_B10B-ZR_1x10_P1.50mm_Vertical
+Connector_JST:JST_ZH_B11B-ZR-SM4-TF_1x11-1MP_P1.50mm_Vertical
+Connector_JST:JST_ZH_B11B-ZR_1x11_P1.50mm_Vertical
+Connector_JST:JST_ZH_B12B-ZR-SM4-TF_1x12-1MP_P1.50mm_Vertical
+Connector_JST:JST_ZH_B12B-ZR_1x12_P1.50mm_Vertical
+Connector_JST:JST_ZH_B13B-ZR-SM4-TF_1x13-1MP_P1.50mm_Vertical
+Connector_JST:JST_ZH_B2B-ZR-SM4-TF_1x02-1MP_P1.50mm_Vertical
+Connector_JST:JST_ZH_B2B-ZR_1x02_P1.50mm_Vertical
+Connector_JST:JST_ZH_B3B-ZR-SM4-TF_1x03-1MP_P1.50mm_Vertical
+Connector_JST:JST_ZH_B3B-ZR_1x03_P1.50mm_Vertical
+Connector_JST:JST_ZH_B4B-ZR-SM4-TF_1x04-1MP_P1.50mm_Vertical
+Connector_JST:JST_ZH_B4B-ZR_1x04_P1.50mm_Vertical
+Connector_JST:JST_ZH_B5B-ZR-SM4-TF_1x05-1MP_P1.50mm_Vertical
+Connector_JST:JST_ZH_B5B-ZR_1x05_P1.50mm_Vertical
+Connector_JST:JST_ZH_B6B-ZR-SM4-TF_1x06-1MP_P1.50mm_Vertical
+Connector_JST:JST_ZH_B6B-ZR_1x06_P1.50mm_Vertical
+Connector_JST:JST_ZH_B7B-ZR-SM4-TF_1x07-1MP_P1.50mm_Vertical
+Connector_JST:JST_ZH_B7B-ZR_1x07_P1.50mm_Vertical
+Connector_JST:JST_ZH_B8B-ZR-SM4-TF_1x08-1MP_P1.50mm_Vertical
+Connector_JST:JST_ZH_B8B-ZR_1x08_P1.50mm_Vertical
+Connector_JST:JST_ZH_B9B-ZR-SM4-TF_1x09-1MP_P1.50mm_Vertical
+Connector_JST:JST_ZH_B9B-ZR_1x09_P1.50mm_Vertical
+Connector_JST:JST_ZH_S10B-ZR-SM4A-TF_1x10-1MP_P1.50mm_Horizontal
+Connector_JST:JST_ZH_S11B-ZR-SM4A-TF_1x11-1MP_P1.50mm_Horizontal
+Connector_JST:JST_ZH_S12B-ZR-SM4A-TF_1x12-1MP_P1.50mm_Horizontal
+Connector_JST:JST_ZH_S13B-ZR-SM4A-TF_1x13-1MP_P1.50mm_Horizontal
+Connector_JST:JST_ZH_S2B-ZR-SM4A-TF_1x02-1MP_P1.50mm_Horizontal
+Connector_JST:JST_ZH_S3B-ZR-SM4A-TF_1x03-1MP_P1.50mm_Horizontal
+Connector_JST:JST_ZH_S4B-ZR-SM4A-TF_1x04-1MP_P1.50mm_Horizontal
+Connector_JST:JST_ZH_S5B-ZR-SM4A-TF_1x05-1MP_P1.50mm_Horizontal
+Connector_JST:JST_ZH_S6B-ZR-SM4A-TF_1x06-1MP_P1.50mm_Horizontal
+Connector_JST:JST_ZH_S7B-ZR-SM4A-TF_1x07-1MP_P1.50mm_Horizontal
+Connector_JST:JST_ZH_S8B-ZR-SM4A-TF_1x08-1MP_P1.50mm_Horizontal
+Connector_JST:JST_ZH_S9B-ZR-SM4A-TF_1x09-1MP_P1.50mm_Horizontal
Connector_Molex:Molex_CLIK-Mate_502382-0270_1x02-1MP_P1.25mm_Vertical
Connector_Molex:Molex_CLIK-Mate_502382-0370_1x03-1MP_P1.25mm_Vertical
Connector_Molex:Molex_CLIK-Mate_502382-0470_1x04-1MP_P1.25mm_Vertical
@@ -3098,12 +3237,21 @@ Connector_Molex:Molex_Pico-EZmate_78171-0003_1x03-1MP_P1.20mm_Vertical
Connector_Molex:Molex_Pico-EZmate_78171-0004_1x04-1MP_P1.20mm_Vertical
Connector_Molex:Molex_Pico-EZmate_78171-0005_1x05-1MP_P1.20mm_Vertical
Connector_Molex:Molex_Pico-EZmate_Slim_202656-0021_1x02-1MP_P1.20mm_Vertical
+Connector_Molex:Molex_Pico-Lock_205338-0002_1x02-1MP_P2.00mm_Horizontal
+Connector_Molex:Molex_Pico-Lock_205338-0004_1x04-1MP_P2.00mm_Horizontal
+Connector_Molex:Molex_Pico-Lock_205338-0006_1x06-1MP_P2.00mm_Horizontal
+Connector_Molex:Molex_Pico-Lock_205338-0008_1x08-1MP_P2.00mm_Horizontal
+Connector_Molex:Molex_Pico-Lock_205338-0010_1x10-1MP_P2.00mm_Horizontal
+Connector_Molex:Molex_Pico-Lock_504050-0291_1x02-1MP_P1.50mm_Horizontal
+Connector_Molex:Molex_Pico-Lock_504050-0391_1x03-1MP_P1.50mm_Horizontal
Connector_Molex:Molex_Pico-Lock_504050-0491_1x04-1MP_P1.50mm_Horizontal
Connector_Molex:Molex_Pico-Lock_504050-0591_1x05-1MP_P1.50mm_Horizontal
Connector_Molex:Molex_Pico-Lock_504050-0691_1x06-1MP_P1.50mm_Horizontal
Connector_Molex:Molex_Pico-Lock_504050-0791_1x07-1MP_P1.50mm_Horizontal
Connector_Molex:Molex_Pico-Lock_504050-0891_1x08-1MP_P1.50mm_Horizontal
+Connector_Molex:Molex_Pico-Lock_504050-0991_1x09-1MP_P1.50mm_Horizontal
Connector_Molex:Molex_Pico-Lock_504050-1091_1x10-1MP_P1.50mm_Horizontal
+Connector_Molex:Molex_Pico-Lock_504050-1191_1x11-1MP_P1.50mm_Horizontal
Connector_Molex:Molex_Pico-Lock_504050-1291_1x12-1MP_P1.50mm_Horizontal
Connector_Molex:Molex_Pico-SPOX_87437-1443_1x14-P1.5mm_Vertical
Connector_Molex:Molex_PicoBlade_53047-0210_1x02_P1.25mm_Vertical
@@ -3444,6 +3592,7 @@ Connector_PCBEdge:Samtec_MECF-70-0_-L-DV_2x70_P1.27mm_Polarized_Edge
Connector_PCBEdge:Samtec_MECF-70-0_-NP-L-DV_2x70_P1.27mm_Edge
Connector_PCBEdge:SODIMM-200_1.8V_Card_edge
Connector_PCBEdge:SODIMM-200_2.5V_Card_edge
+Connector_PCBEdge:SODIMM-260_DDR4_H4.0-5.2_OrientationStd_Socket
Connector_Phoenix_GMSTB:PhoenixContact_GMSTBA_2,5_10-G-7,62_1x10_P7.62mm_Horizontal
Connector_Phoenix_GMSTB:PhoenixContact_GMSTBA_2,5_10-G_1x10_P7.50mm_Horizontal
Connector_Phoenix_GMSTB:PhoenixContact_GMSTBA_2,5_11-G-7,62_1x11_P7.62mm_Horizontal
@@ -6132,16 +6281,19 @@ Connector_RJ:RJ45_HALO_HFJ11-x2450HRL_Horizontal
Connector_RJ:RJ45_Hanrun_HR911105A_Horizontal
Connector_RJ:RJ45_Kycon_G7LX-A88S7-BP-xx_Horizontal
Connector_RJ:RJ45_Molex_0855135013_Vertical
+Connector_RJ:RJ45_Molex_9346520x_Horizontal
Connector_RJ:RJ45_Ninigi_GE
Connector_RJ:RJ45_OST_PJ012-8P8CX_Vertical
Connector_RJ:RJ45_Plug_Metz_AJP92A8813
Connector_RJ:RJ45_Pulse_JK00177NL_Horizontal
Connector_RJ:RJ45_Pulse_JK0654219NL_Horizontal
Connector_RJ:RJ45_Pulse_JXD6-0001NL_Horizontal
+Connector_RJ:RJ45_RCH_RC01937
Connector_RJ:RJ45_UDE_RB1-125B8G1A
Connector_RJ:RJ45_Wuerth_74980111211_Horizontal
Connector_RJ:RJ45_Wuerth_7499010001A_Horizontal
Connector_RJ:RJ45_Wuerth_7499010121A_Horizontal
+Connector_RJ:RJ45_Wuerth_7499010211A_Horizontal
Connector_RJ:RJ45_Wuerth_7499111446_Horizontal
Connector_RJ:RJ45_Wuerth_7499151120_Horizontal
Connector_RJ:RJ9_Evercom_5301-440xxx_Horizontal
@@ -6631,8 +6783,9 @@ Connector_Samtec_HPM_THT:Samtec_HPM-19-01-x-S_Straight_1x19_Pitch5.08mm
Connector_Samtec_HPM_THT:Samtec_HPM-19-05-x-S_Straight_1x19_Pitch5.08mm
Connector_Samtec_HSEC8:Samtec_HSEC8-109-01-X-DV-A-BL_2x09_P0.8mm_Pol04_Socket_WeldTabs_BoardLocks
Connector_Samtec_HSEC8:Samtec_HSEC8-109-01-X-DV-A-WT_2x09_P0.8mm_Pol04_Socket_WeldTabs
-Connector_Samtec_HSEC8:Samtec_HSEC8-109-01-X-DV-A_2x09_P0.8mm_Pol04_Socket_AlignmentPins
-Connector_Samtec_HSEC8:Samtec_HSEC8-109-01-X-DV_2x09_P0.8mm_Pol04_Socket
+Connector_Samtec_HSEC8:Samtec_HSEC8-109-X-X-DV-BL_2x09_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-109-X-X-DV_2x09_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-109-X-X-DV_2x09_P0.8mm_Wing_Edge
Connector_Samtec_HSEC8:Samtec_HSEC8-110-01-X-DV-A-BL_2x10_P0.8mm_Socket_WeldTabs_BoardLocks
Connector_Samtec_HSEC8:Samtec_HSEC8-110-01-X-DV-A-WT_2x10_P0.8mm_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-110-01-X-DV-A_2x10_P0.8mm_Socket_AlignmentPins
@@ -6640,6 +6793,9 @@ Connector_Samtec_HSEC8:Samtec_HSEC8-110-01-X-DV_2x10_P0.8mm_Socket
Connector_Samtec_HSEC8:Samtec_HSEC8-110-03-X-DV-A-WT_2x10_P0.8mm_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-110-03-X-DV-A_2x10_P0.8mm_Socket_AlignmentPins
Connector_Samtec_HSEC8:Samtec_HSEC8-110-03-X-DV_2x10_P0.8mm_Socket
+Connector_Samtec_HSEC8:Samtec_HSEC8-110-X-X-DV-BL_2x10_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-110-X-X-DV_2x10_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-110-X-X-DV_2x10_P0.8mm_Wing_Edge
Connector_Samtec_HSEC8:Samtec_HSEC8-1100-01-X-DV-A-BL_2x100_P0.8mm_Pol32_Socket_WeldTabs_BoardLocks
Connector_Samtec_HSEC8:Samtec_HSEC8-1100-01-X-DV-A-WT_2x100_P0.8mm_Pol32_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-1100-01-X-DV-A_2x100_P0.8mm_Pol32_Socket_AlignmentPins
@@ -6647,10 +6803,16 @@ Connector_Samtec_HSEC8:Samtec_HSEC8-1100-01-X-DV_2x100_P0.8mm_Pol32_Socket
Connector_Samtec_HSEC8:Samtec_HSEC8-1100-03-X-DV-A-WT_2x100_P0.8mm_Pol32_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-1100-03-X-DV-A_2x100_P0.8mm_Pol32_Socket_AlignmentPins
Connector_Samtec_HSEC8:Samtec_HSEC8-1100-03-X-DV_2x100_P0.8mm_Pol32_Socket
+Connector_Samtec_HSEC8:Samtec_HSEC8-1100-X-X-DV-BL_2x100_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-1100-X-X-DV_2x100_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-1100-X-X-DV_2x100_P0.8mm_Wing_Edge
Connector_Samtec_HSEC8:Samtec_HSEC8-113-01-X-DV-A-BL_2x13_P0.8mm_Pol06_Socket_WeldTabs_BoardLocks
Connector_Samtec_HSEC8:Samtec_HSEC8-113-01-X-DV-A-WT_2x13_P0.8mm_Pol06_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-113-01-X-DV-A_2x13_P0.8mm_Pol06_Socket_AlignmentPins
Connector_Samtec_HSEC8:Samtec_HSEC8-113-01-X-DV_2x13_P0.8mm_Pol06_Socket
+Connector_Samtec_HSEC8:Samtec_HSEC8-113-X-X-DV-BL_2x13_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-113-X-X-DV_2x13_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-113-X-X-DV_2x13_P0.8mm_Wing_Edge
Connector_Samtec_HSEC8:Samtec_HSEC8-120-01-X-DV-A-BL_2x20_P0.8mm_Socket_WeldTabs_BoardLocks
Connector_Samtec_HSEC8:Samtec_HSEC8-120-01-X-DV-A-WT_2x20_P0.8mm_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-120-01-X-DV-A_2x20_P0.8mm_Socket_AlignmentPins
@@ -6658,10 +6820,16 @@ Connector_Samtec_HSEC8:Samtec_HSEC8-120-01-X-DV_2x20_P0.8mm_Socket
Connector_Samtec_HSEC8:Samtec_HSEC8-120-03-X-DV-A-WT_2x20_P0.8mm_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-120-03-X-DV-A_2x20_P0.8mm_Socket_AlignmentPins
Connector_Samtec_HSEC8:Samtec_HSEC8-120-03-X-DV_2x20_P0.8mm_Socket
+Connector_Samtec_HSEC8:Samtec_HSEC8-120-X-X-DV-BL_2x20_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-120-X-X-DV_2x20_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-120-X-X-DV_2x20_P0.8mm_Wing_Edge
Connector_Samtec_HSEC8:Samtec_HSEC8-125-01-X-DV-A-BL_2x25_P0.8mm_Pol06_Socket_WeldTabs_BoardLocks
Connector_Samtec_HSEC8:Samtec_HSEC8-125-01-X-DV-A-WT_2x25_P0.8mm_Pol06_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-125-01-X-DV-A_2x25_P0.8mm_Pol06_Socket_AlignmentPins
Connector_Samtec_HSEC8:Samtec_HSEC8-125-01-X-DV_2x25_P0.8mm_Pol06_Socket
+Connector_Samtec_HSEC8:Samtec_HSEC8-125-X-X-DV-BL_2x25_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-125-X-X-DV_2x25_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-125-X-X-DV_2x25_P0.8mm_Wing_Edge
Connector_Samtec_HSEC8:Samtec_HSEC8-130-01-X-DV-A-BL_2x30_P0.8mm_Socket_WeldTabs_BoardLocks
Connector_Samtec_HSEC8:Samtec_HSEC8-130-01-X-DV-A-WT_2x30_P0.8mm_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-130-01-X-DV-A_2x30_P0.8mm_Socket_AlignmentPins
@@ -6669,10 +6837,16 @@ Connector_Samtec_HSEC8:Samtec_HSEC8-130-01-X-DV_2x30_P0.8mm_Socket
Connector_Samtec_HSEC8:Samtec_HSEC8-130-03-X-DV-A-WT_2x30_P0.8mm_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-130-03-X-DV-A_2x30_P0.8mm_Socket_AlignmentPins
Connector_Samtec_HSEC8:Samtec_HSEC8-130-03-X-DV_2x30_P0.8mm_Socket
+Connector_Samtec_HSEC8:Samtec_HSEC8-130-X-X-DV-BL_2x30_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-130-X-X-DV_2x30_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-130-X-X-DV_2x30_P0.8mm_Wing_Edge
Connector_Samtec_HSEC8:Samtec_HSEC8-137-01-X-DV-A-BL_2x37_P0.8mm_Pol21_Socket_WeldTabs_BoardLocks
Connector_Samtec_HSEC8:Samtec_HSEC8-137-01-X-DV-A-WT_2x37_P0.8mm_Pol21_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-137-01-X-DV-A_2x37_P0.8mm_Pol21_Socket_AlignmentPins
Connector_Samtec_HSEC8:Samtec_HSEC8-137-01-X-DV_2x37_P0.8mm_Pol21_Socket
+Connector_Samtec_HSEC8:Samtec_HSEC8-137-X-X-DV-BL_2x37_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-137-X-X-DV_2x37_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-137-X-X-DV_2x37_P0.8mm_Wing_Edge
Connector_Samtec_HSEC8:Samtec_HSEC8-140-01-X-DV-A-BL_2x40_P0.8mm_Pol22_Socket_WeldTabs_BoardLocks
Connector_Samtec_HSEC8:Samtec_HSEC8-140-01-X-DV-A-WT_2x40_P0.8mm_Pol22_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-140-01-X-DV-A_2x40_P0.8mm_Pol22_Socket_AlignmentPins
@@ -6680,10 +6854,16 @@ Connector_Samtec_HSEC8:Samtec_HSEC8-140-01-X-DV_2x40_P0.8mm_Pol22_Socket
Connector_Samtec_HSEC8:Samtec_HSEC8-140-03-X-DV-A-WT_2x40_P0.8mm_Pol22_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-140-03-X-DV-A_2x40_P0.8mm_Pol22_Socket_AlignmentPins
Connector_Samtec_HSEC8:Samtec_HSEC8-140-03-X-DV_2x40_P0.8mm_Pol22_Socket
+Connector_Samtec_HSEC8:Samtec_HSEC8-140-X-X-DV-BL_2x40_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-140-X-X-DV_2x40_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-140-X-X-DV_2x40_P0.8mm_Wing_Edge
Connector_Samtec_HSEC8:Samtec_HSEC8-149-01-X-DV-A-BL_2x49_P0.8mm_Pol27_Socket_WeldTabs_BoardLocks
Connector_Samtec_HSEC8:Samtec_HSEC8-149-01-X-DV-A-WT_2x49_P0.8mm_Pol27_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-149-01-X-DV-A_2x49_P0.8mm_Pol27_Socket_AlignmentPins
Connector_Samtec_HSEC8:Samtec_HSEC8-149-01-X-DV_2x49_P0.8mm_Pol27_Socket
+Connector_Samtec_HSEC8:Samtec_HSEC8-149-X-X-DV-BL_2x49_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-149-X-X-DV_2x49_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-149-X-X-DV_2x49_P0.8mm_Wing_Edge
Connector_Samtec_HSEC8:Samtec_HSEC8-150-01-X-DV-A-BL_2x50_P0.8mm_Pol27_Socket_WeldTabs_BoardLocks
Connector_Samtec_HSEC8:Samtec_HSEC8-150-01-X-DV-A-WT_2x50_P0.8mm_Pol27_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-150-01-X-DV-A_2x50_P0.8mm_Pol27_Socket_AlignmentPins
@@ -6691,6 +6871,9 @@ Connector_Samtec_HSEC8:Samtec_HSEC8-150-01-X-DV_2x50_P0.8mm_Pol27_Socket
Connector_Samtec_HSEC8:Samtec_HSEC8-150-03-X-DV-A-WT_2x50_P0.8mm_Pol27_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-150-03-X-DV-A_2x50_P0.8mm_Pol27_Socket_AlignmentPins
Connector_Samtec_HSEC8:Samtec_HSEC8-150-03-X-DV_2x50_P0.8mm_Pol27_Socket
+Connector_Samtec_HSEC8:Samtec_HSEC8-150-X-X-DV-BL_2x50_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-150-X-X-DV_2x50_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-150-X-X-DV_2x50_P0.8mm_Wing_Edge
Connector_Samtec_HSEC8:Samtec_HSEC8-160-01-X-DV-A-BL_2x60_P0.8mm_Pol32_Socket_WeldTabs_BoardLocks
Connector_Samtec_HSEC8:Samtec_HSEC8-160-01-X-DV-A-WT_2x60_P0.8mm_Pol32_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-160-01-X-DV-A_2x60_P0.8mm_Pol32_Socket_AlignmentPins
@@ -6698,6 +6881,9 @@ Connector_Samtec_HSEC8:Samtec_HSEC8-160-01-X-DV_2x60_P0.8mm_Pol32_Socket
Connector_Samtec_HSEC8:Samtec_HSEC8-160-03-X-DV-A-WT_2x60_P0.8mm_Pol32_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-160-03-X-DV-A_2x60_P0.8mm_Pol32_Socket_AlignmentPins
Connector_Samtec_HSEC8:Samtec_HSEC8-160-03-X-DV_2x60_P0.8mm_Pol32_Socket
+Connector_Samtec_HSEC8:Samtec_HSEC8-160-X-X-DV-BL_2x60_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-160-X-X-DV_2x60_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-160-X-X-DV_2x60_P0.8mm_Wing_Edge
Connector_Samtec_HSEC8:Samtec_HSEC8-170-01-X-DV-A-BL_2x70_P0.8mm_Pol32_Socket_WeldTabs_BoardLocks
Connector_Samtec_HSEC8:Samtec_HSEC8-170-01-X-DV-A-WT_2x70_P0.8mm_Pol32_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-170-01-X-DV-A_2x70_P0.8mm_Pol32_Socket_AlignmentPins
@@ -6705,6 +6891,9 @@ Connector_Samtec_HSEC8:Samtec_HSEC8-170-01-X-DV_2x70_P0.8mm_Pol32_Socket
Connector_Samtec_HSEC8:Samtec_HSEC8-170-03-X-DV-A-WT_2x70_P0.8mm_Pol32_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-170-03-X-DV-A_2x70_P0.8mm_Pol32_Socket_AlignmentPins
Connector_Samtec_HSEC8:Samtec_HSEC8-170-03-X-DV_2x70_P0.8mm_Pol32_Socket
+Connector_Samtec_HSEC8:Samtec_HSEC8-170-X-X-DV-BL_2x70_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-170-X-X-DV_2x70_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-170-X-X-DV_2x70_P0.8mm_Wing_Edge
Connector_Samtec_HSEC8:Samtec_HSEC8-180-01-X-DV-A-BL_2x80_P0.8mm_Pol32_Socket_WeldTabs_BoardLocks
Connector_Samtec_HSEC8:Samtec_HSEC8-180-01-X-DV-A-WT_2x80_P0.8mm_Pol32_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-180-01-X-DV-A_2x80_P0.8mm_Pol32_Socket_AlignmentPins
@@ -6712,6 +6901,9 @@ Connector_Samtec_HSEC8:Samtec_HSEC8-180-01-X-DV_2x80_P0.8mm_Pol32_Socket
Connector_Samtec_HSEC8:Samtec_HSEC8-180-03-X-DV-A-WT_2x80_P0.8mm_Pol32_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-180-03-X-DV-A_2x80_P0.8mm_Pol32_Socket_AlignmentPins
Connector_Samtec_HSEC8:Samtec_HSEC8-180-03-X-DV_2x80_P0.8mm_Pol32_Socket
+Connector_Samtec_HSEC8:Samtec_HSEC8-180-X-X-DV-BL_2x80_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-180-X-X-DV_2x80_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-180-X-X-DV_2x80_P0.8mm_Wing_Edge
Connector_Samtec_HSEC8:Samtec_HSEC8-190-01-X-DV-A-BL_2x90_P0.8mm_Pol32_Socket_WeldTabs_BoardLocks
Connector_Samtec_HSEC8:Samtec_HSEC8-190-01-X-DV-A-WT_2x90_P0.8mm_Pol32_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-190-01-X-DV-A_2x90_P0.8mm_Pol32_Socket_AlignmentPins
@@ -6719,6 +6911,9 @@ Connector_Samtec_HSEC8:Samtec_HSEC8-190-01-X-DV_2x90_P0.8mm_Pol32_Socket
Connector_Samtec_HSEC8:Samtec_HSEC8-190-03-X-DV-A-WT_2x90_P0.8mm_Pol32_Socket_WeldTabs
Connector_Samtec_HSEC8:Samtec_HSEC8-190-03-X-DV-A_2x90_P0.8mm_Pol32_Socket_AlignmentPins
Connector_Samtec_HSEC8:Samtec_HSEC8-190-03-X-DV_2x90_P0.8mm_Pol32_Socket
+Connector_Samtec_HSEC8:Samtec_HSEC8-190-X-X-DV-BL_2x90_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-190-X-X-DV_2x90_P0.8mm_Edge
+Connector_Samtec_HSEC8:Samtec_HSEC8-190-X-X-DV_2x90_P0.8mm_Wing_Edge
Connector_Samtec_MicroMate:Samtec_T1M-02-X-S-RA_1x02-1MP_P1.0mm_Terminal_Horizontal
Connector_Samtec_MicroMate:Samtec_T1M-02-X-S-V_1x02-1MP_P1.0mm_Terminal_Vertical
Connector_Samtec_MicroMate:Samtec_T1M-02-X-SH-L_1x02-1MP_P1.0mm_Terminal_Horizontal_Latch
@@ -6795,6 +6990,42 @@ Connector_Samtec_MicroMate:Samtec_T1M-20-X-S-RA_1x20-1MP_P1.0mm_Terminal_Horizon
Connector_Samtec_MicroMate:Samtec_T1M-20-X-S-V_1x20-1MP_P1.0mm_Terminal_Vertical
Connector_Samtec_MicroMate:Samtec_T1M-20-X-SH-L_1x20-1MP_P1.0mm_Terminal_Horizontal_Latch
Connector_Samtec_MicroMate:Samtec_T1M-20-X-SV-L_1x20-1MP_P1.0mm_Terminal_Vertical_Latch
+Connector_Samtec_MicroPower:Samtec_UMPS-02-XX.X-X-V-S-W_1x02-1MP_P2.0mm_Socket_WeldTab
+Connector_Samtec_MicroPower:Samtec_UMPS-02-XX.X-X-V-S_1x02_P2.0mm_Socket
+Connector_Samtec_MicroPower:Samtec_UMPS-03-XX.X-X-V-S-W_1x03-1MP_P2.0mm_Socket_WeldTab
+Connector_Samtec_MicroPower:Samtec_UMPS-03-XX.X-X-V-S_1x03_P2.0mm_Socket
+Connector_Samtec_MicroPower:Samtec_UMPS-04-XX.X-X-V-S-W_1x04-1MP_P2.0mm_Socket_WeldTab
+Connector_Samtec_MicroPower:Samtec_UMPS-04-XX.X-X-V-S_1x04_P2.0mm_Socket
+Connector_Samtec_MicroPower:Samtec_UMPS-05-XX.X-X-V-S-W_1x05-1MP_P2.0mm_Socket_WeldTab
+Connector_Samtec_MicroPower:Samtec_UMPS-05-XX.X-X-V-S_1x05_P2.0mm_Socket
+Connector_Samtec_MicroPower:Samtec_UMPS-06-XX.X-X-V-S-W_1x06-1MP_P2.0mm_Socket_WeldTab
+Connector_Samtec_MicroPower:Samtec_UMPS-06-XX.X-X-V-S_1x06_P2.0mm_Socket
+Connector_Samtec_MicroPower:Samtec_UMPS-07-XX.X-X-V-S-W_1x07-1MP_P2.0mm_Socket_WeldTab
+Connector_Samtec_MicroPower:Samtec_UMPS-07-XX.X-X-V-S_1x07_P2.0mm_Socket
+Connector_Samtec_MicroPower:Samtec_UMPS-08-XX.X-X-V-S-W_1x08-1MP_P2.0mm_Socket_WeldTab
+Connector_Samtec_MicroPower:Samtec_UMPS-08-XX.X-X-V-S_1x08_P2.0mm_Socket
+Connector_Samtec_MicroPower:Samtec_UMPS-09-XX.X-X-V-S-W_1x09-1MP_P2.0mm_Socket_WeldTab
+Connector_Samtec_MicroPower:Samtec_UMPS-09-XX.X-X-V-S_1x09_P2.0mm_Socket
+Connector_Samtec_MicroPower:Samtec_UMPS-10-XX.X-X-V-S-W_1x10-1MP_P2.0mm_Socket_WeldTab
+Connector_Samtec_MicroPower:Samtec_UMPS-10-XX.X-X-V-S_1x10_P2.0mm_Socket
+Connector_Samtec_MicroPower:Samtec_UMPT-02-XX.X-X-V-S-W_1x02-1MP_P2.0mm_Terminal_WeldTab
+Connector_Samtec_MicroPower:Samtec_UMPT-02-XX.X-X-V-S_1x02_P2.0mm_Terminal
+Connector_Samtec_MicroPower:Samtec_UMPT-03-XX.X-X-V-S-W_1x03-1MP_P2.0mm_Terminal_WeldTab
+Connector_Samtec_MicroPower:Samtec_UMPT-03-XX.X-X-V-S_1x03_P2.0mm_Terminal
+Connector_Samtec_MicroPower:Samtec_UMPT-04-XX.X-X-V-S-W_1x04-1MP_P2.0mm_Terminal_WeldTab
+Connector_Samtec_MicroPower:Samtec_UMPT-04-XX.X-X-V-S_1x04_P2.0mm_Terminal
+Connector_Samtec_MicroPower:Samtec_UMPT-05-XX.X-X-V-S-W_1x05-1MP_P2.0mm_Terminal_WeldTab
+Connector_Samtec_MicroPower:Samtec_UMPT-05-XX.X-X-V-S_1x05_P2.0mm_Terminal
+Connector_Samtec_MicroPower:Samtec_UMPT-06-XX.X-X-V-S-W_1x06-1MP_P2.0mm_Terminal_WeldTab
+Connector_Samtec_MicroPower:Samtec_UMPT-06-XX.X-X-V-S_1x06_P2.0mm_Terminal
+Connector_Samtec_MicroPower:Samtec_UMPT-07-XX.X-X-V-S-W_1x07-1MP_P2.0mm_Terminal_WeldTab
+Connector_Samtec_MicroPower:Samtec_UMPT-07-XX.X-X-V-S_1x07_P2.0mm_Terminal
+Connector_Samtec_MicroPower:Samtec_UMPT-08-XX.X-X-V-S-W_1x08-1MP_P2.0mm_Terminal_WeldTab
+Connector_Samtec_MicroPower:Samtec_UMPT-08-XX.X-X-V-S_1x08_P2.0mm_Terminal
+Connector_Samtec_MicroPower:Samtec_UMPT-09-XX.X-X-V-S-W_1x09-1MP_P2.0mm_Terminal_WeldTab
+Connector_Samtec_MicroPower:Samtec_UMPT-09-XX.X-X-V-S_1x09_P2.0mm_Terminal
+Connector_Samtec_MicroPower:Samtec_UMPT-10-XX.X-X-V-S-W_1x10-1MP_P2.0mm_Terminal_WeldTab
+Connector_Samtec_MicroPower:Samtec_UMPT-10-XX.X-X-V-S_1x10_P2.0mm_Terminal
Connector_SATA_SAS:SAS-mini_TEConnectivity_1888174_Vertical
Connector_SATA_SAS:SATA_Amphenol_10029364-001LF_Horizontal
Connector_Stocko:Stocko_MKS_1651-6-0-202_1x2_P2.50mm_Vertical
@@ -6888,12 +7119,15 @@ Connector_USB:USB3_A_Plug_Wuerth_692112030100_Horizontal
Connector_USB:USB3_A_Receptacle_Wuerth_692122030100
Connector_USB:USB3_Micro-B_Connfly_DS1104-01
Connector_USB:USB_A_CNCTech_1001-011-01101_Horizontal
-Connector_USB:USB_A_CONNFLY_DS1095-WNR0
+Connector_USB:USB_A_Connfly_DS1095
+Connector_USB:USB_A_Connfly_DS1098_Horizontal
Connector_USB:USB_A_CUI_UJ2-ADH-TH_Horizontal_Stacked
+Connector_USB:USB_A_Kycon_KUSBX-AS1N-B_Horizontal
Connector_USB:USB_A_Molex_105057_Vertical
Connector_USB:USB_A_Molex_48037-2200_Horizontal
Connector_USB:USB_A_Molex_67643_Horizontal
Connector_USB:USB_A_Receptacle_GCT_USB1046
+Connector_USB:USB_A_Receptacle_XKB_U231-091N-4BLRA00-S
Connector_USB:USB_A_Stewart_SS-52100-001_Horizontal
Connector_USB:USB_A_TE_292303-7_Horizontal
Connector_USB:USB_A_Wuerth_614004134726_Horizontal
@@ -6909,8 +7143,11 @@ Connector_USB:USB_C_Receptacle_Amphenol_12401548E4-2A
Connector_USB:USB_C_Receptacle_Amphenol_12401548E4-2A_CircularHoles
Connector_USB:USB_C_Receptacle_Amphenol_12401610E4-2A
Connector_USB:USB_C_Receptacle_Amphenol_12401610E4-2A_CircularHoles
+Connector_USB:USB_C_Receptacle_Amphenol_12401948E412A
+Connector_USB:USB_C_Receptacle_Amphenol_124019772112A
Connector_USB:USB_C_Receptacle_CNCTech_C-ARA1-AK51X
Connector_USB:USB_C_Receptacle_G-Switch_GT-USB-7010ASV
+Connector_USB:USB_C_Receptacle_G-Switch_GT-USB-7025
Connector_USB:USB_C_Receptacle_G-Switch_GT-USB-7051x
Connector_USB:USB_C_Receptacle_GCT_USB4085
Connector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_Horizontal
@@ -6921,6 +7158,7 @@ Connector_USB:USB_C_Receptacle_GCT_USB4125-xx-x_6P_TopMnt_Horizontal
Connector_USB:USB_C_Receptacle_GCT_USB4135-GF-A_6P_TopMnt_Horizontal
Connector_USB:USB_C_Receptacle_HCTL_HC-TYPE-C-16P-01A
Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12
+Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-17
Connector_USB:USB_C_Receptacle_JAE_DX07S016JA1R1500
Connector_USB:USB_C_Receptacle_JAE_DX07S024WJ1R350
Connector_USB:USB_C_Receptacle_JAE_DX07S024WJ3R400
@@ -6932,6 +7170,7 @@ Connector_USB:USB_Micro-B_Amphenol_10103594-0001LF_Horizontal
Connector_USB:USB_Micro-B_Amphenol_10104110_Horizontal
Connector_USB:USB_Micro-B_Amphenol_10118193-0001LF_Horizontal
Connector_USB:USB_Micro-B_Amphenol_10118193-0002LF_Horizontal
+Connector_USB:USB_Micro-B_Amphenol_10118194-0001LF_Horizontal
Connector_USB:USB_Micro-B_Amphenol_10118194_Horizontal
Connector_USB:USB_Micro-B_GCT_USB3076-30-A
Connector_USB:USB_Micro-B_Molex-105017-0001
@@ -6949,6 +7188,15 @@ Connector_USB:USB_Mini-B_Lumberg_2486_01_Horizontal
Connector_USB:USB_Mini-B_Tensility_54-00023_Vertical
Connector_USB:USB_Mini-B_Tensility_54-00023_Vertical_CircularHoles
Connector_USB:USB_Mini-B_Wuerth_65100516121_Horizontal
+Connector_Video:DVI-D_Molex_74320-4004_Horizontal
+Connector_Video:DVI-I_Molex_74320-1004_Horizontal
+Connector_Video:HDMI_A_Amphenol_10029449-x01xLF_Horizontal
+Connector_Video:HDMI_A_Contact_Technology_HDMI-19APL2_Horizontal
+Connector_Video:HDMI_A_Kycon_KDMIX-SL1-NS-WS-B15_VerticalRightAngle
+Connector_Video:HDMI_A_Molex_208658-1001_Horizontal
+Connector_Video:HDMI_Micro-D_Molex_46765-0x01
+Connector_Video:HDMI_Micro-D_Molex_46765-1x01
+Connector_Video:HDMI_Micro-D_Molex_46765-2x0x
Connector_Wago:Wago_734-132_1x02_P3.50mm_Vertical
Connector_Wago:Wago_734-133_1x03_P3.50mm_Vertical
Connector_Wago:Wago_734-134_1x04_P3.50mm_Vertical
@@ -7273,6 +7521,43 @@ Connector_Wire:SolderWire-2sqmm_1x06_P7.8mm_D2mm_OD3.9mm_Relief
Connector_Wire:SolderWire-2sqmm_1x06_P7.8mm_D2mm_OD3.9mm_Relief2x
Connector_Wire:SolderWirePad_1x01_SMD_1x2mm
Connector_Wire:SolderWirePad_1x01_SMD_5x10mm
+Connector_Wuerth:Wuerth_WR-PHD_610004243021_SMD_2x02_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_610006243021_SMD_2x03_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_610008243021_SMD_2x04_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_610010243021_SMD_2x05_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_610012243021_SMD_2x06_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_610016243021_SMD_2x08_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_610018243021_SMD_2x09_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_610020243021_SMD_2x10_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_610022243021_SMD_2x11_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_610024243021_SMD_2x12_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_610026243021_SMD_2x13_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_610032243021_SMD_2x16_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_610034243021_SMD_2x17_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_613004216921_Large_2x02_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_61300425721_Standard_2x02_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_613006216921_Large_2x03_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_61300625721_Standard_2x03_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_613008216921_Large_2x04_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_61300825721_Standard_2x04_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_613010216921_Large_2x05_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_61301025721_Standard_2x05_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_613012216921_Large_2x06_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_61301225721_Standard_2x06_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_613016216921_Large_2x08_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_61301625721_Standard_2x08_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_613018216921_Large_2x09_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_613020216921_Large_2x10_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_61302025721_Standard_2x10_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_613022216921_Large_2x11_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_613024216921_Large_2x12_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_61302425721_Standard_2x12_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_613026216921_Large_2x13_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_61302625721_Standard_2x13_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_613032216921_Large_2x16_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_61303225721_Standard_2x16_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_613034216921_Large_2x17_P2.54mm_Vertical
+Connector_Wuerth:Wuerth_WR-PHD_61303425721_Standard_2x17_P2.54mm_Vertical
Connector_Wuerth:Wuerth_WR-WTB_64800211622_1x02_P1.50mm_Vertical
Connector_Wuerth:Wuerth_WR-WTB_64800311622_1x03_P1.50mm_Vertical
Connector_Wuerth:Wuerth_WR-WTB_64800411622_1x04_P1.50mm_Vertical
@@ -7284,9 +7569,13 @@ Connector_Wuerth:Wuerth_WR-WTB_64800911622_1x09_P1.50mm_Vertical
Connector_Wuerth:Wuerth_WR-WTB_64801011622_1x10_P1.50mm_Vertical
Converter_ACDC:Converter_ACDC_CUI_PBO-3-Sxx_THT_Vertical
Converter_ACDC:Converter_ACDC_Hahn_HS-400xx_THT
-Converter_ACDC:Converter_ACDC_HiLink_HLK-10Mxx
-Converter_ACDC:Converter_ACDC_HiLink_HLK-5Mxx
-Converter_ACDC:Converter_ACDC_HiLink_HLK-PMxx
+Converter_ACDC:Converter_ACDC_Hi-Link_HLK-10Mxx
+Converter_ACDC:Converter_ACDC_Hi-Link_HLK-12MxxA
+Converter_ACDC:Converter_ACDC_Hi-Link_HLK-20Mxx
+Converter_ACDC:Converter_ACDC_Hi-Link_HLK-2Mxx
+Converter_ACDC:Converter_ACDC_Hi-Link_HLK-30Mxx
+Converter_ACDC:Converter_ACDC_Hi-Link_HLK-5Mxx
+Converter_ACDC:Converter_ACDC_Hi-Link_HLK-PMxx
Converter_ACDC:Converter_ACDC_MeanWell_IRM-02-xx_SMD
Converter_ACDC:Converter_ACDC_MeanWell_IRM-02-xx_THT
Converter_ACDC:Converter_ACDC_MeanWell_IRM-03-xx_SMD
@@ -7295,12 +7584,18 @@ Converter_ACDC:Converter_ACDC_MeanWell_IRM-05-xx_THT
Converter_ACDC:Converter_ACDC_MeanWell_IRM-10-xx_THT
Converter_ACDC:Converter_ACDC_MeanWell_IRM-20-xx_THT
Converter_ACDC:Converter_ACDC_MeanWell_IRM-60-xx_THT
+Converter_ACDC:Converter_ACDC_MeanWell_MFM-10-xx_THT
+Converter_ACDC:Converter_ACDC_MeanWell_MFM-15-xx_THT
Converter_ACDC:Converter_ACDC_Murata_BAC05SxxDC_THT
Converter_ACDC:Converter_ACDC_RECOM_RAC01-xxSGB_THT
Converter_ACDC:Converter_ACDC_RECOM_RAC04-xxSGx_THT
Converter_ACDC:Converter_ACDC_RECOM_RAC05-xxSK_THT
Converter_ACDC:Converter_ACDC_Recom_RAC20-xxDK_THT
Converter_ACDC:Converter_ACDC_Recom_RAC20-xxSK_THT
+Converter_ACDC:Converter_ACDC_TRACO_TMF_051xx_THT
+Converter_ACDC:Converter_ACDC_TRACO_TMF_101xx_THT
+Converter_ACDC:Converter_ACDC_TRACO_TMF_201xx_THT
+Converter_ACDC:Converter_ACDC_TRACO_TMF_301xx_THT
Converter_ACDC:Converter_ACDC_TRACO_TMG-15_THT
Converter_ACDC:Converter_ACDC_TRACO_TMLM-04_THT
Converter_ACDC:Converter_ACDC_TRACO_TMLM-05_THT
@@ -7308,6 +7603,7 @@ Converter_ACDC:Converter_ACDC_TRACO_TMLM-10-20_THT
Converter_ACDC:Converter_ACDC_TRACO_TPP-15-1xx-D_THT
Converter_ACDC:Converter_ACDC_Vigortronix_VTX-214-010-xxx_THT
Converter_ACDC:Converter_ACDC_Vigortronix_VTX-214-015-1xx_THT
+Converter_ACDC:Converter_ACDC_ZETTLER_ZPI03Sxx00WC_THT
Converter_DCDC:Converter_DCDC_Artesyn_ATA_SMD
Converter_DCDC:Converter_DCDC_Bothhand_CFUDxxxx_THT
Converter_DCDC:Converter_DCDC_Bothhand_CFUSxxxxEH_THT
@@ -7320,6 +7616,7 @@ Converter_DCDC:Converter_DCDC_Cyntec_MUN12AD01-SH
Converter_DCDC:Converter_DCDC_Cyntec_MUN12AD03-SH
Converter_DCDC:Converter_DCDC_MeanWell_NID30_THT
Converter_DCDC:Converter_DCDC_MeanWell_NID60_THT
+Converter_DCDC:Converter_DCDC_MeanWell_NSD10_THT
Converter_DCDC:Converter_DCDC_Murata_CRE1xxxxxx3C_THT
Converter_DCDC:Converter_DCDC_Murata_CRE1xxxxxxDC_THT
Converter_DCDC:Converter_DCDC_Murata_CRE1xxxxxxSC_THT
@@ -7359,14 +7656,21 @@ Converter_DCDC:Converter_DCDC_TRACO_TDU1-xxxx_THT
Converter_DCDC:Converter_DCDC_TRACO_TEA1-xxxxE_THT
Converter_DCDC:Converter_DCDC_TRACO_TEA1-xxxxHI_THT
Converter_DCDC:Converter_DCDC_TRACO_TEA1-xxxx_THT
+Converter_DCDC:Converter_DCDC_TRACO_TEC3-24xxUI_THT
Converter_DCDC:Converter_DCDC_TRACO_TEL12-xxxx_THT
+Converter_DCDC:Converter_DCDC_TRACO_TEN10-110xxWIRH_THT
Converter_DCDC:Converter_DCDC_TRACO_TEN10-xxxx_Dual_THT
Converter_DCDC:Converter_DCDC_TRACO_TEN10-xxxx_Single_THT
Converter_DCDC:Converter_DCDC_TRACO_TEN10-xxxx_THT
+Converter_DCDC:Converter_DCDC_TRACO_TEN20-110xxWIRH_THT
Converter_DCDC:Converter_DCDC_TRACO_TEN20-xxxx-N4_THT
Converter_DCDC:Converter_DCDC_TRACO_TEN20-xxxx_THT
+Converter_DCDC:Converter_DCDC_TRACO_TEN40-110xxWIRH_THT
+Converter_DCDC:Converter_DCDC_TRACO_THB10-xxxx_Dual_THT
+Converter_DCDC:Converter_DCDC_TRACO_THB10-xxxx_Single_THT
Converter_DCDC:Converter_DCDC_TRACO_THD_15-xxxxWIN_THT
Converter_DCDC:Converter_DCDC_TRACO_THN30-xxxx_THT
+Converter_DCDC:Converter_DCDC_TRACO_THR40-72xxWI_THT
Converter_DCDC:Converter_DCDC_TRACO_TMA-05xxD_12xxD_Dual_THT
Converter_DCDC:Converter_DCDC_TRACO_TMA-05xxS_12xxS_Single_THT
Converter_DCDC:Converter_DCDC_TRACO_TMA-15xxD_24xxD_Dual_THT
@@ -7378,11 +7682,18 @@ Converter_DCDC:Converter_DCDC_TRACO_TMR-1-xxxx_Single_THT
Converter_DCDC:Converter_DCDC_TRACO_TMR-1SM_SMD
Converter_DCDC:Converter_DCDC_TRACO_TMR-2xxxxWI_THT
Converter_DCDC:Converter_DCDC_TRACO_TMR-xxxx_THT
+Converter_DCDC:Converter_DCDC_TRACO_TMR4-xxxxWI_THT
Converter_DCDC:Converter_DCDC_TRACO_TMU3-05xx_12xx_THT
Converter_DCDC:Converter_DCDC_TRACO_TMU3-24xx_THT
+Converter_DCDC:Converter_DCDC_TRACO_TOS06-05SIL_THT
+Converter_DCDC:Converter_DCDC_TRACO_TOS06-12SIL_THT
+Converter_DCDC:Converter_DCDC_TRACO_TRA3-xxxx_THT
Converter_DCDC:Converter_DCDC_TRACO_TRI1-xxxx_THT
Converter_DCDC:Converter_DCDC_TRACO_TSR-1_THT
+Converter_DCDC:Converter_DCDC_TRACO_TSR0.6-48xxWI_TSR0.6-48xxxWI_THT
Converter_DCDC:Converter_DCDC_TRACO_TSR1-xxxxE_THT
+Converter_DCDC:Converter_DCDC_TRACO_TSR2-24xxN_TSR2-24xxxN_THT
+Converter_DCDC:Converter_DCDC_TRACO_TSR2-xxxx_THT
Converter_DCDC:Converter_DCDC_XP_POWER-IA48xxD_THT
Converter_DCDC:Converter_DCDC_XP_POWER-IA48xxS_THT
Converter_DCDC:Converter_DCDC_XP_POWER-IAxxxxD_THT
@@ -7465,6 +7776,7 @@ Crystal:Crystal_SMD_0603-2Pin_6.0x3.5mm
Crystal:Crystal_SMD_0603-2Pin_6.0x3.5mm_HandSoldering
Crystal:Crystal_SMD_0603-4Pin_6.0x3.5mm
Crystal:Crystal_SMD_0603-4Pin_6.0x3.5mm_HandSoldering
+Crystal:Crystal_SMD_1210-4Pin_1.2x1.0mm
Crystal:Crystal_SMD_2012-2Pin_2.0x1.2mm
Crystal:Crystal_SMD_2012-2Pin_2.0x1.2mm_HandSoldering
Crystal:Crystal_SMD_2016-4Pin_2.0x1.6mm
@@ -7641,6 +7953,7 @@ Diode_SMD:D_SMC-RM10_Universal_Handsoldering
Diode_SMD:D_SMC
Diode_SMD:D_SMC_Handsoldering
Diode_SMD:D_SMF
+Diode_SMD:D_SMP_DO-220AA
Diode_SMD:D_SOD-110
Diode_SMD:D_SOD-123
Diode_SMD:D_SOD-123F
@@ -7649,6 +7962,8 @@ Diode_SMD:D_SOD-323
Diode_SMD:D_SOD-323F
Diode_SMD:D_SOD-323_HandSoldering
Diode_SMD:D_SOD-523
+Diode_SMD:D_SOD-882
+Diode_SMD:D_SOD-882D
Diode_SMD:D_SOD-923
Diode_SMD:D_TUMD2
Diode_SMD:Infineon_SG-WLL-2-3_0.58x0.28_P0.36mm
@@ -7656,6 +7971,9 @@ Diode_SMD:Littelfuse_PolyZen-LS
Diode_SMD:Nexperia_CFP3_SOD-123W
Diode_SMD:Nexperia_DSN0603-2_0.6x0.3mm_P0.4mm
Diode_SMD:Nexperia_DSN1608-2_1.6x0.8mm
+Diode_SMD:OnSemi_751EP_SOIC-4_3.9x4.725mm_P2.54mm
+Diode_SMD:ST_D_SMC
+Diode_SMD:ST_QFN-2L_1.6x1.0mm
Diode_SMD:Vishay_SMPA
Diode_THT:Diode_Bridge_15.1x15.1x6.3mm_P10.9mm
Diode_THT:Diode_Bridge_15.2x15.2x6.3mm_P10.9mm
@@ -7788,6 +8106,7 @@ Display:EA_eDIPTFT57-XXX
Display:EA_eDIPTFT70-ATC
Display:EA_eDIPTFT70-XXX
Display:EA_T123X-I2C
+Display:ER-OLED0.42-1W_Folded
Display:ERM19264
Display:HDSM-441B_HDSM-443B
Display:HDSM-541B_HDSM-543B
@@ -7802,6 +8121,7 @@ Display:HY1602E
Display:LCD-016N002L
Display:LM16255
Display:NHD-0420H1Z
+Display:NHD-C0220BiZ-FSRGB
Display:NHD-C0220BiZ
Display:NHD-C12832A1Z-FSRGB
Display:OLED-128O064D
@@ -7873,6 +8193,7 @@ Filter:Filter_1109-5_1.1x0.9mm
Filter:Filter_1411-5_1.4x1.1mm
Filter:Filter_Bourns_SRF0905_6.0x9.2mm
Filter:Filter_FILTERCON_1FPxx
+Filter:Filter_KEMET_PZB300_24.0x12.5mm_P10.0mm
Filter:Filter_Mini-Circuits_FV1206-1
Filter:Filter_Mini-Circuits_FV1206-4
Filter:Filter_Mini-Circuits_FV1206-5
@@ -8061,9 +8382,53 @@ Inductor_SMD:L_2512_6332Metric_Pad1.52x3.35mm_HandSolder
Inductor_SMD:L_6.3x6.3_H3
Inductor_SMD:L_7.3x7.3_H3.5
Inductor_SMD:L_7.3x7.3_H4.5
+Inductor_SMD:L_Abracon_ASPI-0425
Inductor_SMD:L_Abracon_ASPI-0630LR
Inductor_SMD:L_Abracon_ASPI-3012S
Inductor_SMD:L_Abracon_ASPI-4030S
+Inductor_SMD:L_Abracon_ASPIAIG-F4020
+Inductor_SMD:L_APV_ANR252010
+Inductor_SMD:L_APV_ANR252012
+Inductor_SMD:L_APV_ANR3010
+Inductor_SMD:L_APV_ANR3012
+Inductor_SMD:L_APV_ANR3015
+Inductor_SMD:L_APV_ANR4010
+Inductor_SMD:L_APV_ANR4012
+Inductor_SMD:L_APV_ANR4018
+Inductor_SMD:L_APV_ANR4020
+Inductor_SMD:L_APV_ANR4026
+Inductor_SMD:L_APV_ANR4030
+Inductor_SMD:L_APV_ANR5012
+Inductor_SMD:L_APV_ANR5020
+Inductor_SMD:L_APV_ANR5040
+Inductor_SMD:L_APV_ANR5045
+Inductor_SMD:L_APV_ANR6020
+Inductor_SMD:L_APV_ANR6028
+Inductor_SMD:L_APV_ANR6045
+Inductor_SMD:L_APV_ANR8040
+Inductor_SMD:L_APV_ANR8065
+Inductor_SMD:L_APV_APH0412
+Inductor_SMD:L_APV_APH0420
+Inductor_SMD:L_APV_APH0518
+Inductor_SMD:L_APV_APH0530
+Inductor_SMD:L_APV_APH0615
+Inductor_SMD:L_APV_APH0618
+Inductor_SMD:L_APV_APH0620
+Inductor_SMD:L_APV_APH0624
+Inductor_SMD:L_APV_APH0630
+Inductor_SMD:L_APV_APH0640
+Inductor_SMD:L_APV_APH0650
+Inductor_SMD:L_APV_APH0840
+Inductor_SMD:L_APV_APH0850
+Inductor_SMD:L_APV_APH1030
+Inductor_SMD:L_APV_APH1040
+Inductor_SMD:L_APV_APH1050
+Inductor_SMD:L_APV_APH1240
+Inductor_SMD:L_APV_APH1250
+Inductor_SMD:L_APV_APH1260
+Inductor_SMD:L_APV_APH1265
+Inductor_SMD:L_APV_APH1770
+Inductor_SMD:L_APV_APH2213
Inductor_SMD:L_AVX_LMLP07A7
Inductor_SMD:L_Bourns-SRN1060
Inductor_SMD:L_Bourns-SRN4018
@@ -8073,20 +8438,39 @@ Inductor_SMD:L_Bourns-SRR1005
Inductor_SMD:L_Bourns-SRU1028_10.0x10.0mm
Inductor_SMD:L_Bourns-SRU8028_8.0x8.0mm
Inductor_SMD:L_Bourns-SRU8043
+Inductor_SMD:L_Bourns_SDR0604
Inductor_SMD:L_Bourns_SDR1806
Inductor_SMD:L_Bourns_SRF1260
Inductor_SMD:L_Bourns_SRN6045TA
Inductor_SMD:L_Bourns_SRN8040TA
Inductor_SMD:L_Bourns_SRP1038C_10.0x10.0mm
+Inductor_SMD:L_Bourns_SRP1050WA
Inductor_SMD:L_Bourns_SRP1245A
Inductor_SMD:L_Bourns_SRP1770TA_16.9x16.9mm
Inductor_SMD:L_Bourns_SRP2313AA
Inductor_SMD:L_Bourns_SRP5030T
+Inductor_SMD:L_Bourns_SRP6060FA
Inductor_SMD:L_Bourns_SRP7028A_7.3x6.6mm
Inductor_SMD:L_Bourns_SRR1208_12.7x12.7mm
Inductor_SMD:L_Bourns_SRR1210A
Inductor_SMD:L_Bourns_SRR1260
Inductor_SMD:L_Bourns_SRU5016_5.2x5.2mm
+Inductor_SMD:L_Cenker_CKCS201610
+Inductor_SMD:L_Cenker_CKCS252010
+Inductor_SMD:L_Cenker_CKCS252012
+Inductor_SMD:L_Cenker_CKCS3012
+Inductor_SMD:L_Cenker_CKCS3015
+Inductor_SMD:L_Cenker_CKCS4018
+Inductor_SMD:L_Cenker_CKCS4020
+Inductor_SMD:L_Cenker_CKCS4030
+Inductor_SMD:L_Cenker_CKCS5020
+Inductor_SMD:L_Cenker_CKCS5040
+Inductor_SMD:L_Cenker_CKCS6020
+Inductor_SMD:L_Cenker_CKCS6028
+Inductor_SMD:L_Cenker_CKCS6045
+Inductor_SMD:L_Cenker_CKCS8040
+Inductor_SMD:L_Cenker_CKCS8060
+Inductor_SMD:L_Cenker_CKCS8080
Inductor_SMD:L_Changjiang_FNR252010S
Inductor_SMD:L_Changjiang_FNR252012S
Inductor_SMD:L_Changjiang_FNR3010S
@@ -8113,6 +8497,26 @@ Inductor_SMD:L_Changjiang_FNR6045S
Inductor_SMD:L_Changjiang_FNR8040S
Inductor_SMD:L_Changjiang_FNR8050S
Inductor_SMD:L_Changjiang_FNR8065S
+Inductor_SMD:L_Changjiang_FXL0412
+Inductor_SMD:L_Changjiang_FXL0420
+Inductor_SMD:L_Changjiang_FXL0518
+Inductor_SMD:L_Changjiang_FXL0530
+Inductor_SMD:L_Changjiang_FXL0615
+Inductor_SMD:L_Changjiang_FXL0618
+Inductor_SMD:L_Changjiang_FXL0624
+Inductor_SMD:L_Changjiang_FXL0630
+Inductor_SMD:L_Changjiang_FXL0640
+Inductor_SMD:L_Changjiang_FXL0650
+Inductor_SMD:L_Changjiang_FXL0840
+Inductor_SMD:L_Changjiang_FXL1030
+Inductor_SMD:L_Changjiang_FXL1040
+Inductor_SMD:L_Changjiang_FXL1050
+Inductor_SMD:L_Changjiang_FXL1340
+Inductor_SMD:L_Changjiang_FXL1350
+Inductor_SMD:L_Changjiang_FXL1360
+Inductor_SMD:L_Changjiang_FXL1365
+Inductor_SMD:L_Changjiang_FXL1770
+Inductor_SMD:L_Changjiang_FXL2213
Inductor_SMD:L_Chilisin_BMRA00040415
Inductor_SMD:L_Chilisin_BMRA00040420
Inductor_SMD:L_Chilisin_BMRA00050520
@@ -8135,10 +8539,47 @@ Inductor_SMD:L_Chilisin_BMRx00050512-B
Inductor_SMD:L_Chilisin_BMRx00050515
Inductor_SMD:L_Chilisin_BMRx00060615
Inductor_SMD:L_Chilisin_BMRx00060630
+Inductor_SMD:L_Coilcraft_1515SQ-47N
+Inductor_SMD:L_Coilcraft_1515SQ-68N
+Inductor_SMD:L_Coilcraft_1515SQ-82N
+Inductor_SMD:L_Coilcraft_2222SQ-111
+Inductor_SMD:L_Coilcraft_2222SQ-131
+Inductor_SMD:L_Coilcraft_2222SQ-161
+Inductor_SMD:L_Coilcraft_2222SQ-181
+Inductor_SMD:L_Coilcraft_2222SQ-221
+Inductor_SMD:L_Coilcraft_2222SQ-271
+Inductor_SMD:L_Coilcraft_2222SQ-301
+Inductor_SMD:L_Coilcraft_2222SQ-90N
+Inductor_SMD:L_Coilcraft_2929SQ-331
+Inductor_SMD:L_Coilcraft_2929SQ-361
+Inductor_SMD:L_Coilcraft_2929SQ-391
+Inductor_SMD:L_Coilcraft_2929SQ-431
+Inductor_SMD:L_Coilcraft_2929SQ-501
Inductor_SMD:L_Coilcraft_LPS3010
Inductor_SMD:L_Coilcraft_LPS3314
Inductor_SMD:L_Coilcraft_LPS4018
+Inductor_SMD:L_Coilcraft_LPS4414
Inductor_SMD:L_Coilcraft_LPS5030
+Inductor_SMD:L_Coilcraft_MOS6020-XXX
+Inductor_SMD:L_Coilcraft_MSS1038-XXX
+Inductor_SMD:L_Coilcraft_MSS1038T-XXX
+Inductor_SMD:L_Coilcraft_MSS1048-XXX
+Inductor_SMD:L_Coilcraft_MSS1048T-XXX
+Inductor_SMD:L_Coilcraft_MSS1210-XXX
+Inductor_SMD:L_Coilcraft_MSS1210H-XXX
+Inductor_SMD:L_Coilcraft_MSS1246-XXX
+Inductor_SMD:L_Coilcraft_MSS1246H-XXX
+Inductor_SMD:L_Coilcraft_MSS1246T-XXX
+Inductor_SMD:L_Coilcraft_MSS1260-XXX
+Inductor_SMD:L_Coilcraft_MSS1260H-XXX
+Inductor_SMD:L_Coilcraft_MSS1260T-XXX
+Inductor_SMD:L_Coilcraft_MSS1278-XXX
+Inductor_SMD:L_Coilcraft_MSS1278H-XXX
+Inductor_SMD:L_Coilcraft_MSS1278T-XXX
+Inductor_SMD:L_Coilcraft_MSS1514V-XXX
+Inductor_SMD:L_Coilcraft_MSS1583-XXX
+Inductor_SMD:L_Coilcraft_MSS1812T-XXX
+Inductor_SMD:L_Coilcraft_MSS7348-XXX
Inductor_SMD:L_Coilcraft_XAL1010-XXX
Inductor_SMD:L_Coilcraft_XAL1030-XXX
Inductor_SMD:L_Coilcraft_XAL1060-XXX
@@ -8223,6 +8664,8 @@ Inductor_SMD:L_Ferrocore_DLG-0703
Inductor_SMD:L_Ferrocore_DLG-0705
Inductor_SMD:L_Ferrocore_DLG-1004
Inductor_SMD:L_Ferrocore_DLG-1005
+Inductor_SMD:L_KOHERelec_MDA5030
+Inductor_SMD:L_KOHERelec_MDA7030
Inductor_SMD:L_Murata_DEM35xxC
Inductor_SMD:L_Murata_DFE201610P
Inductor_SMD:L_Murata_LQH2MCNxxxx02_2.0x1.6mm
@@ -8264,8 +8707,12 @@ Inductor_SMD:L_Neosid_SMs85
Inductor_SMD:L_Neosid_SMs95_SMs95p
Inductor_SMD:L_Pulse_P059x
Inductor_SMD:L_Pulse_PA4320
+Inductor_SMD:L_Pulse_PA4332
+Inductor_SMD:L_Pulse_PA4340
+Inductor_SMD:L_Pulse_PA4341
Inductor_SMD:L_Pulse_PA4344
Inductor_SMD:L_Pulse_PA4349
+Inductor_SMD:L_Pulse_PA5402
Inductor_SMD:L_Sagami_CER1242B
Inductor_SMD:L_Sagami_CER1257B
Inductor_SMD:L_Sagami_CER1277B
@@ -8273,6 +8720,7 @@ Inductor_SMD:L_Sagami_CWR1242C
Inductor_SMD:L_Sagami_CWR1257C
Inductor_SMD:L_Sagami_CWR1277C
Inductor_SMD:L_SigTra_SC3316F
+Inductor_SMD:L_SOREDE_SNR.1050_10x10x5mm
Inductor_SMD:L_Sumida_CDMC6D28_7.25x6.5mm
Inductor_SMD:L_Sumida_CR75
Inductor_SMD:L_Sunlord_MWSA0402S
@@ -8364,6 +8812,13 @@ Inductor_SMD:L_Sunlord_SWPA8040S
Inductor_SMD:L_Sunlord_SWRB1204S
Inductor_SMD:L_Sunlord_SWRB1205S
Inductor_SMD:L_Sunlord_SWRB1207S
+Inductor_SMD:L_SXN_SMDRI124
+Inductor_SMD:L_SXN_SMDRI125
+Inductor_SMD:L_SXN_SMDRI127
+Inductor_SMD:L_SXN_SMDRI62
+Inductor_SMD:L_SXN_SMDRI64
+Inductor_SMD:L_SXN_SMDRI73
+Inductor_SMD:L_SXN_SMDRI74
Inductor_SMD:L_TaiTech_TMPC1265_13.5x12.5mm
Inductor_SMD:L_Taiyo-Yuden_BK_Array_1206_3216Metric
Inductor_SMD:L_Taiyo-Yuden_MD-1616
@@ -8632,6 +9087,7 @@ Inductor_THT:L_Radial_D12.5mm_P7.00mm_Fastron_09HCP
Inductor_THT:L_Radial_D12.5mm_P9.00mm_Fastron_09HCP
Inductor_THT:L_Radial_D13.5mm_P7.00mm_Fastron_09HCP
Inductor_THT:L_Radial_D14.2mm_P10.00mm_Neosid_SD14
+Inductor_THT:L_Radial_D16.0mm_P10.00mm_Panasonic_15E-L
Inductor_THT:L_Radial_D16.8mm_P11.43mm_Vishay_IHB-1
Inductor_THT:L_Radial_D16.8mm_P12.07mm_Vishay_IHB-1
Inductor_THT:L_Radial_D16.8mm_P12.70mm_Vishay_IHB-1
@@ -8822,14 +9278,18 @@ LED_SMD:LED_Cree-XQ
LED_SMD:LED_Cree-XQ_HandSoldering
LED_SMD:LED_CSP_Samsung_LH181B_2.36x2.36mm
LED_SMD:LED_Dialight_591
+LED_SMD:LED_Everlight-SMD3528_3.5x2.8mm_67-21ST
+LED_SMD:LED_Inolux_IN-P55TATRGB_PLCC6_5.0x5.5mm_P1.8mm
LED_SMD:LED_Inolux_IN-PI554FCH_PLCC4_5.0x5.0mm_P3.2mm
LED_SMD:LED_Kingbright_AAA3528ESGCT
+LED_SMD:LED_Kingbright_APA1606_1.6x0.6mm_Horizontal
LED_SMD:LED_Kingbright_APDA3020VBCD
LED_SMD:LED_Kingbright_APFA3010_3x1.5mm_Horizontal
LED_SMD:LED_Kingbright_APHBM2012_2x1.25mm
LED_SMD:LED_Kingbright_KPA-3010_3x2x1mm
LED_SMD:LED_Kingbright_KPBD-3224
LED_SMD:LED_LiteOn_LTST-C19HE1WT
+LED_SMD:LED_LiteOn_LTST-C235KGKRKT
LED_SMD:LED_LiteOn_LTST-C295K_1.6x0.8mm
LED_SMD:LED_LiteOn_LTST-E563C_PLCC4_5.0x5.0mm_P3.2mm
LED_SMD:LED_LiteOn_LTST-E563C_PLCC4_5.0x5.0mm_P3.2mm_HandSoldering
@@ -8839,6 +9299,7 @@ LED_SMD:LED_Lumex_SML-LX0404SIUPGUSB
LED_SMD:LED_Luminus_MP-3030-1100_3.0x3.0mm
LED_SMD:LED_miniPLCC_2315
LED_SMD:LED_miniPLCC_2315_Handsoldering
+LED_SMD:LED_OPSCO_SK6812_PLCC4_5.0x5.0mm_P3.1mm
LED_SMD:LED_Osram_Lx_P47F_D2mm_ReverseMount
LED_SMD:LED_PLCC-2_3.4x3.0mm_AK
LED_SMD:LED_PLCC-2_3.4x3.0mm_KA
@@ -8851,14 +9312,17 @@ LED_SMD:LED_RGB_5050-6
LED_SMD:LED_RGB_Cree-PLCC-6_6x5mm_P2.1mm
LED_SMD:LED_RGB_Everlight_EASV3015RGBA0_Horizontal
LED_SMD:LED_RGB_Getian_GT-P6PRGB4303
+LED_SMD:LED_RGB_Lumex_SML-LXT0805SIUGUBW
LED_SMD:LED_RGB_PLCC-6
LED_SMD:LED_RGB_Wuerth-PLCC4_3.2x2.8mm_150141M173100
+LED_SMD:LED_RGB_Wuerth_150080M153000
LED_SMD:LED_ROHM_SMLVN6
LED_SMD:LED_SK6805_PLCC4_2.4x2.7mm_P1.3mm
LED_SMD:LED_SK6812MINI_PLCC4_3.5x3.5mm_P1.75mm
LED_SMD:LED_SK6812_EC15_1.5x1.5mm
LED_SMD:LED_SK6812_PLCC4_5.0x5.0mm_P3.2mm
LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm
+LED_SMD:LED_WS2812B-Mini_PLCC4_3.5x3.5mm
LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm
LED_SMD:LED_WS2812_PLCC6_5.0x5.0mm_P1.6mm
LED_SMD:LED_Wurth_150044M155260
@@ -8925,7 +9389,6 @@ LED_THT:LED_D8.0mm
LED_THT:LED_Oval_W5.2mm_H3.8mm
LED_THT:LED_Rectangular_W3.0mm_H2.0mm
LED_THT:LED_Rectangular_W3.9mm_H1.8mm
-LED_THT:LED_Rectangular_W3.9mm_H1.8mm_FlatTop
LED_THT:LED_Rectangular_W3.9mm_H1.9mm
LED_THT:LED_Rectangular_W5.0mm_H2.0mm-3Pins
LED_THT:LED_Rectangular_W5.0mm_H2.0mm
@@ -8969,19 +9432,29 @@ Module:Arduino_UNO_R3_WithMountingHoles
Module:BeagleBoard_PocketBeagle
Module:Carambola2
Module:Electrosmith_Daisy_Seed
+Module:Flipper_Zero_Angled
+Module:Flipper_Zero_Straight
+Module:Google_Coral_SMT_TPU_Module
Module:Maple_Mini
Module:Olimex_MOD-WIFI-ESP8266-DEV
Module:Onion_Omega2+
Module:Onion_Omega2S
Module:Pololu_Breakout-16_15.2x20.3mm
+Module:RaspberryPi_Pico_Common_SMD
+Module:RaspberryPi_Pico_Common_THT
+Module:RaspberryPi_Pico_Common_Unspecified
+Module:RaspberryPi_Pico_SMD
+Module:RaspberryPi_Pico_SMD_HandSolder
+Module:RaspberryPi_Pico_W_SMD
+Module:RaspberryPi_Pico_W_SMD_HandSolder
Module:Raspberry_Pi_Zero_Socketed_THT_FaceDown_MountingHoles
Module:Sipeed-M1
+Module:Sipeed-M1W
Module:ST_Morpho_Connector_144_STLink
Module:ST_Morpho_Connector_144_STLink_MountingHoles
Module:Texas_EUK_R-PDSS-T7_THT
Module:Texas_EUS_R-PDSS-T5_THT
Module:Texas_EUW_R-PDSS-T7_THT
-Module:WEMOS_D1_mini_light
Motors:Vybronics_VZ30C1T8219732L
MountingEquipment:DINRailAdapter_3xM3_PhoenixContact_1201578
MountingHole:MountingHole_2.1mm
@@ -9150,6 +9623,7 @@ MountingHole:MountingHole_8.4mm_M8_Pad
MountingHole:MountingHole_8.4mm_M8_Pad_TopBottom
MountingHole:MountingHole_8.4mm_M8_Pad_TopOnly
MountingHole:MountingHole_8.4mm_M8_Pad_Via
+MountingHole:ToolingHole_1.152mm
Mounting_Wuerth:Mounting_Wuerth_WA-SMSE-ExternalM3_H10mm_9771100360
Mounting_Wuerth:Mounting_Wuerth_WA-SMSE-ExternalM3_H11mm_9771110360
Mounting_Wuerth:Mounting_Wuerth_WA-SMSE-ExternalM3_H12mm_9771120360
@@ -9313,6 +9787,8 @@ Mounting_Wuerth:Mounting_Wuerth_WA-SMST-4.5mm_H6mm_9774060982
Mounting_Wuerth:Mounting_Wuerth_WA-SMST-4.5mm_H7mm_9774070982
Mounting_Wuerth:Mounting_Wuerth_WA-SMST-4.5mm_H8mm_9774080982
Mounting_Wuerth:Mounting_Wuerth_WA-SMST-4.5mm_H9mm_9774090982
+Mounting_Wuerth:Mounting_Wuerth_WP-SMRA-D3.3mm_L7mm_7466300_Horizontal
+Mounting_Wuerth:Mounting_Wuerth_WP-SMRA-M3_L7mm_7466303_Horizontal
NetTie:NetTie-2_SMD_Pad0.5mm
NetTie:NetTie-2_SMD_Pad2.0mm
NetTie:NetTie-2_THT_Pad0.3mm
@@ -9325,34 +9801,20 @@ NetTie:NetTie-4_SMD_Pad0.5mm
NetTie:NetTie-4_SMD_Pad2.0mm
NetTie:NetTie-4_THT_Pad0.3mm
NetTie:NetTie-4_THT_Pad1.0mm
-Obsolete:Fiducial/Fiducial_1mm_Dia_2.54mm_Outer_CopperBottom
-Obsolete:Fiducial/Fiducial_1mm_Dia_2.54mm_Outer_CopperTop
-Obsolete:Fiducial/Fiducial_classic_big_CopperBottom_Type1
-Obsolete:Fiducial/Fiducial_classic_big_CopperBottom_Type2
-Obsolete:Fiducial/Fiducial_classic_big_CopperTop_Type1
-Obsolete:Fiducial/Fiducial_classic_big_CopperTop_Type2
-Obsolete:Fiducial/Fiducial_classic_big_SilkscreenTop_Type1
-Obsolete:Fiducial/Fiducial_classic_big_SilkscreenTop_Type2
-Obsolete:Fiducial/Fiducial_classic_Small_CopperBottom_Type1
-Obsolete:Fiducial/Fiducial_classic_Small_CopperBottom_Type2
-Obsolete:Fiducial/Fiducial_classic_Small_CopperTop_Type1
-Obsolete:Fiducial/Fiducial_classic_Small_CopperTop_Type2
-Obsolete:Fiducial/Fiducial_classic_Small_SilkscreenTop_Type1
-Obsolete:Fiducial/Fiducial_classic_Small_SilkscreenTop_Type2
-Obsolete:Fiducial/Fiducial_Modern_CopperBottom
-Obsolete:Fiducial/Fiducial_Modern_CopperTop
-Obsolete:Fiducial/Fiducial_Modern_SilkscreenTop
OptoDevice:ADNS-9800
OptoDevice:AGILENT_HFBR-152x
OptoDevice:AGILENT_HFBR-252x
OptoDevice:AMS_TSL2550_SMD
+OptoDevice:AMS_TSL25911FN
OptoDevice:Broadcom_AFBR-16xxZ_Horizontal
OptoDevice:Broadcom_AFBR-16xxZ_Tilted
OptoDevice:Broadcom_AFBR-16xxZ_Vertical
+OptoDevice:Broadcom_APDS-9160-003
OptoDevice:Broadcom_APDS-9301
OptoDevice:Broadcom_DFN-6_2x2mm_P0.65mm
OptoDevice:Broadcom_LGA-8_2x2mm_P0.53mm
OptoDevice:Broadcom_LGA-8_2x2mm_P0.5mm
+OptoDevice:Everlight_IRM-H6xxT
OptoDevice:Everlight_ITR1201SR10AR
OptoDevice:Everlight_ITR8307
OptoDevice:Everlight_ITR8307F43
@@ -9415,6 +9877,7 @@ OptoDevice:Panasonic_APV-AQY_SSOP-4_4.45x2.65mm_P1.27mm
OptoDevice:PerkinElmer_VTL5C
OptoDevice:PerkinElmer_VTL5Cx2
OptoDevice:Renesas_DFN-6_1.5x1.6mm_P0.5mm
+OptoDevice:Rohm_RPR-0720
OptoDevice:R_LDR_10x8.5mm_P7.6mm_Vertical
OptoDevice:R_LDR_11x9.4mm_P8.2mm_Vertical
OptoDevice:R_LDR_12x10.8mm_P9.0mm_Vertical
@@ -9426,12 +9889,12 @@ OptoDevice:R_LDR_7x6mm_P5.1mm_Vertical
OptoDevice:R_LDR_D13.8mm_P9.0mm_Vertical
OptoDevice:R_LDR_D20mm_P17.5mm_Vertical
OptoDevice:R_LDR_D6.4mm_P3.4mm_Vertical
+OptoDevice:Sharp_GP2S700HCP
OptoDevice:Sharp_GP2Y0A41SK0F
OptoDevice:Sharp_IS471F
OptoDevice:Sharp_IS485
OptoDevice:Siemens_SFH900
OptoDevice:ST_VL53L0X
-OptoDevice:ST_VL53L1X
OptoDevice:Toshiba_TORX170_TORX173_TORX193_TORX194
OptoDevice:Toshiba_TOTX170_TOTX173_TOTX193_TOTX194
OptoDevice:Vishay_CAST-3Pin
@@ -9439,6 +9902,7 @@ OptoDevice:Vishay_CNY70
OptoDevice:Vishay_MINICAST-3Pin
OptoDevice:Vishay_MINIMOLD-3Pin
OptoDevice:Vishay_MOLD-3Pin
+OptoDevice:Vishay_TCRT5000
Oscillator:Oscillator_DIP-14
Oscillator:Oscillator_DIP-14_LargePads
Oscillator:Oscillator_DIP-8
@@ -9500,18 +9964,25 @@ Oscillator:Oscillator_SMD_SI570_SI571_Standard
Oscillator:Oscillator_SMD_Silicon_Labs_LGA-6_2.5x3.2mm_P1.25mm
Oscillator:Oscillator_SMD_SiTime_PQFD-6L_3.2x2.5mm
Oscillator:Oscillator_SMD_SiTime_SiT9121-6Pin_3.2x2.5mm
+Oscillator:Oscillator_SMD_SiT_PQFN-4Pin_2.0x1.6mm
+Oscillator:Oscillator_SMD_SiT_PQFN-4Pin_2.5x2.0mm
+Oscillator:Oscillator_SMD_SiT_PQFN-4Pin_3.2x2.5mm
+Oscillator:Oscillator_SMD_SiT_PQFN-4Pin_5.0x3.2mm
+Oscillator:Oscillator_SMD_SiT_PQFN-4Pin_7.0x5.0mm
Oscillator:Oscillator_SMD_TCXO_G158
Oscillator:Oscillator_SMD_TXC_7C-4Pin_5.0x3.2mm
Oscillator:Oscillator_SMD_TXC_7C-4Pin_5.0x3.2mm_HandSoldering
+Package_BGA:Alliance_TFBGA-36_6x8mm_Layout6x8_P0.75mm
Package_BGA:Alliance_TFBGA-54_8x8mm_Layout9x9_P0.8mm
-Package_BGA:Analog_BGA-209_9.5x16mm_Layout11x19_P0.8mm_Ball0.5mm_Pad0.4mm
-Package_BGA:Analog_BGA-28_4.0x6.25mm_Layout4x7_P0.8mm_Ball0.45mm_Pad0.4
-Package_BGA:Analog_BGA-49_6.25x6.25mm_Layout7x7_P0.8mm_Ball0.5mm_Pad0.4mm
+Package_BGA:Analog_BGA-165_11.9x16mm_Layout11x15_P1.0mm
+Package_BGA:Analog_BGA-209_9.5x16mm_Layout11x19_P0.8mm
+Package_BGA:Analog_BGA-28_4x6.25mm_Layout4x7_P0.8mm
+Package_BGA:Analog_BGA-49_6.25x6.25mm_Layout7x7_P0.8mm
+Package_BGA:Analog_BGA-77_9x15mm_Layout7x11_P1.27mm
Package_BGA:BGA-100_11.0x11.0mm_Layout10x10_P1.0mm_Ball0.5mm_Pad0.4mm_NSMD
Package_BGA:BGA-100_6.0x6.0mm_Layout11x11_P0.5mm_Ball0.3mm_Pad0.25mm_NSMD
Package_BGA:BGA-1023_33.0x33.0mm_Layout32x32_P1.0mm
Package_BGA:BGA-1156_35.0x35.0mm_Layout34x34_P1.0mm
-Package_BGA:BGA-121_12.0x12.0mm_Layout11x11_P1.0mm
Package_BGA:BGA-121_9.0x9.0mm_Layout11x11_P0.8mm_Ball0.4mm_Pad0.35mm_NSMD
Package_BGA:BGA-1295_37.5x37.5mm_Layout36x36_P1.0mm
Package_BGA:BGA-132_12x18mm_Layout11x17_P1.0mm
@@ -9521,13 +9992,14 @@ Package_BGA:BGA-152_14x18mm_Layout13x17_P0.5mm
Package_BGA:BGA-153_8.0x8.0mm_Layout15x15_P0.5mm_Ball0.3mm_Pad0.25mm_NSMD
Package_BGA:BGA-169_11.0x11.0mm_Layout13x13_P0.8mm_Ball0.5mm_Pad0.4mm_NSMD
Package_BGA:BGA-16_1.92x1.92mm_Layout4x4_P0.5mm
-Package_BGA:BGA-200_10.0x14.5mm_Layout12x22_P0.80x0.65mm
+Package_BGA:BGA-196_15x15mm_Layout14x14_P1.0mm
+Package_BGA:BGA-200_10x14.5mm_Layout12x22_P0.8x0.65mm
Package_BGA:BGA-256_11.0x11.0mm_Layout20x20_P0.5mm_Ball0.3mm_Pad0.25mm_NSMD
Package_BGA:BGA-256_14.0x14.0mm_Layout16x16_P0.8mm_Ball0.45mm_Pad0.32mm_NSMD
Package_BGA:BGA-256_17.0x17.0mm_Layout16x16_P1.0mm_Ball0.5mm_Pad0.4mm_NSMD
Package_BGA:BGA-25_6.35x6.35mm_Layout5x5_P1.27mm
-Package_BGA:BGA-324_15.0x15.0mm_Layout18x18_P0.8mm_Ball0.45mm_Pad0.4mm_NSMD
Package_BGA:BGA-324_15.0x15.0mm_Layout18x18_P0.8mm_Ball0.5mm_Pad0.4mm_NSMD
+Package_BGA:BGA-324_15x15mm_Layout18x18_P0.8mm
Package_BGA:BGA-324_19.0x19.0mm_Layout18x18_P1.0mm_Ball0.5mm_Pad0.4mm_NSMD
Package_BGA:BGA-352_35.0x35.0mm_Layout26x26_P1.27mm
Package_BGA:BGA-36_3.396x3.466mm_Layout6x6_P0.4mm_Ball0.25mm_Pad0.2mm_NSMD
@@ -9535,7 +10007,7 @@ Package_BGA:BGA-400_21.0x21.0mm_Layout20x20_P1.0mm
Package_BGA:BGA-484_23.0x23.0mm_Layout22x22_P1.0mm
Package_BGA:BGA-48_8.0x9.0mm_Layout6x8_P0.8mm
Package_BGA:BGA-529_19x19mm_Layout23x23_P0.8mm
-Package_BGA:BGA-624_21.0x21.0mm_Layout25x25_P0.8mm
+Package_BGA:BGA-624_21x21mm_Layout25x25_P0.8mm
Package_BGA:BGA-625_21.0x21.0mm_Layout25x25_P0.8mm
Package_BGA:BGA-64_9.0x9.0mm_Layout10x10_P0.8mm
Package_BGA:BGA-672_27.0x27.0mm_Layout26x26_P1.0mm_Ball0.6mm_Pad0.5mm_NSMD
@@ -9545,23 +10017,30 @@ Package_BGA:BGA-81_4.496x4.377mm_Layout9x9_P0.4mm_Ball0.25mm_Pad0.2mm_NSMD
Package_BGA:BGA-90_8.0x13.0mm_Layout2x3x15_P0.8mm
Package_BGA:BGA-96_9.0x13.0mm_Layout2x3x16_P0.8mm
Package_BGA:BGA-9_1.6x1.6mm_Layout3x3_P0.5mm
+Package_BGA:EPC_BGA-4_0.9x0.9mm_Layout2x2_P0.45mm
Package_BGA:FB-BGA-484_23.0x23.0mm_Layout22x22_P1.0mm
Package_BGA:FBGA-78_7.5x11mm_Layout2x3x13_P0.8mm
Package_BGA:Fujitsu_WLP-15_2.28x3.092mm_Layout3x5_P0.4mm
-Package_BGA:Infineon_LFBGA-292_17x17mm_Layout20x20_P0.8mm_Ball0.5mm_Pad0.35
-Package_BGA:Lattice_caBGA-381_17.0x17.0mm_Layout20x20_P0.8mm_Ball0.4mm_Pad0.4mm_NSMD
-Package_BGA:Lattice_caBGA-381_17.0x17.0mm_Layout20x20_P0.8mm_Ball0.4mm_Pad0.6mm_SMD
-Package_BGA:Lattice_caBGA-756_27.0x27.0mm_Layout32x32_P0.8mm
+Package_BGA:Infineon_LFBGA-292_17x17mm_Layout20x20_P0.8mm
+Package_BGA:Infineon_TFBGA-48_6x10mm_Layout6x8_P0.75mm
+Package_BGA:Lattice_caBGA-381_17x17mm_Layout20x20_P0.8mm
+Package_BGA:Lattice_caBGA-381_17x17mm_Layout20x20_P0.8mm_SMD
+Package_BGA:Lattice_caBGA-756_27x27mm_Layout32x32_P0.8mm
+Package_BGA:Lattice_iCE40_csBGA-132_8x8mm_Layout14x14_P0.5mm
Package_BGA:LFBGA-100_10x10mm_Layout10x10_P0.8mm
Package_BGA:LFBGA-144_10x10mm_Layout12x12_P0.8mm
-Package_BGA:LFBGA-169_16x12mm_Layout28x14_P0.5mm_Ball0.3_Pad0.3mm_NSMD
+Package_BGA:LFBGA-153_11.5x13mm_Layout14x14_P0.5mm
+Package_BGA:LFBGA-169_12x16mm_Layout14x28_P0.5mm
+Package_BGA:LFBGA-169_12x18mm_Layout14x28_P0.5mm
+Package_BGA:LFBGA-169_14x18mm_Layout14x28_P0.5mm
+Package_BGA:LFBGA-289_14x14mm_Layout17x17_P0.8mm
Package_BGA:LFBGA-400_16x16mm_Layout20x20_P0.8mm
Package_BGA:LFBGA-484_18x18mm_Layout22x22_P0.8mm
Package_BGA:Linear_BGA-133_15.0x15.0mm_Layout12x12_P1.27mm
-Package_BGA:MAPBGA_14x14mm_Layout17x17_P0.8mm
-Package_BGA:MAPBGA_9x9mm_Layout17x17_P0.5mm
+Package_BGA:MAPBGA-272_9x9mm_Layout17x17_P0.5mm
+Package_BGA:MAPBGA-289_14x14mm_Layout17x17_P0.8mm
Package_BGA:Maxim_WLP-12
-Package_BGA:Maxim_WLP-12_1.608x2.008mm_Layout4x3_P0.4mm_Ball0.27mm_Pad0.25mm_NSMD
+Package_BGA:Maxim_WLP-12_2.008x1.608mm_Layout4x3_P0.4mm
Package_BGA:Maxim_WLP-9_1.595x1.415_Layout3x3_P0.4mm_Ball0.27mm_Pad0.25mm_NSMD
Package_BGA:Microchip_TFBGA-196_11x11mm_Layout14x14_P0.75mm_SMD
Package_BGA:Micron_FBGA-78_7.5x10.6mm_Layout9x13_P0.8mm
@@ -9570,26 +10049,32 @@ Package_BGA:Micron_FBGA-78_9x10.5mm_Layout9x13_P0.8mm
Package_BGA:Micron_FBGA-96_7.5x13.5mm_Layout9x16_P0.8mm
Package_BGA:Micron_FBGA-96_8x14mm_Layout9x16_P0.8mm
Package_BGA:Micron_FBGA-96_9x14mm_Layout9x16_P0.8mm
-Package_BGA:NXP_VFBGA-42_2.6x3mm_Layout6x7_P0.4mm_Ball0.25mm_Pad0.24mm
+Package_BGA:NXP_VFBGA-42_2.6x3mm_Layout6x7_P0.4mm
Package_BGA:ST_LFBGA-354_16x16mm_Layout19x19_P0.8mm
Package_BGA:ST_LFBGA-448_18x18mm_Layout22x22_P0.8mm
+Package_BGA:ST_TFBGA-169_7x7mm_Layout13x13_P0.5mm
Package_BGA:ST_TFBGA-225_13x13mm_Layout15x15_P0.8mm
Package_BGA:ST_TFBGA-257_10x10mm_Layout19x19_P0.5mmP0.65mm
+Package_BGA:ST_TFBGA-320_11x11mm_Layout21x21_P0.5mm
Package_BGA:ST_TFBGA-361_12x12mm_Layout23x23_P0.5mmP0.65mm
Package_BGA:ST_UFBGA-121_6x6mm_Layout11x11_P0.5mm
Package_BGA:ST_UFBGA-129_7x7mm_Layout13x13_P0.5mm
+Package_BGA:ST_UFBGA-59_5x5mm_Layout8x8_P0.5mm
Package_BGA:ST_UFBGA-73_5x5mm_Layout9x9_P0.5mm
+Package_BGA:ST_UFBGA-81_5x5mm_Layout9x9_P0.5mm
Package_BGA:ST_uTFBGA-36_3.6x3.6mm_Layout6x6_P0.5mm
-Package_BGA:Texas_BGA-289_15.0x15.0mm_Layout17x17_P0.8mm_Ball0.5mm_Pad0.4mm
+Package_BGA:Texas_BGA-289_15x15mm_Layout17x17_P0.8mm
Package_BGA:Texas_DSBGA-10_1.36x1.86mm_Layout3x4_P0.5mm
Package_BGA:Texas_DSBGA-12_1.36x1.86mm_Layout3x4_P0.5mm
Package_BGA:Texas_DSBGA-16_2.39x2.39mm_Layout4x4_P0.5mm
-Package_BGA:Texas_DSBGA-28_1.9x3.0mm_Layout4x7_P0.4mm
+Package_BGA:Texas_DSBGA-28_1.9x3mm_Layout4x7_P0.4mm
Package_BGA:Texas_DSBGA-49_3.33x3.488mm_Layout7x7_P0.4mm
Package_BGA:Texas_DSBGA-5_0.822x1.116mm_Layout2x1x2_P0.4mm
Package_BGA:Texas_DSBGA-5_0.8875x1.3875mm_Layout2x3_P0.5mm
+Package_BGA:Texas_DSBGA-5_1.5855x1.6365mm_Layout3x2_P0.5mm
Package_BGA:Texas_DSBGA-64_3.415x3.535mm_Layout8x8_P0.4mm
Package_BGA:Texas_DSBGA-6_0.704x1.054mm_Layout2x3_P0.35mm
+Package_BGA:Texas_DSBGA-6_0.757x1.01mm_Layout2x3_P0.35mm
Package_BGA:Texas_DSBGA-6_0.855x1.255mm_Layout2x3_P0.4mm_LevelB
Package_BGA:Texas_DSBGA-6_0.855x1.255mm_Layout2x3_P0.4mm_LevelC
Package_BGA:Texas_DSBGA-6_0.95x1.488mm_Layout2x3_P0.4mm
@@ -9599,18 +10084,30 @@ Package_BGA:Texas_DSBGA-8_0.9x1.9mm_Layout2x4_P0.5mm
Package_BGA:Texas_DSBGA-8_1.43x1.41mm_Layout3x3_P0.5mm
Package_BGA:Texas_DSBGA-8_1.5195x1.5195mm_Layout3x3_P0.5mm
Package_BGA:Texas_DSBGA-9_1.4715x1.4715mm_Layout3x3_P0.5mm
-Package_BGA:Texas_MicroStar_Junior_BGA-113_7.0x7.0mm_Layout12x12_P0.5mm
+Package_BGA:Texas_DSBGA-9_1.62x1.58mm_Layout3x3_P0.5mm
+Package_BGA:Texas_MicroStar_Junior_BGA-113_7x7mm_Layout12x12_P0.5mm
Package_BGA:Texas_MicroStar_Junior_BGA-12_2.0x2.5mm_Layout4x3_P0.5mm
Package_BGA:Texas_MicroStar_Junior_BGA-80_5.0x5.0mm_Layout9x9_P0.5mm
+Package_BGA:Texas_PicoStar_BGA-4_0.758x0.758mm_Layout2x2_P0.4mm
+Package_BGA:Texas_YFP0020_DSBGA-20_1.588x1.988mm_Layout4x5_P0.4mm
Package_BGA:TFBGA-100_5.5x5.5mm_Layout10x10_P0.5mm
Package_BGA:TFBGA-100_8x8mm_Layout10x10_P0.8mm
Package_BGA:TFBGA-100_9.0x9.0mm_Layout10x10_P0.8mm
Package_BGA:TFBGA-121_10x10mm_Layout11x11_P0.8mm
+Package_BGA:TFBGA-169_9x9mm_Layout13x13_P0.65mm
Package_BGA:TFBGA-216_13x13mm_Layout15x15_P0.8mm
Package_BGA:TFBGA-225_10x10mm_Layout15x15_P0.65mm
+Package_BGA:TFBGA-256_13x13mm_Layout16x16_P0.8mm
Package_BGA:TFBGA-265_14x14mm_Layout17x17_P0.8mm
+Package_BGA:TFBGA-289_9x9mm_Layout17x17_P0.5mm
+Package_BGA:TFBGA-324_12x12mm_Layout18x18_P0.65mm
Package_BGA:TFBGA-361_13x13mm_Layout19x19_P0.65mm
+Package_BGA:TFBGA-48_6x10mm_Layout6x8_P0.75mm
+Package_BGA:TFBGA-49_3x3mm_Layout7x7_P0.4mm
+Package_BGA:TFBGA-576_16x16mm_Layout24x24_P0.65mm
+Package_BGA:TFBGA-644_19x19mm_Layout28x28_P0.65mm
Package_BGA:TFBGA-64_5x5mm_Layout8x8_P0.5mm
+Package_BGA:TFBGA-81_5x5mm_Layout9x9_P0.5mm
Package_BGA:UCBGA-36_2.5x2.5mm_Layout6x6_P0.4mm
Package_BGA:UCBGA-49_3x3mm_Layout7x7_P0.4mm
Package_BGA:UCBGA-81_4x4mm_Layout9x9_P0.4mm
@@ -9626,11 +10123,11 @@ Package_BGA:UFBGA-32_4.0x4.0mm_Layout6x6_P0.5mm
Package_BGA:UFBGA-64_5x5mm_Layout8x8_P0.5mm
Package_BGA:VFBGA-100_7.0x7.0mm_Layout10x10_P0.65mm
Package_BGA:VFBGA-49_5.0x5.0mm_Layout7x7_P0.65mm
-Package_BGA:VFBGA-86_6x6mm_Layout10x10_P0.55mm_Ball0.25mm_Pad0.2mm
-Package_BGA:WLP-4_0.73x0.73mm_Layout2x2_P0.35mm_Ball0.22mm_Pad0.2mm_NSMD
+Package_BGA:VFBGA-86_6x6mm_Layout10x10_P0.55mm
+Package_BGA:WLP-4_0.728x0.728mm_Layout2x2_P0.35mm
Package_BGA:WLP-4_0.83x0.83mm_P0.4mm
Package_BGA:WLP-4_0.86x0.86mm_P0.4mm
-Package_BGA:WLP-9_1.448x1.468mm_Layout3x3_P0.4mm_Ball0.27mm_Pad0.25mm
+Package_BGA:WLP-9_1.468x1.448mm_Layout3x3_P0.4mm
Package_BGA:XBGA-121_10x10mm_Layout11x11_P0.8mm
Package_BGA:XFBGA-121_8x8mm_Layout11x11_P0.65mm
Package_BGA:XFBGA-36_3.5x3.5mm_Layout6x6_P0.5mm
@@ -9681,9 +10178,15 @@ Package_CSP:Analog_LFCSP-16-1EP_4x4mm_P0.65mm_EP2.35x2.35mm
Package_CSP:Analog_LFCSP-16-1EP_4x4mm_P0.65mm_EP2.35x2.35mm_ThermalVias
Package_CSP:Analog_LFCSP-8-1EP_3x3mm_P0.5mm_EP1.53x1.85mm
Package_CSP:Analog_LFCSP-UQ-10_1.3x1.6mm_P0.4mm
+Package_CSP:Anpec_WLCSP-20_1.76x2.03mm_Layout4x5_P0.4mm
+Package_CSP:Dialog_WLCSP-34_4.54x1.66mm_Layout17x4_P0.25x0.34mm
+Package_CSP:DiodesInc_GEA20_WLCSP-20_1.7x2.1mm_Layout4x5_P0.4mm
Package_CSP:Efinix_WLCSP-64_3.5353x3.3753mm_Layout8x8_P0.4mm
+Package_CSP:Efinix_WLCSP-80_4.4567x3.5569mm_Layout10x8_P0.4mm
+Package_CSP:LFCSP-10_2x2mm_P0.5mm
Package_CSP:LFCSP-16-1EP_3x3mm_P0.5mm_EP1.3x1.3mm
Package_CSP:LFCSP-16-1EP_3x3mm_P0.5mm_EP1.3x1.3mm_ThermalVias
+Package_CSP:LFCSP-16-1EP_3x3mm_P0.5mm_EP1.5x1.5mm
Package_CSP:LFCSP-16-1EP_3x3mm_P0.5mm_EP1.6x1.6mm
Package_CSP:LFCSP-16-1EP_3x3mm_P0.5mm_EP1.6x1.6mm_ThermalVias
Package_CSP:LFCSP-16-1EP_3x3mm_P0.5mm_EP1.7x1.7mm
@@ -9696,10 +10199,12 @@ Package_CSP:LFCSP-16-1EP_4x4mm_P0.65mm_EP2.6x2.6mm
Package_CSP:LFCSP-16-1EP_4x4mm_P0.65mm_EP2.6x2.6mm_ThermalVias
Package_CSP:LFCSP-16_3x3mm_P0.5mm
Package_CSP:LFCSP-20-1EP_4x4mm_P0.5mm_EP2.1x2.1mm
+Package_CSP:LFCSP-20-1EP_4x4mm_P0.5mm_EP2.1x2.1mm_ThermalVias
Package_CSP:LFCSP-20-1EP_4x4mm_P0.5mm_EP2.5x2.5mm
Package_CSP:LFCSP-20-1EP_4x4mm_P0.5mm_EP2.5x2.5mm_ThermalVias
Package_CSP:LFCSP-20-1EP_4x4mm_P0.5mm_EP2.6x2.6mm
Package_CSP:LFCSP-20-1EP_4x4mm_P0.5mm_EP2.6x2.6mm_ThermalVias
+Package_CSP:LFCSP-24-1EP_4x4mm_P0.5mm_EP0.5x0.5mm
Package_CSP:LFCSP-24-1EP_4x4mm_P0.5mm_EP2.3x2.3mm
Package_CSP:LFCSP-24-1EP_4x4mm_P0.5mm_EP2.3x2.3mm_ThermalVias
Package_CSP:LFCSP-24-1EP_4x4mm_P0.5mm_EP2.5x2.5mm
@@ -9721,6 +10226,8 @@ Package_CSP:LFCSP-40-1EP_6x6mm_P0.5mm_EP4.6x4.6mm
Package_CSP:LFCSP-40-1EP_6x6mm_P0.5mm_EP4.6x4.6mm_ThermalVias
Package_CSP:LFCSP-48-1EP_7x7mm_P0.5mm_EP4.1x4.1mm
Package_CSP:LFCSP-48-1EP_7x7mm_P0.5mm_EP4.1x4.1mm_ThermalVias
+Package_CSP:LFCSP-56-1EP_8x8mm_P0.5mm_EP6.6x6.6mm
+Package_CSP:LFCSP-56-1EP_8x8mm_P0.5mm_EP6.6x6.6mm_ThermalVias
Package_CSP:LFCSP-6-1EP_2x2mm_P0.65mm_EP1x1.6mm
Package_CSP:LFCSP-64-1EP_9x9mm_P0.5mm_EP5.21x5.21mm
Package_CSP:LFCSP-64-1EP_9x9mm_P0.5mm_EP5.21x5.21mm_ThermalVias
@@ -9738,39 +10245,55 @@ Package_CSP:LFCSP-WD-10-1EP_3x3mm_P0.5mm_EP1.64x2.38mm
Package_CSP:LFCSP-WD-10-1EP_3x3mm_P0.5mm_EP1.64x2.38mm_ThermalVias
Package_CSP:LFCSP-WD-8-1EP_3x3mm_P0.65mm_EP1.6x2.44mm
Package_CSP:LFCSP-WD-8-1EP_3x3mm_P0.65mm_EP1.6x2.44mm_ThermalVias
-Package_CSP:Maxim_WLCSP-35_3.0x2.17mm_Layout7x5_P0.4mm_Ball0.27mm_Pad0.25mm
-Package_CSP:Nexperia_WLCSP-15_6-3-6_2.37x1.17mm_Layout6x3_P0.4mm
+Package_CSP:Macronix_WLCSP-12_2.02x2.09mm_Layout4x4_P0.5mm
+Package_CSP:Maxim_WLCSP-35_2.998x2.168mm_Layout7x5_P0.4mm
+Package_CSP:Nexperia_WLCSP-15_2.37x1.17mm_Layout6x3_P0.4mmP0.8mm
+Package_CSP:OnSemi_ODCSP36_BGA-36_6.13x6.13mm_Layout6x6_P1.0mm
+Package_CSP:OnSemi_ODCSP36_BGA-36_6.13x6.13mm_Layout6x6_P1.0mm_ManualAssembly
+Package_CSP:OnSemi_ODCSP8_BGA-8_3.16x3.16mm_Layout3x3_P1.26mm
+Package_CSP:OnSemi_ODCSP8_BGA-8_3.16x3.16mm_Layout3x3_P1.26mm_ManualAssembly
Package_CSP:pSemi_CSP-16_1.64x2.04mm_P0.4mm
Package_CSP:pSemi_CSP-16_1.64x2.04mm_P0.4mm_Pad0.18mm
-Package_CSP:ST_WLCSP-100_4.40x4.38mm_Layout10x10_P0.4mm_Offcenter
Package_CSP:ST_WLCSP-100_4.437x4.456mm_Layout10x10_P0.4mm
+Package_CSP:ST_WLCSP-100_4.4x4.38mm_Layout10x10_P0.4mm_Offcenter
Package_CSP:ST_WLCSP-100_Die422
Package_CSP:ST_WLCSP-100_Die446
Package_CSP:ST_WLCSP-100_Die452
Package_CSP:ST_WLCSP-100_Die461
+Package_CSP:ST_WLCSP-101_3.86x3.79mm_Layout11x19_P0.35mm_Stagger
Package_CSP:ST_WLCSP-104_Die437
-Package_CSP:ST_WLCSP-115_3.73x4.15mm_P0.35mm_Stagger
-Package_CSP:ST_WLCSP-115_4.63x4.15mm_P0.4mm_Stagger
+Package_CSP:ST_WLCSP-115_3.73x4.15mm_Layout11x21_P0.35mm_Stagger
+Package_CSP:ST_WLCSP-115_4.63x4.15mm_Layout21x11_P0.4mm_Stagger
+Package_CSP:ST_WLCSP-12_1.7x1.42mm_Layout4x6_P0.35mm_Stagger
Package_CSP:ST_WLCSP-132_4.57x4.37mm_Layout12x11_P0.35mm
Package_CSP:ST_WLCSP-143_Die419
Package_CSP:ST_WLCSP-143_Die449
Package_CSP:ST_WLCSP-144_Die470
+Package_CSP:ST_WLCSP-150_5.38x5.47mm_Layout13x23_P0.4mm_Stagger
Package_CSP:ST_WLCSP-156_4.96x4.64mm_Layout13x12_P0.35mm
Package_CSP:ST_WLCSP-168_Die434
Package_CSP:ST_WLCSP-180_Die451
-Package_CSP:ST_WLCSP-18_1.86x2.14mm_P0.4mm_Stagger
-Package_CSP:ST_WLCSP-20_1.94x2.40mm_Layout4x5_P0.4mm
-Package_CSP:ST_WLCSP-25_2.30x2.48mm_Layout5x5_P0.4mm
+Package_CSP:ST_WLCSP-18_1.86x2.14mm_Layout7x5_P0.4mm_Stagger
+Package_CSP:ST_WLCSP-208_5.38x5.47mm_Layout26x16_P0.35mm_Stagger
+Package_CSP:ST_WLCSP-208_5.8x5.6mm_Layout26x16_P0.35mm_Stagger
+Package_CSP:ST_WLCSP-20_1.94x2.4mm_Layout4x5_P0.4mm
+Package_CSP:ST_WLCSP-25_2.33x2.24mm_Layout5x5_P0.4mm
+Package_CSP:ST_WLCSP-25_2.3x2.48mm_Layout5x5_P0.4mm
Package_CSP:ST_WLCSP-25_Die425
Package_CSP:ST_WLCSP-25_Die444
Package_CSP:ST_WLCSP-25_Die457
+Package_CSP:ST_WLCSP-27_2.34x2.55mm_Layout9x6_P0.4mm_Stagger
+Package_CSP:ST_WLCSP-27_2.55x2.34mm_P0.40mm_Stagger
Package_CSP:ST_WLCSP-36_2.58x3.07mm_Layout6x6_P0.4mm
Package_CSP:ST_WLCSP-36_Die417
Package_CSP:ST_WLCSP-36_Die440
Package_CSP:ST_WLCSP-36_Die445
Package_CSP:ST_WLCSP-36_Die458
+Package_CSP:ST_WLCSP-41_2.98x2.76mm_Layout13x7_P0.4mm_Stagger
+Package_CSP:ST_WLCSP-42_2.82x2.93mm_P0.40mm_Stagger
+Package_CSP:ST_WLCSP-42_2.93x2.82mm_Layout12x7_P0.4mm_Stagger
Package_CSP:ST_WLCSP-49_3.15x3.13mm_Layout7x7_P0.4mm
-Package_CSP:ST_WLCSP-49_3.30x3.38mm_Layout7x7_P0.4mm_Offcenter
+Package_CSP:ST_WLCSP-49_3.3x3.38mm_Layout7x7_P0.4mm_Offcenter
Package_CSP:ST_WLCSP-49_Die423
Package_CSP:ST_WLCSP-49_Die431
Package_CSP:ST_WLCSP-49_Die433
@@ -9779,7 +10302,8 @@ Package_CSP:ST_WLCSP-49_Die438
Package_CSP:ST_WLCSP-49_Die439
Package_CSP:ST_WLCSP-49_Die447
Package_CSP:ST_WLCSP-49_Die448
-Package_CSP:ST_WLCSP-52_3.09x3.15mm_P0.4mm_Stagger
+Package_CSP:ST_WLCSP-52_3.09x3.15mm_Layout13x8_P0.4mm_Stagger
+Package_CSP:ST_WLCSP-56_3.38x3.38mm_Layout14x8_P0.4mm_Stagger
Package_CSP:ST_WLCSP-63_Die427
Package_CSP:ST_WLCSP-64_3.56x3.52mm_Layout8x8_P0.4mm
Package_CSP:ST_WLCSP-64_Die414
@@ -9791,33 +10315,45 @@ Package_CSP:ST_WLCSP-64_Die442
Package_CSP:ST_WLCSP-64_Die462
Package_CSP:ST_WLCSP-66_Die411
Package_CSP:ST_WLCSP-66_Die432
+Package_CSP:ST_WLCSP-72_3.38x3.38mm_Layout16x9_P0.35mm_Stagger
Package_CSP:ST_WLCSP-72_Die415
+Package_CSP:ST_WLCSP-80_3.5x3.27mm_Layout10x16_P0.35mm_Stagger_Offcenter
Package_CSP:ST_WLCSP-81_4.02x4.27mm_Layout9x9_P0.4mm
Package_CSP:ST_WLCSP-81_4.36x4.07mm_Layout9x9_P0.4mm
Package_CSP:ST_WLCSP-81_Die415
Package_CSP:ST_WLCSP-81_Die421
Package_CSP:ST_WLCSP-81_Die463
-Package_CSP:ST_WLCSP-90_4.20x3.95mm_P0.4mm_Stagger
+Package_CSP:ST_WLCSP-90_4.2x3.95mm_Layout18x10_P0.4mm_Stagger
Package_CSP:ST_WLCSP-90_Die413
-Package_CSP:WLCSP-12_1.403x1.555mm_P0.4mm_Stagger
+Package_CSP:ST_WLCSP-99_4.42x3.77mm_Layout11x9_P0.35mm
+Package_CSP:WLCSP-12_1.403x1.555mm_Layout6x4_P0.4mm_Stagger
Package_CSP:WLCSP-12_1.56x1.56mm_P0.4mm
-Package_CSP:WLCSP-16_1.409x1.409mm_P0.35mm
-Package_CSP:WLCSP-16_2.225x2.17mm_P0.5mm
+Package_CSP:WLCSP-16_1.409x1.409mm_Layout4x4_P0.35mm
+Package_CSP:WLCSP-16_2.225x2.17mm_Layout4x4_P0.5mm
Package_CSP:WLCSP-16_4x4_B2.17x2.32mm_P0.5mm
Package_CSP:WLCSP-20_1.934x2.434mm_Layout4x5_P0.4mm
Package_CSP:WLCSP-20_1.994x1.609mm_Layout5x4_P0.4mm
Package_CSP:WLCSP-20_1.994x1.94mm_Layout4x5_P0.4mm
Package_CSP:WLCSP-36_2.374x2.459mm_Layout6x6_P0.35mm
Package_CSP:WLCSP-36_2.82x2.67mm_Layout6x6_P0.4mm
-Package_CSP:WLCSP-4-X1-WLB0909-4_0.89x0.89mm_P0.5mm
-Package_CSP:WLCSP-4_0.64x0.64mm_P0.35mm
+Package_CSP:WLCSP-4_0.64x0.64mm_Layout2x2_P0.35mm
+Package_CSP:WLCSP-4_0.89x0.89mm_Layout2x2_P0.5mm
Package_CSP:WLCSP-56_3.170x3.444mm_Layout7x8_P0.4mm
Package_CSP:WLCSP-6_1.4x1.0mm_P0.4mm
Package_CSP:WLCSP-81_4.41x3.76mm_P0.4mm
-Package_CSP:WLCSP-8_1.551x2.284mm_P0.5mm
+Package_CSP:WLCSP-8_1.551x2.284mm_Layout2x4_P0.5mm
Package_CSP:WLCSP-8_1.58x1.63x0.35mm_Layout3x5_P0.35x0.4mm_Ball0.25mm_Pad0.25mm_NSMD
+Package_CSP:WLCSP-9_1.21x1.22mm_Layout3x3_P0.4mm
Package_DFN_QFN:AMS_QFN-4-1EP_2x2mm_P0.95mm_EP0.7x1.6mm
+Package_DFN_QFN:Analog_QFN-28-36-2EP_5x6mm_P0.5mm
+Package_DFN_QFN:AO_AOZ666xDI_DFN-8-1EP_3x3mm_P0.65mm_EP1.25x2.7mm
Package_DFN_QFN:AO_DFN-8-1EP_5.55x5.2mm_P1.27mm_EP4.12x4.6mm
+Package_DFN_QFN:ArtInChip_QFN-100-1EP_12x12mm_P0.4mm_EP7.4x7.4mm
+Package_DFN_QFN:ArtInChip_QFN-100-1EP_12x12mm_P0.4mm_EP7.4x7.4mm_ThermalVias
+Package_DFN_QFN:ArtInChip_QFN-68-1EP_7x7mm_P0.35mm_EP5.49x5.49mm
+Package_DFN_QFN:ArtInChip_QFN-68-1EP_7x7mm_P0.35mm_EP5.49x5.49mm_ThermalVias
+Package_DFN_QFN:ArtInChip_QFN-88-1EP_10x10mm_P0.4mm_EP6.74x6.74mm
+Package_DFN_QFN:ArtInChip_QFN-88-1EP_10x10mm_P0.4mm_EP6.74x6.74mm_ThermalVias
Package_DFN_QFN:Cypress_QFN-56-1EP_8x8mm_P0.5mm_EP6.22x6.22mm_ThermalVias
Package_DFN_QFN:DFN-10-1EP_2.6x2.6mm_P0.5mm_EP1.3x2.2mm
Package_DFN_QFN:DFN-10-1EP_2.6x2.6mm_P0.5mm_EP1.3x2.2mm_ThermalVias
@@ -9831,8 +10367,8 @@ Package_DFN_QFN:DFN-10-1EP_3x3mm_P0.5mm_EP1.75x2.7mm
Package_DFN_QFN:DFN-10-1EP_3x3mm_P0.5mm_EP1.7x2.5mm
Package_DFN_QFN:DFN-10_2x2mm_P0.4mm
Package_DFN_QFN:DFN-12-1EP_2x3mm_P0.45mm_EP0.64x2.4mm
-Package_DFN_QFN:DFN-12-1EP_3x3mm_P0.45mm_EP1.66x2.38mm
-Package_DFN_QFN:DFN-12-1EP_3x3mm_P0.5mm_EP1.4x2.55mm
+Package_DFN_QFN:DFN-12-1EP_3x3mm_P0.45mm_EP1.65x2.38mm
+Package_DFN_QFN:DFN-12-1EP_3x3mm_P0.45mm_EP1.65x2.38mm_ThermalVias
Package_DFN_QFN:DFN-12-1EP_3x3mm_P0.5mm_EP1.6x2.5mm
Package_DFN_QFN:DFN-12-1EP_3x3mm_P0.5mm_EP1.6x2.5mm_ThermalVias
Package_DFN_QFN:DFN-12-1EP_3x3mm_P0.5mm_EP2.05x2.86mm
@@ -9843,7 +10379,6 @@ Package_DFN_QFN:DFN-14-1EP_3x3mm_P0.4mm_EP1.78x2.35mm
Package_DFN_QFN:DFN-14-1EP_3x4.5mm_P0.65mm_EP1.65x4.25mm
Package_DFN_QFN:DFN-14-1EP_3x4.5mm_P0.65mm_EP1.65x4.25mm_ThermalVias
Package_DFN_QFN:DFN-14-1EP_3x4mm_P0.5mm_EP1.7x3.3mm
-Package_DFN_QFN:DFN-14-1EP_4x4mm_P0.5mm_EP2.86x3.6mm
Package_DFN_QFN:DFN-14_1.35x3.5mm_P0.5mm
Package_DFN_QFN:DFN-16-1EP_3x4mm_P0.45mm_EP1.7x3.3mm
Package_DFN_QFN:DFN-16-1EP_3x5mm_P0.5mm_EP1.66x4.4mm
@@ -9856,36 +10391,44 @@ Package_DFN_QFN:DFN-22-1EP_5x6mm_P0.5mm_EP3.14x4.3mm
Package_DFN_QFN:DFN-24-1EP_4x7mm_P0.5mm_EP2.64x6.44mm
Package_DFN_QFN:DFN-32-1EP_4x7mm_P0.4mm_EP2.64x6.44mm
Package_DFN_QFN:DFN-44-1EP_5x8.9mm_P0.4mm_EP3.7x8.4mm
+Package_DFN_QFN:DFN-4_5x7mm_P5.08mm
Package_DFN_QFN:DFN-6-1EP_1.2x1.2mm_P0.4mm_EP0.3x0.94mm_PullBack
Package_DFN_QFN:DFN-6-1EP_2x1.6mm_P0.5mm_EP1.15x1.3mm
Package_DFN_QFN:DFN-6-1EP_2x1.8mm_P0.5mm_EP1.2x1.6mm
Package_DFN_QFN:DFN-6-1EP_2x2mm_P0.5mm_EP0.61x1.42mm
Package_DFN_QFN:DFN-6-1EP_2x2mm_P0.5mm_EP0.6x1.37mm
+Package_DFN_QFN:DFN-6-1EP_2x2mm_P0.5mm_EP0.7x1.6mm
Package_DFN_QFN:DFN-6-1EP_2x2mm_P0.65mm_EP1.01x1.7mm
Package_DFN_QFN:DFN-6-1EP_2x2mm_P0.65mm_EP1x1.6mm
Package_DFN_QFN:DFN-6-1EP_3x2mm_P0.5mm_EP1.65x1.35mm
Package_DFN_QFN:DFN-6-1EP_3x3mm_P0.95mm_EP1.7x2.6mm
Package_DFN_QFN:DFN-6-1EP_3x3mm_P1mm_EP1.5x2.4mm
Package_DFN_QFN:DFN-6_1.3x1.2mm_P0.4mm
-Package_DFN_QFN:DFN-8-1EP_2x2mm_P0.45mm_EP0.64x1.38mm
+Package_DFN_QFN:DFN-6_1.6x1.3mm_P0.4mm
+Package_DFN_QFN:DFN-8-1EP_1.5x1.5mm_P0.4mm_EP0.7x1.2mm
+Package_DFN_QFN:DFN-8-1EP_2x2mm_P0.45mm_EP0.64x1.37mm
Package_DFN_QFN:DFN-8-1EP_2x2mm_P0.5mm_EP0.6x1.2mm
-Package_DFN_QFN:DFN-8-1EP_2x2mm_P0.5mm_EP0.7x1.3mm
+Package_DFN_QFN:DFN-8-1EP_2x2mm_P0.5mm_EP0.86x1.55mm
Package_DFN_QFN:DFN-8-1EP_2x2mm_P0.5mm_EP0.8x1.6mm
Package_DFN_QFN:DFN-8-1EP_2x2mm_P0.5mm_EP0.9x1.3mm
Package_DFN_QFN:DFN-8-1EP_2x2mm_P0.5mm_EP0.9x1.5mm
Package_DFN_QFN:DFN-8-1EP_2x2mm_P0.5mm_EP0.9x1.6mm
+Package_DFN_QFN:DFN-8-1EP_2x2mm_P0.5mm_EP0.9x1.7mm
Package_DFN_QFN:DFN-8-1EP_2x2mm_P0.5mm_EP1.05x1.75mm
-Package_DFN_QFN:DFN-8-1EP_2x3mm_P0.5mm_EP0.56x2.15mm
Package_DFN_QFN:DFN-8-1EP_2x3mm_P0.5mm_EP0.61x2.2mm
Package_DFN_QFN:DFN-8-1EP_3x2mm_P0.45mm_EP1.66x1.36mm
Package_DFN_QFN:DFN-8-1EP_3x2mm_P0.5mm_EP1.36x1.46mm
Package_DFN_QFN:DFN-8-1EP_3x2mm_P0.5mm_EP1.3x1.5mm
Package_DFN_QFN:DFN-8-1EP_3x2mm_P0.5mm_EP1.75x1.45mm
Package_DFN_QFN:DFN-8-1EP_3x2mm_P0.5mm_EP1.7x1.4mm
+Package_DFN_QFN:DFN-8-1EP_3x2mm_P0.5mm_EP1.7x1.6mm
Package_DFN_QFN:DFN-8-1EP_3x3mm_P0.5mm_EP1.65x2.38mm
Package_DFN_QFN:DFN-8-1EP_3x3mm_P0.5mm_EP1.65x2.38mm_ThermalVias
Package_DFN_QFN:DFN-8-1EP_3x3mm_P0.5mm_EP1.66x2.38mm
+Package_DFN_QFN:DFN-8-1EP_3x3mm_P0.5mm_EP1.7x2.4mm
+Package_DFN_QFN:DFN-8-1EP_3x3mm_P0.5mm_EP1.7x2.4mm_ThermalVias
Package_DFN_QFN:DFN-8-1EP_3x3mm_P0.65mm_EP1.55x2.4mm
+Package_DFN_QFN:DFN-8-1EP_3x3mm_P0.65mm_EP1.5x2.25mm
Package_DFN_QFN:DFN-8-1EP_3x3mm_P0.65mm_EP1.7x2.05mm
Package_DFN_QFN:DFN-8-1EP_4x4mm_P0.8mm_EP2.39x2.21mm
Package_DFN_QFN:DFN-8-1EP_4x4mm_P0.8mm_EP2.3x3.24mm
@@ -9900,6 +10443,9 @@ Package_DFN_QFN:DHVQFN-20-1EP_2.5x4.5mm_P0.5mm_EP1x3mm
Package_DFN_QFN:Diodes_DFN1006-3
Package_DFN_QFN:Diodes_UDFN-10_1.0x2.5mm_P0.5mm
Package_DFN_QFN:Diodes_UDFN2020-6_Type-F
+Package_DFN_QFN:Diodes_UDFN3810-9_TYPE_B
+Package_DFN_QFN:Diodes_ZL32_TQFN-32-1EP_3x6mm_P0.4mm_EP1.25x3.5mm
+Package_DFN_QFN:EPC_QFN-13-3EP_3.5x5mm_P0.5mm
Package_DFN_QFN:HVQFN-16-1EP_3x3mm_P0.5mm_EP1.5x1.5mm
Package_DFN_QFN:HVQFN-24-1EP_4x4mm_P0.5mm_EP2.1x2.1mm
Package_DFN_QFN:HVQFN-24-1EP_4x4mm_P0.5mm_EP2.5x2.5mm
@@ -9910,6 +10456,8 @@ Package_DFN_QFN:HVQFN-32-1EP_5x5mm_P0.5mm_EP3.1x3.1mm
Package_DFN_QFN:HVQFN-32-1EP_5x5mm_P0.5mm_EP3.1x3.1mm_ThermalVias
Package_DFN_QFN:HVQFN-40-1EP_6x6mm_P0.5mm_EP4.1x4.1mm
Package_DFN_QFN:HVQFN-40-1EP_6x6mm_P0.5mm_EP4.1x4.1mm_ThermalVias
+Package_DFN_QFN:HXQFN-16-1EP_3x3mm_P0.5mm_EP1.85x1.85mm
+Package_DFN_QFN:HXQFN-16-1EP_3x3mm_P0.5mm_EP1.85x1.85mm_ThermalVias
Package_DFN_QFN:Infineon_MLPQ-16-14-1EP_4x4mm_P0.5mm
Package_DFN_QFN:Infineon_MLPQ-40-32-1EP_7x7mm_P0.5mm
Package_DFN_QFN:Infineon_MLPQ-48-1EP_7x7mm_P0.5mm_EP5.15x5.15mm
@@ -9921,6 +10469,9 @@ Package_DFN_QFN:Linear_UGK52_QFN-46-52
Package_DFN_QFN:LQFN-10-1EP_2x2mm_P0.5mm_EP0.7x0.7mm
Package_DFN_QFN:LQFN-12-1EP_2x2mm_P0.5mm_EP0.7x0.7mm
Package_DFN_QFN:LQFN-16-1EP_3x3mm_P0.5mm_EP1.7x1.7mm
+Package_DFN_QFN:Maxim_FC2QFN-14_2.5x2.5mm_P0.5mm
+Package_DFN_QFN:Maxim_TDFN-12-1EP_3x3mm_P0.5mm_EP1.7x2.5mm
+Package_DFN_QFN:Maxim_TDFN-12-1EP_3x3mm_P0.5mm_EP1.7x2.5mm_ThermalVias
Package_DFN_QFN:Maxim_TDFN-6-1EP_3x3mm_P0.95mm_EP1.5x2.3mm
Package_DFN_QFN:Micrel_MLF-8-1EP_2x2mm_P0.5mm_EP0.6x1.2mm
Package_DFN_QFN:Micrel_MLF-8-1EP_2x2mm_P0.5mm_EP0.6x1.2mm_ThermalVias
@@ -9939,12 +10490,15 @@ Package_DFN_QFN:MLF-6-1EP_1.6x1.6mm_P0.5mm_EP0.5x1.26mm
Package_DFN_QFN:MLF-8-1EP_3x3mm_P0.65mm_EP1.55x2.3mm
Package_DFN_QFN:MLF-8-1EP_3x3mm_P0.65mm_EP1.55x2.3mm_ThermalVias
Package_DFN_QFN:MLPQ-16-1EP_4x4mm_P0.65mm_EP2.8x2.8mm
+Package_DFN_QFN:MPS_QFN-12_2x2mm_P0.4mm
Package_DFN_QFN:Nordic_AQFN-73-1EP_7x7mm_P0.5mm
Package_DFN_QFN:Nordic_AQFN-94-1EP_7x7mm_P0.4mm
Package_DFN_QFN:NXP_LQFN-48-1EP_7x7mm_P0.5mm_EP3.5x3.5mm_16xMask0.45x0.45
Package_DFN_QFN:NXP_LQFN-48-1EP_7x7mm_P0.5mm_EP3.5x3.5mm_16xMask0.45x0.45_ThermalVias
+Package_DFN_QFN:OnSemi_DFN-14-1EP_4x4mm_P0.5mm_EP2.7x3.4mm
Package_DFN_QFN:OnSemi_DFN-8_2x2mm_P0.5mm
Package_DFN_QFN:OnSemi_SIP-38-6EP-9x7mm_P0.65mm_EP1.2x1.2mm
+Package_DFN_QFN:OnSemi_UDFN-16-1EP_1.35x3.3mm_P0.4mm_EP0.4x2.8mm
Package_DFN_QFN:OnSemi_UDFN-8_1.2x1.8mm_P0.4mm
Package_DFN_QFN:OnSemi_VCT-28_3.5x3.5mm_P0.4mm
Package_DFN_QFN:OnSemi_XDFN-10_1.35x2.2mm_P0.4mm
@@ -9957,8 +10511,11 @@ Package_DFN_QFN:QFN-12-1EP_3x3mm_P0.5mm_EP1.65x1.65mm
Package_DFN_QFN:QFN-12-1EP_3x3mm_P0.5mm_EP1.65x1.65mm_ThermalVias
Package_DFN_QFN:QFN-12-1EP_3x3mm_P0.5mm_EP1.6x1.6mm
Package_DFN_QFN:QFN-12-1EP_3x3mm_P0.5mm_EP1.6x1.6mm_ThermalVias
+Package_DFN_QFN:QFN-16-1EP_1.8x2.6mm_P0.4mm_EP0.7x1.5mm
+Package_DFN_QFN:QFN-16-1EP_1.8x2.6mm_P0.4mm_EP0.7x1.5mm_ThermalVias
Package_DFN_QFN:QFN-16-1EP_3x3mm_P0.5mm_EP1.45x1.45mm
Package_DFN_QFN:QFN-16-1EP_3x3mm_P0.5mm_EP1.45x1.45mm_ThermalVias
+Package_DFN_QFN:QFN-16-1EP_3x3mm_P0.5mm_EP1.675x1.675mm
Package_DFN_QFN:QFN-16-1EP_3x3mm_P0.5mm_EP1.75x1.75mm
Package_DFN_QFN:QFN-16-1EP_3x3mm_P0.5mm_EP1.75x1.75mm_ThermalVias
Package_DFN_QFN:QFN-16-1EP_3x3mm_P0.5mm_EP1.7x1.7mm
@@ -10003,6 +10560,7 @@ Package_DFN_QFN:QFN-24-1EP_3x4mm_P0.4mm_EP1.65x2.65mm
Package_DFN_QFN:QFN-24-1EP_3x4mm_P0.4mm_EP1.65x2.65mm_ThermalVias
Package_DFN_QFN:QFN-24-1EP_4x4mm_P0.5mm_EP2.15x2.15mm
Package_DFN_QFN:QFN-24-1EP_4x4mm_P0.5mm_EP2.15x2.15mm_ThermalVias
+Package_DFN_QFN:QFN-24-1EP_4x4mm_P0.5mm_EP2.5x2.5mm
Package_DFN_QFN:QFN-24-1EP_4x4mm_P0.5mm_EP2.65x2.65mm
Package_DFN_QFN:QFN-24-1EP_4x4mm_P0.5mm_EP2.65x2.65mm_ThermalVias
Package_DFN_QFN:QFN-24-1EP_4x4mm_P0.5mm_EP2.6x2.6mm
@@ -10029,14 +10587,22 @@ Package_DFN_QFN:QFN-28-1EP_3x6mm_P0.5mm_EP1.7x4.75mm
Package_DFN_QFN:QFN-28-1EP_3x6mm_P0.5mm_EP1.7x4.75mm_ThermalVias
Package_DFN_QFN:QFN-28-1EP_4x4mm_P0.45mm_EP2.4x2.4mm
Package_DFN_QFN:QFN-28-1EP_4x4mm_P0.45mm_EP2.4x2.4mm_ThermalVias
+Package_DFN_QFN:QFN-28-1EP_4x4mm_P0.45mm_EP2.6x2.6mm
Package_DFN_QFN:QFN-28-1EP_4x4mm_P0.4mm_EP2.3x2.3mm
Package_DFN_QFN:QFN-28-1EP_4x4mm_P0.4mm_EP2.3x2.3mm_ThermalVias
Package_DFN_QFN:QFN-28-1EP_4x4mm_P0.4mm_EP2.4x2.4mm
Package_DFN_QFN:QFN-28-1EP_4x4mm_P0.4mm_EP2.4x2.4mm_ThermalVias
Package_DFN_QFN:QFN-28-1EP_4x4mm_P0.4mm_EP2.6x2.6mm
Package_DFN_QFN:QFN-28-1EP_4x4mm_P0.4mm_EP2.6x2.6mm_ThermalVias
+Package_DFN_QFN:QFN-28-1EP_4x4mm_P0.4mm_EP2.7x2.7mm
Package_DFN_QFN:QFN-28-1EP_4x5mm_P0.5mm_EP2.65x3.65mm
Package_DFN_QFN:QFN-28-1EP_4x5mm_P0.5mm_EP2.65x3.65mm_ThermalVias
+Package_DFN_QFN:QFN-28-1EP_5x5mm_P0.5mm_EP2.7x2.7mm
+Package_DFN_QFN:QFN-28-1EP_5x5mm_P0.5mm_EP2.7x2.7mm_ThermalVias
+Package_DFN_QFN:QFN-28-1EP_5x5mm_P0.5mm_EP3.1x3.1mm
+Package_DFN_QFN:QFN-28-1EP_5x5mm_P0.5mm_EP3.1x3.1mm_ThermalVias
+Package_DFN_QFN:QFN-28-1EP_5x5mm_P0.5mm_EP3.25x3.25mm
+Package_DFN_QFN:QFN-28-1EP_5x5mm_P0.5mm_EP3.25x3.25mm_ThermalVias
Package_DFN_QFN:QFN-28-1EP_5x5mm_P0.5mm_EP3.35x3.35mm
Package_DFN_QFN:QFN-28-1EP_5x5mm_P0.5mm_EP3.35x3.35mm_ThermalVias
Package_DFN_QFN:QFN-28-1EP_5x5mm_P0.5mm_EP3.75x3.75mm
@@ -10120,6 +10686,8 @@ Package_DFN_QFN:QFN-48-1EP_7x7mm_P0.5mm_EP5.45x5.45mm
Package_DFN_QFN:QFN-48-1EP_7x7mm_P0.5mm_EP5.45x5.45mm_ThermalVias
Package_DFN_QFN:QFN-48-1EP_7x7mm_P0.5mm_EP5.6x5.6mm
Package_DFN_QFN:QFN-48-1EP_7x7mm_P0.5mm_EP5.6x5.6mm_ThermalVias
+Package_DFN_QFN:QFN-48-1EP_7x7mm_P0.5mm_EP5.7x5.7mm
+Package_DFN_QFN:QFN-48-1EP_7x7mm_P0.5mm_EP5.7x5.7mm_ThermalVias
Package_DFN_QFN:QFN-48-1EP_8x8mm_P0.5mm_EP6.2x6.2mm
Package_DFN_QFN:QFN-48-1EP_8x8mm_P0.5mm_EP6.2x6.2mm_ThermalVias
Package_DFN_QFN:QFN-52-1EP_7x8mm_P0.5mm_EP5.41x6.45mm
@@ -10141,6 +10709,8 @@ Package_DFN_QFN:QFN-56-1EP_8x8mm_P0.5mm_EP5.9x5.9mm
Package_DFN_QFN:QFN-56-1EP_8x8mm_P0.5mm_EP5.9x5.9mm_ThermalVias
Package_DFN_QFN:QFN-56-1EP_8x8mm_P0.5mm_EP6.1x6.1mm
Package_DFN_QFN:QFN-56-1EP_8x8mm_P0.5mm_EP6.1x6.1mm_ThermalVias
+Package_DFN_QFN:QFN-60-1EP_7x7mm_P0.4mm_EP3.4x3.4mm
+Package_DFN_QFN:QFN-60-1EP_7x7mm_P0.4mm_EP3.4x3.4mm_ThermalVias
Package_DFN_QFN:QFN-64-1EP_8x8mm_P0.4mm_EP6.5x6.5mm
Package_DFN_QFN:QFN-64-1EP_8x8mm_P0.4mm_EP6.5x6.5mm_ThermalVias
Package_DFN_QFN:QFN-64-1EP_9x9mm_P0.5mm_EP3.4x3.4mm
@@ -10159,6 +10729,8 @@ Package_DFN_QFN:QFN-64-1EP_9x9mm_P0.5mm_EP5.45x5.45mm
Package_DFN_QFN:QFN-64-1EP_9x9mm_P0.5mm_EP5.45x5.45mm_ThermalVias
Package_DFN_QFN:QFN-64-1EP_9x9mm_P0.5mm_EP5.4x5.4mm
Package_DFN_QFN:QFN-64-1EP_9x9mm_P0.5mm_EP5.4x5.4mm_ThermalVias
+Package_DFN_QFN:QFN-64-1EP_9x9mm_P0.5mm_EP5.7x5.7mm
+Package_DFN_QFN:QFN-64-1EP_9x9mm_P0.5mm_EP5.7x5.7mm_ThermalVias
Package_DFN_QFN:QFN-64-1EP_9x9mm_P0.5mm_EP6x6mm
Package_DFN_QFN:QFN-64-1EP_9x9mm_P0.5mm_EP6x6mm_ThermalVias
Package_DFN_QFN:QFN-64-1EP_9x9mm_P0.5mm_EP7.15x7.15mm
@@ -10181,10 +10753,15 @@ Package_DFN_QFN:QFN-76-1EP_9x9mm_P0.4mm_EP3.8x3.8mm
Package_DFN_QFN:QFN-76-1EP_9x9mm_P0.4mm_EP3.8x3.8mm_ThermalVias
Package_DFN_QFN:QFN-76-1EP_9x9mm_P0.4mm_EP5.81x6.31mm
Package_DFN_QFN:QFN-76-1EP_9x9mm_P0.4mm_EP5.81x6.31mm_ThermalVias
+Package_DFN_QFN:QFN-80-1EP_10x10mm_P0.4mm_EP3.4x3.4mm
+Package_DFN_QFN:QFN-80-1EP_10x10mm_P0.4mm_EP3.4x3.4mm_ThermalVias
Package_DFN_QFN:Qorvo_DFN-8-1EP_2x2mm_P0.5mm
+Package_DFN_QFN:Qorvo_TQFN66-48-1EP_6x6mm_P0.4mm_EP4.2x4.2mm
+Package_DFN_QFN:Qorvo_TQFN66-48-1EP_6x6mm_P0.4mm_EP4.2x4.2mm_ThermalVias
Package_DFN_QFN:ROHM_DFN0604-3
Package_DFN_QFN:SiliconLabs_QFN-20-1EP_3x3mm_P0.5mm_EP1.8x1.8mm
Package_DFN_QFN:SiliconLabs_QFN-20-1EP_3x3mm_P0.5mm_EP1.8x1.8mm_ThermalVias
+Package_DFN_QFN:ST_UFDFPN-12-1EP_3x3mm_P0.5mm_EP1.4x2.55mm
Package_DFN_QFN:ST_UFQFPN-20_3x3mm_P0.5mm
Package_DFN_QFN:ST_UQFN-6L_1.5x1.7mm_P0.5mm
Package_DFN_QFN:TDFN-10-1EP_2x3mm_P0.5mm_EP0.9x2mm
@@ -10206,71 +10783,86 @@ Package_DFN_QFN:Texas_B3QFN-14-1EP_5x5.5mm_P0.65mm
Package_DFN_QFN:Texas_B3QFN-14-1EP_5x5.5mm_P0.65mm_ThermalVia
Package_DFN_QFN:Texas_DRB0008A
Package_DFN_QFN:Texas_MOF0009A
+Package_DFN_QFN:Texas_PicoStar_DFN-3_0.69x0.60mm
Package_DFN_QFN:Texas_QFN-41_10x16mm
Package_DFN_QFN:Texas_R-PUQFN-N10
Package_DFN_QFN:Texas_R-PUQFN-N12
-Package_DFN_QFN:Texas_R-PWQFN-N28_EP2.1x3.1mm
-Package_DFN_QFN:Texas_R-PWQFN-N28_EP2.1x3.1mm_ThermalVias
-Package_DFN_QFN:Texas_RGE0024C_EP2.1x2.1mm
-Package_DFN_QFN:Texas_RGE0024C_EP2.1x2.1mm_ThermalVias
-Package_DFN_QFN:Texas_RGE0024H_EP2.7x2.7mm
-Package_DFN_QFN:Texas_RGE0024H_EP2.7x2.7mm_ThermalVias
-Package_DFN_QFN:Texas_RGV_S-PVQFN-N16_EP2.1x2.1mm
-Package_DFN_QFN:Texas_RGV_S-PVQFN-N16_EP2.1x2.1mm_ThermalVias
+Package_DFN_QFN:Texas_REF0038A_WQFN-38-2EP_6x4mm_P0.4
+Package_DFN_QFN:Texas_RGC0064B_VQFN-64-1EP_9x9mm_P0.5mm_EP4.25x4.25mm
+Package_DFN_QFN:Texas_RGC0064B_VQFN-64-1EP_9x9mm_P0.5mm_EP4.25x4.25mm_ThermalVias
+Package_DFN_QFN:Texas_RGE0024C_VQFN-24-1EP_4x4mm_P0.5mm_EP2.1x2.1mm
+Package_DFN_QFN:Texas_RGE0024C_VQFN-24-1EP_4x4mm_P0.5mm_EP2.1x2.1mm_ThermalVias
+Package_DFN_QFN:Texas_RGE0024H_VQFN-24-1EP_4x4mm_P0.5mm_EP2.7x2.7mm
+Package_DFN_QFN:Texas_RGE0024H_VQFN-24-1EP_4x4mm_P0.5mm_EP2.7x2.7mm_ThermalVias
+Package_DFN_QFN:Texas_RGP0020D_VQFN-20-1EP_4x4mm_P0.5mm_EP2.7x2.7mm
+Package_DFN_QFN:Texas_RGP0020D_VQFN-20-1EP_4x4mm_P0.5mm_EP2.7x2.7mm_ThermalVias
+Package_DFN_QFN:Texas_RGP0020H_VQFN-20-1EP_4x4mm_P0.5mm_EP2.4x2.4mm
+Package_DFN_QFN:Texas_RGP0020H_VQFN-20-1EP_4x4mm_P0.5mm_EP2.4x2.4mm_ThermalVias
+Package_DFN_QFN:Texas_RGV0016A_VQFN-16-1EP_4x4mm_P0.65mm_EP2.1x2.1mm
+Package_DFN_QFN:Texas_RGV0016A_VQFN-16-1EP_4x4mm_P0.65mm_EP2.1x2.1mm_ThermalVias
+Package_DFN_QFN:Texas_RGW0020A_VQFN-20-1EP_5x5mm_P0.65mm_EP3.15x3.15mm
+Package_DFN_QFN:Texas_RGW0020A_VQFN-20-1EP_5x5mm_P0.65mm_EP3.15x3.15mm_ThermalVias
Package_DFN_QFN:Texas_RGY_R-PVQFN-N16_EP2.05x2.55mm
Package_DFN_QFN:Texas_RGY_R-PVQFN-N16_EP2.05x2.55mm_ThermalVias
Package_DFN_QFN:Texas_RGY_R-PVQFN-N20_EP2.05x3.05mm
Package_DFN_QFN:Texas_RGY_R-PVQFN-N20_EP2.05x3.05mm_ThermalVias
Package_DFN_QFN:Texas_RGY_R-PVQFN-N24_EP2.05x3.1mm
Package_DFN_QFN:Texas_RGY_R-PVQFN-N24_EP2.05x3.1mm_ThermalVias
+Package_DFN_QFN:Texas_RGZ0048A_VQFN-48-1EP_7x7mm_P0.5mm_EP5.15x5.15mm
+Package_DFN_QFN:Texas_RGZ0048A_VQFN-48-1EP_7x7mm_P0.5mm_EP5.15x5.15mm_ThermalVias
+Package_DFN_QFN:Texas_RHA0040B_VQFN-40-1EP_6x6mm_P0.5mm_EP4.15x4.15mm
+Package_DFN_QFN:Texas_RHA0040B_VQFN-40-1EP_6x6mm_P0.5mm_EP4.15x4.15mm_ThermalVias
+Package_DFN_QFN:Texas_RHA0040D_VQFN-40-1EP_6x6mm_P0.5mm_EP2.9x2.9mm
+Package_DFN_QFN:Texas_RHA0040D_VQFN-40-1EP_6x6mm_P0.5mm_EP2.9x2.9mm_ThermalVias
+Package_DFN_QFN:Texas_RHA0040E_VQFN-40-1EP_6x6mm_P0.5mm_EP3.52x2.62mm
+Package_DFN_QFN:Texas_RHA0040E_VQFN-40-1EP_6x6mm_P0.5mm_EP3.52x2.62mm_ThermalVias
+Package_DFN_QFN:Texas_RHA_VQFN-40-1EP_6x6mm_P0.5mm_EP4.6x4.6mm
+Package_DFN_QFN:Texas_RHA_VQFN-40-1EP_6x6mm_P0.5mm_EP4.6x4.6mm_ThermalVias
+Package_DFN_QFN:Texas_RHB0032E_VQFN-32-1EP_5x5mm_P0.5mm_EP3.45x3.45mm
+Package_DFN_QFN:Texas_RHB0032E_VQFN-32-1EP_5x5mm_P0.5mm_EP3.45x3.45mm_ThermalVias
+Package_DFN_QFN:Texas_RHB0032M_VQFN-32-1EP_5x5mm_P0.5mm_EP2.1x2.1mm
+Package_DFN_QFN:Texas_RHB0032M_VQFN-32-1EP_5x5mm_P0.5mm_EP2.1x2.1mm_ThermalVias
+Package_DFN_QFN:Texas_RHH0036C_VQFN-36-1EP_6x6mm_P0.5mm_EP4.4x4.4mm
+Package_DFN_QFN:Texas_RHH0036C_VQFN-36-1EP_6x6mm_P0.5mm_EP4.4x4.4mm_ThermalVias
Package_DFN_QFN:Texas_RJE0020A_VQFN-20-1EP_3x3mm_P0.45mm_EP0.675x0.76mm
Package_DFN_QFN:Texas_RJE0020A_VQFN-20-1EP_3x3mm_P0.45mm_EP0.675x0.76mm_ThermalVias
+Package_DFN_QFN:Texas_RMG0012A_WQFN-12_1.8x1.8mm_P0.4mm
+Package_DFN_QFN:Texas_RMQ0024A_WQFN-24-1EP_3x3mm_P0.4mm_EP1.9x1.9mm
+Package_DFN_QFN:Texas_RMQ0024A_WQFN-24-1EP_3x3mm_P0.4mm_EP1.9x1.9mm_ThermalVias
Package_DFN_QFN:Texas_RNN0018A
-Package_DFN_QFN:Texas_RUM0016A_EP2.6x2.6mm
-Package_DFN_QFN:Texas_RUM0016A_EP2.6x2.6mm_ThermalVias
+Package_DFN_QFN:Texas_RNP0030B_WQFN-30-1EP_4x6mm_P0.5mm_EP1.8x4.5mm
+Package_DFN_QFN:Texas_RNP0030B_WQFN-30-1EP_4x6mm_P0.5mm_EP1.8x4.5mm_ThermalVias
+Package_DFN_QFN:Texas_RPU0010A_VQFN-HR-10_2x2mm_P0.5mm
+Package_DFN_QFN:Texas_RSA_VQFN-16-1EP_4x4mm_P0.65mm_EP2.7x2.7mm
+Package_DFN_QFN:Texas_RSA_VQFN-16-1EP_4x4mm_P0.65mm_EP2.7x2.7mm_ThermalVias
+Package_DFN_QFN:Texas_RSN_WQFN-32-1EP_4x4mm_P0.4mm_EP2.8x2.8mm
+Package_DFN_QFN:Texas_RSN_WQFN-32-1EP_4x4mm_P0.4mm_EP2.8x2.8mm_ThermalVias
+Package_DFN_QFN:Texas_RSW0010A_UQFN-10_1.4x1.8mm_P0.4mm
+Package_DFN_QFN:Texas_RTE0016D_WQFN-16-1EP_3x3mm_P0.5mm_EP0.8x0.8mm
+Package_DFN_QFN:Texas_RTE0016D_WQFN-16-1EP_3x3mm_P0.5mm_EP0.8x0.8mm_ThermalVias
+Package_DFN_QFN:Texas_RTE_WQFN-16-1EP_3x3mm_P0.5mm_EP1.2x0.8mm
+Package_DFN_QFN:Texas_RTE_WQFN-16-1EP_3x3mm_P0.5mm_EP1.2x0.8mm_ThermalVias
+Package_DFN_QFN:Texas_RTW_WQFN-24-1EP_4x4mm_P0.5mm_EP2.7x2.7mm
+Package_DFN_QFN:Texas_RTW_WQFN-24-1EP_4x4mm_P0.5mm_EP2.7x2.7mm_ThermalVias
+Package_DFN_QFN:Texas_RTY_WQFN-16-1EP_4x4mm_P0.65mm_EP2.1x2.1mm
+Package_DFN_QFN:Texas_RTY_WQFN-16-1EP_4x4mm_P0.65mm_EP2.1x2.1mm_ThermalVias
+Package_DFN_QFN:Texas_RUM0016A_WQFN-16-1EP_4x4mm_P0.65mm_EP2.6x2.6mm
+Package_DFN_QFN:Texas_RUM0016A_WQFN-16-1EP_4x4mm_P0.65mm_EP2.6x2.6mm_ThermalVias
+Package_DFN_QFN:Texas_RUN0010A_WQFN-10_2x2mm_P0.5mm
+Package_DFN_QFN:Texas_RVA_VQFN-16-1EP_3.5x3.5mm_P0.5mm_EP2.14x2.14mm
+Package_DFN_QFN:Texas_RVA_VQFN-16-1EP_3.5x3.5mm_P0.5mm_EP2.14x2.14mm_ThermalVias
+Package_DFN_QFN:Texas_RVE0028A_VQFN-28-1EP_3.5x4.5mm_P0.4mm_EP2.1x3.1mm
+Package_DFN_QFN:Texas_RVE0028A_VQFN-28-1EP_3.5x4.5mm_P0.4mm_EP2.1x3.1mm_ThermalVias
Package_DFN_QFN:Texas_RWH0032A
Package_DFN_QFN:Texas_RWH0032A_ThermalVias
+Package_DFN_QFN:Texas_RWU0007A_VQFN-7_2x2mm_P0.5mm
Package_DFN_QFN:Texas_S-PDSO-N10_EP1.2x2mm
Package_DFN_QFN:Texas_S-PDSO-N10_EP1.2x2mm_ThermalVias
Package_DFN_QFN:Texas_S-PVQFN-N14
Package_DFN_QFN:Texas_S-PVQFN-N14_ThermalVias
-Package_DFN_QFN:Texas_S-PVQFN-N16_EP2.7x2.7mm
-Package_DFN_QFN:Texas_S-PVQFN-N16_EP2.7x2.7mm_ThermalVias
-Package_DFN_QFN:Texas_S-PVQFN-N20_EP2.4x2.4mm
-Package_DFN_QFN:Texas_S-PVQFN-N20_EP2.4x2.4mm_ThermalVias
-Package_DFN_QFN:Texas_S-PVQFN-N20_EP2.7x2.7mm
-Package_DFN_QFN:Texas_S-PVQFN-N20_EP2.7x2.7mm_ThermalVias
-Package_DFN_QFN:Texas_S-PVQFN-N20_EP3.15x3.15mm
-Package_DFN_QFN:Texas_S-PVQFN-N20_EP3.15x3.15mm_ThermalVias
-Package_DFN_QFN:Texas_S-PVQFN-N24_EP2.1x2.1mm
-Package_DFN_QFN:Texas_S-PVQFN-N24_EP2.1x2.1mm_ThermalVias
-Package_DFN_QFN:Texas_S-PVQFN-N32_EP3.45x3.45mm
-Package_DFN_QFN:Texas_S-PVQFN-N32_EP3.45x3.45mm_ThermalVias
-Package_DFN_QFN:Texas_S-PVQFN-N36_EP4.4x4.4mm
-Package_DFN_QFN:Texas_S-PVQFN-N36_EP4.4x4.4mm_ThermalVias
-Package_DFN_QFN:Texas_S-PVQFN-N40_EP2.9x2.9mm
-Package_DFN_QFN:Texas_S-PVQFN-N40_EP2.9x2.9mm_ThermalVias
-Package_DFN_QFN:Texas_S-PVQFN-N40_EP3.52x2.62mm
-Package_DFN_QFN:Texas_S-PVQFN-N40_EP3.52x2.62mm_ThermalVias
-Package_DFN_QFN:Texas_S-PVQFN-N40_EP4.15x4.15mm
-Package_DFN_QFN:Texas_S-PVQFN-N40_EP4.15x4.15mm_ThermalVias
-Package_DFN_QFN:Texas_S-PVQFN-N40_EP4.6x4.6mm
-Package_DFN_QFN:Texas_S-PVQFN-N40_EP4.6x4.6mm_ThermalVias
-Package_DFN_QFN:Texas_S-PVQFN-N48_EP5.15x5.15mm
-Package_DFN_QFN:Texas_S-PVQFN-N48_EP5.15x5.15mm_ThermalVias
-Package_DFN_QFN:Texas_S-PVQFN-N64_EP4.25x4.25mm
-Package_DFN_QFN:Texas_S-PVQFN-N64_EP4.25x4.25mm_ThermalVias
Package_DFN_QFN:Texas_S-PWQFN-N100_EP5.5x5.5mm
Package_DFN_QFN:Texas_S-PWQFN-N100_EP5.5x5.5mm_ThermalVias
-Package_DFN_QFN:Texas_S-PWQFN-N16_EP1.2x0.8mm
-Package_DFN_QFN:Texas_S-PWQFN-N16_EP1.2x0.8mm_ThermalVias
-Package_DFN_QFN:Texas_S-PWQFN-N16_EP2.1x2.1mm
-Package_DFN_QFN:Texas_S-PWQFN-N16_EP2.1x2.1mm_ThermalVias
Package_DFN_QFN:Texas_S-PWQFN-N20
-Package_DFN_QFN:Texas_S-PWQFN-N24_EP2.7x2.7mm
-Package_DFN_QFN:Texas_S-PWQFN-N24_EP2.7x2.7mm_ThermalVias
-Package_DFN_QFN:Texas_S-PWQFN-N32_EP2.8x2.8mm
-Package_DFN_QFN:Texas_S-PWQFN-N32_EP2.8x2.8mm_ThermalVias
Package_DFN_QFN:Texas_S-PX2QFN-14
Package_DFN_QFN:Texas_UQFN-10_1.5x2mm_P0.5mm
Package_DFN_QFN:Texas_VQFN-HR-12_2x2.5mm_P0.5mm
@@ -10278,11 +10870,11 @@ Package_DFN_QFN:Texas_VQFN-HR-12_2x2.5mm_P0.5mm_ThermalVias
Package_DFN_QFN:Texas_VQFN-HR-20_3x2.5mm_P0.5mm_RQQ0011A
Package_DFN_QFN:Texas_VQFN-RHL-20
Package_DFN_QFN:Texas_VQFN-RHL-20_ThermalVias
-Package_DFN_QFN:Texas_VSON-HR-8_1.5x2mm_P0.5mm
-Package_DFN_QFN:Texas_WQFN-10_2x2mm_P0.5mm
+Package_DFN_QFN:Texas_VQFN-RNR0011A-11
Package_DFN_QFN:Texas_WQFN-MR-100_3x3-DapStencil
Package_DFN_QFN:Texas_WQFN-MR-100_ThermalVias_3x3-DapStencil
Package_DFN_QFN:Texas_X2QFN-12_1.6x1.6mm_P0.4mm
+Package_DFN_QFN:Texas_X2QFN-RUE-12_1.4x2mm_P0.4mm
Package_DFN_QFN:TQFN-16-1EP_3x3mm_P0.5mm_EP1.23x1.23mm
Package_DFN_QFN:TQFN-16-1EP_3x3mm_P0.5mm_EP1.23x1.23mm_ThermalVias
Package_DFN_QFN:TQFN-16-1EP_3x3mm_P0.5mm_EP1.6x1.6mm
@@ -10318,8 +10910,11 @@ Package_DFN_QFN:TQFN-32-1EP_5x5mm_P0.5mm_EP3.4x3.4mm
Package_DFN_QFN:TQFN-32-1EP_5x5mm_P0.5mm_EP3.4x3.4mm_ThermalVias
Package_DFN_QFN:TQFN-40-1EP_5x5mm_P0.4mm_EP3.5x3.5mm
Package_DFN_QFN:TQFN-40-1EP_5x5mm_P0.4mm_EP3.5x3.5mm_ThermalVias
+Package_DFN_QFN:TQFN-44-1EP_7x7mm_P0.5mm_EP4.7x4.7mm
+Package_DFN_QFN:TQFN-44-1EP_7x7mm_P0.5mm_EP4.7x4.7mm_ThermalVias
Package_DFN_QFN:TQFN-48-1EP_7x7mm_P0.5mm_EP5.1x5.1mm
Package_DFN_QFN:TQFN-48-1EP_7x7mm_P0.5mm_EP5.1x5.1mm_ThermalVias
+Package_DFN_QFN:UDC-QFN-20-4EP_3x4mm_P0.5mm_EP0.41x0.25mm
Package_DFN_QFN:UDFN-10_1.35x2.6mm_P0.5mm
Package_DFN_QFN:UDFN-4-1EP_1x1mm_P0.65mm_EP0.48x0.48mm
Package_DFN_QFN:UDFN-9_1.0x3.8mm_P0.5mm
@@ -10332,6 +10927,9 @@ Package_DFN_QFN:UQFN-16-1EP_3x3mm_P0.5mm_EP1.75x1.75mm
Package_DFN_QFN:UQFN-16-1EP_4x4mm_P0.65mm_EP2.6x2.6mm
Package_DFN_QFN:UQFN-16-1EP_4x4mm_P0.65mm_EP2.6x2.6mm_ThermalVias
Package_DFN_QFN:UQFN-16-1EP_4x4mm_P0.65mm_EP2.7x2.7mm
+Package_DFN_QFN:UQFN-16_1.8x2.6mm_P0.4mm
+Package_DFN_QFN:UQFN-20-1EP_3x3mm_P0.4mm_EP1.7x1.7mm
+Package_DFN_QFN:UQFN-20-1EP_3x3mm_P0.4mm_EP1.7x1.7mm_ThermalVias
Package_DFN_QFN:UQFN-20-1EP_3x3mm_P0.4mm_EP1.85x1.85mm
Package_DFN_QFN:UQFN-20-1EP_3x3mm_P0.4mm_EP1.85x1.85mm_ThermalVias
Package_DFN_QFN:UQFN-20-1EP_4x4mm_P0.5mm_EP2.8x2.8mm
@@ -10348,6 +10946,10 @@ Package_DFN_QFN:UQFN-48-1EP_6x6mm_P0.4mm_EP4.62x4.62mm_ThermalVias
Package_DFN_QFN:VDFN-8-1EP_2x2mm_P0.5mm_EP0.9x1.7mm
Package_DFN_QFN:Vishay_PowerPAK_MLP44-24L
Package_DFN_QFN:Vishay_PowerPAK_MLP44-24L_ThermalVias
+Package_DFN_QFN:VQFN-100-1EP_12x12mm_P0.4mm_EP8x8mm
+Package_DFN_QFN:VQFN-100-1EP_12x12mm_P0.4mm_EP8x8mm_ThermalVias
+Package_DFN_QFN:VQFN-12-1EP_4x4mm_P0.8mm_EP2.1x2.1mm
+Package_DFN_QFN:VQFN-12-1EP_4x4mm_P0.8mm_EP2.1x2.1mm_ThermalVias
Package_DFN_QFN:VQFN-16-1EP_3x3mm_P0.5mm_EP1.1x1.1mm
Package_DFN_QFN:VQFN-16-1EP_3x3mm_P0.5mm_EP1.1x1.1mm_ThermalVias
Package_DFN_QFN:VQFN-16-1EP_3x3mm_P0.5mm_EP1.45x1.45mm
@@ -10370,12 +10972,20 @@ Package_DFN_QFN:VQFN-28-1EP_4x4mm_P0.45mm_EP2.4x2.4mm
Package_DFN_QFN:VQFN-28-1EP_4x4mm_P0.45mm_EP2.4x2.4mm_ThermalVias
Package_DFN_QFN:VQFN-28-1EP_4x5mm_P0.5mm_EP2.55x3.55mm
Package_DFN_QFN:VQFN-28-1EP_4x5mm_P0.5mm_EP2.55x3.55mm_ThermalVias
+Package_DFN_QFN:VQFN-28-1EP_5x5mm_P0.5mm_EP3.25x3.25mm
+Package_DFN_QFN:VQFN-28-1EP_5x5mm_P0.5mm_EP3.25x3.25mm_ThermalVias
+Package_DFN_QFN:VQFN-32-1EP_4x4mm_P0.4mm_EP2.8x2.8mm
+Package_DFN_QFN:VQFN-32-1EP_4x4mm_P0.4mm_EP2.8x2.8mm_ThermalVias
Package_DFN_QFN:VQFN-32-1EP_5x5mm_P0.5mm_EP3.15x3.15mm
Package_DFN_QFN:VQFN-32-1EP_5x5mm_P0.5mm_EP3.15x3.15mm_ThermalVias
Package_DFN_QFN:VQFN-32-1EP_5x5mm_P0.5mm_EP3.1x3.1mm
Package_DFN_QFN:VQFN-32-1EP_5x5mm_P0.5mm_EP3.1x3.1mm_ThermalVias
Package_DFN_QFN:VQFN-32-1EP_5x5mm_P0.5mm_EP3.5x3.5mm
Package_DFN_QFN:VQFN-32-1EP_5x5mm_P0.5mm_EP3.5x3.5mm_ThermalVias
+Package_DFN_QFN:VQFN-40-1EP_5x5mm_P0.4mm_EP3.5x3.5mm
+Package_DFN_QFN:VQFN-40-1EP_5x5mm_P0.4mm_EP3.5x3.5mm_ThermalVias
+Package_DFN_QFN:VQFN-40-1EP_5x5mm_P0.4mm_EP3.6x3.6mm
+Package_DFN_QFN:VQFN-40-1EP_5x5mm_P0.4mm_EP3.6x3.6mm_ThermalVias
Package_DFN_QFN:VQFN-46-1EP_5x6mm_P0.4mm_EP2.8x3.8mm
Package_DFN_QFN:VQFN-46-1EP_5x6mm_P0.4mm_EP2.8x3.8mm_ThermalVias
Package_DFN_QFN:VQFN-48-1EP_6x6mm_P0.4mm_EP4.1x4.1mm
@@ -10389,6 +10999,7 @@ Package_DFN_QFN:VQFN-64-1EP_9x9mm_P0.5mm_EP5.4x5.4mm_ThermalVias
Package_DFN_QFN:VQFN-64-1EP_9x9mm_P0.5mm_EP7.15x7.15mm
Package_DFN_QFN:VQFN-64-1EP_9x9mm_P0.5mm_EP7.15x7.15mm_ThermalVias
Package_DFN_QFN:W-PDFN-8-1EP_6x5mm_P1.27mm_EP3x3mm
+Package_DFN_QFN:WCH_QFN-16-1EP_3x3mm_P0.5mm_EP1.8x1.8mm
Package_DFN_QFN:WDFN-10-1EP_3x3mm_P0.5mm_EP1.8x2.5mm
Package_DFN_QFN:WDFN-10-1EP_3x3mm_P0.5mm_EP1.8x2.5mm_ThermalVias
Package_DFN_QFN:WDFN-12-1EP_3x3mm_P0.45mm_EP1.7x2.5mm
@@ -10399,7 +11010,10 @@ Package_DFN_QFN:WDFN-8-1EP_3x2mm_P0.5mm_EP1.3x1.4mm
Package_DFN_QFN:WDFN-8-1EP_4x3mm_P0.65mm_EP2.4x1.8mm
Package_DFN_QFN:WDFN-8-1EP_4x3mm_P0.65mm_EP2.4x1.8mm_ThermalVias
Package_DFN_QFN:WDFN-8-1EP_6x5mm_P1.27mm_EP3.4x4mm
+Package_DFN_QFN:WDFN-8-1EP_8x6mm_P1.27mm_EP6x4.8mm
+Package_DFN_QFN:WDFN-8-1EP_8x6mm_P1.27mm_EP6x4.8mm_ThermalVias
Package_DFN_QFN:WDFN-8_2x2mm_P0.5mm
+Package_DFN_QFN:WFDFPN-8-1EP_3x2mm_P0.5mm_EP1.25x1.35mm
Package_DFN_QFN:WQFN-14-1EP_2.5x2.5mm_P0.5mm_EP1.45x1.45mm
Package_DFN_QFN:WQFN-14-1EP_2.5x2.5mm_P0.5mm_EP1.45x1.45mm_ThermalVias
Package_DFN_QFN:WQFN-16-1EP_3x3mm_P0.5mm_EP1.68x1.68mm
@@ -10420,6 +11034,38 @@ Package_DFN_QFN:WQFN-24-1EP_4x4mm_P0.5mm_EP2.6x2.6mm_ThermalVias
Package_DFN_QFN:WQFN-32-1EP_5x5mm_P0.5mm_EP3.1x3.1mm
Package_DFN_QFN:WQFN-42-1EP_3.5x9mm_P0.5mm_EP2.05x7.55mm
Package_DFN_QFN:WQFN-42-1EP_3.5x9mm_P0.5mm_EP2.05x7.55mm_ThermalVias
+Package_DIP:CERDIP-14_W7.62mm_SideBrazed
+Package_DIP:CERDIP-14_W7.62mm_SideBrazed_LongPads
+Package_DIP:CERDIP-14_W7.62mm_SideBrazed_LongPads_Socket
+Package_DIP:CERDIP-14_W7.62mm_SideBrazed_Socket
+Package_DIP:CERDIP-16_W7.62mm_SideBrazed
+Package_DIP:CERDIP-16_W7.62mm_SideBrazed_LongPads
+Package_DIP:CERDIP-16_W7.62mm_SideBrazed_LongPads_Socket
+Package_DIP:CERDIP-16_W7.62mm_SideBrazed_Socket
+Package_DIP:CERDIP-18_W7.62mm_SideBrazed
+Package_DIP:CERDIP-18_W7.62mm_SideBrazed_LongPads
+Package_DIP:CERDIP-18_W7.62mm_SideBrazed_LongPads_Socket
+Package_DIP:CERDIP-18_W7.62mm_SideBrazed_Socket
+Package_DIP:CERDIP-20_W7.62mm_SideBrazed
+Package_DIP:CERDIP-20_W7.62mm_SideBrazed_LongPads
+Package_DIP:CERDIP-20_W7.62mm_SideBrazed_LongPads_Socket
+Package_DIP:CERDIP-20_W7.62mm_SideBrazed_Socket
+Package_DIP:CERDIP-22_W7.62mm_SideBrazed
+Package_DIP:CERDIP-22_W7.62mm_SideBrazed_LongPads
+Package_DIP:CERDIP-22_W7.62mm_SideBrazed_LongPads_Socket
+Package_DIP:CERDIP-22_W7.62mm_SideBrazed_Socket
+Package_DIP:CERDIP-24_W7.62mm_SideBrazed
+Package_DIP:CERDIP-24_W7.62mm_SideBrazed_LongPads
+Package_DIP:CERDIP-24_W7.62mm_SideBrazed_LongPads_Socket
+Package_DIP:CERDIP-24_W7.62mm_SideBrazed_Socket
+Package_DIP:CERDIP-28_W7.62mm_SideBrazed
+Package_DIP:CERDIP-28_W7.62mm_SideBrazed_LongPads
+Package_DIP:CERDIP-28_W7.62mm_SideBrazed_LongPads_Socket
+Package_DIP:CERDIP-28_W7.62mm_SideBrazed_Socket
+Package_DIP:CERDIP-8_W7.62mm_SideBrazed
+Package_DIP:CERDIP-8_W7.62mm_SideBrazed_LongPads
+Package_DIP:CERDIP-8_W7.62mm_SideBrazed_LongPads_Socket
+Package_DIP:CERDIP-8_W7.62mm_SideBrazed_Socket
Package_DIP:DIP-10_W10.16mm
Package_DIP:DIP-10_W10.16mm_LongPads
Package_DIP:DIP-10_W7.62mm
@@ -10476,6 +11122,11 @@ Package_DIP:DIP-22_W7.62mm_SMDSocket_SmallPads
Package_DIP:DIP-22_W7.62mm_Socket
Package_DIP:DIP-22_W7.62mm_Socket_LongPads
Package_DIP:DIP-22_W8.89mm_SMDSocket_LongPads
+Package_DIP:DIP-24_18.0mmx34.29mm_W15.24mm
+Package_DIP:DIP-24_18.0mmx34.29mm_W15.24mm_LongPads
+Package_DIP:DIP-24_18.0mmx34.29mm_W15.24mm_SMDSocket_SmallPads
+Package_DIP:DIP-24_18.0mmx34.29mm_W15.24mm_Socket
+Package_DIP:DIP-24_18.0mmx34.29mm_W15.24mm_Socket_LongPads
Package_DIP:DIP-24_W10.16mm
Package_DIP:DIP-24_W10.16mm_LongPads
Package_DIP:DIP-24_W10.16mm_SMDSocket_SmallPads
@@ -10593,6 +11244,8 @@ Package_DIP:DIP-8_W7.62mm_Socket
Package_DIP:DIP-8_W7.62mm_Socket_LongPads
Package_DIP:DIP-8_W8.89mm_SMDSocket_LongPads
Package_DIP:Fairchild_LSOP-8
+Package_DIP:IXYS_Flatpak-8_6.3x9.7mm_P2.54mm
+Package_DIP:IXYS_SMD-8_6.3x9.7mm_P2.54mm
Package_DIP:PowerIntegrations_eDIP-12B
Package_DIP:PowerIntegrations_PDIP-8B
Package_DIP:PowerIntegrations_PDIP-8C
@@ -10685,6 +11338,7 @@ Package_DirectFET:DirectFET_SH
Package_DirectFET:DirectFET_SJ
Package_DirectFET:DirectFET_SQ
Package_DirectFET:DirectFET_ST
+Package_LCC:Analog_LCC-8_5x5mm_P1.27mm
Package_LCC:PLCC-20
Package_LCC:PLCC-20_SMD-Socket
Package_LCC:PLCC-20_THT-Socket
@@ -10731,9 +11385,11 @@ Package_LGA:LGA-8_8x6.2mm_P1.27mm
Package_LGA:LGA-8_8x6mm_P1.27mm
Package_LGA:Linear_LGA-133_15.0x15.0mm_Layout12x12_P1.27mm
Package_LGA:MPS_LGA-18-10EP_12x12mm_P3.3mm
+Package_LGA:Nordic_nRF9160-SIxx_LGA-102-59EP_16.0x10.5mm_P0.5mm
Package_LGA:NXP_LGA-8_3x5mm_P1.25mm_H1.1mm
Package_LGA:NXP_LGA-8_3x5mm_P1.25mm_H1.2mm
-Package_LGA:Rohm_MLGA010V020A_LGA-10_2x2mm_P0.45mm_LayoutBorder_3x2y
+Package_LGA:Rohm_MLGA010V020A_LGA-10_2x2mm_P0.45mm_LayoutBorder2x3y
+Package_LGA:ST_CCLGA-7L_2.8x2.8mm_P1.15mm_H1.95mm
Package_LGA:ST_HLGA-10_2.5x2.5mm_P0.6mm_LayoutBorder3x2y
Package_LGA:ST_HLGA-10_2x2mm_P0.5mm_LayoutBorder3x2y
Package_LGA:Texas_SIL0008D_MicroSiP-8-1EP_2.8x3mm_P0.65mm_EP1.1x1.9mm
@@ -10756,6 +11412,8 @@ Package_QFP:HTQFP-64-1EP_10x10mm_P0.5mm_EP8x8mm_Mask4.4x4.4mm_ThermalVias
Package_QFP:LQFP-100_14x14mm_P0.5mm
Package_QFP:LQFP-128_14x14mm_P0.4mm
Package_QFP:LQFP-128_14x20mm_P0.5mm
+Package_QFP:LQFP-144-1EP_20x20mm_P0.5mm_EP6.5x6.5mm
+Package_QFP:LQFP-144-1EP_20x20mm_P0.5mm_EP6.5x6.5mm_ThermalVias
Package_QFP:LQFP-144_20x20mm_P0.5mm
Package_QFP:LQFP-160_24x24mm_P0.5mm
Package_QFP:LQFP-176_20x20mm_P0.4mm
@@ -10783,6 +11441,7 @@ Package_QFP:LQFP-64_7x7mm_P0.4mm
Package_QFP:LQFP-80_10x10mm_P0.4mm
Package_QFP:LQFP-80_12x12mm_P0.5mm
Package_QFP:LQFP-80_14x14mm_P0.65mm
+Package_QFP:Microchip_PQFP-44_10x10mm_P0.8mm
Package_QFP:MQFP-44_10x10mm_P0.8mm
Package_QFP:PQFP-100_14x20mm_P0.65mm
Package_QFP:PQFP-112_20x20mm_P0.65mm
@@ -10790,11 +11449,13 @@ Package_QFP:PQFP-132_24x24mm_P0.635mm
Package_QFP:PQFP-132_24x24mm_P0.635mm_i386
Package_QFP:PQFP-144_28x28mm_P0.65mm
Package_QFP:PQFP-160_28x28mm_P0.65mm
+Package_QFP:PQFP-168_28x28mm_P0.65mm
Package_QFP:PQFP-208_28x28mm_P0.5mm
Package_QFP:PQFP-240_32.1x32.1mm_P0.5mm
Package_QFP:PQFP-256_28x28mm_P0.4mm
Package_QFP:PQFP-32_5x5mm_P0.5mm
Package_QFP:PQFP-44_10x10mm_P0.8mm
+Package_QFP:PQFP-64_14x14mm_P0.8mm
Package_QFP:PQFP-80_14x20mm_P0.8mm
Package_QFP:Texas_PHP0048E_HTQFP-48-1EP_7x7mm_P0.5mm_EP6.5x6.5mm_Mask3.62x3.62mm
Package_QFP:Texas_PHP0048E_HTQFP-48-1EP_7x7mm_P0.5mm_EP6.5x6.5mm_Mask3.62x3.62mm_ThermalVias
@@ -10817,6 +11478,8 @@ Package_QFP:TQFP-48-1EP_7x7mm_P0.5mm_EP5x5mm_ThermalVias
Package_QFP:TQFP-48_7x7mm_P0.5mm
Package_QFP:TQFP-52-1EP_10x10mm_P0.65mm_EP6.5x6.5mm
Package_QFP:TQFP-52-1EP_10x10mm_P0.65mm_EP6.5x6.5mm_ThermalVias
+Package_QFP:TQFP-64-1EP_10x10mm_P0.5mm_EP5.305x5.305mm
+Package_QFP:TQFP-64-1EP_10x10mm_P0.5mm_EP5.305x5.305mm_ThermalVias
Package_QFP:TQFP-64-1EP_10x10mm_P0.5mm_EP8x8mm
Package_QFP:TQFP-64_10x10mm_P0.5mm
Package_QFP:TQFP-64_14x14mm_P0.8mm
@@ -10844,6 +11507,9 @@ Package_SIP:SIP9_Housing_BigPads
Package_SIP:SLA704XM
Package_SIP:STK672-040-E
Package_SIP:STK672-080-E
+Package_SO:Analog_MSOP-12-16-1EP_3x4.039mm_P0.5mm_EP1.651x2.845mm
+Package_SO:Analog_MSOP-12-16-1EP_3x4.039mm_P0.5mm_EP1.651x2.845mm_ThermalVias
+Package_SO:Analog_MSOP-12-16_3x4.039mm_P0.5mm
Package_SO:Diodes_PSOP-8
Package_SO:Diodes_SO-8EP
Package_SO:ETSSOP-20-1EP_4.4x6.5mm_P0.65mm_EP3x4.2mm
@@ -10893,8 +11559,14 @@ Package_SO:HTSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP3.4x9.5mm_Mask2.4x6.17mm_ThermalVia
Package_SO:HTSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP3.4x9.5mm_ThermalVias
Package_SO:HTSSOP-32-1EP_6.1x11mm_P0.65mm_EP5.2x11mm_Mask4.11x4.36mm
Package_SO:HTSSOP-32-1EP_6.1x11mm_P0.65mm_EP5.2x11mm_Mask4.11x4.36mm_ThermalVias
+Package_SO:HTSSOP-38-1EP_4.4x9.7mm_P0.5mm_EP1.5x3.3mm
+Package_SO:HTSSOP-38-1EP_4.4x9.7mm_P0.5mm_EP1.5x3.3mm_ThermalVias
+Package_SO:HTSSOP-38-1EP_4.4x9.7mm_P0.5mm_EP2.74x4.75mm
+Package_SO:HTSSOP-38-1EP_4.4x9.7mm_P0.5mm_EP2.74x4.75mm_ThermalVias
Package_SO:HTSSOP-38-1EP_6.1x12.5mm_P0.65mm_EP5.2x12.5mm_Mask3.39x6.35mm
Package_SO:HTSSOP-38-1EP_6.1x12.5mm_P0.65mm_EP5.2x12.5mm_Mask3.39x6.35mm_ThermalVias
+Package_SO:HTSSOP-44-1EP_6.1x14mm_P0.635mm_EP5.2x14mm_Mask4.31x8.26mm
+Package_SO:HTSSOP-44-1EP_6.1x14mm_P0.635mm_EP5.2x14mm_Mask4.31x8.26mm_ThermalVias
Package_SO:HTSSOP-44_6.1x14mm_P0.635mm_TopEP4.14x7.01mm
Package_SO:HTSSOP-56-1EP_6.1x14mm_P0.5mm_EP3.61x6.35mm
Package_SO:HVSSOP-10-1EP_3x3mm_P0.5mm_EP1.57x1.88mm
@@ -10912,12 +11584,15 @@ Package_SO:Infineon_PG-DSO-20-85
Package_SO:Infineon_PG-DSO-20-85_ThermalVias
Package_SO:Infineon_PG-DSO-20-87
Package_SO:Infineon_PG-DSO-20-U03_7.5x12.8mm
+Package_SO:Infineon_PG-DSO-8-24_4x5mm
Package_SO:Infineon_PG-DSO-8-27_3.9x4.9mm_EP2.65x3mm
Package_SO:Infineon_PG-DSO-8-27_3.9x4.9mm_EP2.65x3mm_ThermalVias
Package_SO:Infineon_PG-DSO-8-43
+Package_SO:Infineon_PG-DSO-8-59_7.5x6.3mm
Package_SO:Infineon_PG-TSDSO-14-22
-Package_SO:Linear_MSOP-12-16-1EP_3x4mm_P0.5mm
-Package_SO:Linear_MSOP-12-16_3x4mm_P0.5mm
+Package_SO:Infineon_SOIC-20W_7.6x12.8mm_P1.27mm
+Package_SO:Linear_HTSSOP-31-38-1EP_4.4x9.7mm_P0.5mm_EP2.74x4.75mm
+Package_SO:Linear_HTSSOP-31-38-1EP_4.4x9.7mm_P0.5mm_EP2.74x4.75mm_ThermalVias
Package_SO:MFSOP6-4_4.4x3.6mm_P1.27mm
Package_SO:MFSOP6-5_4.4x3.6mm_P1.27mm
Package_SO:MSOP-10-1EP_3x3mm_P0.5mm_EP1.68x1.88mm
@@ -10927,18 +11602,12 @@ Package_SO:MSOP-10-1EP_3x3mm_P0.5mm_EP1.73x1.98mm_ThermalVias
Package_SO:MSOP-10-1EP_3x3mm_P0.5mm_EP2.2x3.1mm_Mask1.83x1.89mm
Package_SO:MSOP-10-1EP_3x3mm_P0.5mm_EP2.2x3.1mm_Mask1.83x1.89mm_ThermalVias
Package_SO:MSOP-10_3x3mm_P0.5mm
-Package_SO:MSOP-12-16-1EP_3x4mm_P0.5mm_EP1.65x2.85mm
-Package_SO:MSOP-12-16-1EP_3x4mm_P0.5mm_EP1.65x2.85mm_ThermalVias
-Package_SO:MSOP-12-16_3x4mm_P0.5mm
-Package_SO:MSOP-12-1EP_3x4mm_P0.65mm_EP1.65x2.85mm
-Package_SO:MSOP-12-1EP_3x4mm_P0.65mm_EP1.65x2.85mm_ThermalVias
-Package_SO:MSOP-12_3x4mm_P0.65mm
+Package_SO:MSOP-12-1EP_3x4.039mm_P0.65mm_EP1.651x2.845mm
+Package_SO:MSOP-12-1EP_3x4.039mm_P0.65mm_EP1.651x2.845mm_ThermalVias
+Package_SO:MSOP-12_3x4.039mm_P0.65mm
Package_SO:MSOP-16-1EP_3x4.039mm_P0.5mm_EP1.651x2.845mm
Package_SO:MSOP-16-1EP_3x4.039mm_P0.5mm_EP1.651x2.845mm_ThermalVias
-Package_SO:MSOP-16-1EP_3x4mm_P0.5mm_EP1.65x2.85mm
-Package_SO:MSOP-16-1EP_3x4mm_P0.5mm_EP1.65x2.85mm_ThermalVias
Package_SO:MSOP-16_3x4.039mm_P0.5mm
-Package_SO:MSOP-16_3x4mm_P0.5mm
Package_SO:MSOP-8-1EP_3x3mm_P0.65mm_EP1.5x1.8mm
Package_SO:MSOP-8-1EP_3x3mm_P0.65mm_EP1.5x1.8mm_ThermalVias
Package_SO:MSOP-8-1EP_3x3mm_P0.65mm_EP1.68x1.88mm
@@ -10950,6 +11619,8 @@ Package_SO:MSOP-8-1EP_3x3mm_P0.65mm_EP1.95x2.15mm_ThermalVias
Package_SO:MSOP-8-1EP_3x3mm_P0.65mm_EP2.5x3mm_Mask1.73x2.36mm
Package_SO:MSOP-8-1EP_3x3mm_P0.65mm_EP2.5x3mm_Mask1.73x2.36mm_ThermalVias
Package_SO:MSOP-8_3x3mm_P0.65mm
+Package_SO:NXP_HTSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP2.2x3.4mm
+Package_SO:NXP_HTSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP2.2x3.4mm_ThermalVias
Package_SO:OnSemi_Micro8
Package_SO:ONSemi_SO-8FL_488AA
Package_SO:PowerIntegrations_eSOP-12B
@@ -10959,11 +11630,14 @@ Package_SO:PowerIntegrations_SO-8C
Package_SO:PowerPAK_SO-8L_Single
Package_SO:PowerPAK_SO-8_Dual
Package_SO:PowerPAK_SO-8_Single
+Package_SO:PowerSSO-16-1EP_3.9x4.9mm_P0.5mm_EP2.5x3.61mm
+Package_SO:PowerSSO-16-1EP_3.9x4.9mm_P0.5mm_EP2.5x3.61mm_ThermalVias
Package_SO:PSOP-44_16.9x27.17mm_P1.27mm
Package_SO:QSOP-16_3.9x4.9mm_P0.635mm
Package_SO:QSOP-20_3.9x8.7mm_P0.635mm
Package_SO:QSOP-24_3.9x8.7mm_P0.635mm
-Package_SO:SC-74-6_1.5x2.9mm_P0.95mm
+Package_SO:QSOP-28_3.9x9.9mm_P0.635mm
+Package_SO:Renesas_SOP-32_11.4x20.75mm_P1.27mm
Package_SO:SO-14_3.9x8.65mm_P1.27mm
Package_SO:SO-14_5.3x10.2mm_P1.27mm
Package_SO:SO-16_3.9x9.9mm_P1.27mm
@@ -10978,11 +11652,12 @@ Package_SO:SO-4_4.4x3.6mm_P2.54mm
Package_SO:SO-4_4.4x3.9mm_P2.54mm
Package_SO:SO-4_4.4x4.3mm_P2.54mm
Package_SO:SO-4_7.6x3.6mm_P2.54mm
+Package_SO:SO-5-6_4.55x3.7mm_P1.27mm
Package_SO:SO-5_4.4x3.6mm_P1.27mm
Package_SO:SO-6L_10x3.84mm_P1.27mm
Package_SO:SO-6_4.4x3.6mm_P1.27mm
Package_SO:SO-8_3.9x4.9mm_P1.27mm
-Package_SO:SO-8_5.3x6.2mm_P1.27mm
+Package_SO:SOIC-10_3.9x4.9mm_P1mm
Package_SO:SOIC-14-16_3.9x9.9mm_P1.27mm
Package_SO:SOIC-14W_7.5x9mm_P1.27mm
Package_SO:SOIC-14_3.9x8.7mm_P1.27mm
@@ -10998,6 +11673,7 @@ Package_SO:SOIC-20W_7.5x15.4mm_P1.27mm
Package_SO:SOIC-24W_7.5x15.4mm_P1.27mm
Package_SO:SOIC-28W_7.5x17.9mm_P1.27mm
Package_SO:SOIC-28W_7.5x18.7mm_P1.27mm
+Package_SO:SOIC-32_7.518x20.777mm_P1.27mm
Package_SO:SOIC-4_4.55x2.6mm_P1.27mm
Package_SO:SOIC-4_4.55x3.7mm_P2.54mm
Package_SO:SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.29x3mm
@@ -11013,36 +11689,49 @@ Package_SO:SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.62x3.51mm_ThermalVias
Package_SO:SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.95x4.9mm_Mask2.71x3.4mm
Package_SO:SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.95x4.9mm_Mask2.71x3.4mm_ThermalVias
Package_SO:SOIC-8-N7_3.9x4.9mm_P1.27mm
-Package_SO:SOIC-8W_5.3x5.3mm_P1.27mm
Package_SO:SOIC-8_3.9x4.9mm_P1.27mm
-Package_SO:SOIC-8_5.23x5.23mm_P1.27mm
-Package_SO:SOIC-8_5.275x5.275mm_P1.27mm
+Package_SO:SOIC-8_5.3x5.3mm_P1.27mm
+Package_SO:SOIC-8_5.3x6.2mm_P1.27mm
Package_SO:SOIC-8_7.5x5.85mm_P1.27mm
-Package_SO:SOJ-36_10.16x23.49mm_P1.27mm
+Package_SO:SOJ-24_7.62x15.875mm_P1.27mm
+Package_SO:SOJ-28_10.16x18.415mm_P1.27mm
+Package_SO:SOJ-28_7.62x18.415mm_P1.27mm
+Package_SO:SOJ-32_10.16x20.955mm_P1.27mm
+Package_SO:SOJ-32_7.62x20.955mm_P1.27mm
+Package_SO:SOJ-36_10.16x23.495mm_P1.27mm
+Package_SO:SOJ-44_10.16x28.575mm_P1.27mm
Package_SO:SOP-16_3.9x9.9mm_P1.27mm
Package_SO:SOP-16_4.4x10.4mm_P1.27mm
Package_SO:SOP-16_4.55x10.3mm_P1.27mm
+Package_SO:SOP-18_7.495x11.515mm_P1.27mm
Package_SO:SOP-18_7x12.5mm_P1.27mm
Package_SO:SOP-20_7.5x12.8mm_P1.27mm
Package_SO:SOP-24_7.5x15.4mm_P1.27mm
+Package_SO:SOP-28_8.4x18.16mm_P1.27mm
+Package_SO:SOP-32_11.305x20.495mm_P1.27mm
+Package_SO:SOP-44_12.6x28.5mm_P1.27mm
+Package_SO:SOP-44_13.3x28.2mm_P1.27mm
Package_SO:SOP-4_3.8x4.1mm_P2.54mm
Package_SO:SOP-4_4.4x2.6mm_P1.27mm
+Package_SO:SOP-4_7.5x4.1mm_P2.54mm
Package_SO:SOP-8-1EP_4.57x4.57mm_P1.27mm_EP4.57x4.45mm
Package_SO:SOP-8-1EP_4.57x4.57mm_P1.27mm_EP4.57x4.45mm_ThermalVias
Package_SO:SOP-8_3.76x4.96mm_P1.27mm
Package_SO:SOP-8_3.9x4.9mm_P1.27mm
-Package_SO:SOP-8_5.28x5.23mm_P1.27mm
Package_SO:SOP-8_6.605x9.655mm_P2.54mm
Package_SO:SOP-8_6.62x9.15mm_P2.54mm
Package_SO:SSO-4_6.7x5.1mm_P2.54mm_Clearance8mm
Package_SO:SSO-6_6.8x4.6mm_P1.27mm_Clearance7mm
Package_SO:SSO-6_6.8x4.6mm_P1.27mm_Clearance8mm
Package_SO:SSO-7-8_6.4x9.78mm_P2.54mm
+Package_SO:SSO-8-7_6.4x9.7mm_P2.54mm
Package_SO:SSO-8_13.6x6.3mm_P1.27mm_Clearance14.2mm
Package_SO:SSO-8_6.7x9.8mm_P2.54mm_Clearance8mm
Package_SO:SSO-8_6.8x5.9mm_P1.27mm_Clearance7mm
Package_SO:SSO-8_6.8x5.9mm_P1.27mm_Clearance8mm
Package_SO:SSO-8_9.6x6.3mm_P1.27mm_Clearance10.5mm
+Package_SO:SSOP-10-1EP_3.9x4.9mm_P1mm_EP2.1x3.3mm
+Package_SO:SSOP-10-1EP_3.9x4.9mm_P1mm_EP2.1x3.3mm_ThermalVias
Package_SO:SSOP-10_3.9x4.9mm_P1.00mm
Package_SO:SSOP-14_5.3x6.2mm_P0.65mm
Package_SO:SSOP-16_3.9x4.9mm_P0.635mm
@@ -11056,10 +11745,10 @@ Package_SO:SSOP-24_3.9x8.7mm_P0.635mm
Package_SO:SSOP-24_5.3x8.2mm_P0.65mm
Package_SO:SSOP-28_3.9x9.9mm_P0.635mm
Package_SO:SSOP-28_5.3x10.2mm_P0.65mm
-Package_SO:SSOP-32_11.305x20.495mm_P1.27mm
Package_SO:SSOP-44_5.3x12.8mm_P0.5mm
Package_SO:SSOP-48_5.3x12.8mm_P0.5mm
Package_SO:SSOP-48_7.5x15.9mm_P0.635mm
+Package_SO:SSOP-4_4.4x2.6mm_P1.27mm
Package_SO:SSOP-56_7.5x18.5mm_P0.635mm
Package_SO:SSOP-8_2.95x2.8mm_P0.65mm
Package_SO:SSOP-8_3.95x5.21x3.27mm_P1.27mm
@@ -11073,13 +11762,25 @@ Package_SO:ST_PowerSSO-24_SlugUp
Package_SO:ST_PowerSSO-36_SlugDown
Package_SO:ST_PowerSSO-36_SlugDown_ThermalVias
Package_SO:ST_PowerSSO-36_SlugUp
+Package_SO:Texas_DAD0032A_HTSSOP-32_6.1x11mm_P0.65mm_TopEP3.71x3.81mm
+Package_SO:Texas_DGN0008B_VSSOP-8-1EP_3x3mm_P0.65mm_EP2x3mm_Mask1.88x1.98mm
+Package_SO:Texas_DGN0008B_VSSOP-8-1EP_3x3mm_P0.65mm_EP2x3mm_Mask1.88x1.98mm_ThermalVias
+Package_SO:Texas_DGN0008D_VSSOP-8-1EP_3x3mm_P0.65mm_EP2x2.94mm_Mask1.57x1.89mm
+Package_SO:Texas_DGN0008D_VSSOP-8-1EP_3x3mm_P0.65mm_EP2x2.94mm_Mask1.57x1.89mm_ThermalVias
+Package_SO:Texas_DGN0008G_VSSOP-8-1EP_3x3mm_P0.65mm_EP2x2.94mm_Mask1.846x2.15mm
+Package_SO:Texas_DGN0008G_VSSOP-8-1EP_3x3mm_P0.65mm_EP2x2.94mm_Mask1.846x2.15mm_ThermalVias
+Package_SO:Texas_DKD0036A_HSSOP-36_11x15.9mm_P0.65mm_TopEP5.85x12.65mm
+Package_SO:Texas_DYY0016A_TSOT-23-16_4.2x2.0mm_P0.5mm
Package_SO:Texas_HSOP-8-1EP_3.9x4.9mm_P1.27mm
Package_SO:Texas_HSOP-8-1EP_3.9x4.9mm_P1.27mm_ThermalVias
Package_SO:Texas_HTSOP-8-1EP_3.9x4.9mm_P1.27mm_EP2.95x4.9mm_Mask2.4x3.1mm_ThermalVias
+Package_SO:Texas_PW0020A_TSSOP-20_4.4x6.5mm_P0.65mm
Package_SO:Texas_PWP0020A
+Package_SO:Texas_PWP0028V_TSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP3.4x9.7mm_Mask2.94x5.62mm
+Package_SO:Texas_PWP0028V_TSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP3.4x9.7mm_Mask2.94x5.62mm_ThermalVias
Package_SO:Texas_R-PDSO-G8_EP2.95x4.9mm_Mask2.4x3.1mm
Package_SO:Texas_R-PDSO-G8_EP2.95x4.9mm_Mask2.4x3.1mm_ThermalVias
-Package_SO:Texas_R-PDSO-N5
+Package_SO:Texas_S-PDSO-G8_3x3mm_P0.65mm
Package_SO:TI_SO-PowerPAD-8
Package_SO:TI_SO-PowerPAD-8_ThermalVias
Package_SO:TSOP-5_1.65x3.05mm_P0.95mm
@@ -11107,6 +11808,7 @@ Package_SO:TSOP-I-56_14.4x14mm_P0.5mm
Package_SO:TSOP-I-56_16.4x14mm_P0.5mm
Package_SO:TSOP-I-56_18.4x14mm_P0.5mm
Package_SO:TSOP-II-32_21.0x10.2mm_P1.27mm
+Package_SO:TSOP-II-40-44_10.16x18.37mm_P0.8mm
Package_SO:TSOP-II-44_10.16x18.41mm_P0.8mm
Package_SO:TSOP-II-54_22.2x10.16mm_P0.8mm
Package_SO:TSSOP-100_6.1x20.8mm_P0.4mm
@@ -11128,8 +11830,13 @@ Package_SO:TSSOP-24_4.4x5mm_P0.4mm
Package_SO:TSSOP-24_4.4x6.5mm_P0.5mm
Package_SO:TSSOP-24_4.4x7.8mm_P0.65mm
Package_SO:TSSOP-24_6.1x7.8mm_P0.65mm
-Package_SO:TSSOP-28-1EP_4.4x9.7mm_P0.65mm
+Package_SO:TSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP2.74x4.75mm
+Package_SO:TSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP2.74x4.75mm_ThermalVias
Package_SO:TSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP2.85x6.7mm
+Package_SO:TSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP3.05x7.56mm
+Package_SO:TSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP3.05x7.56mm_ThermalVias
+Package_SO:TSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP3.4x9.7mm_Mask3.1x4.05mm
+Package_SO:TSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP3.4x9.7mm_Mask3.1x4.05mm_ThermalVias
Package_SO:TSSOP-28_4.4x7.8mm_P0.5mm
Package_SO:TSSOP-28_4.4x9.7mm_P0.65mm
Package_SO:TSSOP-28_6.1x7.8mm_P0.5mm
@@ -11184,11 +11891,11 @@ Package_SO:VSO-40_7.6x15.4mm_P0.762mm
Package_SO:VSO-56_11.1x21.5mm_P0.75mm
Package_SO:VSSOP-10_3x3mm_P0.5mm
Package_SO:VSSOP-8_2.3x2mm_P0.5mm
-Package_SO:VSSOP-8_2.4x2.1mm_P0.5mm
-Package_SO:VSSOP-8_3.0x3.0mm_P0.65mm
+Package_SO:VSSOP-8_3x3mm_P0.65mm
Package_SO:Zetex_SM8
Package_SON:Diodes_PowerDI3333-8
Package_SON:Diodes_PowerDI3333-8_UXC_3.3x3.3mm_P0.65mm
+Package_SON:EPSON_CE-USON-10_USON-10_3.2x2.5mm_P0.7mm
Package_SON:Fairchild_DualPower33-6_3x3mm
Package_SON:Fairchild_MicroPak-6_1.0x1.45mm_P0.5mm
Package_SON:Fairchild_MicroPak2-6_1.0x1.0mm_P0.35mm
@@ -11201,6 +11908,7 @@ Package_SON:Infineon_PG-TISON-8-2
Package_SON:Infineon_PG-TISON-8-3
Package_SON:Infineon_PG-TISON-8-4
Package_SON:Infineon_PG-TISON-8-5
+Package_SON:MicroCrystal_C7_SON-8_1.5x3.2mm_P0.9mm
Package_SON:Nexperia_HUSON-12_USON-12-1EP_1.35x2.5mm_P0.4mm_EP0.4x2mm
Package_SON:Nexperia_HUSON-16_USON-16-1EP_1.35x3.3mm_P0.4mm_EP0.4x2.8mm
Package_SON:Nexperia_HUSON-8_USON-8-1EP_1.35x1.7mm_P0.4mm_EP0.4x1.2mm
@@ -11208,11 +11916,15 @@ Package_SON:NXP_XSON-16
Package_SON:ROHM_VML0806
Package_SON:RTC_SMD_MicroCrystal_C3_2.5x3.7mm
Package_SON:SON-8-1EP_3x2mm_P0.5mm_EP1.4x1.6mm
+Package_SON:ST_PowerFLAT-6L_5x6mm_P1.27mm
+Package_SON:ST_PowerFLAT_HV-5_8x8mm
+Package_SON:ST_PowerFLAT_HV-8_5x6mm
Package_SON:Texas_DPY0002A_0.6x1mm_P0.65mm
Package_SON:Texas_DQK
Package_SON:Texas_DQX002A
Package_SON:Texas_DRC0010J
Package_SON:Texas_DRC0010J_ThermalVias
+Package_SON:Texas_DRX_WSON-10_2.5x2.5mm_P0.5mm
Package_SON:Texas_DSC0010J
Package_SON:Texas_DSC0010J_ThermalVias
Package_SON:Texas_PWSON-N6
@@ -11227,7 +11939,9 @@ Package_SON:Texas_S-PVSON-N8_ThermalVias
Package_SON:Texas_S-PWSON-N10
Package_SON:Texas_S-PWSON-N10_ThermalVias
Package_SON:Texas_S-PWSON-N8_EP1.2x2mm
+Package_SON:Texas_S-PWSON-N8_EP1.2x2mm_ThermalVias
Package_SON:Texas_USON-6_1x1.45mm_P0.5mm_SMD
+Package_SON:Texas_VSON-HR-8_1.5x2mm_P0.5mm
Package_SON:Texas_X2SON-4_1x1mm_P0.65mm
Package_SON:Texas_X2SON-5_0.8x0.8mm_P0.48mm
Package_SON:Texas_X2SON-5_0.8x0.8mm_P0.48mm_RoutingVia
@@ -11237,18 +11951,27 @@ Package_SON:VSON-10-1EP_3x3mm_P0.5mm_EP1.2x2mm
Package_SON:VSON-10-1EP_3x3mm_P0.5mm_EP1.2x2mm_ThermalVias
Package_SON:VSON-10-1EP_3x3mm_P0.5mm_EP1.65x2.4mm
Package_SON:VSON-10-1EP_3x3mm_P0.5mm_EP1.65x2.4mm_ThermalVias
+Package_SON:VSON-14-1EP_3x4.45mm_P0.65mm_EP1.6x4.2mm
+Package_SON:VSON-14-1EP_3x4.45mm_P0.65mm_EP1.6x4.2mm_ThermalVias
Package_SON:VSON-8-1EP_3x3mm_P0.65mm_EP1.65x2.4mm
Package_SON:VSON-8-1EP_3x3mm_P0.65mm_EP1.65x2.4mm_ThermalVias
+Package_SON:VSON-8-1EP_3x3mm_P0.65mm_EP1.6x2.4mm
Package_SON:VSON-8_1.5x2mm_P0.5mm
Package_SON:VSON-8_3.3x3.3mm_P0.65mm_NexFET
Package_SON:VSONP-8-1EP_5x6_P1.27mm
+Package_SON:Winbond_USON-8-1EP_3x2mm_P0.5mm_EP0.2x1.6mm
+Package_SON:Winbond_USON-8-2EP_3x4mm_P0.8mm_EP0.2x0.8mm
Package_SON:WSON-10-1EP_2.5x2.5mm_P0.5mm_EP1.2x2mm
Package_SON:WSON-10-1EP_2.5x2.5mm_P0.5mm_EP1.2x2mm_ThermalVias
Package_SON:WSON-10-1EP_2x3mm_P0.5mm_EP0.84x2.4mm
Package_SON:WSON-10-1EP_2x3mm_P0.5mm_EP0.84x2.4mm_ThermalVias
Package_SON:WSON-10-1EP_4x3mm_P0.5mm_EP2.2x2mm
+Package_SON:WSON-10-1EP_4x4mm_P0.8mm_EP2.6x3mm
+Package_SON:WSON-10-1EP_4x4mm_P0.8mm_EP2.6x3mm_ThermalVias
Package_SON:WSON-12-1EP_3x2mm_P0.5mm_EP1x2.65
Package_SON:WSON-12-1EP_3x2mm_P0.5mm_EP1x2.65_ThermalVias
+Package_SON:WSON-12-1EP_3x3mm_P0.5mm_EP1.5x2.5mm
+Package_SON:WSON-12-1EP_3x3mm_P0.5mm_EP1.5x2.5mm_ThermalVias
Package_SON:WSON-12-1EP_4x4mm_P0.5mm_EP2.6x3mm
Package_SON:WSON-12-1EP_4x4mm_P0.5mm_EP2.6x3mm_ThermalVias
Package_SON:WSON-14-1EP_4.0x4.0mm_P0.5mm_EP2.6x2.6mm
@@ -11294,16 +12017,20 @@ Package_TO_SOT_SMD:Infineon_PG-TO-220-7Lead_TabPin8
Package_TO_SOT_SMD:Infineon_PG-TSFP-3-1
Package_TO_SOT_SMD:LFPAK33
Package_TO_SOT_SMD:LFPAK56
+Package_TO_SOT_SMD:LFPAK88
Package_TO_SOT_SMD:Nexperia_CFP15_SOT-1289
Package_TO_SOT_SMD:OnSemi_ECH8
Package_TO_SOT_SMD:PowerMacro_M234_NoHole
Package_TO_SOT_SMD:PowerMacro_M234_WithHole
Package_TO_SOT_SMD:PQFN_8x8
Package_TO_SOT_SMD:Rohm_HRP7
+Package_TO_SOT_SMD:ROHM_SOT-457_ClockwisePinNumbering
Package_TO_SOT_SMD:SC-59
Package_TO_SOT_SMD:SC-59_Handsoldering
Package_TO_SOT_SMD:SC-70-8
Package_TO_SOT_SMD:SC-70-8_Handsoldering
+Package_TO_SOT_SMD:SC-74-6_1.55x2.9mm_P0.95mm
+Package_TO_SOT_SMD:SC-74A-5_1.55x2.9mm_P0.95mm
Package_TO_SOT_SMD:SC-82AA
Package_TO_SOT_SMD:SC-82AA_Handsoldering
Package_TO_SOT_SMD:SC-82AB
@@ -11457,12 +12184,12 @@ Package_TO_SOT_THT:TO-218-3_Vertical
Package_TO_SOT_THT:TO-220-11_P3.4x2.54mm_StaggerEven_Lead5.84mm_TabDown
Package_TO_SOT_THT:TO-220-11_P3.4x2.54mm_StaggerOdd_Lead5.84mm_TabDown
Package_TO_SOT_THT:TO-220-11_P3.4x5.08mm_StaggerEven_Lead4.58mm_Vertical
-Package_TO_SOT_THT:TO-220-11_P3.4x5.08mm_StaggerOdd_Lead4.85mm_Vertical
+Package_TO_SOT_THT:TO-220-11_P3.4x5.08mm_StaggerOdd_Lead4.58mm_Vertical
Package_TO_SOT_THT:TO-220-11_P3.4x5.08mm_StaggerOdd_Lead8.45mm_TabDown
-Package_TO_SOT_THT:TO-220-15_P2.54x2.54mm_StaggerEven_Lead4.58mm_Vertical
Package_TO_SOT_THT:TO-220-15_P2.54x2.54mm_StaggerEven_Lead5.84mm_TabDown
-Package_TO_SOT_THT:TO-220-15_P2.54x2.54mm_StaggerOdd_Lead4.58mm_Vertical
Package_TO_SOT_THT:TO-220-15_P2.54x2.54mm_StaggerOdd_Lead5.84mm_TabDown
+Package_TO_SOT_THT:TO-220-15_P2.54x5.08mm_StaggerEven_Lead4.58mm_Vertical
+Package_TO_SOT_THT:TO-220-15_P2.54x5.08mm_StaggerOdd_Lead4.58mm_Vertical
Package_TO_SOT_THT:TO-220-2_Horizontal_TabDown
Package_TO_SOT_THT:TO-220-2_Horizontal_TabUp
Package_TO_SOT_THT:TO-220-2_Vertical
@@ -11471,10 +12198,10 @@ Package_TO_SOT_THT:TO-220-3_Horizontal_TabUp
Package_TO_SOT_THT:TO-220-3_Vertical
Package_TO_SOT_THT:TO-220-4_Horizontal_TabDown
Package_TO_SOT_THT:TO-220-4_Horizontal_TabUp
-Package_TO_SOT_THT:TO-220-4_P5.08x2.54mm_StaggerEven_Lead3.8mm_Vertical
-Package_TO_SOT_THT:TO-220-4_P5.08x2.54mm_StaggerEven_Lead5.84mm_TabDown
-Package_TO_SOT_THT:TO-220-4_P5.08x2.54mm_StaggerOdd_Lead3.8mm_Vertical
-Package_TO_SOT_THT:TO-220-4_P5.08x2.54mm_StaggerOdd_Lead5.84mm_TabDown
+Package_TO_SOT_THT:TO-220-4_P5.08x3.7mm_StaggerEven_Lead3.8mm_Vertical
+Package_TO_SOT_THT:TO-220-4_P5.08x3.7mm_StaggerOdd_Lead3.8mm_Vertical
+Package_TO_SOT_THT:TO-220-4_P5.08x3.8mm_StaggerEven_Lead5.85mm_TabDown
+Package_TO_SOT_THT:TO-220-4_P5.08x3.8mm_StaggerOdd_Lead5.85mm_TabDown
Package_TO_SOT_THT:TO-220-4_Vertical
Package_TO_SOT_THT:TO-220-5_Horizontal_TabDown
Package_TO_SOT_THT:TO-220-5_Horizontal_TabUp
@@ -11487,6 +12214,8 @@ Package_TO_SOT_THT:TO-220-7_P2.54x3.7mm_StaggerEven_Lead3.8mm_Vertical
Package_TO_SOT_THT:TO-220-7_P2.54x3.7mm_StaggerOdd_Lead3.8mm_Vertical
Package_TO_SOT_THT:TO-220-7_P2.54x3.8mm_StaggerEven_Lead5.85mm_TabDown
Package_TO_SOT_THT:TO-220-7_P2.54x3.8mm_StaggerOdd_Lead5.85mm_TabDown
+Package_TO_SOT_THT:TO-220-7_P2.54x5.08mm_StaggerOdd_Lead3.08mm_Vertical
+Package_TO_SOT_THT:TO-220-7_P2.54x5.1mm_StaggerOdd_Lead8.025mm_TabDown
Package_TO_SOT_THT:TO-220-8_Vertical
Package_TO_SOT_THT:TO-220-9_P1.94x3.7mm_StaggerEven_Lead3.8mm_Vertical
Package_TO_SOT_THT:TO-220-9_P1.94x3.7mm_StaggerOdd_Lead3.8mm_Vertical
@@ -11703,6 +12432,7 @@ Potentiometer_THT:Potentiometer_Alps_RK09L_Single_Vertical
Potentiometer_THT:Potentiometer_Alps_RK09Y11_Single_Horizontal
Potentiometer_THT:Potentiometer_Alps_RK163_Dual_Horizontal
Potentiometer_THT:Potentiometer_Alps_RK163_Single_Horizontal
+Potentiometer_THT:Potentiometer_Bourns_20P_Horizontal
Potentiometer_THT:Potentiometer_Bourns_3005_Horizontal
Potentiometer_THT:Potentiometer_Bourns_3006P_Horizontal
Potentiometer_THT:Potentiometer_Bourns_3006W_Horizontal
@@ -11732,7 +12462,7 @@ Potentiometer_THT:Potentiometer_Bourns_3339W_Horizontal
Potentiometer_THT:Potentiometer_Bourns_3386C_Horizontal
Potentiometer_THT:Potentiometer_Bourns_3386F_Vertical
Potentiometer_THT:Potentiometer_Bourns_3386P_Vertical
-Potentiometer_THT:Potentiometer_Bourns_3386W_Vertical
+Potentiometer_THT:Potentiometer_Bourns_3386W_Horizontal
Potentiometer_THT:Potentiometer_Bourns_3386X_Horizontal
Potentiometer_THT:Potentiometer_Bourns_PTA1543_Single_Slide
Potentiometer_THT:Potentiometer_Bourns_PTA2043_Single_Slide
@@ -11741,6 +12471,7 @@ Potentiometer_THT:Potentiometer_Bourns_PTA4543_Single_Slide
Potentiometer_THT:Potentiometer_Bourns_PTA6043_Single_Slide
Potentiometer_THT:Potentiometer_Bourns_PTV09A-1_Single_Vertical
Potentiometer_THT:Potentiometer_Bourns_PTV09A-2_Single_Horizontal
+Potentiometer_THT:Potentiometer_Bourns_PTV112-4_Dual_Vertical
Potentiometer_THT:Potentiometer_Omeg_PC16BU_Horizontal
Potentiometer_THT:Potentiometer_Omeg_PC16BU_Vertical
Potentiometer_THT:Potentiometer_Piher_PC-16_Dual_Horizontal
@@ -11782,6 +12513,8 @@ Potentiometer_THT:Potentiometer_Vishay_T7-YA_Single_Vertical
Potentiometer_THT:Potentiometer_Vishay_T73XW_Horizontal
Potentiometer_THT:Potentiometer_Vishay_T73XX_Horizontal
Potentiometer_THT:Potentiometer_Vishay_T73YP_Vertical
+Potentiometer_THT:Potentiometer_Vishay_T93XA_Horizontal
+Potentiometer_THT:Potentiometer_Vishay_T93YA_Vertical
Relay_SMD:Relay_2P2T_10x6mm_TE_IMxxG
Relay_SMD:Relay_DPDT_AXICOM_IMSeries_JLeg
Relay_SMD:Relay_DPDT_FRT5_SMD
@@ -11806,19 +12539,24 @@ Relay_SMD:Relay_SPDT_AXICOM_HF3Series_75ohms_Pitch1.27mm
Relay_THT:Relay_1-Form-A_Schrack-RYII_RM5mm
Relay_THT:Relay_1-Form-B_Schrack-RYII_RM5mm
Relay_THT:Relay_1-Form-C_Schrack-RYII_RM3.2mm
-Relay_THT:Relay_1P1T_NO_10x24x18.8mm_Panasonic_ADW11xxxxW_THT
Relay_THT:Relay_3PST_COTO_3650
Relay_THT:Relay_3PST_COTO_3660
Relay_THT:Relay_DPDT_AXICOM_IMSeries_Pitch3.2mm
Relay_THT:Relay_DPDT_AXICOM_IMSeries_Pitch5.08mm
Relay_THT:Relay_DPDT_Finder_30.22
Relay_THT:Relay_DPDT_Finder_40.52
+Relay_THT:Relay_DPDT_Finder_40.62
Relay_THT:Relay_DPDT_FRT5
Relay_THT:Relay_DPDT_Fujitsu_FTR-F1C
-Relay_THT:Relay_DPDT_Kemet_EC2
-Relay_THT:Relay_DPDT_Kemet_EC2_DoubleCoil
+Relay_THT:Relay_DPDT_Hongfa_HF115F-2Z-x4
+Relay_THT:Relay_DPDT_Kemet_EC2_NJ
+Relay_THT:Relay_DPDT_Kemet_EC2_NJ_DoubleCoil
+Relay_THT:Relay_DPDT_Kemet_EC2_NU
+Relay_THT:Relay_DPDT_Kemet_EC2_NU_DoubleCoil
Relay_THT:Relay_DPDT_Omron_G2RL-2
Relay_THT:Relay_DPDT_Omron_G5V-2
+Relay_THT:Relay_DPDT_Omron_G6A
+Relay_THT:Relay_DPDT_Omron_G6AK
Relay_THT:Relay_DPDT_Omron_G6H-2
Relay_THT:Relay_DPDT_Omron_G6K-2P-Y
Relay_THT:Relay_DPDT_Omron_G6K-2P
@@ -11831,7 +12569,11 @@ Relay_THT:Relay_DPST_COTO_3602
Relay_THT:Relay_DPST_Fujitsu_FTR-F1A
Relay_THT:Relay_DPST_Omron_G2RL-2A
Relay_THT:Relay_DPST_Schrack-RT2-FormA_RM5mm
+Relay_THT:Relay_NCR_HHG1D-1
+Relay_THT:Relay_Socket_3PDT_Omron_PLE11-0
+Relay_THT:Relay_Socket_4PDT_Omron_PY14-02
Relay_THT:Relay_Socket_DPDT_Finder_96.12
+Relay_THT:Relay_Socket_DPDT_Omron_PLE08-0
Relay_THT:Relay_SPDT_Finder_32.21-x000
Relay_THT:Relay_SPDT_Finder_34.51_Horizontal
Relay_THT:Relay_SPDT_Finder_34.51_Vertical
@@ -11840,8 +12582,13 @@ Relay_THT:Relay_SPDT_Finder_40.11
Relay_THT:Relay_SPDT_Finder_40.31
Relay_THT:Relay_SPDT_Finder_40.41
Relay_THT:Relay_SPDT_Finder_40.51
+Relay_THT:Relay_SPDT_Finder_40.61
Relay_THT:Relay_SPDT_Fujitsu_FTR-LYCA005x_FormC_Vertical
Relay_THT:Relay_SPDT_HJR-4102
+Relay_THT:Relay_SPDT_Hongfa_HF3F-L-xx-1ZL1T
+Relay_THT:Relay_SPDT_Hongfa_HF3F-L-xx-1ZL2T-R
+Relay_THT:Relay_SPDT_Hongfa_HF3F-L-xx-1ZL2T
+Relay_THT:Relay_SPDT_Hongfa_JQC-3FF_0XX-1Z
Relay_THT:Relay_SPDT_HsinDa_Y14
Relay_THT:Relay_SPDT_Omron-G5LE-1
Relay_THT:Relay_SPDT_Omron-G5Q-1
@@ -11850,6 +12597,9 @@ Relay_THT:Relay_SPDT_Omron_G2RL-1
Relay_THT:Relay_SPDT_Omron_G5V-1
Relay_THT:Relay_SPDT_Omron_G6E
Relay_THT:Relay_SPDT_Omron_G6EK
+Relay_THT:Relay_SPDT_Panasonic_DR-L
+Relay_THT:Relay_SPDT_Panasonic_DR-L2
+Relay_THT:Relay_SPDT_Panasonic_DR
Relay_THT:Relay_SPDT_Panasonic_JW1_FormC
Relay_THT:Relay_SPDT_PotterBrumfield_T9AP5D52_12V30A
Relay_THT:Relay_SPDT_RAYEX-L90
@@ -11864,9 +12614,16 @@ Relay_THT:Relay_SPDT_Schrack-RT1-FormC_RM5mm
Relay_THT:Relay_SPDT_StandexMeder_SIL_Form1C
Relay_THT:Relay_SPST-NO_Fujitsu_FTR-LYAA005x_FormA_Vertical
Relay_THT:Relay_SPST_Finder_32.21-x300
+Relay_THT:Relay_SPST_Hongfa_HF3F-L-xx-1HL1T
+Relay_THT:Relay_SPST_Hongfa_HF3F-L-xx-1HL2T-R
+Relay_THT:Relay_SPST_Hongfa_HF3F-L-xx-1HL2T
+Relay_THT:Relay_SPST_Hongfa_JQC-3FF_0XX-1H
Relay_THT:Relay_SPST_Omron-G5Q-1A
Relay_THT:Relay_SPST_Omron_G2RL-1A-E
Relay_THT:Relay_SPST_Omron_G2RL-1A
+Relay_THT:Relay_SPST_Omron_G5NB
+Relay_THT:Relay_SPST_Omron_G5PZ
+Relay_THT:Relay_SPST_Panasonic_ADW11
Relay_THT:Relay_SPST_Panasonic_ALFG_FormA
Relay_THT:Relay_SPST_Panasonic_ALFG_FormA_CircularHoles
Relay_THT:Relay_SPST_Panasonic_JW1_FormA
@@ -11890,9 +12647,11 @@ Relay_THT:Relay_SPST_StandexMeder_SIL_Form1A
Relay_THT:Relay_SPST_StandexMeder_SIL_Form1B
Relay_THT:Relay_SPST_TE_PCH-1xxx2M
Relay_THT:Relay_SPST_TE_PCN-1xxD3MHZ
+Relay_THT:Relay_SPST_Zettler-AZSR131
Relay_THT:Relay_StandexMeder_DIP_HighProfile
Relay_THT:Relay_StandexMeder_DIP_LowProfile
Relay_THT:Relay_StandexMeder_UMS
+Relay_THT:Relay_Tyco_V23072_Sealed
Resistor_SMD:R_01005_0402Metric
Resistor_SMD:R_01005_0402Metric_Pad0.57x0.30mm_HandSolder
Resistor_SMD:R_0201_0603Metric
@@ -11945,6 +12704,7 @@ Resistor_SMD:R_Cat16-8
Resistor_SMD:R_MELF_MMB-0207
Resistor_SMD:R_MicroMELF_MMU-0102
Resistor_SMD:R_MiniMELF_MMA-0204
+Resistor_SMD:R_Shunt_Isabellenhuette_BVR4026
Resistor_SMD:R_Shunt_Ohmite_LVK12
Resistor_SMD:R_Shunt_Ohmite_LVK20
Resistor_SMD:R_Shunt_Ohmite_LVK24
@@ -12066,10 +12826,12 @@ RF_Antenna:Abracon_PRO-OB-440
RF_Antenna:Abracon_PRO-OB-471
RF_Antenna:Antenova_SR4G013_GPS
RF_Antenna:Astrocast_AST50127-00
+RF_Antenna:AVX_M620720
RF_Antenna:Coilcraft_MA5532-AE_RFID
RF_Antenna:Johanson_2450AT18x100
RF_Antenna:Johanson_2450AT43F0100
RF_Antenna:Molex_47948-0001_2.4Ghz
+RF_Antenna:NiceRF_SW868-TH13_868Mhz
RF_Antenna:Pulse_W3000
RF_Antenna:Pulse_W3011
RF_Antenna:Texas_SWRA117D_2.4GHz_Left
@@ -12083,8 +12845,11 @@ RF_Converter:Balun_Johanson_1.6x0.8mm
RF_Converter:Balun_Johanson_5400BL15B050E
RF_Converter:RF_Attenuator_Susumu_PAT1220
RF_GPS:Linx_RXM-GPS
+RF_GPS:OriginGPS_ORG1510
RF_GPS:Quectel_L70-R
+RF_GPS:Quectel_L76
RF_GPS:Quectel_L80-R
+RF_GPS:Quectel_L96
RF_GPS:Sierra_XA11X0
RF_GPS:Sierra_XM11X0
RF_GPS:SIM28ML
@@ -12094,14 +12859,18 @@ RF_GPS:ublox_NEO
RF_GPS:ublox_SAM-M8Q
RF_GPS:ublox_SAM-M8Q_HandSolder
RF_GPS:ublox_ZED
+RF_GPS:ublox_ZOE_M8
RF_GSM:Quectel_BC66
RF_GSM:Quectel_BC95
+RF_GSM:Quectel_BG95
RF_GSM:Quectel_BG96
RF_GSM:Quectel_M95
RF_GSM:SIMCom_SIM800C
RF_GSM:SIMCom_SIM900
+RF_GSM:Telit_SE150A4
RF_GSM:Telit_xL865
-RF_GSM:ublox_SARA-G3_LGA-96
+RF_GSM:ublox_LENA-R8_LGA-100
+RF_GSM:ublox_SARA_LGA-96
RF_Mini-Circuits:Mini-Circuits_BK377
RF_Mini-Circuits:Mini-Circuits_BK377_LandPatternPL-005
RF_Mini-Circuits:Mini-Circuits_CD541_H2.08mm
@@ -12145,16 +12914,23 @@ RF_Module:Digi_XBee_SMT
RF_Module:DWM1000
RF_Module:E18-MS1-PCB
RF_Module:E73-2G4M04S
+RF_Module:ESP-01
RF_Module:ESP-07
RF_Module:ESP-12E
RF_Module:ESP-WROOM-02
+RF_Module:ESP32-C3-DevKitM-1
+RF_Module:ESP32-C3-WROOM-02
+RF_Module:ESP32-C3-WROOM-02U
+RF_Module:ESP32-C6-MINI-1
RF_Module:ESP32-S2-MINI-1
RF_Module:ESP32-S2-MINI-1U
RF_Module:ESP32-S2-WROVER
RF_Module:ESP32-S3-WROOM-1
RF_Module:ESP32-S3-WROOM-1U
+RF_Module:ESP32-S3-WROOM-2
RF_Module:ESP32-WROOM-32
RF_Module:ESP32-WROOM-32D
+RF_Module:ESP32-WROOM-32E
RF_Module:ESP32-WROOM-32U
RF_Module:ESP32-WROOM-32UE
RF_Module:Garmin_M8-35_9.8x14.0mm_Layout6x6_P1.5mm
@@ -12164,7 +12940,9 @@ RF_Module:HOPERF_RFM9XW_SMD
RF_Module:HOPERF_RFM9XW_THT
RF_Module:IQRF_TRx2DA_KON-SIM-01
RF_Module:IQRF_TRx2D_KON-SIM-01
+RF_Module:Jadak_Thingmagic_M6e-Nano
RF_Module:Laird_BL652
+RF_Module:MCU_Seeed_ESP32C3
RF_Module:Microchip_BM83
RF_Module:Microchip_RN4871
RF_Module:MOD-nRF8001
@@ -12173,17 +12951,22 @@ RF_Module:MonoWireless_TWE-L-WX
RF_Module:NINA-B111
RF_Module:nRF24L01_Breakout
RF_Module:Particle_P1
+RF_Module:RAK3172
RF_Module:RAK4200
RF_Module:RAK811
+RF_Module:Raytac_MDBT42Q
RF_Module:Raytac_MDBT50Q
RF_Module:RFDigital_RFD77101
RF_Module:RN2483
RF_Module:RN42
RF_Module:RN42N
+RF_Module:ST-SiP-LGA-86-11x7.3mm
RF_Module:ST_SPBTLE
RF_Module:Taiyo-Yuden_EYSGJNZWY
RF_Module:TD1205
RF_Module:TD1208
+RF_Module:WEMOS_C3_mini
+RF_Module:WEMOS_D1_mini_light
RF_Module:ZETA-433-SO_SMD
RF_Module:ZETA-433-SO_THT
RF_Shielding:Laird_Technologies_97-2002_25.40x25.40mm
@@ -12219,6 +13002,7 @@ RF_Shielding:Wuerth_36503605_60x60mm
RF_WiFi:USR-C322
Rotary_Encoder:RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm
Rotary_Encoder:RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm_CircularMountingHoles
+Rotary_Encoder:RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm_MountingHoles
Rotary_Encoder:RotaryEncoder_Alps_EC11E_Vertical_H20mm
Rotary_Encoder:RotaryEncoder_Alps_EC11E_Vertical_H20mm_CircularMountingHoles
Rotary_Encoder:RotaryEncoder_Alps_EC12E-Switch_Vertical_H20mm
@@ -12229,8 +13013,16 @@ Rotary_Encoder:RotaryEncoder_Bourns_Horizontal_PEC09-2xxxF-Nxxxx
Rotary_Encoder:RotaryEncoder_Bourns_Horizontal_PEC09-2xxxF-Sxxxx
Rotary_Encoder:RotaryEncoder_Bourns_Horizontal_PEC12R-2x17F-Nxxxx
Rotary_Encoder:RotaryEncoder_Bourns_Horizontal_PEC12R-2x17F-Sxxxx
+Rotary_Encoder:RotaryEncoder_Bourns_Horizontal_PEL12D-2x16F-Sxxxx
+Rotary_Encoder:RotaryEncoder_Bourns_Horizontal_PEL12D-2x18F-Sxxxx
+Rotary_Encoder:RotaryEncoder_Bourns_Horizontal_PEL12D-2x21F-Sxxxx
+Rotary_Encoder:RotaryEncoder_Bourns_Horizontal_PEL12D-2x25S-Sxxxx
+Rotary_Encoder:RotaryEncoder_Bourns_Horizontal_PEL12D-2x26F-Sxxxx
+Rotary_Encoder:RotaryEncoder_Bourns_Horizontal_PEL12D-2x31F-Sxxxx
Rotary_Encoder:RotaryEncoder_Bourns_Vertical_PEC12R-3x17F-Nxxxx
Rotary_Encoder:RotaryEncoder_Bourns_Vertical_PEC12R-3x17F-Sxxxx
+Rotary_Encoder:RotaryEncoder_Bourns_Vertical_PEL12D-4x25S-Sxxxx
+Rotary_Encoder:RotaryEncoder_Bourns_Vertical_PEL12D-4xxxF-Sxxxx
Sensor:Aosong_DHT11_5.5x12.0_P2.54mm
Sensor:ASAIR_AM2302_P2.54mm_Lead2.75mm_TabDown
Sensor:ASAIR_AM2302_P2.54mm_Vertical
@@ -12244,6 +13036,7 @@ Sensor:Sensirion_SCD4x-1EP_10.1x10.1mm_P1.25mm_EP4.8x4.8mm
Sensor:Sensortech_MiCS_5x7mm_P1.25mm
Sensor:SHT1x
Sensor:SPEC_110-xxx_SMD-10Pin_20x20mm_P4.0mm
+Sensor:TGS-5141
Sensor:Winson_GM-402B_5x5mm_P1.27mm
Sensor_Audio:CUI_CMC-4013-SMT
Sensor_Audio:Infineon_PG-LLGA-5-1
@@ -12252,6 +13045,7 @@ Sensor_Audio:InvenSense_ICS-43434-6_3.5x2.65mm
Sensor_Audio:Knowles_LGA-5_3.5x2.65mm
Sensor_Audio:Knowles_LGA-6_4.72x3.76mm
Sensor_Audio:Knowles_SPH0645LM4H-6_3.5x2.65mm
+Sensor_Audio:POM-2244P-C3310-2-R
Sensor_Audio:ST_HLGA-6_3.76x4.72mm_P1.65mm
Sensor_Current:AKM_CQ_7
Sensor_Current:AKM_CQ_7S
@@ -12286,8 +13080,10 @@ Sensor_Current:LEM_HX15-P-SP2
Sensor_Current:LEM_HX20-P-SP2
Sensor_Current:LEM_HX25-P-SP2
Sensor_Current:LEM_HX50-P-SP2
+Sensor_Current:LEM_LA25-NP
Sensor_Current:LEM_LA25-P
Sensor_Current:LEM_LTSR-NP
+Sensor_Distance:AMS_OLGA12
Sensor_Distance:ST_VL53L1x
Sensor_Humidity:Sensirion_DFN-4-1EP_2x2mm_P1mm_EP0.7x1.6mm
Sensor_Humidity:Sensirion_DFN-4_1.5x1.5mm_P0.8mm_SHT4x_NoCentralPad
@@ -12297,6 +13093,7 @@ Sensor_Motion:InvenSense_QFN-24_3x3mm_P0.4mm
Sensor_Motion:InvenSense_QFN-24_3x3mm_P0.4mm_NoMask
Sensor_Motion:InvenSense_QFN-24_4x4mm_P0.5mm
Sensor_Motion:InvenSense_QFN-24_4x4mm_P0.5mm_NoMask
+Sensor_Pressure:CFSensor_XGZP6859D_7x7mm
Sensor_Pressure:CFSensor_XGZP6897x
Sensor_Pressure:CFSensor_XGZP6899x
Sensor_Pressure:Freescale_98ARH99066A
@@ -12421,8 +13218,9 @@ Symbol:RoHS-Logo_30mm_SilkScreen
Symbol:RoHS-Logo_40mm_SilkScreen
Symbol:RoHS-Logo_6mm_SilkScreen
Symbol:RoHS-Logo_8mm_SilkScreen
-Symbol:Symbol_Attention_CopperTop_Big
-Symbol:Symbol_Attention_CopperTop_Small
+Symbol:Smolhaj_Scale_0.1
+Symbol:Symbol_Attention_Triangle_17x15mm_Copper
+Symbol:Symbol_Attention_Triangle_8x7mm_Copper
Symbol:Symbol_Barrel_Polarity
Symbol:Symbol_CC-Attribution_CopperTop_Big
Symbol:Symbol_CC-Attribution_CopperTop_Small
@@ -12439,19 +13237,19 @@ Symbol:Symbol_CreativeCommons_CopperTop_Type1_Big
Symbol:Symbol_CreativeCommons_CopperTop_Type2_Big
Symbol:Symbol_CreativeCommons_CopperTop_Type2_Small
Symbol:Symbol_CreativeCommons_SilkScreenTop_Type2_Big
-Symbol:Symbol_Danger_CopperTop_Big
-Symbol:Symbol_Danger_CopperTop_Small
+Symbol:Symbol_Danger_18x16mm_Copper
+Symbol:Symbol_Danger_8x8mm_Copper
Symbol:Symbol_ESD-Logo-Text_CopperTop
Symbol:Symbol_ESD-Logo_CopperTop
Symbol:Symbol_GNU-GPL_CopperTop_Big
Symbol:Symbol_GNU-GPL_CopperTop_Small
Symbol:Symbol_GNU-Logo_CopperTop
Symbol:Symbol_GNU-Logo_SilkscreenTop
-Symbol:Symbol_HighVoltage_Type1_CopperTop_Big
-Symbol:Symbol_Highvoltage_Type1_CopperTop_Small
-Symbol:Symbol_HighVoltage_Type2_CopperTop_Big
-Symbol:Symbol_Highvoltage_Type2_CopperTop_Small
-Symbol:Symbol_HighVoltage_Type2_CopperTop_VerySmall
+Symbol:Symbol_HighVoltage_NoTriangle_2x5mm_Copper
+Symbol:Symbol_HighVoltage_NoTriangle_6x15mm_Copper
+Symbol:Symbol_HighVoltage_Triangle_17x15mm_Copper
+Symbol:Symbol_HighVoltage_Triangle_6x6mm_Copper
+Symbol:Symbol_HighVoltage_Triangle_8x7mm_Copper
Symbol:UKCA-Logo_12x12mm_SilkScreen
Symbol:UKCA-Logo_20x20mm_SilkScreen
Symbol:UKCA-Logo_30x30mm_SilkScreen
@@ -12472,7 +13270,54 @@ TerminalBlock:TerminalBlock_bornier-3_P5.08mm
TerminalBlock:TerminalBlock_bornier-4_P5.08mm
TerminalBlock:TerminalBlock_bornier-5_P5.08mm
TerminalBlock:TerminalBlock_bornier-6_P5.08mm
+TerminalBlock:TerminalBlock_bornier-8_P5.08mm
+TerminalBlock:TerminalBlock_Degson_DG246-3.81-03P
+TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-02P_1x02_P5.00mm
+TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-03P_1x03_P5.00mm
+TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-04P_1x04_P5.00mm
+TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-05P_1x05_P5.00mm
+TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-06P_1x06_P5.00mm
+TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-07P_1x07_P5.00mm
+TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-08P_1x08_P5.00mm
+TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-09P_1x09_P5.00mm
+TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-10P_1x10_P5.00mm
+TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-11P_1x11_P5.00mm
+TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-12P_1x12_P5.00mm
+TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-13P_1x13_P5.00mm
+TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-14P_1x14_P5.00mm
+TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-15P_1x15_P5.00mm
+TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-16P_1x16_P5.00mm
+TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-17P_1x17_P5.00mm
+TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-18P_1x18_P5.00mm
+TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-19P_1x19_P5.00mm
+TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-20P_1x20_P5.00mm
+TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-21P_1x21_P5.00mm
+TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-22P_1x22_P5.00mm
+TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-23P_1x23_P5.00mm
+TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-24P_1x24_P5.00mm
TerminalBlock:TerminalBlock_Wuerth_691311400102_P7.62mm
+TerminalBlock:TerminalBlock_Xinya_XY308-2.54-10P_1x10_P2.54mm_Horizontal
+TerminalBlock:TerminalBlock_Xinya_XY308-2.54-11P_1x11_P2.54mm_Horizontal
+TerminalBlock:TerminalBlock_Xinya_XY308-2.54-12P_1x12_P2.54mm_Horizontal
+TerminalBlock:TerminalBlock_Xinya_XY308-2.54-13P_1x13_P2.54mm_Horizontal
+TerminalBlock:TerminalBlock_Xinya_XY308-2.54-14P_1x14_P2.54mm_Horizontal
+TerminalBlock:TerminalBlock_Xinya_XY308-2.54-15P_1x15_P2.54mm_Horizontal
+TerminalBlock:TerminalBlock_Xinya_XY308-2.54-16P_1x16_P2.54mm_Horizontal
+TerminalBlock:TerminalBlock_Xinya_XY308-2.54-17P_1x17_P2.54mm_Horizontal
+TerminalBlock:TerminalBlock_Xinya_XY308-2.54-18P_1x18_P2.54mm_Horizontal
+TerminalBlock:TerminalBlock_Xinya_XY308-2.54-19P_1x19_P2.54mm_Horizontal
+TerminalBlock:TerminalBlock_Xinya_XY308-2.54-20P_1x20_P2.54mm_Horizontal
+TerminalBlock:TerminalBlock_Xinya_XY308-2.54-21P_1x21_P2.54mm_Horizontal
+TerminalBlock:TerminalBlock_Xinya_XY308-2.54-22P_1x22_P2.54mm_Horizontal
+TerminalBlock:TerminalBlock_Xinya_XY308-2.54-23P_1x23_P2.54mm_Horizontal
+TerminalBlock:TerminalBlock_Xinya_XY308-2.54-2P_1x02_P2.54mm_Horizontal
+TerminalBlock:TerminalBlock_Xinya_XY308-2.54-3P_1x03_P2.54mm_Horizontal
+TerminalBlock:TerminalBlock_Xinya_XY308-2.54-4P_1x04_P2.54mm_Horizontal
+TerminalBlock:TerminalBlock_Xinya_XY308-2.54-5P_1x05_P2.54mm_Horizontal
+TerminalBlock:TerminalBlock_Xinya_XY308-2.54-6P_1x06_P2.54mm_Horizontal
+TerminalBlock:TerminalBlock_Xinya_XY308-2.54-7P_1x07_P2.54mm_Horizontal
+TerminalBlock:TerminalBlock_Xinya_XY308-2.54-8P_1x08_P2.54mm_Horizontal
+TerminalBlock:TerminalBlock_Xinya_XY308-2.54-9P_1x09_P2.54mm_Horizontal
TerminalBlock_4Ucon:TerminalBlock_4Ucon_1x02_P3.50mm_Horizontal
TerminalBlock_4Ucon:TerminalBlock_4Ucon_1x02_P3.50mm_Vertical
TerminalBlock_4Ucon:TerminalBlock_4Ucon_1x03_P3.50mm_Horizontal
@@ -12501,6 +13346,29 @@ TerminalBlock_4Ucon:TerminalBlock_4Ucon_1x14_P3.50mm_Horizontal
TerminalBlock_4Ucon:TerminalBlock_4Ucon_1x14_P3.50mm_Vertical
TerminalBlock_4Ucon:TerminalBlock_4Ucon_1x15_P3.50mm_Horizontal
TerminalBlock_4Ucon:TerminalBlock_4Ucon_1x15_P3.50mm_Vertical
+TerminalBlock_Altech:Altech_AK100_1x02_P5.00mm
+TerminalBlock_Altech:Altech_AK100_1x03_P5.00mm
+TerminalBlock_Altech:Altech_AK100_1x04_P5.00mm
+TerminalBlock_Altech:Altech_AK100_1x05_P5.00mm
+TerminalBlock_Altech:Altech_AK100_1x06_P5.00mm
+TerminalBlock_Altech:Altech_AK100_1x07_P5.00mm
+TerminalBlock_Altech:Altech_AK100_1x08_P5.00mm
+TerminalBlock_Altech:Altech_AK100_1x09_P5.00mm
+TerminalBlock_Altech:Altech_AK100_1x10_P5.00mm
+TerminalBlock_Altech:Altech_AK100_1x11_P5.00mm
+TerminalBlock_Altech:Altech_AK100_1x12_P5.00mm
+TerminalBlock_Altech:Altech_AK100_1x13_P5.00mm
+TerminalBlock_Altech:Altech_AK100_1x14_P5.00mm
+TerminalBlock_Altech:Altech_AK100_1x15_P5.00mm
+TerminalBlock_Altech:Altech_AK100_1x16_P5.00mm
+TerminalBlock_Altech:Altech_AK100_1x17_P5.00mm
+TerminalBlock_Altech:Altech_AK100_1x18_P5.00mm
+TerminalBlock_Altech:Altech_AK100_1x19_P5.00mm
+TerminalBlock_Altech:Altech_AK100_1x20_P5.00mm
+TerminalBlock_Altech:Altech_AK100_1x21_P5.00mm
+TerminalBlock_Altech:Altech_AK100_1x22_P5.00mm
+TerminalBlock_Altech:Altech_AK100_1x23_P5.00mm
+TerminalBlock_Altech:Altech_AK100_1x24_P5.00mm
TerminalBlock_Altech:Altech_AK300_1x02_P5.00mm_45-Degree
TerminalBlock_Altech:Altech_AK300_1x03_P5.00mm_45-Degree
TerminalBlock_Altech:Altech_AK300_1x04_P5.00mm_45-Degree
@@ -12524,6 +13392,29 @@ TerminalBlock_Altech:Altech_AK300_1x21_P5.00mm_45-Degree
TerminalBlock_Altech:Altech_AK300_1x22_P5.00mm_45-Degree
TerminalBlock_Altech:Altech_AK300_1x23_P5.00mm_45-Degree
TerminalBlock_Altech:Altech_AK300_1x24_P5.00mm_45-Degree
+TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-02_1x02_P5.08mm_Horizontal
+TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-03_1x03_P5.08mm_Horizontal
+TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-04_1x04_P5.08mm_Horizontal
+TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-05_1x05_P5.08mm_Horizontal
+TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-06_1x06_P5.08mm_Horizontal
+TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-07_1x07_P5.08mm_Horizontal
+TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-08_1x08_P5.08mm_Horizontal
+TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-09_1x09_P5.08mm_Horizontal
+TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-10_1x10_P5.08mm_Horizontal
+TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-11_1x11_P5.08mm_Horizontal
+TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-12_1x12_P5.08mm_Horizontal
+TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-13_1x13_P5.08mm_Horizontal
+TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-14_1x14_P5.08mm_Horizontal
+TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-15_1x15_P5.08mm_Horizontal
+TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-16_1x16_P5.08mm_Horizontal
+TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-17_1x17_P5.08mm_Horizontal
+TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-18_1x18_P5.08mm_Horizontal
+TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-19_1x19_P5.08mm_Horizontal
+TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-20_1x20_P5.08mm_Horizontal
+TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-21_1x21_P5.08mm_Horizontal
+TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-22_1x22_P5.08mm_Horizontal
+TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-23_1x23_P5.08mm_Horizontal
+TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-24_1x24_P5.08mm_Horizontal
TerminalBlock_Dinkle:TerminalBlock_Dinkle_DT-55-B01X-02_P10.00mm
TerminalBlock_Dinkle:TerminalBlock_Dinkle_DT-55-B01X-03_P10.00mm
TerminalBlock_Dinkle:TerminalBlock_Dinkle_DT-55-B01X-04_P10.00mm
@@ -12817,7 +13708,9 @@ TerminalBlock_RND:TerminalBlock_RND_205-00238_1x08_P5.08mm_Horizontal
TerminalBlock_RND:TerminalBlock_RND_205-00239_1x09_P5.08mm_Horizontal
TerminalBlock_RND:TerminalBlock_RND_205-00240_1x10_P5.08mm_Horizontal
TerminalBlock_RND:TerminalBlock_RND_205-00241_1x02_P10.16mm_Horizontal
+TerminalBlock_RND:TerminalBlock_RND_205-00241_1x11_P5.08mm_Horizontal
TerminalBlock_RND:TerminalBlock_RND_205-00242_1x03_P10.16mm_Horizontal
+TerminalBlock_RND:TerminalBlock_RND_205-00242_1x12_P5.08mm_Horizontal
TerminalBlock_RND:TerminalBlock_RND_205-00243_1x04_P10.16mm_Horizontal
TerminalBlock_RND:TerminalBlock_RND_205-00244_1x05_P10.16mm_Horizontal
TerminalBlock_RND:TerminalBlock_RND_205-00245_1x06_P10.16mm_Horizontal
@@ -12871,6 +13764,16 @@ TerminalBlock_TE-Connectivity:TerminalBlock_TE_282834-6_1x06_P2.54mm_Horizontal
TerminalBlock_TE-Connectivity:TerminalBlock_TE_282834-7_1x07_P2.54mm_Horizontal
TerminalBlock_TE-Connectivity:TerminalBlock_TE_282834-8_1x08_P2.54mm_Horizontal
TerminalBlock_TE-Connectivity:TerminalBlock_TE_282834-9_1x09_P2.54mm_Horizontal
+TerminalBlock_WAGO:TerminalBlock_WAGO_233-502_2x02_P2.54mm
+TerminalBlock_WAGO:TerminalBlock_WAGO_233-503_2x03_P2.54mm
+TerminalBlock_WAGO:TerminalBlock_WAGO_233-504_2x04_P2.54mm
+TerminalBlock_WAGO:TerminalBlock_WAGO_233-505_2x05_P2.54mm
+TerminalBlock_WAGO:TerminalBlock_WAGO_233-506_2x06_P2.54mm
+TerminalBlock_WAGO:TerminalBlock_WAGO_233-507_2x07_P2.54mm
+TerminalBlock_WAGO:TerminalBlock_WAGO_233-508_2x08_P2.54mm
+TerminalBlock_WAGO:TerminalBlock_WAGO_233-509_2x09_P2.54mm
+TerminalBlock_WAGO:TerminalBlock_WAGO_233-510_2x10_P2.54mm
+TerminalBlock_WAGO:TerminalBlock_WAGO_233-512_2x12_P2.54mm
TerminalBlock_WAGO:TerminalBlock_WAGO_236-101_1x01_P5.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-102_1x02_P5.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-103_1x03_P5.00mm_45Degree
@@ -12880,8 +13783,12 @@ TerminalBlock_WAGO:TerminalBlock_WAGO_236-106_1x06_P5.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-107_1x07_P5.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-108_1x08_P5.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-109_1x09_P5.00mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-110_1x10_P5.00mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-111_1x11_P5.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-112_1x12_P5.00mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-113_1x13_P5.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-114_1x14_P5.00mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-115_1x15_P5.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-116_1x16_P5.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-124_1x24_P5.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-136_1x36_P5.00mm_45Degree
@@ -12895,7 +13802,12 @@ TerminalBlock_WAGO:TerminalBlock_WAGO_236-206_1x06_P7.50mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-207_1x07_P7.50mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-208_1x08_P7.50mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-209_1x09_P7.50mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-210_1x10_P7.50mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-211_1x11_P7.50mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-212_1x12_P7.50mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-213_1x13_P7.50mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-214_1x14_P7.50mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-215_1x15_P7.50mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-216_1x16_P7.50mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-224_1x24_P7.50mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-301_1x01_P10.00mm_45Degree
@@ -12904,9 +13816,15 @@ TerminalBlock_WAGO:TerminalBlock_WAGO_236-303_1x03_P10.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-304_1x04_P10.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-305_1x05_P10.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-306_1x06_P10.00mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-307_1x07_P10.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-308_1x08_P10.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-309_1x09_P10.00mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-310_1x10_P10.00mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-311_1x11_P10.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-312_1x12_P10.00mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-313_1x13_P10.00mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-314_1x14_P10.00mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-315_1x15_P10.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-316_1x16_P10.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-324_1x24_P10.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-401_1x01_P5.00mm_45Degree
@@ -12918,8 +13836,12 @@ TerminalBlock_WAGO:TerminalBlock_WAGO_236-406_1x06_P5.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-407_1x07_P5.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-408_1x08_P5.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-409_1x09_P5.00mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-410_1x10_P5.00mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-411_1x11_P5.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-412_1x12_P5.00mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-413_1x13_P5.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-414_1x14_P5.00mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-415_1x15_P5.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-416_1x16_P5.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-424_1x24_P5.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-436_1x36_P5.00mm_45Degree
@@ -12933,7 +13855,12 @@ TerminalBlock_WAGO:TerminalBlock_WAGO_236-506_1x06_P7.50mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-507_1x07_P7.50mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-508_1x08_P7.50mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-509_1x09_P7.50mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-510_1x10_P7.50mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-511_1x11_P7.50mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-512_1x12_P7.50mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-513_1x13_P7.50mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-514_1x14_P7.50mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-515_1x15_P7.50mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-516_1x16_P7.50mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-524_1x24_P7.50mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-601_1x01_P10.00mm_45Degree
@@ -12942,9 +13869,15 @@ TerminalBlock_WAGO:TerminalBlock_WAGO_236-603_1x03_P10.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-604_1x04_P10.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-605_1x05_P10.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-606_1x06_P10.00mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-607_1x07_P10.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-608_1x08_P10.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-609_1x09_P10.00mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-610_1x10_P10.00mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-611_1x11_P10.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-612_1x12_P10.00mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-613_1x13_P10.00mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-614_1x14_P10.00mm_45Degree
+TerminalBlock_WAGO:TerminalBlock_WAGO_236-615_1x15_P10.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-616_1x16_P10.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_236-624_1x24_P10.00mm_45Degree
TerminalBlock_WAGO:TerminalBlock_WAGO_804-101_1x01_P5.00mm_45Degree
@@ -13005,8 +13938,8 @@ TestPoint:TestPoint_Bridge_Pitch7.62mm_Drill1.3mm
TestPoint:TestPoint_Keystone_5000-5004_Miniature
TestPoint:TestPoint_Keystone_5005-5009_Compact
TestPoint:TestPoint_Keystone_5010-5014_Multipurpose
-TestPoint:TestPoint_Keystone_5015_Micro-Minature
-TestPoint:TestPoint_Keystone_5019_Minature
+TestPoint:TestPoint_Keystone_5015_Micro_Mini
+TestPoint:TestPoint_Keystone_5019_Miniature
TestPoint:TestPoint_Loop_D1.80mm_Drill1.0mm_Beaded
TestPoint:TestPoint_Loop_D2.50mm_Drill1.0mm
TestPoint:TestPoint_Loop_D2.50mm_Drill1.0mm_LowProfile
@@ -13062,6 +13995,7 @@ Transformer_SMD:Transformer_Coilcraft_CST1
Transformer_SMD:Transformer_Coilcraft_CST2
Transformer_SMD:Transformer_Coilcraft_CST2010
Transformer_SMD:Transformer_CurrentSense_8.4x7.2mm
+Transformer_SMD:Transformer_ED8_4-Lead_10.5x8mm_P5mm
Transformer_SMD:Transformer_Ethernet_Bel_S558-5999-T7-F
Transformer_SMD:Transformer_Ethernet_Bourns_PT61017PEL
Transformer_SMD:Transformer_Ethernet_Bourns_PT61020EL
@@ -13143,12 +14077,19 @@ Transformer_THT:Transformer_Toroid_Tapped_Horizontal_D10.5mm_Amidon-T37
Transformer_THT:Transformer_Toroid_Tapped_Horizontal_D12.5mm_Amidon-T44
Transformer_THT:Transformer_Toroid_Tapped_Horizontal_D14.0mm_Amidon-T50
Transformer_THT:Transformer_Toroid_Tapped_Horizontal_D9.0mm_Amidon-T30
+Transformer_THT:Transformer_Triad_VPP16-310
Transformer_THT:Transformer_Wuerth_750343373
Transformer_THT:Transformer_Wuerth_760871131
+Transformer_THT:Transformer_Zeming_ZMCT103C
+Transformer_THT:Transformer_Zeming_ZMPT101K
Transistor_Power:GaN_Systems_GaNPX-3_5x6.6mm_Drain2.93x0.6mm
Transistor_Power:GaN_Systems_GaNPX-3_5x6.6mm_Drain3.76x0.6mm
Transistor_Power:GaN_Systems_GaNPX-4_7x8.4mm
Transistor_Power_Module:Infineon_AG-ECONO2
+Transistor_Power_Module:Infineon_AG-ECONO3
+Transistor_Power_Module:Infineon_AG-ECONO3B
+Transistor_Power_Module:Infineon_EasyPACK-1B
+Transistor_Power_Module:Infineon_EasyPACK-1B_PressFIT
Transistor_Power_Module:Infineon_EasyPIM-1B
Transistor_Power_Module:Infineon_EasyPIM-2B
Transistor_Power_Module:Littelfuse_Package_H_XBN2MM
diff --git a/public/kicad/symbols.txt b/public/kicad/symbols.txt
index 4a0999b7..1cee1692 100644
--- a/public/kicad/symbols.txt
+++ b/public/kicad/symbols.txt
@@ -1,6 +1,6 @@
# This file contains all the KiCad symbols available in the official library
# Generated by symbols.sh
-# on Sun Dec 3 22:09:24 CET 2023
+# on Sun Feb 16 21:42:01 CET 2025
4xxx:14528
4xxx:14529
4xxx:14538
@@ -31,6 +31,7 @@
4xxx:4052
4xxx:4053
4xxx:4056
+4xxx:4060
4xxx:4066
4xxx:4069
4xxx:4070
@@ -48,7 +49,9 @@
4xxx:4528
4xxx:4538
4xxx:4543
+4xxx:CD4033B
4xxx:HEF4093B
+4xxx:HEF4094B
4xxx_IEEE:4001
4xxx_IEEE:4002
4xxx_IEEE:4006
@@ -103,6 +106,7 @@
4xxx_IEEE:4051
4xxx_IEEE:4052
4xxx_IEEE:4053
+4xxx_IEEE:4060
4xxx_IEEE:4066
4xxx_IEEE:4068
4xxx_IEEE:4069
@@ -307,29 +311,56 @@
74xGxx:74LVC3G17
74xGxx:74LVC3G34
74xGxx:74LVC3GU04
+74xGxx:Inverter_Schmitt_Dual
74xGxx:NC7SVU04P5X
74xGxx:NC7SZ125M5X
74xGxx:NC7SZ125P5X
+74xGxx:SN74LVC1G00DBV
+74xGxx:SN74LVC1G00DCK
+74xGxx:SN74LVC1G00DRL
+74xGxx:SN74LVC1G125DBV
+74xGxx:SN74LVC1G125DCK
+74xGxx:SN74LVC1G125DRL
74xGxx:SN74LVC1G14DBV
74xGxx:SN74LVC1G14DRL
+74xGxx:SN74LVC2G14DBV
+74xGxx:TC7PZ14FU
74xx:7400
74xx:7402
74xx:74469
+74xx:7454
74xx:74AHC04
74xx:74AHC240
74xx:74AHC244
74xx:74AHC273
74xx:74AHC373
74xx:74AHC374
+74xx:74AHC541
74xx:74AHC595
74xx:74AHCT04
74xx:74AHCT123
+74xx:74AHCT125
74xx:74AHCT240
74xx:74AHCT244
74xx:74AHCT273
74xx:74AHCT373
74xx:74AHCT374
+74xx:74AHCT541
74xx:74AHCT595
+74xx:74ALVC164245
+74xx:74CB3Q16210DGG
+74xx:74CB3Q16210DGV
+74xx:74CB3Q16210DL
+74xx:74CB3T16210DGG
+74xx:74CB3T16210DGV
+74xx:74CBT16210CDGG
+74xx:74CBT16210CDGV
+74xx:74CBT16210CDL
+74xx:74CBT3861
+74xx:74CBTD16210DGG
+74xx:74CBTD16210DGV
+74xx:74CBTD16210DL
+74xx:74CBTD3861
74xx:74CBTLV16212
74xx:74CBTLV3257
74xx:74CBTLV3861
@@ -342,6 +373,9 @@
74xx:74HC14
74xx:74HC164
74xx:74HC165
+74xx:74HC173
+74xx:74HC192
+74xx:74HC193
74xx:74HC237
74xx:74HC238
74xx:74HC240
@@ -352,13 +386,16 @@
74xx:74HC374
74xx:74HC4024
74xx:74HC4051
+74xx:74HC4060
74xx:74HC590
74xx:74HC590A
+74xx:74HC594
74xx:74HC595
74xx:74HC596
74xx:74HC688
74xx:74HC7014
74xx:74HC74
+74xx:74HC85
74xx:74HC86
74xx:74HCT00
74xx:74HCT02
@@ -367,6 +404,8 @@
74xx:74HCT137
74xx:74HCT138
74xx:74HCT164
+74xx:74HCT173
+74xx:74HCT193
74xx:74HCT237
74xx:74HCT238
74xx:74HCT240
@@ -380,6 +419,8 @@
74xx:74HCT595
74xx:74HCT596
74xx:74HCT688
+74xx:74HCT74
+74xx:74HCT85
74xx:74LCX07
74xx:74LS00
74xx:74LS01
@@ -472,6 +513,7 @@
74xx:74LS26
74xx:74LS27
74xx:74LS273
+74xx:74LS279
74xx:74LS28
74xx:74LS280
74xx:74LS283
@@ -514,9 +556,9 @@
74xx:74LS48
74xx:74LS49
74xx:74LS51
-74xx:74LS54
74xx:74LS540
74xx:74LS541
+74xx:74LS54N
74xx:74LS55
74xx:74LS573
74xx:74LS574
@@ -549,6 +591,8 @@
74xx:CD74HC4067SM
74xx:MC74LCX16245DT
74xx:MM74C923
+74xx:SN74ALVC164245DGG
+74xx:SN74ALVC164245DL
74xx:SN74AVC16827DGGR
74xx:SN74CB3Q3384ADBQ
74xx:SN74CB3Q3384APW
@@ -782,8 +826,10 @@ Amplifier_Audio:MA12070
Amplifier_Audio:MA12070P
Amplifier_Audio:MAX9701xTG
Amplifier_Audio:MAX9715xTE+
+Amplifier_Audio:MAX9744
Amplifier_Audio:MAX9814
Amplifier_Audio:MAX98306xDT
+Amplifier_Audio:MAX98396EWB+
Amplifier_Audio:MAX9850xTI
Amplifier_Audio:OPA1622
Amplifier_Audio:PAM8301
@@ -791,6 +837,7 @@ Amplifier_Audio:PAM8302AAD
Amplifier_Audio:PAM8302AAS
Amplifier_Audio:PAM8302AAY
Amplifier_Audio:PAM8403D
+Amplifier_Audio:PAM8406D
Amplifier_Audio:SSM2017P
Amplifier_Audio:SSM2018
Amplifier_Audio:SSM2120
@@ -839,8 +886,14 @@ Amplifier_Audio:THAT2181
Amplifier_Audio:TPA3251
Amplifier_Audio:TPA6110A2DGN
Amplifier_Audio:TPA6132A2RTE
+Amplifier_Audio:TPA6203A1DGN
+Amplifier_Audio:TPA6203A1DRB
Amplifier_Buffer:BUF602xD
Amplifier_Buffer:BUF602xDBV
+Amplifier_Buffer:BUF634AxD
+Amplifier_Buffer:BUF634AxDDA
+Amplifier_Buffer:BUF634AxDRB
+Amplifier_Buffer:BUF634U
Amplifier_Buffer:EL2001CN
Amplifier_Buffer:LH0002H
Amplifier_Buffer:LM6321H
@@ -873,7 +926,12 @@ Amplifier_Current:INA180A1
Amplifier_Current:INA180A2
Amplifier_Current:INA180A3
Amplifier_Current:INA180A4
+Amplifier_Current:INA180B1
+Amplifier_Current:INA180B2
+Amplifier_Current:INA180B3
+Amplifier_Current:INA180B4
Amplifier_Current:INA181
+Amplifier_Current:INA185
Amplifier_Current:INA193
Amplifier_Current:INA194
Amplifier_Current:INA195
@@ -881,6 +939,12 @@ Amplifier_Current:INA196
Amplifier_Current:INA197
Amplifier_Current:INA198
Amplifier_Current:INA199xxDCK
+Amplifier_Current:INA200D
+Amplifier_Current:INA200DGK
+Amplifier_Current:INA201D
+Amplifier_Current:INA201DGK
+Amplifier_Current:INA202D
+Amplifier_Current:INA202DGK
Amplifier_Current:INA225
Amplifier_Current:INA240A1D
Amplifier_Current:INA240A1PW
@@ -890,12 +954,61 @@ Amplifier_Current:INA240A3D
Amplifier_Current:INA240A3PW
Amplifier_Current:INA240A4D
Amplifier_Current:INA240A4PW
+Amplifier_Current:INA241A1xD
+Amplifier_Current:INA241A1xDDF
+Amplifier_Current:INA241A1xDGK
+Amplifier_Current:INA241A2xD
+Amplifier_Current:INA241A2xDDF
+Amplifier_Current:INA241A2xDGK
+Amplifier_Current:INA241A3xD
+Amplifier_Current:INA241A3xDDF
+Amplifier_Current:INA241A3xDGK
+Amplifier_Current:INA241A4xD
+Amplifier_Current:INA241A4xDDF
+Amplifier_Current:INA241A4xDGK
+Amplifier_Current:INA241A5xD
+Amplifier_Current:INA241A5xDDF
+Amplifier_Current:INA241A5xDGK
+Amplifier_Current:INA241B1xD
+Amplifier_Current:INA241B1xDDF
+Amplifier_Current:INA241B1xDGK
+Amplifier_Current:INA241B2xD
+Amplifier_Current:INA241B2xDDF
+Amplifier_Current:INA241B2xDGK
+Amplifier_Current:INA241B3xD
+Amplifier_Current:INA241B3xDDF
+Amplifier_Current:INA241B3xDGK
+Amplifier_Current:INA241B4xD
+Amplifier_Current:INA241B4xDDF
+Amplifier_Current:INA241B4xDGK
+Amplifier_Current:INA241B5xD
+Amplifier_Current:INA241B5xDDF
+Amplifier_Current:INA241B5xDGK
Amplifier_Current:INA253
+Amplifier_Current:INA281A1
+Amplifier_Current:INA281A2
+Amplifier_Current:INA281A3
+Amplifier_Current:INA281A4
+Amplifier_Current:INA281A5
Amplifier_Current:INA282
Amplifier_Current:INA283
Amplifier_Current:INA284
Amplifier_Current:INA285
Amplifier_Current:INA286
+Amplifier_Current:INA293A1
+Amplifier_Current:INA293A2
+Amplifier_Current:INA293A3
+Amplifier_Current:INA293A4
+Amplifier_Current:INA293A5
+Amplifier_Current:INA293B1
+Amplifier_Current:INA293B2
+Amplifier_Current:INA293B3
+Amplifier_Current:INA293B4
+Amplifier_Current:INA293B5
+Amplifier_Current:INA4180A1
+Amplifier_Current:INA4180A2
+Amplifier_Current:INA4180A3
+Amplifier_Current:INA4180A4
Amplifier_Current:LMP8640
Amplifier_Current:LT6106
Amplifier_Current:LTC6102HVxDD
@@ -931,15 +1044,21 @@ Amplifier_Difference:AD8207
Amplifier_Difference:AD8276
Amplifier_Difference:AD8475ACPZ
Amplifier_Difference:AD8475xRMZ
+Amplifier_Difference:ADA4938-1
Amplifier_Difference:ADA4940-1xCP
Amplifier_Difference:ADA4940-2
Amplifier_Difference:AMC1100DWV
+Amplifier_Difference:AMC1200BDWV
+Amplifier_Difference:AMC1300BDWV
Amplifier_Difference:AMC1300DWV
Amplifier_Difference:INA105KP
Amplifier_Difference:INA105KU
Amplifier_Difference:LM733CH
Amplifier_Difference:LM733CN
Amplifier_Difference:LM733H
+Amplifier_Difference:LTC1992-x-xMS8
+Amplifier_Difference:THS4521ID
+Amplifier_Difference:THS4521IDGK
Amplifier_Difference:THS4551xRGT
Amplifier_Instrumentation:AD620
Amplifier_Instrumentation:AD623
@@ -954,6 +1073,7 @@ Amplifier_Instrumentation:AD623BNZ
Amplifier_Instrumentation:AD623BR
Amplifier_Instrumentation:AD623BRZ
Amplifier_Instrumentation:AD8230
+Amplifier_Instrumentation:AD8231
Amplifier_Instrumentation:AD8236
Amplifier_Instrumentation:AD8236ARMZ
Amplifier_Instrumentation:AD8421
@@ -975,14 +1095,20 @@ Amplifier_Instrumentation:INA326
Amplifier_Instrumentation:INA327
Amplifier_Instrumentation:INA333xxDGK
Amplifier_Instrumentation:INA333xxDRG
+Amplifier_Instrumentation:INA849D
+Amplifier_Instrumentation:INA849DGK
Amplifier_Instrumentation:LTC1100xN8
Amplifier_Instrumentation:LTC1100xSW
Amplifier_Operational:AD797
Amplifier_Operational:AD8001AN
Amplifier_Operational:AD8001AR
Amplifier_Operational:AD8015
+Amplifier_Operational:AD8021AR
+Amplifier_Operational:AD8021ARM
Amplifier_Operational:AD817
Amplifier_Operational:AD8603
+Amplifier_Operational:AD8606ARM
+Amplifier_Operational:AD8606ARZ
Amplifier_Operational:AD8610xR
Amplifier_Operational:AD8610xRM
Amplifier_Operational:AD8620
@@ -994,6 +1120,13 @@ Amplifier_Operational:ADA4075-2
Amplifier_Operational:ADA4077-1xR
Amplifier_Operational:ADA4077-1xRM
Amplifier_Operational:ADA4084-4xCP
+Amplifier_Operational:ADA4099-1xUJ
+Amplifier_Operational:ADA4099-2xCP
+Amplifier_Operational:ADA4099-2xR
+Amplifier_Operational:ADA4099-2xRM
+Amplifier_Operational:ADA4522-1
+Amplifier_Operational:ADA4522-2
+Amplifier_Operational:ADA4522-4
Amplifier_Operational:ADA4530-1
Amplifier_Operational:ADA4610-1xR
Amplifier_Operational:ADA4610-1xRJ
@@ -1004,10 +1137,15 @@ Amplifier_Operational:ADA4610-4xCP
Amplifier_Operational:ADA4610-4xR
Amplifier_Operational:ADA4622-2xCP
Amplifier_Operational:ADA4622-4xCP
+Amplifier_Operational:ADA4625-1ARDZ
+Amplifier_Operational:ADA4625-2ARDZ
Amplifier_Operational:ADA4807-1
Amplifier_Operational:ADA4807-2ACP
Amplifier_Operational:ADA4807-2ARM
-Amplifier_Operational:ADA4807-4
+Amplifier_Operational:ADA4807-4ARUZ
+Amplifier_Operational:ADA4817-1ACP
+Amplifier_Operational:ADA4817-1ARD
+Amplifier_Operational:ADA4817-2ACP
Amplifier_Operational:ADA4841-1YRJ
Amplifier_Operational:ADA4870ARRZ
Amplifier_Operational:ADA4898-1YRDZ
@@ -1059,6 +1197,7 @@ Amplifier_Operational:LM7171xIM
Amplifier_Operational:LM7171xIN
Amplifier_Operational:LM7332
Amplifier_Operational:LM741
+Amplifier_Operational:LM8261
Amplifier_Operational:LMC6062
Amplifier_Operational:LMC6082
Amplifier_Operational:LMC6482
@@ -1070,10 +1209,12 @@ Amplifier_Operational:LMH6609MF
Amplifier_Operational:LMH6611
Amplifier_Operational:LMH6702MA
Amplifier_Operational:LMH6702MF
+Amplifier_Operational:LMH6733
Amplifier_Operational:LMV321
Amplifier_Operational:LMV324
Amplifier_Operational:LMV358
Amplifier_Operational:LMV601
+Amplifier_Operational:LOG114AxRGV
Amplifier_Operational:LPV811DBV
Amplifier_Operational:LPV812DGK
Amplifier_Operational:LT1012
@@ -1148,9 +1289,7 @@ Amplifier_Operational:MCP6L02x-xMS
Amplifier_Operational:MCP6L02x-xSN
Amplifier_Operational:MCP6L04-xST
Amplifier_Operational:MCP6L04x-xSL
-Amplifier_Operational:MCP6L91RT-EMS
Amplifier_Operational:MCP6L91RT-EOT
-Amplifier_Operational:MCP6L91RT-ESN
Amplifier_Operational:MCP6L91T-EOT
Amplifier_Operational:MCP6L92
Amplifier_Operational:MCP6L94
@@ -1187,11 +1326,17 @@ Amplifier_Operational:OP249GS
Amplifier_Operational:OP275
Amplifier_Operational:OP279
Amplifier_Operational:OP77
+Amplifier_Operational:OPA121KM
+Amplifier_Operational:OPA121KP
+Amplifier_Operational:OPA121KU
Amplifier_Operational:OPA134
Amplifier_Operational:OPA1602
Amplifier_Operational:OPA1604
Amplifier_Operational:OPA1612AxD
Amplifier_Operational:OPA1641
+Amplifier_Operational:OPA1655D
+Amplifier_Operational:OPA1655DBV
+Amplifier_Operational:OPA1656ID
Amplifier_Operational:OPA1678
Amplifier_Operational:OPA1679
Amplifier_Operational:OPA1692xD
@@ -1222,10 +1367,18 @@ Amplifier_Operational:OPA2356xxDGK
Amplifier_Operational:OPA2376xxD
Amplifier_Operational:OPA2376xxDGK
Amplifier_Operational:OPA2376xxYZD
+Amplifier_Operational:OPA2604AP
Amplifier_Operational:OPA2691
Amplifier_Operational:OPA2691-14
Amplifier_Operational:OPA2695xD
Amplifier_Operational:OPA2695xRGT
+Amplifier_Operational:OPA2890ID
+Amplifier_Operational:OPA2890IDGS
+Amplifier_Operational:OPA2994xD
+Amplifier_Operational:OPA310SxDBV
+Amplifier_Operational:OPA310SxDCK
+Amplifier_Operational:OPA310xDBV
+Amplifier_Operational:OPA310xDCK
Amplifier_Operational:OPA330xxD
Amplifier_Operational:OPA330xxDBV
Amplifier_Operational:OPA330xxDCK
@@ -1259,6 +1412,11 @@ Amplifier_Operational:OPA551U
Amplifier_Operational:OPA552P
Amplifier_Operational:OPA552U
Amplifier_Operational:OPA569DWP
+Amplifier_Operational:OPA690xD
+Amplifier_Operational:OPA690xDBV
+Amplifier_Operational:OPA810xD
+Amplifier_Operational:OPA810xDBV
+Amplifier_Operational:OPA810xDCK
Amplifier_Operational:OPA818xDRG
Amplifier_Operational:OPA842xD
Amplifier_Operational:OPA842xDBV
@@ -1295,6 +1453,20 @@ Amplifier_Operational:TLC272
Amplifier_Operational:TLC274
Amplifier_Operational:TLC277
Amplifier_Operational:TLC279
+Amplifier_Operational:TLC27M2xD
+Amplifier_Operational:TLC27M2xPS
+Amplifier_Operational:TLC27M2xPW
+Amplifier_Operational:TLC27M7xD
+Amplifier_Operational:TLC27M7xPS
+Amplifier_Operational:TLE2141ACD
+Amplifier_Operational:TLE2141ACP
+Amplifier_Operational:TLE2141AID
+Amplifier_Operational:TLE2141AIP
+Amplifier_Operational:TLE2141CD
+Amplifier_Operational:TLE2141CP
+Amplifier_Operational:TLE2141ID
+Amplifier_Operational:TLE2141IP
+Amplifier_Operational:TLE2141MD
Amplifier_Operational:TLV172IDCK
Amplifier_Operational:TLV2371D
Amplifier_Operational:TLV2371DBV
@@ -1305,10 +1477,12 @@ Amplifier_Operational:TLV9001IDCK
Amplifier_Operational:TLV9004xRUCR
Amplifier_Operational:TLV9061xDBV
Amplifier_Operational:TLV9061xDCK
+Amplifier_Operational:TLV9061xDPW
Amplifier_Operational:TLV9062
Amplifier_Operational:TLV9062xD
Amplifier_Operational:TLV9062xDSG
Amplifier_Operational:TLV9064
+Amplifier_Operational:TLV9064xRTE
Amplifier_Operational:TLV9301xDBV
Amplifier_Operational:TLV9301xDCK
Amplifier_Operational:TLV9302xD
@@ -1328,6 +1502,8 @@ Amplifier_Operational:TSV912IDT
Amplifier_Operational:TSV912IQ2T
Amplifier_Operational:TSV912IST
Amplifier_Operational:TSV914
+Amplifier_Operational:TSV991AILT
+Amplifier_Operational:TSV991AIQ1T
Amplifier_Operational:TSV994
Amplifier_Video:AD813
Amplifier_Video:MAX453
@@ -1342,16 +1518,31 @@ Analog:LF398H
Analog:LF398_DIP8
Analog:LF398_SOIC14
Analog:LF398_SOIC8
+Analog:LM231N
+Analog:LM331N
+Analog:LTC1966
+Analog:LTC1967
+Analog:LTC1968
Analog:MLX90314xDF
Analog:MLX90320xFR
Analog:MPY634KP
Analog:MPY634KU
Analog:PGA112
Analog:PGA113
+Analog_ADC:AD40xxBCPZ
+Analog_ADC:AD40xxBRMZ
+Analog_ADC:AD574A
Analog_ADC:AD6644
Analog_ADC:AD6645
Analog_ADC:AD7171
Analog_ADC:AD7298
+Analog_ADC:AD7321
+Analog_ADC:AD7322
+Analog_ADC:AD7323
+Analog_ADC:AD7324
+Analog_ADC:AD7327
+Analog_ADC:AD7328
+Analog_ADC:AD7329
Analog_ADC:AD7606
Analog_ADC:AD7606-4
Analog_ADC:AD7606-6
@@ -1360,6 +1551,7 @@ Analog_ADC:AD7682BCP
Analog_ADC:AD7689xCP
Analog_ADC:AD7699BCP
Analog_ADC:AD7722
+Analog_ADC:AD7745
Analog_ADC:AD7746
Analog_ADC:AD7794
Analog_ADC:AD7795
@@ -1375,6 +1567,7 @@ Analog_ADC:ADC101C021CIMK
Analog_ADC:ADC101C021CIMM
Analog_ADC:ADC1173
Analog_ADC:ADC121C021CIMM
+Analog_ADC:ADC1283
Analog_ADC:ADC128D818
Analog_ADC:ADS1013IDGS
Analog_ADC:ADS1014IDGS
@@ -1392,6 +1585,7 @@ Analog_ADC:ADS1232IPW
Analog_ADC:ADS1234IPW
Analog_ADC:ADS1243
Analog_ADC:ADS1251
+Analog_ADC:ADS127L01IPBS
Analog_ADC:ADS1298xPAG
Analog_ADC:ADS7029
Analog_ADC:ADS7039
@@ -1482,21 +1676,22 @@ Analog_ADC:MCP3201
Analog_ADC:MCP3202
Analog_ADC:MCP3204
Analog_ADC:MCP3208
+Analog_ADC:MCP3221
Analog_ADC:MCP3301
Analog_ADC:MCP3421A0T-ECH
-Analog_ADC:MCP3422
-Analog_ADC:MCP3423
-Analog_ADC:MCP3424
-Analog_ADC:MCP3425A0T-ECH
-Analog_ADC:MCP3425A1T-ECH
-Analog_ADC:MCP3425A2T-ECH
-Analog_ADC:MCP3425A3T-ECH
-Analog_ADC:MCP3426-xMC
-Analog_ADC:MCP3426-xMS
-Analog_ADC:MCP3426-xSN
-Analog_ADC:MCP3427-xMF
-Analog_ADC:MCP3427-xUN
-Analog_ADC:MCP3428
+Analog_ADC:MCP3422Axx-xMS
+Analog_ADC:MCP3422Axx-xSN
+Analog_ADC:MCP3423x-xUN
+Analog_ADC:MCP3424x-xSL
+Analog_ADC:MCP3424x-xST
+Analog_ADC:MCP3425Axx-xCH
+Analog_ADC:MCP3426Axx-xMC
+Analog_ADC:MCP3426Axx-xMS
+Analog_ADC:MCP3426Axx-xSN
+Analog_ADC:MCP3427x-xMF
+Analog_ADC:MCP3427x-xUN
+Analog_ADC:MCP3428x-xSL
+Analog_ADC:MCP3428x-xST
Analog_ADC:MCP3550-50-EMS
Analog_ADC:MCP3550-60-ESN
Analog_ADC:MCP3551-EMS
@@ -1516,6 +1711,7 @@ Analog_DAC:AD5689BRUZ
Analog_DAC:AD5689RxCPZ
Analog_DAC:AD5689RxRUZ
Analog_DAC:AD5691RxRM
+Analog_DAC:AD5692RxRM
Analog_DAC:AD5693RxRM
Analog_DAC:AD5697RBCPZ
Analog_DAC:AD5697RBRUZ
@@ -1562,27 +1758,46 @@ Analog_DAC:AD9106BCP
Analog_DAC:AD9142
Analog_DAC:AD9744
Analog_DAC:ADS7830
+Analog_DAC:CS434x-xZZ
Analog_DAC:DAC08
Analog_DAC:DAC0808_DIP
Analog_DAC:DAC0808_SOIC
Analog_DAC:DAC081C081CIMK
+Analog_DAC:DAC1006LCN
+Analog_DAC:DAC1006LCWM
+Analog_DAC:DAC1007LCN
+Analog_DAC:DAC1008LCN
Analog_DAC:DAC101C081CIMK
Analog_DAC:DAC121C081CIMK
Analog_DAC:DAC1220E
Analog_DAC:DAC5311xDCK
Analog_DAC:DAC5578xPW
Analog_DAC:DAC5578xRGE
+Analog_DAC:DAC60502
+Analog_DAC:DAC60504
Analog_DAC:DAC6311xDCK
Analog_DAC:DAC6578xPW
Analog_DAC:DAC6578xRGE
+Analog_DAC:DAC70502
+Analog_DAC:DAC70504
Analog_DAC:DAC7311xDCK
Analog_DAC:DAC7513_DCN
Analog_DAC:DAC7565
Analog_DAC:DAC7578xPW
Analog_DAC:DAC7578xRGE
Analog_DAC:DAC7750xRHA
+Analog_DAC:DAC80502
+Analog_DAC:DAC80504
Analog_DAC:DAC8165
+Analog_DAC:DAC8501E
+Analog_DAC:DAC8531E
+Analog_DAC:DAC8531IDRB
+Analog_DAC:DAC8550IxDGK
+Analog_DAC:DAC8551IxDGK
+Analog_DAC:DAC8552
+Analog_DAC:DAC8560IxDGK
Analog_DAC:DAC8565
+Analog_DAC:DAC8571IDGK
Analog_DAC:DAC8750xRHA
Analog_DAC:LTC1257
Analog_DAC:LTC1446
@@ -1655,6 +1870,7 @@ Analog_Switch:ADG729
Analog_Switch:ADG733BRQ
Analog_Switch:ADG733BRU
Analog_Switch:ADG734
+Analog_Switch:ADG758CPZ
Analog_Switch:ADG824BCP
Analog_Switch:ADG884xCP
Analog_Switch:ADG884xRM
@@ -1714,7 +1930,9 @@ Analog_Switch:DG9421DV
Analog_Switch:DG9422DV
Analog_Switch:FSA3157L6X
Analog_Switch:FSA3157P6X
+Analog_Switch:HEF4066BT
Analog_Switch:HI524
+Analog_Switch:MAX14662
Analog_Switch:MAX14759
Analog_Switch:MAX14761
Analog_Switch:MAX14778
@@ -1749,20 +1967,30 @@ Analog_Switch:MAX40200ANS
Analog_Switch:MAX40200AUK
Analog_Switch:NC7SB3157L6X
Analog_Switch:NC7SB3157P6X
+Analog_Switch:NX3L4051HR
+Analog_Switch:NX3L4051PW
Analog_Switch:SN74CBT3253
+Analog_Switch:TMUX1101DBV
+Analog_Switch:TMUX1101DCK
+Analog_Switch:TMUX1102DBV
+Analog_Switch:TMUX1102DCK
Analog_Switch:TMUX1108PW
-Analog_Switch:TS3A24159DGSR
-Analog_Switch:TS3A24159DRCR
-Analog_Switch:TS3A24159YZPR
+Analog_Switch:TMUX154EDGS
+Analog_Switch:TMUX154ERSW
+Analog_Switch:TS3A24159DGS
+Analog_Switch:TS3A24159DRC
+Analog_Switch:TS3A24159YZP
Analog_Switch:TS3A27518EPW
Analog_Switch:TS3A27518ERTW
Analog_Switch:TS3A5017RGY
+Analog_Switch:TS3A5017RSV
+Analog_Switch:TS3A5223RSW
Analog_Switch:TS3DS10224RUK
Analog_Switch:TS3L501ERUA
Analog_Switch:TS5A23159DGS
Analog_Switch:TS5A23159RSE
Analog_Switch:TS5A3159ADBVR
-Analog_Switch:TS5A3159ADCKR
+Analog_Switch:TS5A3159ADCK
Analog_Switch:TS5A3159AYZPR
Analog_Switch:TS5A3159DBV
Analog_Switch:TS5A3159DCK
@@ -1820,13 +2048,18 @@ Audio:ISD2575S
Audio:ISD2590E
Audio:ISD2590P
Audio:ISD2590S
+Audio:MAX98357A
+Audio:MAX98357B
Audio:MN3005
Audio:MN3007
Audio:MN3207
Audio:MSGEQ7
+Audio:PCM1754DBQ
+Audio:PCM1780
Audio:PCM1792A
Audio:PCM1794A
Audio:PCM2902
+Audio:PCM3060
Audio:PCM5100
Audio:PCM5100A
Audio:PCM5101
@@ -1835,16 +2068,22 @@ Audio:PCM5102
Audio:PCM5102A
Audio:PCM5121PW
Audio:PCM5122PW
+Audio:PGA2310PA
+Audio:PGA2310UA
+Audio:PGA2500
Audio:PGA4311
Audio:PT2258
Audio:PT2258-S
Audio:PT2399
Audio:RD5106A
Audio:RD5107A
+Audio:RE46C317
+Audio:RE46C318
Audio:SAD1024
Audio:SAD512
Audio:SGTL5000XNAA3
Audio:SGTL5000XNLA3
+Audio:SPN1001
Audio:SRC4392xPFB
Audio:SSI2144
Audio:SSI2164
@@ -1873,8 +2112,10 @@ Battery_Management:ADP5091
Battery_Management:ADP5092
Battery_Management:AP9101CK
Battery_Management:AP9101CK6
+Battery_Management:APW7261
Battery_Management:AS8506C
Battery_Management:BQ2003
+Battery_Management:BQ21040DBV
Battery_Management:BQ24004
Battery_Management:BQ24005
Battery_Management:BQ24006
@@ -1889,10 +2130,16 @@ Battery_Management:BQ24090DGQ
Battery_Management:BQ24133RGY
Battery_Management:BQ24166RGE
Battery_Management:BQ24167RGE
+Battery_Management:BQ24610
+Battery_Management:BQ24617
+Battery_Management:BQ24650
Battery_Management:BQ2501x
+Battery_Management:BQ25040
+Battery_Management:BQ25173DSG
Battery_Management:BQ25504
Battery_Management:BQ25570
Battery_Management:BQ25601
+Battery_Management:BQ25886RGE
Battery_Management:BQ25887
Battery_Management:BQ25895RTW
Battery_Management:BQ27441-G1
@@ -1914,10 +2161,12 @@ Battery_Management:BQ76940DBT
Battery_Management:BQ78350DBT
Battery_Management:BQ78350DBT-R1
Battery_Management:DS2745U
+Battery_Management:DW01A
Battery_Management:LC709203FQH-01TWG
Battery_Management:LC709203FQH-02TWG
Battery_Management:LC709203FQH-03TWG
Battery_Management:LC709203FQH-04TWG
+Battery_Management:LGS5500EP
Battery_Management:LP3947
Battery_Management:LT3652EDD
Battery_Management:LT3652EMSE
@@ -1925,6 +2174,7 @@ Battery_Management:LT3652IDD
Battery_Management:LT3652IMSE
Battery_Management:LTC2942
Battery_Management:LTC2942-1
+Battery_Management:LTC2959
Battery_Management:LTC3553
Battery_Management:LTC3555
Battery_Management:LTC3555-1
@@ -1943,6 +2193,7 @@ Battery_Management:LTC4055
Battery_Management:LTC4055-1
Battery_Management:LTC4060EDHC
Battery_Management:LTC4060EFE
+Battery_Management:LTC4067EDE
Battery_Management:LTC4156
Battery_Management:LTC6803-2
Battery_Management:LTC6803-4
@@ -1971,13 +2222,21 @@ Battery_Management:MCP73811T-420I-OT
Battery_Management:MCP73811T-435I-OT
Battery_Management:MCP73812T-420I-OT
Battery_Management:MCP73812T-435I-OT
+Battery_Management:MCP73831-2-MC
Battery_Management:MCP73831-2-OT
+Battery_Management:MCP73831-3-MC
Battery_Management:MCP73831-3-OT
+Battery_Management:MCP73831-4-MC
Battery_Management:MCP73831-4-OT
+Battery_Management:MCP73831-5-MC
Battery_Management:MCP73831-5-OT
+Battery_Management:MCP73832-2-MC
Battery_Management:MCP73832-2-OT
+Battery_Management:MCP73832-3-MC
Battery_Management:MCP73832-3-OT
+Battery_Management:MCP73832-4-MC
Battery_Management:MCP73832-4-OT
+Battery_Management:MCP73832-5-MC
Battery_Management:MCP73832-5-OT
Battery_Management:MCP73833-xxx-MF
Battery_Management:MCP73833-xxx-UN
@@ -1992,6 +2251,10 @@ Battery_Management:MCP73871-3CA
Battery_Management:MCP73871-3CC
Battery_Management:MCP73871-4CA
Battery_Management:MCP73871-4CC
+Battery_Management:SLM6800
+Battery_Management:TP4056-42-ESOP8
+Battery_Management:TP4057
+Buffer:CDCV304
Buffer:PI6C5946002ZH
Comparator:AD8561
Comparator:ADCMP350
@@ -2048,8 +2311,12 @@ Comparator:MIC845L
Comparator:MIC845N
Comparator:TL3116
Comparator:TL331
+Comparator:TLV3501AID
+Comparator:TLV3501AIDBV
Comparator:TLV7031DBV
Comparator:TLV7041DBV
+Comparator:TLV7041DCK
+Comparator:TLV7041SDCK
Connector:4P2C
Connector:4P2C_Shielded
Connector:4P4C
@@ -2176,42 +2443,86 @@ Connector:Conn_01x39_Pin
Connector:Conn_01x39_Socket
Connector:Conn_01x40_Pin
Connector:Conn_01x40_Socket
+Connector:Conn_01x41_Pin
+Connector:Conn_01x41_Socket
+Connector:Conn_01x42_Pin
+Connector:Conn_01x42_Socket
+Connector:Conn_01x43_Pin
+Connector:Conn_01x43_Socket
+Connector:Conn_01x44_Pin
+Connector:Conn_01x44_Socket
+Connector:Conn_01x45_Pin
+Connector:Conn_01x45_Socket
+Connector:Conn_01x46_Pin
+Connector:Conn_01x46_Socket
+Connector:Conn_01x47_Pin
+Connector:Conn_01x47_Socket
+Connector:Conn_01x48_Pin
+Connector:Conn_01x48_Socket
+Connector:Conn_01x49_Pin
+Connector:Conn_01x49_Socket
+Connector:Conn_01x50_Pin
+Connector:Conn_01x50_Socket
+Connector:Conn_01x51_Pin
+Connector:Conn_01x51_Socket
+Connector:Conn_01x52_Pin
+Connector:Conn_01x52_Socket
+Connector:Conn_01x53_Pin
+Connector:Conn_01x53_Socket
+Connector:Conn_01x54_Pin
+Connector:Conn_01x54_Socket
+Connector:Conn_01x55_Pin
+Connector:Conn_01x55_Socket
+Connector:Conn_01x56_Pin
+Connector:Conn_01x56_Socket
+Connector:Conn_01x57_Pin
+Connector:Conn_01x57_Socket
+Connector:Conn_01x58_Pin
+Connector:Conn_01x58_Socket
+Connector:Conn_01x59_Pin
+Connector:Conn_01x59_Socket
+Connector:Conn_01x60_Pin
+Connector:Conn_01x60_Socket
Connector:Conn_15X4
+Connector:Conn_ARM_Cortex_Debug_ETM_20
Connector:Conn_ARM_JTAG_SWD_10
Connector:Conn_ARM_JTAG_SWD_20
Connector:Conn_ARM_SWD_TagConnect_TC2030
Connector:Conn_ARM_SWD_TagConnect_TC2030-NL
Connector:Conn_Coaxial
Connector:Conn_Coaxial_Power
+Connector:Conn_Coaxial_Small
Connector:Conn_Coaxial_x2
Connector:Conn_Coaxial_x2_Isolated
Connector:Conn_PIC_ICSP_ICD
+Connector:Conn_Plug_2P
+Connector:Conn_Plug_3P_Protected
+Connector:Conn_Receptacle_2P
+Connector:Conn_Receptacle_3P_Protected
Connector:Conn_ST_STDC14
+Connector:Conn_Shielded_Pair
Connector:Conn_Triaxial
-Connector:Conn_WallPlug
-Connector:Conn_WallPlug_Earth
-Connector:Conn_WallSocket
-Connector:Conn_WallSocket_Earth
-Connector:DA15_Plug
-Connector:DA15_Plug_MountingHoles
-Connector:DA15_Receptacle
-Connector:DA15_Receptacle_MountingHoles
-Connector:DB25_Plug
-Connector:DB25_Plug_MountingHoles
-Connector:DB25_Receptacle
-Connector:DB25_Receptacle_MountingHoles
-Connector:DC37_Plug
-Connector:DC37_Plug_MountingHoles
-Connector:DC37_Receptacle
-Connector:DC37_Receptacle_MountingHoles
-Connector:DE15_Plug_HighDensity
-Connector:DE15_Plug_HighDensity_MountingHoles
-Connector:DE15_Receptacle_HighDensity
-Connector:DE15_Receptacle_HighDensity_MountingHoles
-Connector:DE9_Plug
-Connector:DE9_Plug_MountingHoles
-Connector:DE9_Receptacle
-Connector:DE9_Receptacle_MountingHoles
+Connector:Conn_Triaxial_Same_Side
+Connector:DA15_Pins
+Connector:DA15_Pins_MountingHoles
+Connector:DA15_Socket
+Connector:DA15_Socket_MountingHoles
+Connector:DB25_Pins
+Connector:DB25_Pins_MountingHoles
+Connector:DB25_Socket
+Connector:DB25_Socket_MountingHoles
+Connector:DC37_Pins
+Connector:DC37_Pins_MountingHoles
+Connector:DC37_Socket
+Connector:DC37_Socket_MountingHoles
+Connector:DE15_Pins_HighDensity
+Connector:DE15_Pins_HighDensity_MountingHoles
+Connector:DE15_Socket_HighDensity
+Connector:DE15_Socket_HighDensity_MountingHoles
+Connector:DE9_Pins
+Connector:DE9_Pins_MountingHoles
+Connector:DE9_Socket
+Connector:DE9_Socket_MountingHoles
Connector:DIN-3
Connector:DIN-4
Connector:DIN-5
@@ -2245,6 +2556,8 @@ Connector:DIN41612_02x32_AB
Connector:DIN41612_02x32_AC
Connector:DIN41612_02x32_AE
Connector:DIN41612_02x32_ZB
+Connector:DVI-D_Dual_Link
+Connector:DVI-I_Dual_Link
Connector:ExpressCard
Connector:HDMI_A
Connector:HDMI_A_1.4
@@ -2253,6 +2566,16 @@ Connector:HDMI_C_1.3
Connector:HDMI_C_1.4
Connector:HDMI_D_1.4
Connector:HDMI_E
+Connector:IEC61076-2_M8_A-coding_01x03_Plug_Shielded
+Connector:IEC61076-2_M8_A-coding_01x03_Receptacle_Shielded
+Connector:IEC61076-2_M8_A-coding_01x04_Plug_Shielded
+Connector:IEC61076-2_M8_A-coding_01x04_Receptacle_Shielded
+Connector:IEC_60320_C13_Plug
+Connector:IEC_60320_C14_Receptacle
+Connector:IEC_60320_C5_Plug
+Connector:IEC_60320_C6_Receptacle
+Connector:IEC_60320_C7_Plug
+Connector:IEC_60320_C8_Receptacle
Connector:IEEE1394a
Connector:JAE_SIM_Card_SF72S006
Connector:Jack-DC
@@ -2310,8 +2633,10 @@ Connector:RJ45_Bel_V895-1001-AW
Connector:RJ45_Halo_HFJ11-x2450E-LxxRL
Connector:RJ45_Halo_HFJ11-x2450ERL
Connector:RJ45_Halo_HFJ11-x2450HRL
+Connector:RJ45_Hanrun_HR911105A_Horizontal
Connector:RJ45_JK00177
Connector:RJ45_JK0654219
+Connector:RJ45_Kycon_G7LX-A88S7-BP-GY
Connector:RJ45_LED
Connector:RJ45_LED_Shielded
Connector:RJ45_LED_Shielded_x2
@@ -2320,6 +2645,7 @@ Connector:RJ45_RB1-125B8G1A
Connector:RJ45_Shielded
Connector:RJ45_Wuerth_74980111211
Connector:RJ45_Wuerth_7499010121A
+Connector:RJ45_Wuerth_7499010211A
Connector:RJ45_Wuerth_7499151120
Connector:RJ48
Connector:RJ48_Shielded
@@ -2329,9 +2655,10 @@ Connector:RJ61
Connector:RJ61_Shielded
Connector:RJ9
Connector:RJ9_Shielded
-Connector:Raspberry_Pi_2_3
+Connector:Raspberry_Pi_4
Connector:SCART-F
-Connector:SD_Card
+Connector:SD_Card_Device
+Connector:SD_Card_Receptacle
Connector:SIM_Card
Connector:SIM_Card_Shielded
Connector:SODIMM-200
@@ -2358,6 +2685,9 @@ Connector:Screw_Terminal_01x17
Connector:Screw_Terminal_01x18
Connector:Screw_Terminal_01x19
Connector:Screw_Terminal_01x20
+Connector:TC2030
+Connector:TC2050
+Connector:TC2070
Connector:TestPoint
Connector:TestPoint_2Pole
Connector:TestPoint_Alt
@@ -2378,8 +2708,10 @@ Connector:USB_B_Mini
Connector:USB_C_Plug
Connector:USB_C_Plug_USB2.0
Connector:USB_C_Receptacle
+Connector:USB_C_Receptacle_PowerOnly_24P
Connector:USB_C_Receptacle_PowerOnly_6P
-Connector:USB_C_Receptacle_USB2.0
+Connector:USB_C_Receptacle_USB2.0_14P
+Connector:USB_C_Receptacle_USB2.0_16P
Connector:USB_OTG
Connector_Audio:AudioJack2
Connector_Audio:AudioJack2_Dual_Ground_Switch
@@ -2654,6 +2986,26 @@ Connector_Generic:Conn_01x37
Connector_Generic:Conn_01x38
Connector_Generic:Conn_01x39
Connector_Generic:Conn_01x40
+Connector_Generic:Conn_01x41
+Connector_Generic:Conn_01x42
+Connector_Generic:Conn_01x43
+Connector_Generic:Conn_01x44
+Connector_Generic:Conn_01x45
+Connector_Generic:Conn_01x46
+Connector_Generic:Conn_01x47
+Connector_Generic:Conn_01x48
+Connector_Generic:Conn_01x49
+Connector_Generic:Conn_01x50
+Connector_Generic:Conn_01x51
+Connector_Generic:Conn_01x52
+Connector_Generic:Conn_01x53
+Connector_Generic:Conn_01x54
+Connector_Generic:Conn_01x55
+Connector_Generic:Conn_01x56
+Connector_Generic:Conn_01x57
+Connector_Generic:Conn_01x58
+Connector_Generic:Conn_01x59
+Connector_Generic:Conn_01x60
Connector_Generic:Conn_02x01
Connector_Generic:Conn_02x01_Row_Letter_First
Connector_Generic:Conn_02x01_Row_Letter_Last
@@ -2852,6 +3204,46 @@ Connector_Generic:Conn_02x40_Odd_Even
Connector_Generic:Conn_02x40_Row_Letter_First
Connector_Generic:Conn_02x40_Row_Letter_Last
Connector_Generic:Conn_02x40_Top_Bottom
+Connector_Generic:Conn_02x41_Row_Letter_First
+Connector_Generic:Conn_02x41_Row_Letter_Last
+Connector_Generic:Conn_02x42_Row_Letter_First
+Connector_Generic:Conn_02x42_Row_Letter_Last
+Connector_Generic:Conn_02x43_Row_Letter_First
+Connector_Generic:Conn_02x43_Row_Letter_Last
+Connector_Generic:Conn_02x44_Row_Letter_First
+Connector_Generic:Conn_02x44_Row_Letter_Last
+Connector_Generic:Conn_02x45_Row_Letter_First
+Connector_Generic:Conn_02x45_Row_Letter_Last
+Connector_Generic:Conn_02x46_Row_Letter_First
+Connector_Generic:Conn_02x46_Row_Letter_Last
+Connector_Generic:Conn_02x47_Row_Letter_First
+Connector_Generic:Conn_02x47_Row_Letter_Last
+Connector_Generic:Conn_02x48_Row_Letter_First
+Connector_Generic:Conn_02x48_Row_Letter_Last
+Connector_Generic:Conn_02x49_Row_Letter_First
+Connector_Generic:Conn_02x49_Row_Letter_Last
+Connector_Generic:Conn_02x50_Row_Letter_First
+Connector_Generic:Conn_02x50_Row_Letter_Last
+Connector_Generic:Conn_02x51_Row_Letter_First
+Connector_Generic:Conn_02x51_Row_Letter_Last
+Connector_Generic:Conn_02x52_Row_Letter_First
+Connector_Generic:Conn_02x52_Row_Letter_Last
+Connector_Generic:Conn_02x53_Row_Letter_First
+Connector_Generic:Conn_02x53_Row_Letter_Last
+Connector_Generic:Conn_02x54_Row_Letter_First
+Connector_Generic:Conn_02x54_Row_Letter_Last
+Connector_Generic:Conn_02x55_Row_Letter_First
+Connector_Generic:Conn_02x55_Row_Letter_Last
+Connector_Generic:Conn_02x56_Row_Letter_First
+Connector_Generic:Conn_02x56_Row_Letter_Last
+Connector_Generic:Conn_02x57_Row_Letter_First
+Connector_Generic:Conn_02x57_Row_Letter_Last
+Connector_Generic:Conn_02x58_Row_Letter_First
+Connector_Generic:Conn_02x58_Row_Letter_Last
+Connector_Generic:Conn_02x59_Row_Letter_First
+Connector_Generic:Conn_02x59_Row_Letter_Last
+Connector_Generic:Conn_02x60_Row_Letter_First
+Connector_Generic:Conn_02x60_Row_Letter_Last
Connector_Generic:Conn_2Rows-05Pins
Connector_Generic:Conn_2Rows-07Pins
Connector_Generic:Conn_2Rows-09Pins
@@ -2928,6 +3320,26 @@ Connector_Generic_MountingPin:Conn_01x37_MountingPin
Connector_Generic_MountingPin:Conn_01x38_MountingPin
Connector_Generic_MountingPin:Conn_01x39_MountingPin
Connector_Generic_MountingPin:Conn_01x40_MountingPin
+Connector_Generic_MountingPin:Conn_01x41_MountingPin
+Connector_Generic_MountingPin:Conn_01x42_MountingPin
+Connector_Generic_MountingPin:Conn_01x43_MountingPin
+Connector_Generic_MountingPin:Conn_01x44_MountingPin
+Connector_Generic_MountingPin:Conn_01x45_MountingPin
+Connector_Generic_MountingPin:Conn_01x46_MountingPin
+Connector_Generic_MountingPin:Conn_01x47_MountingPin
+Connector_Generic_MountingPin:Conn_01x48_MountingPin
+Connector_Generic_MountingPin:Conn_01x49_MountingPin
+Connector_Generic_MountingPin:Conn_01x50_MountingPin
+Connector_Generic_MountingPin:Conn_01x51_MountingPin
+Connector_Generic_MountingPin:Conn_01x52_MountingPin
+Connector_Generic_MountingPin:Conn_01x53_MountingPin
+Connector_Generic_MountingPin:Conn_01x54_MountingPin
+Connector_Generic_MountingPin:Conn_01x55_MountingPin
+Connector_Generic_MountingPin:Conn_01x56_MountingPin
+Connector_Generic_MountingPin:Conn_01x57_MountingPin
+Connector_Generic_MountingPin:Conn_01x58_MountingPin
+Connector_Generic_MountingPin:Conn_01x59_MountingPin
+Connector_Generic_MountingPin:Conn_01x60_MountingPin
Connector_Generic_MountingPin:Conn_02x01_MountingPin
Connector_Generic_MountingPin:Conn_02x01_Row_Letter_First_MountingPin
Connector_Generic_MountingPin:Conn_02x01_Row_Letter_Last_MountingPin
@@ -3126,6 +3538,46 @@ Connector_Generic_MountingPin:Conn_02x40_Odd_Even_MountingPin
Connector_Generic_MountingPin:Conn_02x40_Row_Letter_First_MountingPin
Connector_Generic_MountingPin:Conn_02x40_Row_Letter_Last_MountingPin
Connector_Generic_MountingPin:Conn_02x40_Top_Bottom_MountingPin
+Connector_Generic_MountingPin:Conn_02x41_Row_Letter_First_MountingPin
+Connector_Generic_MountingPin:Conn_02x41_Row_Letter_Last_MountingPin
+Connector_Generic_MountingPin:Conn_02x42_Row_Letter_First_MountingPin
+Connector_Generic_MountingPin:Conn_02x42_Row_Letter_Last_MountingPin
+Connector_Generic_MountingPin:Conn_02x43_Row_Letter_First_MountingPin
+Connector_Generic_MountingPin:Conn_02x43_Row_Letter_Last_MountingPin
+Connector_Generic_MountingPin:Conn_02x44_Row_Letter_First_MountingPin
+Connector_Generic_MountingPin:Conn_02x44_Row_Letter_Last_MountingPin
+Connector_Generic_MountingPin:Conn_02x45_Row_Letter_First_MountingPin
+Connector_Generic_MountingPin:Conn_02x45_Row_Letter_Last_MountingPin
+Connector_Generic_MountingPin:Conn_02x46_Row_Letter_First_MountingPin
+Connector_Generic_MountingPin:Conn_02x46_Row_Letter_Last_MountingPin
+Connector_Generic_MountingPin:Conn_02x47_Row_Letter_First_MountingPin
+Connector_Generic_MountingPin:Conn_02x47_Row_Letter_Last_MountingPin
+Connector_Generic_MountingPin:Conn_02x48_Row_Letter_First_MountingPin
+Connector_Generic_MountingPin:Conn_02x48_Row_Letter_Last_MountingPin
+Connector_Generic_MountingPin:Conn_02x49_Row_Letter_First_MountingPin
+Connector_Generic_MountingPin:Conn_02x49_Row_Letter_Last_MountingPin
+Connector_Generic_MountingPin:Conn_02x50_Row_Letter_First_MountingPin
+Connector_Generic_MountingPin:Conn_02x50_Row_Letter_Last_MountingPin
+Connector_Generic_MountingPin:Conn_02x51_Row_Letter_First_MountingPin
+Connector_Generic_MountingPin:Conn_02x51_Row_Letter_Last_MountingPin
+Connector_Generic_MountingPin:Conn_02x52_Row_Letter_First_MountingPin
+Connector_Generic_MountingPin:Conn_02x52_Row_Letter_Last_MountingPin
+Connector_Generic_MountingPin:Conn_02x53_Row_Letter_First_MountingPin
+Connector_Generic_MountingPin:Conn_02x53_Row_Letter_Last_MountingPin
+Connector_Generic_MountingPin:Conn_02x54_Row_Letter_First_MountingPin
+Connector_Generic_MountingPin:Conn_02x54_Row_Letter_Last_MountingPin
+Connector_Generic_MountingPin:Conn_02x55_Row_Letter_First_MountingPin
+Connector_Generic_MountingPin:Conn_02x55_Row_Letter_Last_MountingPin
+Connector_Generic_MountingPin:Conn_02x56_Row_Letter_First_MountingPin
+Connector_Generic_MountingPin:Conn_02x56_Row_Letter_Last_MountingPin
+Connector_Generic_MountingPin:Conn_02x57_Row_Letter_First_MountingPin
+Connector_Generic_MountingPin:Conn_02x57_Row_Letter_Last_MountingPin
+Connector_Generic_MountingPin:Conn_02x58_Row_Letter_First_MountingPin
+Connector_Generic_MountingPin:Conn_02x58_Row_Letter_Last_MountingPin
+Connector_Generic_MountingPin:Conn_02x59_Row_Letter_First_MountingPin
+Connector_Generic_MountingPin:Conn_02x59_Row_Letter_Last_MountingPin
+Connector_Generic_MountingPin:Conn_02x60_Row_Letter_First_MountingPin
+Connector_Generic_MountingPin:Conn_02x60_Row_Letter_Last_MountingPin
Connector_Generic_MountingPin:Conn_2Rows-05Pins_MountingPin
Connector_Generic_MountingPin:Conn_2Rows-07Pins_MountingPin
Connector_Generic_MountingPin:Conn_2Rows-09Pins_MountingPin
@@ -3202,6 +3654,26 @@ Connector_Generic_Shielded:Conn_01x37_Shielded
Connector_Generic_Shielded:Conn_01x38_Shielded
Connector_Generic_Shielded:Conn_01x39_Shielded
Connector_Generic_Shielded:Conn_01x40_Shielded
+Connector_Generic_Shielded:Conn_01x41_Shielded
+Connector_Generic_Shielded:Conn_01x42_Shielded
+Connector_Generic_Shielded:Conn_01x43_Shielded
+Connector_Generic_Shielded:Conn_01x44_Shielded
+Connector_Generic_Shielded:Conn_01x45_Shielded
+Connector_Generic_Shielded:Conn_01x46_Shielded
+Connector_Generic_Shielded:Conn_01x47_Shielded
+Connector_Generic_Shielded:Conn_01x48_Shielded
+Connector_Generic_Shielded:Conn_01x49_Shielded
+Connector_Generic_Shielded:Conn_01x50_Shielded
+Connector_Generic_Shielded:Conn_01x51_Shielded
+Connector_Generic_Shielded:Conn_01x52_Shielded
+Connector_Generic_Shielded:Conn_01x53_Shielded
+Connector_Generic_Shielded:Conn_01x54_Shielded
+Connector_Generic_Shielded:Conn_01x55_Shielded
+Connector_Generic_Shielded:Conn_01x56_Shielded
+Connector_Generic_Shielded:Conn_01x57_Shielded
+Connector_Generic_Shielded:Conn_01x58_Shielded
+Connector_Generic_Shielded:Conn_01x59_Shielded
+Connector_Generic_Shielded:Conn_01x60_Shielded
Connector_Generic_Shielded:Conn_02x01_Row_Letter_First_Shielded
Connector_Generic_Shielded:Conn_02x01_Row_Letter_Last_Shielded
Connector_Generic_Shielded:Conn_02x01_Shielded
@@ -3400,6 +3872,47 @@ Connector_Generic_Shielded:Conn_02x40_Odd_Even_Shielded
Connector_Generic_Shielded:Conn_02x40_Row_Letter_First_Shielded
Connector_Generic_Shielded:Conn_02x40_Row_Letter_Last_Shielded
Connector_Generic_Shielded:Conn_02x40_Top_Bottom_Shielded
+Connector_Generic_Shielded:Conn_02x40_Top_Bottom_Shielded_1
+Connector_Generic_Shielded:Conn_02x41_Row_Letter_First_Shielded
+Connector_Generic_Shielded:Conn_02x41_Row_Letter_Last_Shielded
+Connector_Generic_Shielded:Conn_02x42_Row_Letter_First_Shielded
+Connector_Generic_Shielded:Conn_02x42_Row_Letter_Last_Shielded
+Connector_Generic_Shielded:Conn_02x43_Row_Letter_First_Shielded
+Connector_Generic_Shielded:Conn_02x43_Row_Letter_Last_Shielded
+Connector_Generic_Shielded:Conn_02x44_Row_Letter_First_Shielded
+Connector_Generic_Shielded:Conn_02x44_Row_Letter_Last_Shielded
+Connector_Generic_Shielded:Conn_02x45_Row_Letter_First_Shielded
+Connector_Generic_Shielded:Conn_02x45_Row_Letter_Last_Shielded
+Connector_Generic_Shielded:Conn_02x46_Row_Letter_First_Shielded
+Connector_Generic_Shielded:Conn_02x46_Row_Letter_Last_Shielded
+Connector_Generic_Shielded:Conn_02x47_Row_Letter_First_Shielded
+Connector_Generic_Shielded:Conn_02x47_Row_Letter_Last_Shielded
+Connector_Generic_Shielded:Conn_02x48_Row_Letter_First_Shielded
+Connector_Generic_Shielded:Conn_02x48_Row_Letter_Last_Shielded
+Connector_Generic_Shielded:Conn_02x49_Row_Letter_First_Shielded
+Connector_Generic_Shielded:Conn_02x49_Row_Letter_Last_Shielded
+Connector_Generic_Shielded:Conn_02x50_Row_Letter_First_Shielded
+Connector_Generic_Shielded:Conn_02x50_Row_Letter_Last_Shielded
+Connector_Generic_Shielded:Conn_02x51_Row_Letter_First_Shielded
+Connector_Generic_Shielded:Conn_02x51_Row_Letter_Last_Shielded
+Connector_Generic_Shielded:Conn_02x52_Row_Letter_First_Shielded
+Connector_Generic_Shielded:Conn_02x52_Row_Letter_Last_Shielded
+Connector_Generic_Shielded:Conn_02x53_Row_Letter_First_Shielded
+Connector_Generic_Shielded:Conn_02x53_Row_Letter_Last_Shielded
+Connector_Generic_Shielded:Conn_02x54_Row_Letter_First_Shielded
+Connector_Generic_Shielded:Conn_02x54_Row_Letter_Last_Shielded
+Connector_Generic_Shielded:Conn_02x55_Row_Letter_First_Shielded
+Connector_Generic_Shielded:Conn_02x55_Row_Letter_Last_Shielded
+Connector_Generic_Shielded:Conn_02x56_Row_Letter_First_Shielded
+Connector_Generic_Shielded:Conn_02x56_Row_Letter_Last_Shielded
+Connector_Generic_Shielded:Conn_02x57_Row_Letter_First_Shielded
+Connector_Generic_Shielded:Conn_02x57_Row_Letter_Last_Shielded
+Connector_Generic_Shielded:Conn_02x58_Row_Letter_First_Shielded
+Connector_Generic_Shielded:Conn_02x58_Row_Letter_Last_Shielded
+Connector_Generic_Shielded:Conn_02x59_Row_Letter_First_Shielded
+Connector_Generic_Shielded:Conn_02x59_Row_Letter_Last_Shielded
+Connector_Generic_Shielded:Conn_02x60_Row_Letter_First_Shielded
+Connector_Generic_Shielded:Conn_02x60_Row_Letter_Last_Shielded
Connector_Generic_Shielded:Conn_2Rows-05Pins_Shielded
Connector_Generic_Shielded:Conn_2Rows-07Pins_Shielded
Connector_Generic_Shielded:Conn_2Rows-09Pins_Shielded
@@ -3443,6 +3956,33 @@ Converter_ACDC:HLK-10M09
Converter_ACDC:HLK-10M12
Converter_ACDC:HLK-10M15
Converter_ACDC:HLK-10M24
+Converter_ACDC:HLK-12M03A
+Converter_ACDC:HLK-12M05A
+Converter_ACDC:HLK-12M09A
+Converter_ACDC:HLK-12M12A
+Converter_ACDC:HLK-12M15A
+Converter_ACDC:HLK-12M24A
+Converter_ACDC:HLK-20M05
+Converter_ACDC:HLK-20M09
+Converter_ACDC:HLK-20M12
+Converter_ACDC:HLK-20M15
+Converter_ACDC:HLK-20M24
+Converter_ACDC:HLK-2M03
+Converter_ACDC:HLK-2M05
+Converter_ACDC:HLK-2M09
+Converter_ACDC:HLK-2M12
+Converter_ACDC:HLK-2M15
+Converter_ACDC:HLK-2M24
+Converter_ACDC:HLK-30M05
+Converter_ACDC:HLK-30M05C
+Converter_ACDC:HLK-30M09
+Converter_ACDC:HLK-30M09C
+Converter_ACDC:HLK-30M12
+Converter_ACDC:HLK-30M12C
+Converter_ACDC:HLK-30M15
+Converter_ACDC:HLK-30M15C
+Converter_ACDC:HLK-30M24
+Converter_ACDC:HLK-30M24C
Converter_ACDC:HLK-5M03
Converter_ACDC:HLK-5M05
Converter_ACDC:HLK-5M09
@@ -3451,7 +3991,9 @@ Converter_ACDC:HLK-5M15
Converter_ACDC:HLK-5M24
Converter_ACDC:HLK-PM01
Converter_ACDC:HLK-PM03
+Converter_ACDC:HLK-PM09
Converter_ACDC:HLK-PM12
+Converter_ACDC:HLK-PM15
Converter_ACDC:HLK-PM24
Converter_ACDC:HS-40003
Converter_ACDC:HS-40005
@@ -3504,6 +4046,16 @@ Converter_ACDC:IRM-60-15
Converter_ACDC:IRM-60-24
Converter_ACDC:IRM-60-48
Converter_ACDC:IRM-60-5
+Converter_ACDC:MFM-10-12
+Converter_ACDC:MFM-10-15
+Converter_ACDC:MFM-10-24
+Converter_ACDC:MFM-10-3.3
+Converter_ACDC:MFM-10-5
+Converter_ACDC:MFM-15-12
+Converter_ACDC:MFM-15-15
+Converter_ACDC:MFM-15-24
+Converter_ACDC:MFM-15-3.3
+Converter_ACDC:MFM-15-5
Converter_ACDC:PBO-3-S12
Converter_ACDC:PBO-3-S15
Converter_ACDC:PBO-3-S24
@@ -3541,6 +4093,22 @@ Converter_ACDC:RAC20-15DK
Converter_ACDC:RAC20-15SK
Converter_ACDC:RAC20-24SK
Converter_ACDC:RAC20-48SK
+Converter_ACDC:TMF05105
+Converter_ACDC:TMF05112
+Converter_ACDC:TMF05115
+Converter_ACDC:TMF05124
+Converter_ACDC:TMF10105
+Converter_ACDC:TMF10112
+Converter_ACDC:TMF10115
+Converter_ACDC:TMF10124
+Converter_ACDC:TMF20105
+Converter_ACDC:TMF20112
+Converter_ACDC:TMF20115
+Converter_ACDC:TMF20124
+Converter_ACDC:TMF30105
+Converter_ACDC:TMF30112
+Converter_ACDC:TMF30115
+Converter_ACDC:TMF30124
Converter_ACDC:TMLM04103
Converter_ACDC:TMLM04105
Converter_ACDC:TMLM04109
@@ -3610,6 +4178,7 @@ Converter_DCDC:ATA00F18S-L
Converter_DCDC:ATA00F36S-L
Converter_DCDC:ATA00H18S-L
Converter_DCDC:ATA00H36S-L
+Converter_DCDC:Ag9905LP
Converter_DCDC:BD8314NUV
Converter_DCDC:IA0305D
Converter_DCDC:IA0305S
@@ -4045,12 +4614,16 @@ Converter_DCDC:MGJ2D242005SC
Converter_DCDC:MGJ3T05150505MC
Converter_DCDC:MGJ3T12150505MC
Converter_DCDC:MGJ3T24150505MC
+Converter_DCDC:MYRGPxx0060x21RC
+Converter_DCDC:MYRGPxx0060x21RF
Converter_DCDC:NCS1S1203SC
Converter_DCDC:NCS1S1205SC
Converter_DCDC:NCS1S1212SC
Converter_DCDC:NCS1S2403SC
Converter_DCDC:NCS1S2405SC
Converter_DCDC:NCS1S2412SC
+Converter_DCDC:NSD10-xxDyy
+Converter_DCDC:NSD10-xxSyy
Converter_DCDC:OKI-78SR-12_1.0-W36-C
Converter_DCDC:OKI-78SR-12_1.0-W36H-C
Converter_DCDC:OKI-78SR-3.3_1.5-W36-C
@@ -4119,6 +4692,15 @@ Converter_DCDC:TBA2-2423
Converter_DCDC:TC7662AxPA
Converter_DCDC:TC7662Bx0A
Converter_DCDC:TC7662BxPA
+Converter_DCDC:TDU1-0511
+Converter_DCDC:TDU1-0512
+Converter_DCDC:TDU1-0513
+Converter_DCDC:TDU1-1211
+Converter_DCDC:TDU1-1212
+Converter_DCDC:TDU1-1213
+Converter_DCDC:TDU1-2411
+Converter_DCDC:TDU1-2412
+Converter_DCDC:TDU1-2413
Converter_DCDC:TEA1-0505
Converter_DCDC:TEA1-0505E
Converter_DCDC:TEA1-0505HI
@@ -4140,6 +4722,58 @@ Converter_DCDC:TEC2-4812WI
Converter_DCDC:TEC2-4813WI
Converter_DCDC:TEC2-4815WI
Converter_DCDC:TEC2-4819WI
+Converter_DCDC:TEC3-2410UI
+Converter_DCDC:TEC3-2411UI
+Converter_DCDC:TEC3-2412UI
+Converter_DCDC:TEC3-2413UI
+Converter_DCDC:TEC3-2421UI
+Converter_DCDC:TEC3-2422UI
+Converter_DCDC:TEC3-2423UI
+Converter_DCDC:TEL12-1211
+Converter_DCDC:TEL12-1212
+Converter_DCDC:TEL12-1213
+Converter_DCDC:TEL12-1215
+Converter_DCDC:TEL12-1222
+Converter_DCDC:TEL12-1223
+Converter_DCDC:TEL12-2411
+Converter_DCDC:TEL12-2411WI
+Converter_DCDC:TEL12-2412
+Converter_DCDC:TEL12-2412WI
+Converter_DCDC:TEL12-2413
+Converter_DCDC:TEL12-2413WI
+Converter_DCDC:TEL12-2415
+Converter_DCDC:TEL12-2415WI
+Converter_DCDC:TEL12-2422
+Converter_DCDC:TEL12-2422WI
+Converter_DCDC:TEL12-2423
+Converter_DCDC:TEL12-2423WI
+Converter_DCDC:TEL12-4811
+Converter_DCDC:TEL12-4811WI
+Converter_DCDC:TEL12-4812
+Converter_DCDC:TEL12-4812WI
+Converter_DCDC:TEL12-4813
+Converter_DCDC:TEL12-4813WI
+Converter_DCDC:TEL12-4815
+Converter_DCDC:TEL12-4815WI
+Converter_DCDC:TEL12-4822
+Converter_DCDC:TEL12-4822WI
+Converter_DCDC:TEL12-4823
+Converter_DCDC:TEL12-4823WI
+Converter_DCDC:TEN10-11010WIRH
+Converter_DCDC:TEN10-11011WIRH
+Converter_DCDC:TEN10-11012WIRH
+Converter_DCDC:TEN10-11013WIRH
+Converter_DCDC:TEN10-11015WIRH
+Converter_DCDC:TEN10-11021WIRH
+Converter_DCDC:TEN10-11022WIRH
+Converter_DCDC:TEN10-11023WIRH
+Converter_DCDC:TEN20-11011WIRH
+Converter_DCDC:TEN20-11012WIRH
+Converter_DCDC:TEN20-11013WIRH
+Converter_DCDC:TEN20-11015WIRH
+Converter_DCDC:TEN20-11021WIRH
+Converter_DCDC:TEN20-11022WIRH
+Converter_DCDC:TEN20-11023WIRH
Converter_DCDC:TEN20-2410WIN
Converter_DCDC:TEN20-2411WIN
Converter_DCDC:TEN20-2412WIN
@@ -4154,6 +4788,47 @@ Converter_DCDC:TEN20-4813WIN
Converter_DCDC:TEN20-4821WIN
Converter_DCDC:TEN20-4822WIN
Converter_DCDC:TEN20-4823WIN
+Converter_DCDC:TEN3-11010WIRH
+Converter_DCDC:TEN3-11011WIRH
+Converter_DCDC:TEN3-11012WIRH
+Converter_DCDC:TEN3-11013WIRH
+Converter_DCDC:TEN3-11015WIRH
+Converter_DCDC:TEN3-11021WIRH
+Converter_DCDC:TEN3-11022WIRH
+Converter_DCDC:TEN3-11023WIRH
+Converter_DCDC:TEN40-11011WIRH
+Converter_DCDC:TEN40-11012WIRH
+Converter_DCDC:TEN40-11013WIRH
+Converter_DCDC:TEN40-11015WIRH
+Converter_DCDC:TEN40-11022WIRH
+Converter_DCDC:TEN40-11023WIRH
+Converter_DCDC:TEN6-11010WIRH
+Converter_DCDC:TEN6-11011WIRH
+Converter_DCDC:TEN6-11012WIRH
+Converter_DCDC:TEN6-11013WIRH
+Converter_DCDC:TEN6-11015WIRH
+Converter_DCDC:TEN6-11021WIRH
+Converter_DCDC:TEN6-11022WIRH
+Converter_DCDC:TEN6-11023WIRH
+Converter_DCDC:THB10-1211
+Converter_DCDC:THB10-1212
+Converter_DCDC:THB10-1222
+Converter_DCDC:THB10-1223
+Converter_DCDC:THB10-2411
+Converter_DCDC:THB10-2412
+Converter_DCDC:THB10-2422
+Converter_DCDC:THB10-2423
+Converter_DCDC:THB10-4811
+Converter_DCDC:THB10-4812
+Converter_DCDC:THB10-4822
+Converter_DCDC:THB10-4823
+Converter_DCDC:THR40-7211WI
+Converter_DCDC:THR40-7212WI
+Converter_DCDC:THR40-7213WI
+Converter_DCDC:THR40-72154WI
+Converter_DCDC:THR40-7215WI
+Converter_DCDC:THR40-7222WI
+Converter_DCDC:THR40-7223WI
Converter_DCDC:TMA-0505D
Converter_DCDC:TMA-0505S
Converter_DCDC:TMA-0512D
@@ -4178,6 +4853,21 @@ Converter_DCDC:TMA-2412D
Converter_DCDC:TMA-2412S
Converter_DCDC:TMA-2415D
Converter_DCDC:TMA-2415S
+Converter_DCDC:TME-0303S
+Converter_DCDC:TME-0305S
+Converter_DCDC:TME-0503S
+Converter_DCDC:TME-0505S
+Converter_DCDC:TME-0509S
+Converter_DCDC:TME-0512S
+Converter_DCDC:TME-0515S
+Converter_DCDC:TME-1205S
+Converter_DCDC:TME-1209S
+Converter_DCDC:TME-1212S
+Converter_DCDC:TME-1215S
+Converter_DCDC:TME-2405S
+Converter_DCDC:TME-2409S
+Converter_DCDC:TME-2412S
+Converter_DCDC:TME-2415S
Converter_DCDC:TMR-0510
Converter_DCDC:TMR-0511
Converter_DCDC:TMR-0512
@@ -4198,6 +4888,18 @@ Converter_DCDC:TMR2-4810WI
Converter_DCDC:TMR2-4811WI
Converter_DCDC:TMR2-4812WI
Converter_DCDC:TMR2-4813WI
+Converter_DCDC:TMR4-2411WI
+Converter_DCDC:TMR4-2412WI
+Converter_DCDC:TMR4-2413WI
+Converter_DCDC:TMR4-2415WI
+Converter_DCDC:TMR4-2422WI
+Converter_DCDC:TMR4-2423WI
+Converter_DCDC:TMR4-4811WI
+Converter_DCDC:TMR4-4812WI
+Converter_DCDC:TMR4-4813WI
+Converter_DCDC:TMR4-4815WI
+Converter_DCDC:TMR4-4822WI
+Converter_DCDC:TMR4-4823WI
Converter_DCDC:TMU3-0511
Converter_DCDC:TMU3-0512
Converter_DCDC:TMU3-0513
@@ -4207,9 +4909,25 @@ Converter_DCDC:TMU3-1213
Converter_DCDC:TMU3-2411
Converter_DCDC:TMU3-2412
Converter_DCDC:TMU3-2413
+Converter_DCDC:TPS43060RTE
+Converter_DCDC:TPS54240DGQ
+Converter_DCDC:TPS54240DRC
+Converter_DCDC:TPS61022
Converter_DCDC:TPSM53602RDA
Converter_DCDC:TPSM53603RDA
Converter_DCDC:TPSM53604RDA
+Converter_DCDC:TRA3-0511
+Converter_DCDC:TRA3-0512
+Converter_DCDC:TRA3-0513
+Converter_DCDC:TRA3-0519
+Converter_DCDC:TRA3-1211
+Converter_DCDC:TRA3-1212
+Converter_DCDC:TRA3-1213
+Converter_DCDC:TRA3-1219
+Converter_DCDC:TRA3-2411
+Converter_DCDC:TRA3-2412
+Converter_DCDC:TRA3-2413
+Converter_DCDC:TRA3-2419
Converter_DCDC:TRI1-0511
Converter_DCDC:TRI1-0512
Converter_DCDC:TRI1-0513
@@ -4252,6 +4970,7 @@ CPLD_Microchip:ATF1504AS-xAx44
CPLD_Microchip:ATF1504ASL-xAx44
CPLD_Microchip:ATF1504ASV-xAx44
CPLD_Microchip:ATF1504ASVL-xAx44
+CPLD_Renesas:SLG46826G
CPLD_Xilinx:XC7336
CPLD_Xilinx:XC95108PC84
CPLD_Xilinx:XC95108PQ100
@@ -4324,6 +5043,11 @@ Device:Buzzer
Device:C
Device:C_45deg
Device:C_Feedthrough
+Device:C_Network04
+Device:C_Network05
+Device:C_Network06
+Device:C_Network07
+Device:C_Network08
Device:C_Polarized
Device:C_Polarized_Series_2C
Device:C_Polarized_Small
@@ -4366,8 +5090,8 @@ Device:D_Bridge_-A+A
Device:D_Bridge_-AA+
Device:D_Capacitance
Device:D_Capacitance_Filled
-Device:D_Constant_Current
-Device:D_Constant_Current_Small
+Device:D_Current-regulator
+Device:D_Current-regulator_Small
Device:D_Dual_CommonAnode_AKK
Device:D_Dual_CommonAnode_AKK_Parallel
Device:D_Dual_CommonAnode_AKK_Split
@@ -4472,6 +5196,8 @@ Device:D_TVS_Dual_AAC
Device:D_TVS_Dual_ACA
Device:D_TVS_Dual_CAA
Device:D_TVS_Filled
+Device:D_TVS_Small
+Device:D_TVS_Small_Filled
Device:D_TemperatureDependent
Device:D_TemperatureDependent_Filled
Device:D_Tunnel
@@ -4511,6 +5237,9 @@ Device:Filter_EMI_CommonMode
Device:Filter_EMI_LCL
Device:Filter_EMI_LL
Device:Filter_EMI_LLL
+Device:Filter_EMI_LLLL
+Device:Filter_EMI_LLLL_15263748
+Device:Filter_EMI_LLL_162534
Device:Filter_EMI_LL_1423
Device:FrequencyCounter
Device:Fuse
@@ -4649,24 +5378,6 @@ Device:Oscilloscope
Device:PeltierElement
Device:Polyfuse
Device:Polyfuse_Small
-Device:Q_Dual_NMOS_G1S2G2D2S1D1
-Device:Q_Dual_NMOS_S1G1D2S2G2D1
-Device:Q_Dual_NMOS_S1G1S2G2D2D2D1D1
-Device:Q_Dual_NPN_C2C1E1E2
-Device:Q_Dual_NPN_NPN_BRT_E1B1C2E2B2C1
-Device:Q_Dual_NPN_NPN_C2E2C1E1B1B2
-Device:Q_Dual_NPN_NPN_E1B1C2E2B2C1
-Device:Q_Dual_NPN_PNP_BRT_E1B1C2E2B2C1
-Device:Q_Dual_NPN_PNP_E1B1C2E2B2C1
-Device:Q_Dual_PMOS_G1S2G2D2S1D1
-Device:Q_Dual_PMOS_S1G1D2S2G2D1
-Device:Q_Dual_PMOS_S1G1S2G2D2D2D1D1
-Device:Q_Dual_PNP_C2C1E1E2
-Device:Q_Dual_PNP_NPN_BRT_E1B1C2E2B2C1
-Device:Q_Dual_PNP_PNP_BRT_E1B1C2E2B2C1
-Device:Q_Dual_PNP_PNP_C1B1B2C2E2E1
-Device:Q_Dual_PNP_PNP_C2E2C1E1B1B2
-Device:Q_Dual_PNP_PNP_E1B1C2E2B2C1
Device:Q_NIGBT_CEG
Device:Q_NIGBT_CGE
Device:Q_NIGBT_ECG
@@ -4681,38 +5392,13 @@ Device:Q_NJFET_GDS
Device:Q_NJFET_GSD
Device:Q_NJFET_SDG
Device:Q_NJFET_SGD
-Device:Q_NMOS_DGS
-Device:Q_NMOS_DSG
-Device:Q_NMOS_Depletion_DGS
-Device:Q_NMOS_Depletion_DSG
-Device:Q_NMOS_Depletion_GDS
-Device:Q_NMOS_Depletion_GSD
-Device:Q_NMOS_Depletion_SDG
-Device:Q_NMOS_Depletion_SGD
-Device:Q_NMOS_GDS
-Device:Q_NMOS_GDSD
-Device:Q_NMOS_GSD
-Device:Q_NMOS_SDG
-Device:Q_NMOS_SDGD
-Device:Q_NMOS_SGD
-Device:Q_NPN_BCE
-Device:Q_NPN_BCEC
-Device:Q_NPN_BEC
-Device:Q_NPN_BEC_BRT
-Device:Q_NPN_CBE
-Device:Q_NPN_CEB
-Device:Q_NPN_Darlington_BCE
-Device:Q_NPN_Darlington_BCEC
-Device:Q_NPN_Darlington_BEC
-Device:Q_NPN_Darlington_CBE
-Device:Q_NPN_Darlington_CEB
-Device:Q_NPN_Darlington_EBC
-Device:Q_NPN_Darlington_ECB
-Device:Q_NPN_Darlington_ECBC
-Device:Q_NPN_EBC
-Device:Q_NPN_ECB
-Device:Q_NPN_ECBC
-Device:Q_NPN_ECB_BRT
+Device:Q_NMOS
+Device:Q_NMOS_Depletion
+Device:Q_NPN
+Device:Q_NPN_BRT
+Device:Q_NPN_BRT_No_R2
+Device:Q_NPN_CurrentMirror
+Device:Q_NPN_Darlington
Device:Q_NUJT_BEB
Device:Q_PJFET_DGS
Device:Q_PJFET_DSG
@@ -4720,32 +5406,13 @@ Device:Q_PJFET_GDS
Device:Q_PJFET_GSD
Device:Q_PJFET_SDG
Device:Q_PJFET_SGD
-Device:Q_PMOS_DGS
-Device:Q_PMOS_DSG
-Device:Q_PMOS_GDS
-Device:Q_PMOS_GDSD
-Device:Q_PMOS_GSD
-Device:Q_PMOS_SDG
-Device:Q_PMOS_SDGD
-Device:Q_PMOS_SGD
-Device:Q_PNP_BCE
-Device:Q_PNP_BCEC
-Device:Q_PNP_BEC
-Device:Q_PNP_BEC_BRT
-Device:Q_PNP_CBE
-Device:Q_PNP_CEB
-Device:Q_PNP_Darlington_BCE
-Device:Q_PNP_Darlington_BCEC
-Device:Q_PNP_Darlington_BEC
-Device:Q_PNP_Darlington_CBE
-Device:Q_PNP_Darlington_CEB
-Device:Q_PNP_Darlington_EBC
-Device:Q_PNP_Darlington_ECB
-Device:Q_PNP_Darlington_ECBC
-Device:Q_PNP_EBC
-Device:Q_PNP_ECB
-Device:Q_PNP_ECBC
-Device:Q_PNP_ECB_BRT
+Device:Q_PMOS
+Device:Q_PMOS_Depletion
+Device:Q_PNP
+Device:Q_PNP_BRT
+Device:Q_PNP_BRT_No_R2
+Device:Q_PNP_CurrentMirror
+Device:Q_PNP_Darlington
Device:Q_PUJT_BEB
Device:Q_Photo_NPN
Device:Q_Photo_NPN_CBE
@@ -4758,12 +5425,7 @@ Device:Q_SCR_GAK
Device:Q_SCR_GKA
Device:Q_SCR_KAG
Device:Q_SCR_KGA
-Device:Q_TRIAC_A1A2G
-Device:Q_TRIAC_A1GA2
-Device:Q_TRIAC_A2A1G
-Device:Q_TRIAC_A2GA1
-Device:Q_TRIAC_GA1A2
-Device:Q_TRIAC_GA2A1
+Device:Q_Triac
Device:R
Device:RFShield_OnePiece
Device:RFShield_TwoPieces
@@ -4846,6 +5508,7 @@ Device:R_Pack11_Split
Device:R_Photo
Device:R_Potentiometer
Device:R_Potentiometer_Dual
+Device:R_Potentiometer_Dual_MountingPin
Device:R_Potentiometer_Dual_Separate
Device:R_Potentiometer_MountingPin
Device:R_Potentiometer_Small
@@ -4864,6 +5527,7 @@ Device:Resonator
Device:Resonator_Small
Device:RotaryEncoder
Device:RotaryEncoder_Switch
+Device:RotaryEncoder_Switch_MP
Device:Solar_Cell
Device:Solar_Cells
Device:SparkGap
@@ -4899,6 +5563,8 @@ Device:Voltmeter_AC
Device:Voltmeter_DC
Diode:1.5KExxA
Diode:1.5KExxCA
+Diode:1.5SMCxxA
+Diode:1.5SMCxxCA
Diode:1N4001
Diode:1N4002
Diode:1N4003
@@ -4917,6 +5583,11 @@ Diode:1N4448W
Diode:1N4448WS
Diode:1N4448WT
Diode:1N47xxA
+Diode:1N4933
+Diode:1N4934
+Diode:1N4935
+Diode:1N4936
+Diode:1N4937
Diode:1N53xxB
Diode:1N5400
Diode:1N5401
@@ -4938,6 +5609,7 @@ Diode:1N5819WS
Diode:1N5820
Diode:1N5821
Diode:1N5822
+Diode:1N5908
Diode:1N6263
Diode:1N62xxA
Diode:1N62xxCA
@@ -5005,6 +5677,7 @@ Diode:BAT54C
Diode:BAT54CW
Diode:BAT54J
Diode:BAT54S
+Diode:BAT54SDW
Diode:BAT54SW
Diode:BAT54W
Diode:BAT60A
@@ -5216,6 +5889,9 @@ Diode:ESD131-B1-W0201
Diode:ESD5Zxx
Diode:ESD9B3.3ST5G
Diode:ESD9B5.0ST5G
+Diode:ESH2PB
+Diode:ESH2PC
+Diode:ESH2PD
Diode:HN2D02FU
Diode:IDDD04G65C6
Diode:IDDD06G65C6
@@ -5242,6 +5918,7 @@ Diode:MBR340
Diode:MBR735
Diode:MBR745
Diode:MBRA340
+Diode:MBRS340
Diode:MCL4148
Diode:MCL4448
Diode:MM3Zxx
@@ -5353,6 +6030,16 @@ Diode:PMEG6045ETP
Diode:PMEG60T10ELR
Diode:PMEG60T20ELR
Diode:PMEG60T30ELR
+Diode:PTVS10VZ1USK
+Diode:PTVS12VZ1USK
+Diode:PTVS15VZ1USK
+Diode:PTVS18VZ1USK
+Diode:PTVS20VZ1USK
+Diode:PTVS22VZ1USK
+Diode:PTVS26VZ1USK
+Diode:PTVS5V0Z1USK
+Diode:PTVS5V0Z1USKP
+Diode:PTVS7V5Z1USK
Diode:Panasonic_MA5J002E
Diode:RF01VM2S
Diode:Rohm_UMN1N
@@ -5371,6 +6058,12 @@ Diode:SD12_SOD323
Diode:SD15_SOD323
Diode:SD24_SOD323
Diode:SD36_SOD323
+Diode:SM15T36A
+Diode:SM15T36CA
+Diode:SM15T6V8A
+Diode:SM15T6V8CA
+Diode:SM15T7V5A
+Diode:SM15T7V5CA
Diode:SM2000
Diode:SM4001
Diode:SM4002
@@ -5379,9 +6072,15 @@ Diode:SM4004
Diode:SM4005
Diode:SM4006
Diode:SM4007
+Diode:SM5059
+Diode:SM5060
+Diode:SM5061
+Diode:SM5062
+Diode:SM5063
Diode:SM513
Diode:SM516
Diode:SM518
+Diode:SM5908
Diode:SM6T100A
Diode:SM6T10A
Diode:SM6T12A
@@ -5546,6 +6245,33 @@ Diode:SMF8V0A
Diode:SMF8V5A
Diode:SMF9V0A
Diode:SMZxxx
+Diode:SS110
+Diode:SS1150
+Diode:SS12
+Diode:SS1200
+Diode:SS13
+Diode:SS14
+Diode:SS15
+Diode:SS16
+Diode:SS18
+Diode:SS210
+Diode:SS2150
+Diode:SS22
+Diode:SS2200
+Diode:SS23
+Diode:SS24
+Diode:SS25
+Diode:SS26
+Diode:SS28
+Diode:SS310
+Diode:SS3150
+Diode:SS32
+Diode:SS3200
+Diode:SS33
+Diode:SS34
+Diode:SS35
+Diode:SS36
+Diode:SS38
Diode:STBR3008WY
Diode:STBR3012WY
Diode:STBR6008WY
@@ -5636,13 +6362,20 @@ Diode_Bridge:B80C5000-3x00A
Diode_Bridge:B80C800DM
Diode_Bridge:B80R
Diode_Bridge:DF005M
+Diode_Bridge:DF005S
Diode_Bridge:DF01M
+Diode_Bridge:DF01S
Diode_Bridge:DF01S1
Diode_Bridge:DF02M
+Diode_Bridge:DF02S
Diode_Bridge:DF04M
+Diode_Bridge:DF04S
Diode_Bridge:DF06M
+Diode_Bridge:DF06S
Diode_Bridge:DF08M
+Diode_Bridge:DF08S
Diode_Bridge:DF10M
+Diode_Bridge:DF10S
Diode_Bridge:DMA40U1800GU
Diode_Bridge:DNA40U2200GU
Diode_Bridge:GBU4A
@@ -5795,8 +6528,8 @@ Diode_Bridge:W04G
Diode_Bridge:W06G
Diode_Bridge:W08G
Diode_Bridge:W10G
-Diode_Laser:PL450B
Diode_Laser:PL520
+Diode_Laser:PLT5_450B
Diode_Laser:PLT5_488
Diode_Laser:PLT5_510
Diode_Laser:SPL_PL90
@@ -5903,6 +6636,7 @@ Display_Character:MAN73A
Display_Character:MAN74A
Display_Character:NHD-0420H1Z
Display_Character:NHD-C0220BIZ
+Display_Character:NHD-C0220BIZ-FSRGB
Display_Character:RC1602A
Display_Character:RC1602A-GHW-ESX
Display_Character:SA15-11EWA
@@ -5988,9 +6722,16 @@ Driver_FET:ACPL-P343
Driver_FET:ACPL-W343
Driver_FET:AN34092B
Driver_FET:BSP75N
+Driver_FET:BSP76
+Driver_FET:BTS4140N
Driver_FET:EL7202CN
+Driver_FET:EL7202CS
Driver_FET:EL7212CN
+Driver_FET:EL7212CS
Driver_FET:EL7222CN
+Driver_FET:EL7222CS
+Driver_FET:FAN3111C
+Driver_FET:FAN3111E
Driver_FET:FAN3268
Driver_FET:FAN3278
Driver_FET:FAN7371
@@ -6117,6 +6858,9 @@ Driver_FET:ITS711L1
Driver_FET:ITS716G
Driver_FET:ITS724G
Driver_FET:L6491
+Driver_FET:LF2190N
+Driver_FET:LM2105D
+Driver_FET:LM2105DSG
Driver_FET:LM5109AMA
Driver_FET:LM5109ASD
Driver_FET:LM5109BMA
@@ -6164,6 +6908,9 @@ Driver_FET:STGAP2SCM
Driver_FET:STGAP2SM
Driver_FET:TC4421
Driver_FET:TC4422
+Driver_FET:TC4426xOA
+Driver_FET:TC4427xOA
+Driver_FET:TC4428xOA
Driver_FET:TLP250
Driver_FET:UCC21520ADW
Driver_FET:UCC21520DW
@@ -6179,7 +6926,12 @@ Driver_Haptic:DRV2510-Q1
Driver_Haptic:DRV2605LDGS
Driver_LED:AL8860MP
Driver_LED:AL8860WT
+Driver_LED:AP3019AKTR
+Driver_LED:AP3019AKTTR
Driver_LED:BCR430UW6
+Driver_LED:CH455G
+Driver_LED:CH455H
+Driver_LED:CH455K
Driver_LED:CL220K4-G
Driver_LED:CL220N5-G
Driver_LED:DIO5661CD6
@@ -6202,6 +6954,7 @@ Driver_LED:IS31FL3216A
Driver_LED:IS31FL3218-GR
Driver_LED:IS31FL3218-QF
Driver_LED:IS31FL3236-TQ
+Driver_LED:IS31FL3236A-TQ
Driver_LED:IS31FL3731-QF
Driver_LED:IS31FL3731-SA
Driver_LED:IS31FL3733-QF
@@ -6209,6 +6962,9 @@ Driver_LED:IS31FL3733-TQ
Driver_LED:IS31FL3736
Driver_LED:IS31FL3737
Driver_LED:IS31LT3360
+Driver_LED:KTD2026
+Driver_LED:KTD2027
+Driver_LED:KTD2061xxUAC
Driver_LED:LED1642GWPTR
Driver_LED:LED1642GWQTR
Driver_LED:LED1642GWTTR
@@ -6217,6 +6973,7 @@ Driver_LED:LED5000
Driver_LED:LM3914N
Driver_LED:LM3914V
Driver_LED:LP5036
+Driver_LED:LP8868XQDMT
Driver_LED:LT3465
Driver_LED:LT3465A
Driver_LED:LT3755xMSE
@@ -6238,22 +6995,38 @@ Driver_LED:MAX7221xRG
Driver_LED:MAX7221xWG
Driver_LED:MBI5252GFN
Driver_LED:MBI5252GP
+Driver_LED:MC14495P
Driver_LED:MCP1643xMS
Driver_LED:MCP1662-xOT
+Driver_LED:MP3362GJ
Driver_LED:MPQ2483DQ
+Driver_LED:MPQ3362GJ-AEC1
Driver_LED:NCP5623DTBR2G
Driver_LED:NCR401U
Driver_LED:PCA9531PW
Driver_LED:PCA9635
Driver_LED:PCA9685BS
Driver_LED:PCA9685PW
+Driver_LED:PCA9745BTW
+Driver_LED:RCD-24
Driver_LED:ST1CC40DR
Driver_LED:ST1CC40PUR
-Driver_LED:STP08CP05
+Driver_LED:STP08CP05B
+Driver_LED:STP08CP05M
+Driver_LED:STP08CP05T
Driver_LED:STP08CP05XT
-Driver_LED:STP16CP05
+Driver_LED:STP16CP05M
+Driver_LED:STP16CP05P
+Driver_LED:STP16CP05T
Driver_LED:STP16CP05XT
+Driver_LED:STP16CPC26M
+Driver_LED:STP16CPC26P
+Driver_LED:STP16CPC26T
+Driver_LED:STP16CPC26X
+Driver_LED:TCA6507RUE
Driver_LED:TLC59108xPW
+Driver_LED:TLC5916
+Driver_LED:TLC5917
Driver_LED:TLC5940NT
Driver_LED:TLC5940PWP
Driver_LED:TLC5947DAP
@@ -6266,15 +7039,21 @@ Driver_LED:TLC5957RTQ
Driver_LED:TLC5971PWP
Driver_LED:TLC5971RGE
Driver_LED:TLC5973
+Driver_LED:TPS61165DBV
Driver_LED:TPS92692PWP
Driver_LED:WS2811
+Driver_LED:iC-HTG
Driver_Motor:A4950E
Driver_Motor:A4950K
Driver_Motor:A4952_LY
Driver_Motor:A4953_LJ
Driver_Motor:A4954
Driver_Motor:AMT49413
+Driver_Motor:DRV8212P
Driver_Motor:DRV8308
+Driver_Motor:DRV8412
+Driver_Motor:DRV8432
+Driver_Motor:DRV8461SPWP
Driver_Motor:DRV8662
Driver_Motor:DRV8711
Driver_Motor:DRV8800PWP
@@ -6295,6 +7074,10 @@ Driver_Motor:DRV8848
Driver_Motor:DRV8870DDA
Driver_Motor:DRV8871DDA
Driver_Motor:DRV8872DDA
+Driver_Motor:EMC2301-x-ACZL
+Driver_Motor:EMC2302-x-AIZL
+Driver_Motor:EMC2303-x-KP
+Driver_Motor:EMC2305-x-AP
Driver_Motor:L293
Driver_Motor:L293D
Driver_Motor:L293E
@@ -6303,6 +7086,11 @@ Driver_Motor:L298HN
Driver_Motor:L298N
Driver_Motor:L298P
Driver_Motor:LMD18200
+Driver_Motor:MAX22201
+Driver_Motor:MAX22202
+Driver_Motor:MAX22207
+Driver_Motor:MP6536DU
+Driver_Motor:PAC5527QM
Driver_Motor:PG001M
Driver_Motor:Pololu_Breakout_A4988
Driver_Motor:Pololu_Breakout_DRV8825
@@ -6324,13 +7112,19 @@ Driver_Motor:STSPIN230
Driver_Motor:STSPIN233
Driver_Motor:STSPIN240
Driver_Motor:TB6612FNG
+Driver_Motor:TC78H670FTG
Driver_Motor:TMC2041-LA
Driver_Motor:TMC2100-LA
Driver_Motor:TMC2100-TA
Driver_Motor:TMC2130-LA
Driver_Motor:TMC2130-TA
Driver_Motor:TMC2160
+Driver_Motor:TMC2202-WA
+Driver_Motor:TMC2208-LA
+Driver_Motor:TMC2224-LA
+Driver_Motor:TMC2226-SA
Driver_Motor:TMC262
+Driver_Motor:TMC2660
Driver_Motor:TMC5130A-TA
Driver_Motor:TMC5160A-TA
Driver_Motor:VNH2SP30
@@ -6373,6 +7167,11 @@ DSP_Motorola:DSP56301
DSP_Texas:TMS320LF2406PZ
Fiber_Optic:AFBR-1624Z
Fiber_Optic:AFBR-2624Z
+Filter:0603USB-142
+Filter:0603USB-222
+Filter:0603USB-251
+Filter:0603USB-601
+Filter:0603USB-951
Filter:0850BM14E0016
Filter:0900FM15K0039
Filter:1FP41-4R
@@ -6387,12 +7186,26 @@ Filter:1FP65-0R
Filter:1FP65-1R
Filter:B39162B8813P810
Filter:BNX025
+Filter:Choke_CommonMode_FerriteCore_1234
+Filter:Choke_CommonMode_FerriteCore_1243
+Filter:Choke_CommonMode_FerriteCore_1324
+Filter:Choke_CommonMode_FerriteCore_1342
+Filter:Choke_CommonMode_FerriteCore_1423
+Filter:Choke_CommonMode_PulseElectronics_PH9455x105NL
+Filter:Choke_CommonMode_PulseElectronics_PH9455x155NL
+Filter:Choke_CommonMode_PulseElectronics_PH9455x156NL
+Filter:Choke_CommonMode_PulseElectronics_PH9455x205NL
+Filter:Choke_CommonMode_PulseElectronics_PH9455x356NL
+Filter:Choke_CommonMode_PulseElectronics_PH9455x405NL
+Filter:Choke_CommonMode_PulseElectronics_PH9455x705NL
+Filter:Choke_CommonMode_PulseElectronics_PH9455x826NL
Filter:Choke_Schaffner_RN102-0.3-02-12M
Filter:Choke_Schaffner_RN102-0.3-02-22M
Filter:Choke_Schaffner_RN102-0.6-02-4M4
Filter:Choke_Schaffner_RN102-1-02-3M0
Filter:Choke_Schaffner_RN102-1.5-02-1M6
Filter:Choke_Schaffner_RN102-2-02-1M1
+Filter:Choke_Wurth_WE-CNSW_744232090
Filter:FN405-0.5-02
Filter:FN405-1-02
Filter:FN405-10-02
@@ -6410,6 +7223,12 @@ Filter:FN406B-6-02
Filter:FN406B-8.4-02
Filter:LTC1562xG-2
Filter:LTC1562xxG
+Filter:P300PL104M275xC222
+Filter:P300PL104M275xC332
+Filter:P300PL104M275xC472
+Filter:P300PL154M275xC222
+Filter:P300PL154M275xC332
+Filter:P300PL154M275xC472
Filter:SAFFA1G58KA0F0A
Filter:SAFFA1G96FN0F0A
Filter:SAFFA2G14FA0F0A
@@ -6749,6 +7568,7 @@ Interface:AD9851
Interface:AD9910
Interface:AD9912
Interface:AD9951
+Interface:AD9954
Interface:AM26LS31CD
Interface:AM26LS31CDB
Interface:AM26LS31CN
@@ -6807,6 +7627,8 @@ Interface:PCA9615DP
Interface:PCI9030-PQFP176
Interface:S5933_PQ160
Interface:SI9986
+Interface:SLB9660xT
+Interface:SLB9665xT
Interface:SN65LVDS047D
Interface:SN65LVDS047PW
Interface:SN65LVDS1D
@@ -6841,7 +7663,10 @@ Interface:Z8420
Interface:Z84C20
Interface_CAN_LIN:ADM3053
Interface_CAN_LIN:ADM3057ExRW
+Interface_CAN_LIN:CA-IF1042LVS
+Interface_CAN_LIN:ISO1044BD
Interface_CAN_LIN:ISO1050DUB
+Interface_CAN_LIN:ISOW1044
Interface_CAN_LIN:LTC2875-DD
Interface_CAN_LIN:LTC2875-S8
Interface_CAN_LIN:MCP2021A-xxxxMD
@@ -6860,6 +7685,9 @@ Interface_CAN_LIN:MCP2515-xSO
Interface_CAN_LIN:MCP2515-xST
Interface_CAN_LIN:MCP2517FD-xJHA
Interface_CAN_LIN:MCP2517FD-xSL
+Interface_CAN_LIN:MCP251863T-E-9PX
+Interface_CAN_LIN:MCP251863T-H-SS
+Interface_CAN_LIN:MCP2518FD-xQBB
Interface_CAN_LIN:MCP2542FDxMF
Interface_CAN_LIN:MCP2542WFDxMF
Interface_CAN_LIN:MCP2551-I-P
@@ -6903,6 +7731,8 @@ Interface_CAN_LIN:TCAN334
Interface_CAN_LIN:TCAN334G
Interface_CAN_LIN:TCAN337
Interface_CAN_LIN:TCAN337G
+Interface_CAN_LIN:TCAN4550RGY
+Interface_CAN_LIN:TCAN4551RGYRQ1
Interface_CAN_LIN:TJA1021T
Interface_CAN_LIN:TJA1021TK
Interface_CAN_LIN:TJA1029T
@@ -6948,6 +7778,8 @@ Interface_Ethernet:LAN7500-ABJZ
Interface_Ethernet:LAN8710A
Interface_Ethernet:LAN8720A
Interface_Ethernet:LAN8742A
+Interface_Ethernet:LAN9303
+Interface_Ethernet:LAN9303i
Interface_Ethernet:LAN9512
Interface_Ethernet:LAN9512i
Interface_Ethernet:LAN9513
@@ -6957,13 +7789,23 @@ Interface_Ethernet:LAN9514i
Interface_Ethernet:RTL8211EG-VB-CG
Interface_Ethernet:VSC8541XMV-0x
Interface_Ethernet:W5100
+Interface_Ethernet:W5100S-L
+Interface_Ethernet:W5100S-Q
Interface_Ethernet:W5500
+Interface_Ethernet:W6100-L
+Interface_Ethernet:W6100-Q
Interface_Ethernet:WGI210AT
Interface_Expansion:AS1115-BQFT
Interface_Expansion:AS1115-BSST
+Interface_Expansion:AW9523B
Interface_Expansion:LTC4314xGN
Interface_Expansion:LTC4314xUDC
+Interface_Expansion:LTC4316xDD
Interface_Expansion:LTC4317
+Interface_Expansion:MAX31910xUI
+Interface_Expansion:MAX31911xUI
+Interface_Expansion:MAX31912xUI
+Interface_Expansion:MAX31913xUI
Interface_Expansion:MAX7325AEG+
Interface_Expansion:MCP23008-xML
Interface_Expansion:MCP23008-xP
@@ -6978,6 +7820,7 @@ Interface_Expansion:MCP23S17_SO
Interface_Expansion:MCP23S17_SP
Interface_Expansion:MCP23S17_SS
Interface_Expansion:P82B96
+Interface_Expansion:PCA9506BS
Interface_Expansion:PCA9516
Interface_Expansion:PCA9536D
Interface_Expansion:PCA9536DP
@@ -6997,12 +7840,17 @@ Interface_Expansion:PCA9555PW
Interface_Expansion:PCA9557BS
Interface_Expansion:PCA9557D
Interface_Expansion:PCA9557PW
+Interface_Expansion:PCA9847PW
+Interface_Expansion:PCAL6416AHF
Interface_Expansion:PCAL6416APW
Interface_Expansion:PCAL6534EV
-Interface_Expansion:PCF8574
-Interface_Expansion:PCF8574A
+Interface_Expansion:PCF8574AP
+Interface_Expansion:PCF8574AT
Interface_Expansion:PCF8574ATS
+Interface_Expansion:PCF8574P
+Interface_Expansion:PCF8574T
Interface_Expansion:PCF8574TS
+Interface_Expansion:PCF8575DBR
Interface_Expansion:PCF8584
Interface_Expansion:PCF8591
Interface_Expansion:STMPE1600
@@ -7027,6 +7875,10 @@ Interface_Expansion:TCA9555PWR
Interface_Expansion:TCA9555RGER
Interface_Expansion:TCA9555RTWR
Interface_Expansion:TPIC6595
+Interface_Expansion:XRA1201IG24
+Interface_Expansion:XRA1201IL24
+Interface_Expansion:XRA1201PIG24
+Interface_Expansion:XRA1201PIL24
Interface_HDMI:ADV7611
Interface_HDMI:TPD12S520DBT
Interface_HID:JoyWarrior24A10L
@@ -7050,6 +7902,7 @@ Interface_LineDriver:UA9638CDR
Interface_LineDriver:UA9638CDRG4
Interface_LineDriver:UA9638CP
Interface_LineDriver:UA9638CPE4
+Interface_Optical:IRM-H6xxT
Interface_Optical:IS471F
Interface_Optical:IS485
Interface_Optical:IS486
@@ -7102,6 +7955,13 @@ Interface_UART:8250
Interface_UART:8252
Interface_UART:ADM101E
Interface_UART:ADM1491EBR
+Interface_UART:ADM205
+Interface_UART:ADM206
+Interface_UART:ADM207
+Interface_UART:ADM208
+Interface_UART:ADM209
+Interface_UART:ADM211
+Interface_UART:ADM213
Interface_UART:ADM222
Interface_UART:ADM232A
Interface_UART:ADM242
@@ -7126,6 +7986,9 @@ Interface_UART:GD75232DW
Interface_UART:GD75232N
Interface_UART:GD75232PW
Interface_UART:ICL3232
+Interface_UART:ISL3172E
+Interface_UART:ISL3175E
+Interface_UART:ISL3178E
Interface_UART:ISL3280ExHZ
Interface_UART:ISL3281ExHZ
Interface_UART:ISL3282ExRHZ
@@ -7178,6 +8041,8 @@ Interface_UART:MAX1487E
Interface_UART:MAX202
Interface_UART:MAX232
Interface_UART:MAX232I
+Interface_UART:MAX238xNG+
+Interface_UART:MAX238xWG+
Interface_UART:MAX3051
Interface_UART:MAX3072E
Interface_UART:MAX3075E
@@ -7233,20 +8098,37 @@ Interface_UART:SP3485CN
Interface_UART:SP3485CP
Interface_UART:SP3485EN
Interface_UART:SP3485EP
-Interface_UART:ST485EBDR
+Interface_UART:SSP3085
+Interface_UART:ST202ExD
+Interface_UART:ST232ExD
+Interface_UART:ST485E
Interface_UART:THVD1400D
Interface_UART:THVD1420D
+Interface_UART:THVD1450D
+Interface_UART:THVD1450DR
Interface_UART:THVD1451D
+Interface_UART:THVD1500
+Interface_UART:THVD8000
Interface_UART:Z8530
Interface_USB:ADUM3160
Interface_USB:ADUM4160
+Interface_USB:AP33771
Interface_USB:BQ24392
+Interface_USB:CH224K
+Interface_USB:CH236D
+Interface_USB:CH246D
Interface_USB:CH330N
+Interface_USB:CH334R
Interface_USB:CH340C
Interface_USB:CH340E
Interface_USB:CH340G
+Interface_USB:CH340K
+Interface_USB:CH340N
Interface_USB:CH340T
Interface_USB:CH340X
+Interface_USB:CH343G
+Interface_USB:CH343P
+Interface_USB:CH344Q
Interface_USB:CH9102F
Interface_USB:CP2102N-Axx-xQFN20
Interface_USB:CP2102N-Axx-xQFN24
@@ -7263,6 +8145,10 @@ Interface_USB:CY7C65213A-28PVXI
Interface_USB:CY7C65213A-32LTXI
Interface_USB:CY7C65215-32LTXI
Interface_USB:CY7C65215A-32LTXI
+Interface_USB:CYPD3171-24LQXQ
+Interface_USB:CYPD3174-16SXQ
+Interface_USB:CYPD3174-24LQXQ
+Interface_USB:CYPD3175-24LQXQ
Interface_USB:CYPD3177-24LQ
Interface_USB:FE1.1s
Interface_USB:FSUSB30MUX
@@ -7284,6 +8170,7 @@ Interface_USB:FT231XS
Interface_USB:FT232BM
Interface_USB:FT232H
Interface_USB:FT232RL
+Interface_USB:FT234XD
Interface_USB:FT240XQ
Interface_USB:FT240XS
Interface_USB:FT245BM
@@ -7294,6 +8181,7 @@ Interface_USB:FUSB302B01MPX
Interface_USB:FUSB302B10MPX
Interface_USB:FUSB302B11MPX
Interface_USB:FUSB302BMPX
+Interface_USB:FUSB303BTMX
Interface_USB:FUSB307BMPX
Interface_USB:IP2721
Interface_USB:MA8601
@@ -7312,6 +8200,7 @@ Interface_USB:MCP2221AxML
Interface_USB:MCP2221AxP
Interface_USB:MCP2221AxSL
Interface_USB:MCP2221AxST
+Interface_USB:MP5034GJ
Interface_USB:STULPI01A
Interface_USB:STULPI01B
Interface_USB:STUSB4500QTR
@@ -7323,6 +8212,11 @@ Interface_USB:TPS2514
Interface_USB:TPS2514A
Interface_USB:TPS2560
Interface_USB:TPS2561
+Interface_USB:TPS25730D
+Interface_USB:TS3USB30EDGSR
+Interface_USB:TS3USB30ERSWR
+Interface_USB:TS3USBCA410
+Interface_USB:TS3USBCA420
Interface_USB:TUSB2036
Interface_USB:TUSB320
Interface_USB:TUSB320I
@@ -7331,6 +8225,8 @@ Interface_USB:TUSB322I
Interface_USB:TUSB4041I
Interface_USB:TUSB7340
Interface_USB:TUSB8041
+Interface_USB:UPD720202K8-7x1-BAA
+Interface_USB:USB2504
Interface_USB:USB2514B_Bi
Interface_USB:USB3250-ABZJ
Interface_USB:USB3300-EZK
@@ -7340,6 +8236,7 @@ Interface_USB:USB3346
Interface_USB:USB3347
Interface_USB:USB3740B-AI2
Interface_USB:USB3740B-AI9
+Interface_USB:XR21B1424
Isolator:4N25
Isolator:4N26
Isolator:4N27
@@ -7374,6 +8271,7 @@ Isolator:ADuM120N
Isolator:ADuM121N
Isolator:ADuM1250
Isolator:ADuM1281
+Isolator:ADuM1300xRW
Isolator:ADuM1400xRW
Isolator:ADuM1401xRW
Isolator:ADuM1402xRW
@@ -7387,6 +8285,7 @@ Isolator:ADuM263N
Isolator:ADuM3151
Isolator:ADuM3152
Isolator:ADuM3153
+Isolator:ADuM5211
Isolator:ADuM5401
Isolator:ADuM5402
Isolator:ADuM5403
@@ -7458,6 +8357,10 @@ Isolator:ISO1541
Isolator:ISO1642DWR
Isolator:ISO1643DWR
Isolator:ISO1644DWR
+Isolator:ISO6731
+Isolator:ISO6740
+Isolator:ISO6741
+Isolator:ISO6742
Isolator:ISO7320C
Isolator:ISO7320FC
Isolator:ISO7321C
@@ -7488,6 +8391,11 @@ Isolator:ISO7763DBQ
Isolator:ISO7763DW
Isolator:ISO7763FDBQ
Isolator:ISO7763FDW
+Isolator:ISOW7740
+Isolator:ISOW7741
+Isolator:ISOW7742
+Isolator:ISOW7743
+Isolator:ISOW7744
Isolator:LTV-247
Isolator:LTV-352T
Isolator:LTV-354T
@@ -7510,6 +8418,11 @@ Isolator:LTV-847S
Isolator:MAX14850AEE+
Isolator:MAX14850ASE+
Isolator:MID400
+Isolator:MOCD207M
+Isolator:MOCD208M
+Isolator:MOCD211M
+Isolator:MOCD213M
+Isolator:MOCD217M
Isolator:NSL-32
Isolator:PC3H4
Isolator:PC3H4A
@@ -7599,6 +8512,66 @@ Isolator:Si8645BB-B-IS1
Isolator:Si8645BB-B-IU
Isolator:Si8645BC-B-IS1
Isolator:Si8645BD-B-IS
+Isolator:Si8660BA-AS1
+Isolator:Si8660BA-B-IS1
+Isolator:Si8660BB-AS1
+Isolator:Si8660BB-AU
+Isolator:Si8660BB-B-IS1
+Isolator:Si8660BB-B-IU
+Isolator:Si8660BC-AS1
+Isolator:Si8660BC-B-IS1
+Isolator:Si8660BD-AS
+Isolator:Si8660BD-B-IS
+Isolator:Si8660EB-AU
+Isolator:Si8660EB-B-IU
+Isolator:Si8660EC-AS1
+Isolator:Si8660EC-B-IS1
+Isolator:Si8660ED-AS
+Isolator:Si8660ED-B-IS
+Isolator:Si8661BB-AS1
+Isolator:Si8661BB-AU
+Isolator:Si8661BB-B-IS1
+Isolator:Si8661BB-B-IU
+Isolator:Si8661BC-AS1
+Isolator:Si8661BC-B-IS1
+Isolator:Si8661BD-AS
+Isolator:Si8661BD-AS2
+Isolator:Si8661BD-B-IS
+Isolator:Si8661BD-B-IS2
+Isolator:Si8661EB-AU
+Isolator:Si8661EB-B-IU
+Isolator:Si8661EC-AS1
+Isolator:Si8661EC-B-IS1
+Isolator:Si8661ED-AS
+Isolator:Si8661ED-B-IS
+Isolator:Si8662BB-AS1
+Isolator:Si8662BB-AU
+Isolator:Si8662BB-B-IS1
+Isolator:Si8662BB-B-IU
+Isolator:Si8662BC-AS1
+Isolator:Si8662BC-B-IS1
+Isolator:Si8662BD-AS
+Isolator:Si8662BD-B-IS
+Isolator:Si8662EB-AU
+Isolator:Si8662EB-B-IU
+Isolator:Si8662EC-AS1
+Isolator:Si8662EC-B-IS1
+Isolator:Si8662ED-AS
+Isolator:Si8662ED-B-IS
+Isolator:Si8663BB-AS1
+Isolator:Si8663BB-AU
+Isolator:Si8663BB-B-IS1
+Isolator:Si8663BB-B-IU
+Isolator:Si8663BC-AS1
+Isolator:Si8663BC-B-IS1
+Isolator:Si8663BD-AS
+Isolator:Si8663BD-B-IS
+Isolator:Si8663EB-AU
+Isolator:Si8663EB-B-IU
+Isolator:Si8663EC-AS1
+Isolator:Si8663EC-B-IS1
+Isolator:Si8663ED-AS
+Isolator:Si8663ED-B-IS
Isolator:TCMT1100
Isolator:TCMT1101
Isolator:TCMT1102
@@ -7623,6 +8596,7 @@ Isolator:TLP184
Isolator:TLP184xSE
Isolator:TLP185
Isolator:TLP185xSE
+Isolator:TLP2310
Isolator:TLP2703
Isolator:TLP2745
Isolator:TLP2748
@@ -7634,6 +8608,10 @@ Isolator:TLP290
Isolator:TLP290-4
Isolator:TLP291
Isolator:TLP291-4
+Isolator:TLP292
+Isolator:TLP292-4
+Isolator:TLP293
+Isolator:TLP293-4
Isolator:TLP3021
Isolator:TLP3022
Isolator:TLP3023
@@ -7663,6 +8641,8 @@ Isolator:VO615A-6
Isolator:VO615A-7
Isolator:VO615A-8
Isolator:VO615A-9
+Isolator:VOA300
+Isolator:VOS618A
Isolator:VTL5C
Isolator:VTL5Cx2
Isolator:π120U30
@@ -7673,9 +8653,15 @@ Isolator_Analog:ACPL-C79B
Isolator_Analog:ACPL-C870
Isolator_Analog:ACPL-C87A
Isolator_Analog:ACPL-C87B
+Isolator_Analog:AMC3330
Isolator_Analog:IL300
+Isolator_Analog:LOC112
+Isolator_Analog:LOC112P
+Isolator_Analog:LOC112S
Jumper:Jumper_2_Bridged
Jumper:Jumper_2_Open
+Jumper:Jumper_2_Small_Bridged
+Jumper:Jumper_2_Small_Open
Jumper:Jumper_3_Bridged12
Jumper:Jumper_3_Open
Jumper:SolderJumper_2_Bridged
@@ -7693,6 +8679,7 @@ LED:ASMT-YTB7-0AA02
LED:ASMT-YTC2-0AA02
LED:CLS6B-FKW
LED:CLV1L-FKB
+LED:CLX6F-FKC
LED:CQY99
LED:HDSP-4830
LED:HDSP-4830_2
@@ -7709,6 +8696,7 @@ LED:HLCP-J100_2
LED:IR204A
LED:IR26-21C_L110_TR8
LED:IRL81A
+LED:Inolux_IN-P55TATRGB
LED:Inolux_IN-PI554FCH
LED:Inolux_IN-PI556FCH
LED:LD271
@@ -7717,6 +8705,8 @@ LED:LED_Cree_XHP50_12V
LED:LED_Cree_XHP50_6V
LED:LED_Cree_XHP70_12V
LED:LED_Cree_XHP70_6V
+LED:LTST-C235KGKRKT
+LED:LiteOn_LTST-E563C
LED:NeoPixel_THT
LED:QLS6A-FKW
LED:QLS6B-FKW
@@ -7734,6 +8724,7 @@ LED:SMLVN6RGB
LED:TSAL4400
LED:WS2812
LED:WS2812B
+LED:WS2812B-2020
LED:WS2812S
LED:WS2813
LED:WS2822S
@@ -7747,13 +8738,23 @@ Logic_LevelTranslator:NLSV2T244MU
Logic_LevelTranslator:SN74AUP1T34DCK
Logic_LevelTranslator:SN74AVC4T245PW
Logic_LevelTranslator:SN74AVC8T245PW
+Logic_LevelTranslator:SN74LV1T125DBV
+Logic_LevelTranslator:SN74LV1T125DCK
Logic_LevelTranslator:SN74LV1T34DBV
Logic_LevelTranslator:SN74LV1T34DCK
Logic_LevelTranslator:SN74LVC1T45DBV
Logic_LevelTranslator:SN74LVC1T45DCK
Logic_LevelTranslator:SN74LVC1T45DRL
+Logic_LevelTranslator:SN74LVC245APW
Logic_LevelTranslator:SN74LVC2T45DCUR
Logic_LevelTranslator:SN74LVC2T45YZP
+Logic_LevelTranslator:SN74LVC8T245
+Logic_LevelTranslator:TCA9517ADGK
+Logic_LevelTranslator:TCA9517D
+Logic_LevelTranslator:TXB0101DBV
+Logic_LevelTranslator:TXB0101DCK
+Logic_LevelTranslator:TXB0101DRL
+Logic_LevelTranslator:TXB0101YZP
Logic_LevelTranslator:TXB0102DCT
Logic_LevelTranslator:TXB0102DCU
Logic_LevelTranslator:TXB0102YZP
@@ -7763,7 +8764,11 @@ Logic_LevelTranslator:TXB0104RGY
Logic_LevelTranslator:TXB0104RUT
Logic_LevelTranslator:TXB0104YZT
Logic_LevelTranslator:TXB0104ZXU
+Logic_LevelTranslator:TXB0106PW
+Logic_LevelTranslator:TXB0106RGY
Logic_LevelTranslator:TXB0108DQSR
+Logic_LevelTranslator:TXB0108PW
+Logic_LevelTranslator:TXB0108RGY
Logic_LevelTranslator:TXB0304RUT
Logic_LevelTranslator:TXBN0304RUT
Logic_LevelTranslator:TXS0101DBV
@@ -7774,15 +8779,21 @@ Logic_LevelTranslator:TXS0102DCT
Logic_LevelTranslator:TXS0102DCU
Logic_LevelTranslator:TXS0102DQE
Logic_LevelTranslator:TXS0102YZP
+Logic_LevelTranslator:TXS0104ED
+Logic_LevelTranslator:TXS0104EPW
Logic_LevelTranslator:TXS0108EPW
+Logic_LevelTranslator:TXS02612RTW
Logic_Programmable:GAL16V8
Logic_Programmable:PAL16L8
Logic_Programmable:PAL20
Logic_Programmable:PAL20L8
Logic_Programmable:PAL20RS10
Logic_Programmable:PAL24
+Logic_Programmable:PEEL22CV10AP
+Logic_Programmable:PEEL22CV10AS
MCU_AnalogDevices:ADUC816
MCU_AnalogDevices:MAX32660GTP
+MCU_AnalogDevices:MAX32670GTL
MCU_Cypress:CY7C68013A-56LTX
MCU_Cypress:CY7C68013A-56PVX
MCU_Cypress:CY7C68014A-56LTX
@@ -7821,6 +8832,10 @@ MCU_Cypress:CYBL10563-68FNXIT
MCU_Cypress:CYBL10x6x-56LQxx
MCU_Dialog:DA14691
MCU_Dialog:DA14695
+MCU_Espressif:ESP32-C3
+MCU_Espressif:ESP32-PICO-D4
+MCU_Espressif:ESP32-S2
+MCU_Espressif:ESP32-S3
MCU_Espressif:ESP8266EX
MCU_Intel:80186
MCU_Intel:80188
@@ -7848,6 +8863,11 @@ MCU_Intel:IA186XLPLC68IR2
MCU_Intel:IA188XLPLC68IR2
MCU_Intel:M80C186
MCU_Intel:M80C186XL
+MCU_Intel:P8031AH
+MCU_Intel:P8051AH
+MCU_Intel:P8052AH
+MCU_Intel:P8751BH
+MCU_Intel:P8752BH
MCU_Microchip_8051:AT89C2051-12P
MCU_Microchip_8051:AT89C2051-12S
MCU_Microchip_8051:AT89C2051-24P
@@ -7860,6 +8880,9 @@ MCU_Microchip_8051:AT89S2051-24P
MCU_Microchip_8051:AT89S2051-24S
MCU_Microchip_8051:AT89S4051-24P
MCU_Microchip_8051:AT89S4051-24S
+MCU_Microchip_8051:AT89x51xxA
+MCU_Microchip_8051:AT89x51xxJ
+MCU_Microchip_8051:AT89x51xxP
MCU_Microchip_ATmega:ATmega128-16A
MCU_Microchip_ATmega:ATmega128-16M
MCU_Microchip_ATmega:ATmega1280-16A
@@ -8616,120 +9639,120 @@ MCU_Microchip_PIC10:PIC10F320-IP
MCU_Microchip_PIC10:PIC10F322-IMC
MCU_Microchip_PIC10:PIC10F322-IOT
MCU_Microchip_PIC10:PIC10F322-IP
-MCU_Microchip_PIC12:PIC12C508-IJW
-MCU_Microchip_PIC12:PIC12C508-IP
-MCU_Microchip_PIC12:PIC12C508-ISM
-MCU_Microchip_PIC12:PIC12C508A-IJW
-MCU_Microchip_PIC12:PIC12C508A-IP
-MCU_Microchip_PIC12:PIC12C508A-ISM
-MCU_Microchip_PIC12:PIC12C508A-ISN
-MCU_Microchip_PIC12:PIC12C509-IJW
-MCU_Microchip_PIC12:PIC12C509-IP
-MCU_Microchip_PIC12:PIC12C509-ISM
-MCU_Microchip_PIC12:PIC12C509A-IJW
-MCU_Microchip_PIC12:PIC12C509A-IP
-MCU_Microchip_PIC12:PIC12C509A-ISM
-MCU_Microchip_PIC12:PIC12C509A-ISN
-MCU_Microchip_PIC12:PIC12C671-IJW
-MCU_Microchip_PIC12:PIC12C671-IP
-MCU_Microchip_PIC12:PIC12C671-ISN
-MCU_Microchip_PIC12:PIC12C672-IJW
-MCU_Microchip_PIC12:PIC12C672-IP
-MCU_Microchip_PIC12:PIC12C672-ISN
-MCU_Microchip_PIC12:PIC12CE518-IJW
-MCU_Microchip_PIC12:PIC12CE518-IP
-MCU_Microchip_PIC12:PIC12CE518-ISM
-MCU_Microchip_PIC12:PIC12CE518-ISN
-MCU_Microchip_PIC12:PIC12CE519-IJW
-MCU_Microchip_PIC12:PIC12CE519-IP
-MCU_Microchip_PIC12:PIC12CE519-ISM
-MCU_Microchip_PIC12:PIC12CE519-ISN
-MCU_Microchip_PIC12:PIC12CE673-IJW
-MCU_Microchip_PIC12:PIC12CE673-IP
-MCU_Microchip_PIC12:PIC12CE674-IJW
-MCU_Microchip_PIC12:PIC12CE674-IP
-MCU_Microchip_PIC12:PIC12CR509A-IP
-MCU_Microchip_PIC12:PIC12CR509A-ISM
-MCU_Microchip_PIC12:PIC12CR509A-ISN
-MCU_Microchip_PIC12:PIC12F1501-IMC
-MCU_Microchip_PIC12:PIC12F1501-IMS
-MCU_Microchip_PIC12:PIC12F1501-IP
-MCU_Microchip_PIC12:PIC12F1501-ISN
-MCU_Microchip_PIC12:PIC12F1822-IMC
-MCU_Microchip_PIC12:PIC12F1822-IP
-MCU_Microchip_PIC12:PIC12F1822-ISN
-MCU_Microchip_PIC12:PIC12F1840-IMC
-MCU_Microchip_PIC12:PIC12F1840-IP
-MCU_Microchip_PIC12:PIC12F1840-ISN
-MCU_Microchip_PIC12:PIC12F508-IMC
-MCU_Microchip_PIC12:PIC12F508-IMS
-MCU_Microchip_PIC12:PIC12F508-IP
-MCU_Microchip_PIC12:PIC12F508-ISN
-MCU_Microchip_PIC12:PIC12F509-IMC
-MCU_Microchip_PIC12:PIC12F509-IMS
-MCU_Microchip_PIC12:PIC12F509-IP
-MCU_Microchip_PIC12:PIC12F509-ISN
-MCU_Microchip_PIC12:PIC12F510-IMC
-MCU_Microchip_PIC12:PIC12F510-IMS
-MCU_Microchip_PIC12:PIC12F510-IP
-MCU_Microchip_PIC12:PIC12F510-ISN
-MCU_Microchip_PIC12:PIC12F519-IMC
-MCU_Microchip_PIC12:PIC12F519-IMS
-MCU_Microchip_PIC12:PIC12F519-IP
-MCU_Microchip_PIC12:PIC12F519-ISN
-MCU_Microchip_PIC12:PIC12F609-IMC
-MCU_Microchip_PIC12:PIC12F609-IMS
-MCU_Microchip_PIC12:PIC12F609-IP
-MCU_Microchip_PIC12:PIC12F609-ISN
-MCU_Microchip_PIC12:PIC12F615-IMC
-MCU_Microchip_PIC12:PIC12F615-IMS
-MCU_Microchip_PIC12:PIC12F615-IP
-MCU_Microchip_PIC12:PIC12F615-ISN
-MCU_Microchip_PIC12:PIC12F617-IMC
-MCU_Microchip_PIC12:PIC12F617-IMS
-MCU_Microchip_PIC12:PIC12F617-IP
-MCU_Microchip_PIC12:PIC12F617-ISN
-MCU_Microchip_PIC12:PIC12F629-IMC
-MCU_Microchip_PIC12:PIC12F629-IMS
-MCU_Microchip_PIC12:PIC12F629-IP
-MCU_Microchip_PIC12:PIC12F629-ISN
-MCU_Microchip_PIC12:PIC12F635-IMC
-MCU_Microchip_PIC12:PIC12F635-IMS
-MCU_Microchip_PIC12:PIC12F635-IP
-MCU_Microchip_PIC12:PIC12F635-ISN
-MCU_Microchip_PIC12:PIC12F675-IMC
-MCU_Microchip_PIC12:PIC12F675-IMS
-MCU_Microchip_PIC12:PIC12F675-IP
-MCU_Microchip_PIC12:PIC12F675-ISN
-MCU_Microchip_PIC12:PIC12F683-IMC
-MCU_Microchip_PIC12:PIC12F683-IMS
-MCU_Microchip_PIC12:PIC12F683-IP
-MCU_Microchip_PIC12:PIC12F683-ISN
-MCU_Microchip_PIC12:PIC12F752-IMC
-MCU_Microchip_PIC12:PIC12F752-IP
-MCU_Microchip_PIC12:PIC12F752-ISN
-MCU_Microchip_PIC12:PIC12HV609-IMC
-MCU_Microchip_PIC12:PIC12HV609-IMS
-MCU_Microchip_PIC12:PIC12HV609-IP
-MCU_Microchip_PIC12:PIC12HV609-ISN
-MCU_Microchip_PIC12:PIC12HV615-IMC
-MCU_Microchip_PIC12:PIC12HV615-IMS
-MCU_Microchip_PIC12:PIC12HV615-IP
-MCU_Microchip_PIC12:PIC12HV615-ISN
-MCU_Microchip_PIC12:PIC12HV752-IMC
-MCU_Microchip_PIC12:PIC12HV752-IP
-MCU_Microchip_PIC12:PIC12HV752-ISN
-MCU_Microchip_PIC12:PIC12LF1501-IMC
-MCU_Microchip_PIC12:PIC12LF1501-IMS
-MCU_Microchip_PIC12:PIC12LF1501-IP
-MCU_Microchip_PIC12:PIC12LF1501-ISN
-MCU_Microchip_PIC12:PIC12LF1822-IMC
-MCU_Microchip_PIC12:PIC12LF1822-IP
-MCU_Microchip_PIC12:PIC12LF1822-ISN
-MCU_Microchip_PIC12:PIC12LF1840-IMC
-MCU_Microchip_PIC12:PIC12LF1840-IP
-MCU_Microchip_PIC12:PIC12LF1840-ISN
-MCU_Microchip_PIC12:PIC12LF1840T48-IST
+MCU_Microchip_PIC12:PIC12C508-xJW
+MCU_Microchip_PIC12:PIC12C508-xP
+MCU_Microchip_PIC12:PIC12C508-xSM
+MCU_Microchip_PIC12:PIC12C508A-xJW
+MCU_Microchip_PIC12:PIC12C508A-xP
+MCU_Microchip_PIC12:PIC12C508A-xSM
+MCU_Microchip_PIC12:PIC12C508A-xSN
+MCU_Microchip_PIC12:PIC12C509-xJW
+MCU_Microchip_PIC12:PIC12C509-xP
+MCU_Microchip_PIC12:PIC12C509-xSM
+MCU_Microchip_PIC12:PIC12C509A-xJW
+MCU_Microchip_PIC12:PIC12C509A-xP
+MCU_Microchip_PIC12:PIC12C509A-xSM
+MCU_Microchip_PIC12:PIC12C509A-xSN
+MCU_Microchip_PIC12:PIC12C671-xJW
+MCU_Microchip_PIC12:PIC12C671-xP
+MCU_Microchip_PIC12:PIC12C671-xSN
+MCU_Microchip_PIC12:PIC12C672-xJW
+MCU_Microchip_PIC12:PIC12C672-xP
+MCU_Microchip_PIC12:PIC12C672-xSN
+MCU_Microchip_PIC12:PIC12CE518-xJW
+MCU_Microchip_PIC12:PIC12CE518-xP
+MCU_Microchip_PIC12:PIC12CE518-xSM
+MCU_Microchip_PIC12:PIC12CE518-xSN
+MCU_Microchip_PIC12:PIC12CE519-xJW
+MCU_Microchip_PIC12:PIC12CE519-xP
+MCU_Microchip_PIC12:PIC12CE519-xSM
+MCU_Microchip_PIC12:PIC12CE519-xSN
+MCU_Microchip_PIC12:PIC12CE673-xJW
+MCU_Microchip_PIC12:PIC12CE673-xP
+MCU_Microchip_PIC12:PIC12CE674-xJW
+MCU_Microchip_PIC12:PIC12CE674-xP
+MCU_Microchip_PIC12:PIC12CR509A-xP
+MCU_Microchip_PIC12:PIC12CR509A-xSM
+MCU_Microchip_PIC12:PIC12CR509A-xSN
+MCU_Microchip_PIC12:PIC12F1501-xMC
+MCU_Microchip_PIC12:PIC12F1501-xMS
+MCU_Microchip_PIC12:PIC12F1501-xP
+MCU_Microchip_PIC12:PIC12F1501-xSN
+MCU_Microchip_PIC12:PIC12F1822-xMC
+MCU_Microchip_PIC12:PIC12F1822-xP
+MCU_Microchip_PIC12:PIC12F1822-xSN
+MCU_Microchip_PIC12:PIC12F1840-xMC
+MCU_Microchip_PIC12:PIC12F1840-xP
+MCU_Microchip_PIC12:PIC12F1840-xSN
+MCU_Microchip_PIC12:PIC12F508-xMC
+MCU_Microchip_PIC12:PIC12F508-xMS
+MCU_Microchip_PIC12:PIC12F508-xP
+MCU_Microchip_PIC12:PIC12F508-xSN
+MCU_Microchip_PIC12:PIC12F509-xMC
+MCU_Microchip_PIC12:PIC12F509-xMS
+MCU_Microchip_PIC12:PIC12F509-xP
+MCU_Microchip_PIC12:PIC12F509-xSN
+MCU_Microchip_PIC12:PIC12F510-xMC
+MCU_Microchip_PIC12:PIC12F510-xMS
+MCU_Microchip_PIC12:PIC12F510-xP
+MCU_Microchip_PIC12:PIC12F510-xSN
+MCU_Microchip_PIC12:PIC12F519-xMC
+MCU_Microchip_PIC12:PIC12F519-xMS
+MCU_Microchip_PIC12:PIC12F519-xP
+MCU_Microchip_PIC12:PIC12F519-xSN
+MCU_Microchip_PIC12:PIC12F609-xMC
+MCU_Microchip_PIC12:PIC12F609-xMS
+MCU_Microchip_PIC12:PIC12F609-xP
+MCU_Microchip_PIC12:PIC12F609-xSN
+MCU_Microchip_PIC12:PIC12F615-xMC
+MCU_Microchip_PIC12:PIC12F615-xMS
+MCU_Microchip_PIC12:PIC12F615-xP
+MCU_Microchip_PIC12:PIC12F615-xSN
+MCU_Microchip_PIC12:PIC12F617-xMC
+MCU_Microchip_PIC12:PIC12F617-xMS
+MCU_Microchip_PIC12:PIC12F617-xP
+MCU_Microchip_PIC12:PIC12F617-xSN
+MCU_Microchip_PIC12:PIC12F629-xMC
+MCU_Microchip_PIC12:PIC12F629-xMS
+MCU_Microchip_PIC12:PIC12F629-xP
+MCU_Microchip_PIC12:PIC12F629-xSN
+MCU_Microchip_PIC12:PIC12F635-xMC
+MCU_Microchip_PIC12:PIC12F635-xMS
+MCU_Microchip_PIC12:PIC12F635-xP
+MCU_Microchip_PIC12:PIC12F635-xSN
+MCU_Microchip_PIC12:PIC12F675-xMC
+MCU_Microchip_PIC12:PIC12F675-xMS
+MCU_Microchip_PIC12:PIC12F675-xP
+MCU_Microchip_PIC12:PIC12F675-xSN
+MCU_Microchip_PIC12:PIC12F683-xMC
+MCU_Microchip_PIC12:PIC12F683-xMS
+MCU_Microchip_PIC12:PIC12F683-xP
+MCU_Microchip_PIC12:PIC12F683-xSN
+MCU_Microchip_PIC12:PIC12F752-xMC
+MCU_Microchip_PIC12:PIC12F752-xP
+MCU_Microchip_PIC12:PIC12F752-xSN
+MCU_Microchip_PIC12:PIC12HV609-xMC
+MCU_Microchip_PIC12:PIC12HV609-xMS
+MCU_Microchip_PIC12:PIC12HV609-xP
+MCU_Microchip_PIC12:PIC12HV609-xSN
+MCU_Microchip_PIC12:PIC12HV615-xMC
+MCU_Microchip_PIC12:PIC12HV615-xMS
+MCU_Microchip_PIC12:PIC12HV615-xP
+MCU_Microchip_PIC12:PIC12HV615-xSN
+MCU_Microchip_PIC12:PIC12HV752-xMC
+MCU_Microchip_PIC12:PIC12HV752-xP
+MCU_Microchip_PIC12:PIC12HV752-xSN
+MCU_Microchip_PIC12:PIC12LF1501-xMC
+MCU_Microchip_PIC12:PIC12LF1501-xMS
+MCU_Microchip_PIC12:PIC12LF1501-xP
+MCU_Microchip_PIC12:PIC12LF1501-xSN
+MCU_Microchip_PIC12:PIC12LF1822-xMC
+MCU_Microchip_PIC12:PIC12LF1822-xP
+MCU_Microchip_PIC12:PIC12LF1822-xSN
+MCU_Microchip_PIC12:PIC12LF1840-xMC
+MCU_Microchip_PIC12:PIC12LF1840-xP
+MCU_Microchip_PIC12:PIC12LF1840-xSN
+MCU_Microchip_PIC12:PIC12LF1840T48-xST
MCU_Microchip_PIC16:PIC16C505-IP
MCU_Microchip_PIC16:PIC16C505-ISL
MCU_Microchip_PIC16:PIC16C505-IST
@@ -8790,6 +9813,7 @@ MCU_Microchip_PIC16:PIC16F1526-IMR
MCU_Microchip_PIC16:PIC16F1526-IPT
MCU_Microchip_PIC16:PIC16F1527-IMR
MCU_Microchip_PIC16:PIC16F1527-IPT
+MCU_Microchip_PIC16:PIC16F15323-xSL
MCU_Microchip_PIC16:PIC16F15356-xML
MCU_Microchip_PIC16:PIC16F15356-xMV
MCU_Microchip_PIC16:PIC16F15356-xSO
@@ -9325,7 +10349,9 @@ MCU_Module:Adafruit_Feather_M0_Wifi
MCU_Module:Adafruit_Feather_WICED_Wifi
MCU_Module:Adafruit_HUZZAH_ESP8266_breakout
MCU_Module:Arduino_Leonardo
+MCU_Module:Arduino_Nano_ESP32
MCU_Module:Arduino_Nano_Every
+MCU_Module:Arduino_Nano_RP2040_Connect
MCU_Module:Arduino_Nano_v2.x
MCU_Module:Arduino_Nano_v3.x
MCU_Module:Arduino_UNO_R2
@@ -9334,6 +10360,7 @@ MCU_Module:CHIP
MCU_Module:CHIP-PRO
MCU_Module:Carambola2
MCU_Module:Electrosmith_Daisy_Seed_Rev4
+MCU_Module:Google_Coral
MCU_Module:Maple_Mini
MCU_Module:NUCLEO144-F207ZG
MCU_Module:NUCLEO144-F412ZG
@@ -9349,6 +10376,7 @@ MCU_Module:NUCLEO144-H743ZI
MCU_Module:NUCLEO64-F411RE
MCU_Module:OPOS6UL
MCU_Module:OPOS6UL_NANO
+MCU_Module:Olimex_MOD-WIFI-ESP8266-DEV
MCU_Module:Omega2+
MCU_Module:Omega2S
MCU_Module:Omega2S+
@@ -9358,19 +10386,29 @@ MCU_Module:RaspberryPi-CM3
MCU_Module:RaspberryPi-CM3+
MCU_Module:RaspberryPi-CM3+L
MCU_Module:RaspberryPi-CM3-L
+MCU_Module:RaspberryPi_Pico
+MCU_Module:RaspberryPi_Pico_Debug
+MCU_Module:RaspberryPi_Pico_Extensive
+MCU_Module:RaspberryPi_Pico_W
+MCU_Module:RaspberryPi_Pico_W_Debug
+MCU_Module:RaspberryPi_Pico_W_Extensive
MCU_Module:Sipeed-M1
+MCU_Module:Sipeed-M1W
MCU_Module:VisionSOM-6UL
MCU_Module:VisionSOM-6ULL
MCU_Module:VisionSOM-RT
MCU_Module:VisionSOM-STM32MP1
-MCU_Module:WeMos_D1_mini
MCU_Nordic:nRF51x22-QFxx
MCU_Nordic:nRF52810-QCxx
MCU_Nordic:nRF52810-QFxx
MCU_Nordic:nRF52811-QCxx
MCU_Nordic:nRF52820-QDxx
MCU_Nordic:nRF52832-QFxx
+MCU_Nordic:nRF52833_QDxx
+MCU_Nordic:nRF52833_QIxx
MCU_Nordic:nRF52840
+MCU_Nordic:nRF5340-QKxx
+MCU_Nordic:nRF9160-SIxA
MCU_NXP_ColdFire:MCF5211CAE66
MCU_NXP_ColdFire:MCF5212CAE66
MCU_NXP_ColdFire:MCF5213-LQFP100
@@ -9846,11 +10884,14 @@ MCU_NXP_S08:MC9S08SV8CLC
MCU_Parallax:P8X32A-D40
MCU_Parallax:P8X32A-M44
MCU_Parallax:P8X32A-Q44
+MCU_Puya:PY32F002AF15P
MCU_RaspberryPi:RP2040
MCU_Renesas_Synergy_S1:R7FS12878xA01CFL
MCU_SiFive:FE310-G000
MCU_SiFive:FE310-G002
MCU_SiFive:FU540-C000
+MCU_SiliconLabs:C8051F320-GQ
+MCU_SiliconLabs:C8051F321-GM
MCU_SiliconLabs:C8051F380-GQ
MCU_SiliconLabs:C8051F381-GM
MCU_SiliconLabs:C8051F381-GQ
@@ -9870,6 +10911,14 @@ MCU_SiliconLabs:EFM32HG108F32G-C-QFN24
MCU_SiliconLabs:EFM32HG108F64G-C-QFN24
MCU_SiliconLabs:EFM32HG308F32G-C-QFN24
MCU_SiliconLabs:EFM32HG308F64G-C-QFN24
+MCU_SiliconLabs:EFM32ZG108F16-B-QFN24
+MCU_SiliconLabs:EFM32ZG108F32-B-QFN24
+MCU_SiliconLabs:EFM32ZG108F4-B-QFN24
+MCU_SiliconLabs:EFM32ZG108F8-B-QFN24
+MCU_SiliconLabs:EFM32ZG110F16-B-QFN24
+MCU_SiliconLabs:EFM32ZG110F32-B-QFN24
+MCU_SiliconLabs:EFM32ZG110F4-B-QFN24
+MCU_SiliconLabs:EFM32ZG110F8-B-QFN24
MCU_SiliconLabs:EFM8BB10F2A-A-QFN20
MCU_SiliconLabs:EFM8BB10F2G-A-QFN20
MCU_SiliconLabs:EFM8BB10F2I-A-QFN20
@@ -9888,12 +10937,17 @@ MCU_SiliconLabs:EFM8LB12F64E-C-QFP32
MCU_SiliconLabs:EFM8UB30F40G-A-QFN20
MCU_SiliconLabs:EFM8UB31F40G-A-QFN24
MCU_SiliconLabs:EFM8UB31F40G-A-QSOP24
+MCU_SiliconLabs:EFR32xG23xxxxF512xM48
MCU_STC:IAP15W205S-35x-SOP16
MCU_STC:IRC15W207S-35x-SOP16
MCU_STC:STC15W201S-35x-SOP16
MCU_STC:STC15W202S-35x-SOP16
MCU_STC:STC15W203S-35x-SOP16
MCU_STC:STC15W204S-35x-SOP16
+MCU_STC:STC8G1K04-38I-TSSOP20
+MCU_STC:STC8G1K08-38I-TSSOP20
+MCU_STC:STC8G1K08A-36I-DFN8
+MCU_STC:STC8G1K17-38I-TSSOP20
MCU_ST_STM32C0:STM32C011D6Yx
MCU_ST_STM32C0:STM32C011F4Px
MCU_ST_STM32C0:STM32C011F4Ux
@@ -9922,6 +10976,35 @@ MCU_ST_STM32C0:STM32C031K6Tx
MCU_ST_STM32C0:STM32C031K6Ux
MCU_ST_STM32C0:STM32C031K_4-6_Tx
MCU_ST_STM32C0:STM32C031K_4-6_Ux
+MCU_ST_STM32C0:STM32C071C8Tx
+MCU_ST_STM32C0:STM32C071C8TxN
+MCU_ST_STM32C0:STM32C071C8Ux
+MCU_ST_STM32C0:STM32C071C8UxN
+MCU_ST_STM32C0:STM32C071CBTx
+MCU_ST_STM32C0:STM32C071CBTxN
+MCU_ST_STM32C0:STM32C071CBUx
+MCU_ST_STM32C0:STM32C071CBUxN
+MCU_ST_STM32C0:STM32C071F8Px
+MCU_ST_STM32C0:STM32C071F8PxN
+MCU_ST_STM32C0:STM32C071FBPx
+MCU_ST_STM32C0:STM32C071FBPxN
+MCU_ST_STM32C0:STM32C071G8Ux
+MCU_ST_STM32C0:STM32C071G8UxN
+MCU_ST_STM32C0:STM32C071GBUx
+MCU_ST_STM32C0:STM32C071GBUxN
+MCU_ST_STM32C0:STM32C071K8Tx
+MCU_ST_STM32C0:STM32C071K8TxN
+MCU_ST_STM32C0:STM32C071K8Ux
+MCU_ST_STM32C0:STM32C071K8UxN
+MCU_ST_STM32C0:STM32C071KBTx
+MCU_ST_STM32C0:STM32C071KBTxN
+MCU_ST_STM32C0:STM32C071KBUx
+MCU_ST_STM32C0:STM32C071KBUxN
+MCU_ST_STM32C0:STM32C071R8Tx
+MCU_ST_STM32C0:STM32C071R8TxN
+MCU_ST_STM32C0:STM32C071RBIxN
+MCU_ST_STM32C0:STM32C071RBTx
+MCU_ST_STM32C0:STM32C071RBTxN
MCU_ST_STM32F0:STM32F030C6Tx
MCU_ST_STM32F0:STM32F030C8Tx
MCU_ST_STM32F0:STM32F030CCTx
@@ -10854,6 +11937,7 @@ MCU_ST_STM32F7:STM32F767VIHx
MCU_ST_STM32F7:STM32F767VITx
MCU_ST_STM32F7:STM32F767ZGTx
MCU_ST_STM32F7:STM32F767ZITx
+MCU_ST_STM32F7:STM32F768AIYx
MCU_ST_STM32F7:STM32F769AGYx
MCU_ST_STM32F7:STM32F769AIYx
MCU_ST_STM32F7:STM32F769A_G-I_Yx
@@ -10978,41 +12062,17 @@ MCU_ST_STM32G0:STM32G061K_6-8_Ux
MCU_ST_STM32G0:STM32G070CBTx
MCU_ST_STM32G0:STM32G070KBTx
MCU_ST_STM32G0:STM32G070RBTx
-MCU_ST_STM32G0:STM32G071C6Tx
-MCU_ST_STM32G0:STM32G071C6Ux
-MCU_ST_STM32G0:STM32G071C8Tx
-MCU_ST_STM32G0:STM32G071C8Ux
-MCU_ST_STM32G0:STM32G071CBTx
-MCU_ST_STM32G0:STM32G071CBUx
-MCU_ST_STM32G0:STM32G071C_6-8-B_Tx
-MCU_ST_STM32G0:STM32G071C_6-8-B_Ux
MCU_ST_STM32G0:STM32G071EBYx
-MCU_ST_STM32G0:STM32G071G6Ux
-MCU_ST_STM32G0:STM32G071G8Ux
MCU_ST_STM32G0:STM32G071G8UxN
-MCU_ST_STM32G0:STM32G071GBUx
MCU_ST_STM32G0:STM32G071GBUxN
-MCU_ST_STM32G0:STM32G071G_6-8-B_Ux
MCU_ST_STM32G0:STM32G071G_8-B_UxN
-MCU_ST_STM32G0:STM32G071K6Tx
-MCU_ST_STM32G0:STM32G071K6Ux
-MCU_ST_STM32G0:STM32G071K8Tx
MCU_ST_STM32G0:STM32G071K8TxN
-MCU_ST_STM32G0:STM32G071K8Ux
MCU_ST_STM32G0:STM32G071K8UxN
-MCU_ST_STM32G0:STM32G071KBTx
MCU_ST_STM32G0:STM32G071KBTxN
-MCU_ST_STM32G0:STM32G071KBUx
MCU_ST_STM32G0:STM32G071KBUxN
-MCU_ST_STM32G0:STM32G071K_6-8-B_Tx
-MCU_ST_STM32G0:STM32G071K_6-8-B_Ux
MCU_ST_STM32G0:STM32G071K_8-B_TxN
MCU_ST_STM32G0:STM32G071K_8-B_UxN
-MCU_ST_STM32G0:STM32G071R6Tx
-MCU_ST_STM32G0:STM32G071R8Tx
MCU_ST_STM32G0:STM32G071RBIx
-MCU_ST_STM32G0:STM32G071RBTx
-MCU_ST_STM32G0:STM32G071R_6-8-B_Tx
MCU_ST_STM32G0:STM32G081CBTx
MCU_ST_STM32G0:STM32G081CBUx
MCU_ST_STM32G0:STM32G081EBYx
@@ -11133,6 +12193,7 @@ MCU_ST_STM32G4:STM32G431C6Ux
MCU_ST_STM32G4:STM32G431C8Tx
MCU_ST_STM32G4:STM32G431C8Ux
MCU_ST_STM32G4:STM32G431CBTx
+MCU_ST_STM32G4:STM32G431CBTxZ
MCU_ST_STM32G4:STM32G431CBUx
MCU_ST_STM32G4:STM32G431CBYx
MCU_ST_STM32G4:STM32G431C_6-8-B_Tx
@@ -11155,6 +12216,7 @@ MCU_ST_STM32G4:STM32G431R8Ix
MCU_ST_STM32G4:STM32G431R8Tx
MCU_ST_STM32G4:STM32G431RBIx
MCU_ST_STM32G4:STM32G431RBTx
+MCU_ST_STM32G4:STM32G431RBTxZ
MCU_ST_STM32G4:STM32G431R_6-8-B_Ix
MCU_ST_STM32G4:STM32G431R_6-8-B_Tx
MCU_ST_STM32G4:STM32G431V6Tx
@@ -11190,10 +12252,12 @@ MCU_ST_STM32G4:STM32G473P_B-C-E_Ix
MCU_ST_STM32G4:STM32G473QBTx
MCU_ST_STM32G4:STM32G473QCTx
MCU_ST_STM32G4:STM32G473QETx
+MCU_ST_STM32G4:STM32G473QETxZ
MCU_ST_STM32G4:STM32G473Q_B-C-E_Tx
MCU_ST_STM32G4:STM32G473RBTx
MCU_ST_STM32G4:STM32G473RCTx
MCU_ST_STM32G4:STM32G473RETx
+MCU_ST_STM32G4:STM32G473RETxZ
MCU_ST_STM32G4:STM32G473R_B-C-E_Tx
MCU_ST_STM32G4:STM32G473VBHx
MCU_ST_STM32G4:STM32G473VBTx
@@ -11273,6 +12337,7 @@ MCU_ST_STM32G4:STM32G491RCIx
MCU_ST_STM32G4:STM32G491RCTx
MCU_ST_STM32G4:STM32G491REIx
MCU_ST_STM32G4:STM32G491RETx
+MCU_ST_STM32G4:STM32G491RETxZ
MCU_ST_STM32G4:STM32G491REYx
MCU_ST_STM32G4:STM32G491R_C-E_Ix
MCU_ST_STM32G4:STM32G491R_C-E_Tx
@@ -11288,6 +12353,79 @@ MCU_ST_STM32G4:STM32G4A1REIx
MCU_ST_STM32G4:STM32G4A1RETx
MCU_ST_STM32G4:STM32G4A1REYx
MCU_ST_STM32G4:STM32G4A1VETx
+MCU_ST_STM32H5:STM32H503CBTx
+MCU_ST_STM32H5:STM32H503CBUx
+MCU_ST_STM32H5:STM32H503EBYx
+MCU_ST_STM32H5:STM32H503KBUx
+MCU_ST_STM32H5:STM32H503RBTx
+MCU_ST_STM32H5:STM32H523CCTx
+MCU_ST_STM32H5:STM32H523CCUx
+MCU_ST_STM32H5:STM32H523CETx
+MCU_ST_STM32H5:STM32H523CEUx
+MCU_ST_STM32H5:STM32H523RCTx
+MCU_ST_STM32H5:STM32H523RETx
+MCU_ST_STM32H5:STM32H523VCIx
+MCU_ST_STM32H5:STM32H523VCTx
+MCU_ST_STM32H5:STM32H523VEIx
+MCU_ST_STM32H5:STM32H523VETx
+MCU_ST_STM32H5:STM32H523ZCJx
+MCU_ST_STM32H5:STM32H523ZCTx
+MCU_ST_STM32H5:STM32H523ZEJx
+MCU_ST_STM32H5:STM32H523ZETx
+MCU_ST_STM32H5:STM32H533CETx
+MCU_ST_STM32H5:STM32H533CEUx
+MCU_ST_STM32H5:STM32H533RETx
+MCU_ST_STM32H5:STM32H533VEIx
+MCU_ST_STM32H5:STM32H533VETx
+MCU_ST_STM32H5:STM32H533ZEJx
+MCU_ST_STM32H5:STM32H533ZETx
+MCU_ST_STM32H5:STM32H562AGIx
+MCU_ST_STM32H5:STM32H562AIIx
+MCU_ST_STM32H5:STM32H562IGKx
+MCU_ST_STM32H5:STM32H562IGTx
+MCU_ST_STM32H5:STM32H562IIKx
+MCU_ST_STM32H5:STM32H562IITx
+MCU_ST_STM32H5:STM32H562RGTx
+MCU_ST_STM32H5:STM32H562RGVx
+MCU_ST_STM32H5:STM32H562RITx
+MCU_ST_STM32H5:STM32H562RIVx
+MCU_ST_STM32H5:STM32H562VGTx
+MCU_ST_STM32H5:STM32H562VITx
+MCU_ST_STM32H5:STM32H562ZGTx
+MCU_ST_STM32H5:STM32H562ZITx
+MCU_ST_STM32H5:STM32H563AGIx
+MCU_ST_STM32H5:STM32H563AIIx
+MCU_ST_STM32H5:STM32H563AIIxQ
+MCU_ST_STM32H5:STM32H563IGKx
+MCU_ST_STM32H5:STM32H563IGTx
+MCU_ST_STM32H5:STM32H563IIKx
+MCU_ST_STM32H5:STM32H563IIKxQ
+MCU_ST_STM32H5:STM32H563IITx
+MCU_ST_STM32H5:STM32H563IITxQ
+MCU_ST_STM32H5:STM32H563MIYxQ
+MCU_ST_STM32H5:STM32H563RGTx
+MCU_ST_STM32H5:STM32H563RGVx
+MCU_ST_STM32H5:STM32H563RITx
+MCU_ST_STM32H5:STM32H563RIVx
+MCU_ST_STM32H5:STM32H563VGTx
+MCU_ST_STM32H5:STM32H563VITx
+MCU_ST_STM32H5:STM32H563VITxQ
+MCU_ST_STM32H5:STM32H563ZGTx
+MCU_ST_STM32H5:STM32H563ZITx
+MCU_ST_STM32H5:STM32H563ZITxQ
+MCU_ST_STM32H5:STM32H573AIIx
+MCU_ST_STM32H5:STM32H573AIIxQ
+MCU_ST_STM32H5:STM32H573IIKx
+MCU_ST_STM32H5:STM32H573IIKxQ
+MCU_ST_STM32H5:STM32H573IITx
+MCU_ST_STM32H5:STM32H573IITxQ
+MCU_ST_STM32H5:STM32H573MIYxQ
+MCU_ST_STM32H5:STM32H573RITx
+MCU_ST_STM32H5:STM32H573RIVx
+MCU_ST_STM32H5:STM32H573VITx
+MCU_ST_STM32H5:STM32H573VITxQ
+MCU_ST_STM32H5:STM32H573ZITx
+MCU_ST_STM32H5:STM32H573ZITxQ
MCU_ST_STM32H7:STM32H723VEHx
MCU_ST_STM32H7:STM32H723VETx
MCU_ST_STM32H7:STM32H723VGHx
@@ -11479,6 +12617,40 @@ MCU_ST_STM32H7:STM32H7B3VITx
MCU_ST_STM32H7:STM32H7B3VITxQ
MCU_ST_STM32H7:STM32H7B3ZITx
MCU_ST_STM32H7:STM32H7B3ZITxQ
+MCU_ST_STM32H7:STM32H7R3A8Ix
+MCU_ST_STM32H7:STM32H7R3I8Kx
+MCU_ST_STM32H7:STM32H7R3I8Tx
+MCU_ST_STM32H7:STM32H7R3L8Hx
+MCU_ST_STM32H7:STM32H7R3L8HxH
+MCU_ST_STM32H7:STM32H7R3R8Vx
+MCU_ST_STM32H7:STM32H7R3V8Hx
+MCU_ST_STM32H7:STM32H7R3V8Tx
+MCU_ST_STM32H7:STM32H7R3V8Yx
+MCU_ST_STM32H7:STM32H7R3Z8Jx
+MCU_ST_STM32H7:STM32H7R3Z8Tx
+MCU_ST_STM32H7:STM32H7R7A8Ix
+MCU_ST_STM32H7:STM32H7R7I8Kx
+MCU_ST_STM32H7:STM32H7R7I8Tx
+MCU_ST_STM32H7:STM32H7R7L8Hx
+MCU_ST_STM32H7:STM32H7R7L8HxH
+MCU_ST_STM32H7:STM32H7R7Z8Jx
+MCU_ST_STM32H7:STM32H7S3A8Ix
+MCU_ST_STM32H7:STM32H7S3I8Kx
+MCU_ST_STM32H7:STM32H7S3I8Tx
+MCU_ST_STM32H7:STM32H7S3L8Hx
+MCU_ST_STM32H7:STM32H7S3L8HxH
+MCU_ST_STM32H7:STM32H7S3R8Vx
+MCU_ST_STM32H7:STM32H7S3V8Hx
+MCU_ST_STM32H7:STM32H7S3V8Tx
+MCU_ST_STM32H7:STM32H7S3V8Yx
+MCU_ST_STM32H7:STM32H7S3Z8Jx
+MCU_ST_STM32H7:STM32H7S3Z8Tx
+MCU_ST_STM32H7:STM32H7S7A8Ix
+MCU_ST_STM32H7:STM32H7S7I8Kx
+MCU_ST_STM32H7:STM32H7S7I8Tx
+MCU_ST_STM32H7:STM32H7S7L8Hx
+MCU_ST_STM32H7:STM32H7S7L8HxH
+MCU_ST_STM32H7:STM32H7S7Z8Jx
MCU_ST_STM32L0:STM32L010C6Tx
MCU_ST_STM32L0:STM32L010F4Px
MCU_ST_STM32L0:STM32L010K4Tx
@@ -12054,6 +13226,7 @@ MCU_ST_STM32L4:STM32L476R_C-E-G_Tx
MCU_ST_STM32L4:STM32L476VCTx
MCU_ST_STM32L4:STM32L476VETx
MCU_ST_STM32L4:STM32L476VGTx
+MCU_ST_STM32L4:STM32L476VGYxP
MCU_ST_STM32L4:STM32L476V_C-E-G_Tx
MCU_ST_STM32L4:STM32L476ZETx
MCU_ST_STM32L4:STM32L476ZGJx
@@ -12245,6 +13418,42 @@ MCU_ST_STM32L5:STM32L562VETx
MCU_ST_STM32L5:STM32L562VETxQ
MCU_ST_STM32L5:STM32L562ZETx
MCU_ST_STM32L5:STM32L562ZETxQ
+MCU_ST_STM32MP1:STM32MP131AAEx
+MCU_ST_STM32MP1:STM32MP131AAFx
+MCU_ST_STM32MP1:STM32MP131AAGx
+MCU_ST_STM32MP1:STM32MP131CAEx
+MCU_ST_STM32MP1:STM32MP131CAFx
+MCU_ST_STM32MP1:STM32MP131CAGx
+MCU_ST_STM32MP1:STM32MP131DAEx
+MCU_ST_STM32MP1:STM32MP131DAFx
+MCU_ST_STM32MP1:STM32MP131DAGx
+MCU_ST_STM32MP1:STM32MP131FAEx
+MCU_ST_STM32MP1:STM32MP131FAFx
+MCU_ST_STM32MP1:STM32MP131FAGx
+MCU_ST_STM32MP1:STM32MP133AAEx
+MCU_ST_STM32MP1:STM32MP133AAFx
+MCU_ST_STM32MP1:STM32MP133AAGx
+MCU_ST_STM32MP1:STM32MP133CAEx
+MCU_ST_STM32MP1:STM32MP133CAFx
+MCU_ST_STM32MP1:STM32MP133CAGx
+MCU_ST_STM32MP1:STM32MP133DAEx
+MCU_ST_STM32MP1:STM32MP133DAFx
+MCU_ST_STM32MP1:STM32MP133DAGx
+MCU_ST_STM32MP1:STM32MP133FAEx
+MCU_ST_STM32MP1:STM32MP133FAFx
+MCU_ST_STM32MP1:STM32MP133FAGx
+MCU_ST_STM32MP1:STM32MP135AAEx
+MCU_ST_STM32MP1:STM32MP135AAFx
+MCU_ST_STM32MP1:STM32MP135AAGx
+MCU_ST_STM32MP1:STM32MP135CAEx
+MCU_ST_STM32MP1:STM32MP135CAFx
+MCU_ST_STM32MP1:STM32MP135CAGx
+MCU_ST_STM32MP1:STM32MP135DAEx
+MCU_ST_STM32MP1:STM32MP135DAFx
+MCU_ST_STM32MP1:STM32MP135DAGx
+MCU_ST_STM32MP1:STM32MP135FAEx
+MCU_ST_STM32MP1:STM32MP135FAFx
+MCU_ST_STM32MP1:STM32MP135FAGx
MCU_ST_STM32MP1:STM32MP151AAAx
MCU_ST_STM32MP1:STM32MP151AABx
MCU_ST_STM32MP1:STM32MP151AACx
@@ -12293,6 +13502,103 @@ MCU_ST_STM32MP1:STM32MP157FAAx
MCU_ST_STM32MP1:STM32MP157FABx
MCU_ST_STM32MP1:STM32MP157FACx
MCU_ST_STM32MP1:STM32MP157FADx
+MCU_ST_STM32U0:STM32U031C6Tx
+MCU_ST_STM32U0:STM32U031C6Ux
+MCU_ST_STM32U0:STM32U031C8Tx
+MCU_ST_STM32U0:STM32U031C8Ux
+MCU_ST_STM32U0:STM32U031F4Px
+MCU_ST_STM32U0:STM32U031F6Px
+MCU_ST_STM32U0:STM32U031F8Px
+MCU_ST_STM32U0:STM32U031G6Yx
+MCU_ST_STM32U0:STM32U031G8Yx
+MCU_ST_STM32U0:STM32U031K4Ux
+MCU_ST_STM32U0:STM32U031K6Ux
+MCU_ST_STM32U0:STM32U031K8Ux
+MCU_ST_STM32U0:STM32U031R6Ix
+MCU_ST_STM32U0:STM32U031R6Tx
+MCU_ST_STM32U0:STM32U031R8Ix
+MCU_ST_STM32U0:STM32U031R8Tx
+MCU_ST_STM32U0:STM32U073C8Tx
+MCU_ST_STM32U0:STM32U073C8Ux
+MCU_ST_STM32U0:STM32U073CBTx
+MCU_ST_STM32U0:STM32U073CBUx
+MCU_ST_STM32U0:STM32U073CCTx
+MCU_ST_STM32U0:STM32U073CCUx
+MCU_ST_STM32U0:STM32U073H8Yx
+MCU_ST_STM32U0:STM32U073HBYx
+MCU_ST_STM32U0:STM32U073HCYx
+MCU_ST_STM32U0:STM32U073K8Ux
+MCU_ST_STM32U0:STM32U073KBUx
+MCU_ST_STM32U0:STM32U073KCUx
+MCU_ST_STM32U0:STM32U073M8Ix
+MCU_ST_STM32U0:STM32U073M8Tx
+MCU_ST_STM32U0:STM32U073MBIx
+MCU_ST_STM32U0:STM32U073MBTx
+MCU_ST_STM32U0:STM32U073MCIx
+MCU_ST_STM32U0:STM32U073MCTx
+MCU_ST_STM32U0:STM32U073R8Ix
+MCU_ST_STM32U0:STM32U073R8Tx
+MCU_ST_STM32U0:STM32U073RBIx
+MCU_ST_STM32U0:STM32U073RBTx
+MCU_ST_STM32U0:STM32U073RCIx
+MCU_ST_STM32U0:STM32U073RCTx
+MCU_ST_STM32U0:STM32U083CCTx
+MCU_ST_STM32U0:STM32U083CCUx
+MCU_ST_STM32U0:STM32U083HCYx
+MCU_ST_STM32U0:STM32U083KCUx
+MCU_ST_STM32U0:STM32U083MCIx
+MCU_ST_STM32U0:STM32U083MCTx
+MCU_ST_STM32U0:STM32U083RCIx
+MCU_ST_STM32U0:STM32U083RCTx
+MCU_ST_STM32U5:STM32U535CBTx
+MCU_ST_STM32U5:STM32U535CBTxQ
+MCU_ST_STM32U5:STM32U535CBUx
+MCU_ST_STM32U5:STM32U535CBUxQ
+MCU_ST_STM32U5:STM32U535CCTx
+MCU_ST_STM32U5:STM32U535CCTxQ
+MCU_ST_STM32U5:STM32U535CCUx
+MCU_ST_STM32U5:STM32U535CCUxQ
+MCU_ST_STM32U5:STM32U535CETx
+MCU_ST_STM32U5:STM32U535CETxQ
+MCU_ST_STM32U5:STM32U535CEUx
+MCU_ST_STM32U5:STM32U535CEUxQ
+MCU_ST_STM32U5:STM32U535JEYxQ
+MCU_ST_STM32U5:STM32U535NCYxQ
+MCU_ST_STM32U5:STM32U535NEYxQ
+MCU_ST_STM32U5:STM32U535RBIx
+MCU_ST_STM32U5:STM32U535RBIxQ
+MCU_ST_STM32U5:STM32U535RBTx
+MCU_ST_STM32U5:STM32U535RBTxQ
+MCU_ST_STM32U5:STM32U535RCIx
+MCU_ST_STM32U5:STM32U535RCIxQ
+MCU_ST_STM32U5:STM32U535RCTx
+MCU_ST_STM32U5:STM32U535RCTxQ
+MCU_ST_STM32U5:STM32U535REIx
+MCU_ST_STM32U5:STM32U535REIxQ
+MCU_ST_STM32U5:STM32U535RETx
+MCU_ST_STM32U5:STM32U535RETxQ
+MCU_ST_STM32U5:STM32U535VCIx
+MCU_ST_STM32U5:STM32U535VCIxQ
+MCU_ST_STM32U5:STM32U535VCTx
+MCU_ST_STM32U5:STM32U535VCTxQ
+MCU_ST_STM32U5:STM32U535VEIx
+MCU_ST_STM32U5:STM32U535VEIxQ
+MCU_ST_STM32U5:STM32U535VETx
+MCU_ST_STM32U5:STM32U535VETxQ
+MCU_ST_STM32U5:STM32U545CETx
+MCU_ST_STM32U5:STM32U545CETxQ
+MCU_ST_STM32U5:STM32U545CEUx
+MCU_ST_STM32U5:STM32U545CEUxQ
+MCU_ST_STM32U5:STM32U545JEYxQ
+MCU_ST_STM32U5:STM32U545NEYxQ
+MCU_ST_STM32U5:STM32U545REIx
+MCU_ST_STM32U5:STM32U545REIxQ
+MCU_ST_STM32U5:STM32U545RETx
+MCU_ST_STM32U5:STM32U545RETxQ
+MCU_ST_STM32U5:STM32U545VEIx
+MCU_ST_STM32U5:STM32U545VEIxQ
+MCU_ST_STM32U5:STM32U545VETx
+MCU_ST_STM32U5:STM32U545VETxQ
MCU_ST_STM32U5:STM32U575AGIx
MCU_ST_STM32U5:STM32U575AGIxQ
MCU_ST_STM32U5:STM32U575AIIx
@@ -12338,6 +13644,78 @@ MCU_ST_STM32U5:STM32U585VITx
MCU_ST_STM32U5:STM32U585VITxQ
MCU_ST_STM32U5:STM32U585ZITx
MCU_ST_STM32U5:STM32U585ZITxQ
+MCU_ST_STM32U5:STM32U595AIHx
+MCU_ST_STM32U5:STM32U595AIHxQ
+MCU_ST_STM32U5:STM32U595AJHx
+MCU_ST_STM32U5:STM32U595AJHxQ
+MCU_ST_STM32U5:STM32U595QIIx
+MCU_ST_STM32U5:STM32U595QIIxQ
+MCU_ST_STM32U5:STM32U595QJIx
+MCU_ST_STM32U5:STM32U595QJIxQ
+MCU_ST_STM32U5:STM32U595RITx
+MCU_ST_STM32U5:STM32U595RITxQ
+MCU_ST_STM32U5:STM32U595RJTx
+MCU_ST_STM32U5:STM32U595RJTxQ
+MCU_ST_STM32U5:STM32U595VITx
+MCU_ST_STM32U5:STM32U595VITxQ
+MCU_ST_STM32U5:STM32U595VJTx
+MCU_ST_STM32U5:STM32U595VJTxQ
+MCU_ST_STM32U5:STM32U595ZITx
+MCU_ST_STM32U5:STM32U595ZITxQ
+MCU_ST_STM32U5:STM32U595ZIYxQ
+MCU_ST_STM32U5:STM32U595ZJTx
+MCU_ST_STM32U5:STM32U595ZJTxQ
+MCU_ST_STM32U5:STM32U595ZJYxQ
+MCU_ST_STM32U5:STM32U599BJYxQ
+MCU_ST_STM32U5:STM32U599NIHxQ
+MCU_ST_STM32U5:STM32U599NJHxQ
+MCU_ST_STM32U5:STM32U599VITxQ
+MCU_ST_STM32U5:STM32U599VJTx
+MCU_ST_STM32U5:STM32U599VJTxQ
+MCU_ST_STM32U5:STM32U599ZITxQ
+MCU_ST_STM32U5:STM32U599ZIYxQ
+MCU_ST_STM32U5:STM32U599ZJTxQ
+MCU_ST_STM32U5:STM32U599ZJYxQ
+MCU_ST_STM32U5:STM32U5A5AJHx
+MCU_ST_STM32U5:STM32U5A5AJHxQ
+MCU_ST_STM32U5:STM32U5A5QIIxQ
+MCU_ST_STM32U5:STM32U5A5QJIx
+MCU_ST_STM32U5:STM32U5A5QJIxQ
+MCU_ST_STM32U5:STM32U5A5RJTx
+MCU_ST_STM32U5:STM32U5A5RJTxQ
+MCU_ST_STM32U5:STM32U5A5VJTx
+MCU_ST_STM32U5:STM32U5A5VJTxQ
+MCU_ST_STM32U5:STM32U5A5ZJTx
+MCU_ST_STM32U5:STM32U5A5ZJTxQ
+MCU_ST_STM32U5:STM32U5A5ZJYxQ
+MCU_ST_STM32U5:STM32U5A9BJYxQ
+MCU_ST_STM32U5:STM32U5A9NJHxQ
+MCU_ST_STM32U5:STM32U5A9VJTxQ
+MCU_ST_STM32U5:STM32U5A9ZJTxQ
+MCU_ST_STM32U5:STM32U5A9ZJYxQ
+MCU_ST_STM32U5:STM32U5F7VITx
+MCU_ST_STM32U5:STM32U5F7VITxQ
+MCU_ST_STM32U5:STM32U5F7VJTx
+MCU_ST_STM32U5:STM32U5F7VJTxQ
+MCU_ST_STM32U5:STM32U5F9BJYxQ
+MCU_ST_STM32U5:STM32U5F9NJHxQ
+MCU_ST_STM32U5:STM32U5F9VITxQ
+MCU_ST_STM32U5:STM32U5F9VJTxQ
+MCU_ST_STM32U5:STM32U5F9ZIJxQ
+MCU_ST_STM32U5:STM32U5F9ZITxQ
+MCU_ST_STM32U5:STM32U5F9ZJJxQ
+MCU_ST_STM32U5:STM32U5F9ZJTxQ
+MCU_ST_STM32U5:STM32U5G7VJTx
+MCU_ST_STM32U5:STM32U5G7VJTxQ
+MCU_ST_STM32U5:STM32U5G9BJYxQ
+MCU_ST_STM32U5:STM32U5G9NJHxQ
+MCU_ST_STM32U5:STM32U5G9VJTxQ
+MCU_ST_STM32U5:STM32U5G9ZJJxQ
+MCU_ST_STM32U5:STM32U5G9ZJTxQ
+MCU_ST_STM32WB:STM32WB05KZVx
+MCU_ST_STM32WB:STM32WB06KCVx
+MCU_ST_STM32WB:STM32WB07KCVx
+MCU_ST_STM32WB:STM32WB09KEVx
MCU_ST_STM32WB:STM32WB10CCUx
MCU_ST_STM32WB:STM32WB15CCUx
MCU_ST_STM32WB:STM32WB15CCUxE
@@ -12360,6 +13738,20 @@ MCU_ST_STM32WB:STM32WB55VEYx
MCU_ST_STM32WB:STM32WB55VGQx
MCU_ST_STM32WB:STM32WB55VGYx
MCU_ST_STM32WB:STM32WB55VYYx
+MCU_ST_STM32WB:STM32WBA52CEUx
+MCU_ST_STM32WB:STM32WBA52CGUx
+MCU_ST_STM32WB:STM32WBA52KEUx
+MCU_ST_STM32WB:STM32WBA52KGUx
+MCU_ST_STM32WB:STM32WBA54CEUx
+MCU_ST_STM32WB:STM32WBA54CGUx
+MCU_ST_STM32WB:STM32WBA54KEUx
+MCU_ST_STM32WB:STM32WBA54KGUx
+MCU_ST_STM32WB:STM32WBA55CEUx
+MCU_ST_STM32WB:STM32WBA55CGUx
+MCU_ST_STM32WB:STM32WBA55HEFx
+MCU_ST_STM32WB:STM32WBA55HGFx
+MCU_ST_STM32WB:STM32WBA55UEIx
+MCU_ST_STM32WB:STM32WBA55UGIx
MCU_ST_STM32WL:STM32WL54CCUx
MCU_ST_STM32WL:STM32WL54JCIx
MCU_ST_STM32WL:STM32WL55CCUx
@@ -12401,12 +13793,14 @@ MCU_ST_STM8:STM8S003K3T
MCU_ST_STM8:STM8S207C6
MCU_ST_STM8:STM8S207C8
MCU_ST_STM8:STM8S207CB
+MCU_ST_STM8:STM8S207MB
MCU_ST_STM8:STM8S207R6
MCU_ST_STM8:STM8S207R8
MCU_ST_STM8:STM8S207RB
MCU_ST_STM8:STM8S208C6
MCU_ST_STM8:STM8S208C8
MCU_ST_STM8:STM8S208CB
+MCU_ST_STM8:STM8S208MB
MCU_ST_STM8:STM8S208R6
MCU_ST_STM8:STM8S208R8
MCU_ST_STM8:STM8S208RB
@@ -12793,6 +14187,19 @@ MCU_Texas_MSP430:MSP430G2855IRHA40
MCU_Texas_MSP430:MSP430G2955IDA38
MCU_Texas_MSP430:MSP430G2955IRHA40
MCU_Texas_SimpleLink:CC1312R1F3RGZ
+MCU_WCH_CH32V0:CH32V003AxMx
+MCU_WCH_CH32V0:CH32V003FxPx
+MCU_WCH_CH32V0:CH32V003FxUx
+MCU_WCH_CH32V0:CH32V003JxMx
+MCU_WCH_CH32V2:CH32V203CxTx
+MCU_WCH_CH32V2:CH32V203F6P6
+MCU_WCH_CH32V2:CH32V203GxUx
+MCU_WCH_CH32V3:CH32V30xCxTx
+MCU_WCH_CH32V3:CH32V30xFxPx
+MCU_WCH_CH32V3:CH32V30xRxTx
+MCU_WCH_CH32V3:CH32V30xVxTx
+MCU_WCH_CH32V3:CH32V30xWxUx
+MCU_WCH_CH32X0:CH32X035G8U6
Mechanical:DIN_Rail_Adapter
Mechanical:Fiducial
Mechanical:Heatsink
@@ -12805,6 +14212,10 @@ Mechanical:MountingHole
Mechanical:MountingHole_Pad
Mechanical:MountingHole_Pad_MP
Memory_EEPROM:24AA02-OT
+Memory_EEPROM:24AA025E-OT
+Memory_EEPROM:24AA025E-SN
+Memory_EEPROM:24AA02E-OT
+Memory_EEPROM:24AA02E-SN
Memory_EEPROM:24LC00
Memory_EEPROM:24LC01
Memory_EEPROM:24LC02
@@ -12821,6 +14232,7 @@ Memory_EEPROM:25CSM04xxMF
Memory_EEPROM:25CSM04xxSN
Memory_EEPROM:25LCxxx
Memory_EEPROM:25LCxxx-MC
+Memory_EEPROM:25LCxxx-MF
Memory_EEPROM:28C256
Memory_EEPROM:93AAxxA
Memory_EEPROM:93AAxxAT-xOT
@@ -12874,6 +14286,14 @@ Memory_EEPROM:CAT24M01X
Memory_EEPROM:CAT24M01Y
Memory_EEPROM:CAT250xxx
Memory_EEPROM:CAT250xxx-HU4
+Memory_EEPROM:DS2431
+Memory_EEPROM:DS2431P
+Memory_EEPROM:DS2431Q
+Memory_EEPROM:DS28E07
+Memory_EEPROM:DS28E07P
+Memory_EEPROM:DS28E07Q
+Memory_EEPROM:KM28C64A
+Memory_EEPROM:KM28C65A
Memory_EEPROM:M24C01-FDW
Memory_EEPROM:M24C01-FMN
Memory_EEPROM:M24C01-RDW
@@ -12887,6 +14307,7 @@ Memory_EEPROM:M24C02-RMN
Memory_EEPROM:M24C02-WDW
Memory_EEPROM:M24C02-WMN
Memory_EEPROM:M95256-WMN6P
+Memory_EEPROM:M95512-Axxx-MF
Memory_EEPROM:TMS4C1050N
Memory_EPROM:27128
Memory_EPROM:27256
@@ -12904,6 +14325,9 @@ Memory_EPROM:27C64
Memory_Flash:28F400
Memory_Flash:29F010-TSOP-SP
Memory_Flash:29W040
+Memory_Flash:AM29F400BB-90SC
+Memory_Flash:AM29F400Bx-xxEx
+Memory_Flash:AM29F400Bx-xxSx
Memory_Flash:AM29PDL128G
Memory_Flash:AT25DF041x-UxN-x
Memory_Flash:AT25SF081-SSHD-X
@@ -12921,6 +14345,7 @@ Memory_Flash:AT45DB161B-TC-2.5
Memory_Flash:AT45DB161D-SU
Memory_Flash:GD25D05CT
Memory_Flash:GD25D10CT
+Memory_Flash:GD25QxxxEY
Memory_Flash:IS25WP256D-xM
Memory_Flash:M25PX32-VMP
Memory_Flash:M25PX32-VMW
@@ -12941,7 +14366,10 @@ Memory_Flash:SST25VF080B-50-4x-S2Ax
Memory_Flash:SST39SF010
Memory_Flash:SST39SF020
Memory_Flash:SST39SF040
+Memory_Flash:W25Q128JVE
+Memory_Flash:W25Q128JVP
Memory_Flash:W25Q128JVS
+Memory_Flash:W25Q16JVSS
Memory_Flash:W25Q32JVSS
Memory_Flash:W25Q32JVZP
Memory_Flash:W25X20CLSN
@@ -12957,6 +14385,13 @@ Memory_NVRAM:47C04
Memory_NVRAM:47C16
Memory_NVRAM:47L04
Memory_NVRAM:47L16
+Memory_NVRAM:CY14B256LA-SP
+Memory_NVRAM:CY14B256LA-SZ
+Memory_NVRAM:CY14B256LA-ZS
+Memory_NVRAM:CY14E256LA-SZ
+Memory_NVRAM:CY14E256LA-ZS
+Memory_NVRAM:CY14U256LA-BA
+Memory_NVRAM:CY14V256LA-BA
Memory_NVRAM:FM1608B-SG
Memory_NVRAM:FM16W08-SG
Memory_NVRAM:FM1808B-SG
@@ -12973,17 +14408,41 @@ Memory_NVRAM:MB85RS512T
Memory_NVRAM:MB85RS64
Memory_NVRAM:MR20H40
Memory_NVRAM:MR25H40
-Memory_RAM:628128_DIP32_SSOP32
-Memory_RAM:628128_TSOP32
+Memory_NVRAM:STK14C88
+Memory_NVRAM:STK14C88-3
+Memory_NVRAM:STK14C88C
+Memory_NVRAM:STK14C88C-3
Memory_RAM:AS4C256M16D3
Memory_RAM:AS4C4M16SA
+Memory_RAM:AS6C1008-xxB
+Memory_RAM:AS6C1008-xxP
+Memory_RAM:AS6C1008-xxS
+Memory_RAM:AS6C1008-xxST
+Memory_RAM:AS6C1008-xxT
Memory_RAM:AS6C1616
Memory_RAM:AS6C4008-55PCN
+Memory_RAM:AS7C1024B-xxJ
+Memory_RAM:AS7C1024B-xxT
+Memory_RAM:AS7C1024B-xxTJ
+Memory_RAM:AS7C31024B-xxJ
+Memory_RAM:AS7C31024B-xxST
+Memory_RAM:AS7C31024B-xxT
+Memory_RAM:AS7C31024B-xxTJ
+Memory_RAM:CY62128EV30xx-xxS
+Memory_RAM:CY62128EV30xx-xxZ
+Memory_RAM:CY62128Exx-xxS
+Memory_RAM:CY62128Exx-xxZ
Memory_RAM:CY62256-70PC
Memory_RAM:CY7C199
Memory_RAM:ESP-PSRAM32
Memory_RAM:H5AN8G8NAFR-UHC
Memory_RAM:HM62256BLP
+Memory_RAM:HM628128D_DIP32_SOP32
+Memory_RAM:HM628128D_TSOP32
+Memory_RAM:HM628128_DIP32_SOP32
+Memory_RAM:HM628128_TSOP32
+Memory_RAM:HY6264AxJ
+Memory_RAM:HY6264AxP
Memory_RAM:IDT7006PF
Memory_RAM:IDT7027_TQ100
Memory_RAM:IDT7132
@@ -13005,15 +14464,27 @@ Memory_RAM:IS61C5128AL-10TLI
Memory_RAM:IS61C5128AS-25HLI
Memory_RAM:IS61C5128AS-25QLI
Memory_RAM:IS61C5128AS-25TLI
+Memory_RAM:IS62C256AL
Memory_RAM:IS64C5128AL-12CTLA3
Memory_RAM:IS64C5128AL-12KLA3
+Memory_RAM:IS65C256AL
+Memory_RAM:IS6xC1024AL-xxH
+Memory_RAM:IS6xC1024AL-xxJ
+Memory_RAM:IS6xC1024AL-xxK
+Memory_RAM:IS6xC1024AL-xxT
Memory_RAM:KM62256CLP
+Memory_RAM:M48Tx2
+Memory_RAM:M48Zx2
+Memory_RAM:MK4116N
+Memory_RAM:MK4164N
Memory_RAM:MT48LC16M16A2P
Memory_RAM:MT48LC16M16A2TG
Memory_RAM:MT48LC32M8A2P
Memory_RAM:MT48LC32M8A2TG
Memory_RAM:MT48LC64M4A2P
Memory_RAM:MT48LC64M4A2TG
+Memory_RAM:R1LP0108ESF
+Memory_RAM:R1LP0108ESN
Memory_RAM:W9812G6KH-5
Memory_RAM:W9812G6KH-6
Memory_RAM:W9812G6KH-6I
@@ -13027,7 +14498,8 @@ Motor:Fan_3pin
Motor:Fan_4pin
Motor:Fan_ALT
Motor:Fan_CPU_4pin
-Motor:Fan_IEC60617
+Motor:Fan_IEC-60617
+Motor:Fan_ISO-14617
Motor:Fan_PC_Chassis
Motor:Fan_Tacho
Motor:Fan_Tacho_PWM
@@ -13120,6 +14592,21 @@ Oscillator:Si5351B-B-GM
Oscillator:Si5351C-B-GM
Oscillator:Si570
Oscillator:Si571
+Oscillator:SiT8008xx-1x-xxE
+Oscillator:SiT8008xx-1x-xxN
+Oscillator:SiT8008xx-1x-xxS
+Oscillator:SiT8008xx-2x-xxE
+Oscillator:SiT8008xx-2x-xxN
+Oscillator:SiT8008xx-2x-xxS
+Oscillator:SiT8008xx-3x-xxE
+Oscillator:SiT8008xx-3x-xxN
+Oscillator:SiT8008xx-3x-xxS
+Oscillator:SiT8008xx-7x-xxE
+Oscillator:SiT8008xx-7x-xxN
+Oscillator:SiT8008xx-7x-xxS
+Oscillator:SiT8008xx-8x-xxE
+Oscillator:SiT8008xx-8x-xxN
+Oscillator:SiT8008xx-8x-xxS
Oscillator:SiT9365xx-xBx-xxE
Oscillator:SiT9365xx-xBx-xxN
Oscillator:SiT9366xx-xBx-xxE
@@ -13130,6 +14617,7 @@ Oscillator:TCXO-14
Oscillator:TCXO3
Oscillator:TFT660
Oscillator:TFT680
+Oscillator:TG2520SMN-xx.xxxxxxMhz-xxxxNM
Oscillator:TXC-7C
Oscillator:VC-81
Oscillator:VC-83
@@ -13181,6 +14669,14 @@ Potentiometer_Digital:MCP4024-xxxxOT
Potentiometer_Digital:MCP41010
Potentiometer_Digital:MCP41050
Potentiometer_Digital:MCP41100
+Potentiometer_Digital:MCP4131-xxxx-P
+Potentiometer_Digital:MCP4132-xxxx-P
+Potentiometer_Digital:MCP4141-xxxx-P
+Potentiometer_Digital:MCP4142-xxxx-P
+Potentiometer_Digital:MCP4151-xxxx-P
+Potentiometer_Digital:MCP4152-xxxx-P
+Potentiometer_Digital:MCP4161-xxxx-P
+Potentiometer_Digital:MCP4162-xxxx-P
Potentiometer_Digital:MCP42010
Potentiometer_Digital:MCP42050
Potentiometer_Digital:MCP42100
@@ -13306,12 +14802,20 @@ Power_Management:AAT4610BIGV-1-T1
Power_Management:AAT4610BIGV-T1
Power_Management:AAT4616IGV-1-T1
Power_Management:AAT4616IGV-T1
+Power_Management:ADM1270ACPZ
+Power_Management:ADM1270ARQZ
Power_Management:AP2161W
Power_Management:AP2171W
Power_Management:AP22804AW5
Power_Management:AP22804BW5
Power_Management:AP22814AW5
Power_Management:AP22814BW5
+Power_Management:AP22816AKEWT
+Power_Management:AP22816BKEWT
+Power_Management:AP22817AKEWT
+Power_Management:AP22817BKEWT
+Power_Management:AP22818AKEWT
+Power_Management:AP22818BKEWT
Power_Management:AP22913CN4
Power_Management:AUIPS1041R
Power_Management:AUIPS1042G
@@ -13343,6 +14847,9 @@ Power_Management:AUIR3315S
Power_Management:AUIR3316S
Power_Management:AUIR3320S
Power_Management:AUIR33402S
+Power_Management:BD2222G
+Power_Management:BD2242G
+Power_Management:BD2243G
Power_Management:BD48ExxG
Power_Management:BD48KxxG
Power_Management:BD48LxxG
@@ -13377,8 +14884,11 @@ Power_Management:BTS6143D
Power_Management:BTS6163D
Power_Management:BTS6200-1EJA
Power_Management:BTS7004-1EPP
+Power_Management:BTS711L1
+Power_Management:BTS712N1
Power_Management:BTS716G
Power_Management:BTS716GB
+Power_Management:BTS721L1
Power_Management:BTS724G
Power_Management:CAP002DG
Power_Management:CAP003DG
@@ -13399,6 +14909,9 @@ Power_Management:CAP019DG
Power_Management:CAP200DG
Power_Management:CAP300DG
Power_Management:DS1210
+Power_Management:EPC23102
+Power_Management:EPC23103
+Power_Management:EPC23104
Power_Management:FPF2000
Power_Management:FPF2001
Power_Management:FPF2002
@@ -13431,6 +14944,12 @@ Power_Management:LM5050-1
Power_Management:LM5050-2
Power_Management:LM5051
Power_Management:LM5060
+Power_Management:LM50672NPAR
+Power_Management:LM5067MM-1
+Power_Management:LM5067MM-2
+Power_Management:LM5067MMX-2
+Power_Management:LM5067MWX-1
+Power_Management:LM66100DCK
Power_Management:LM74700
Power_Management:LMG3410
Power_Management:LMG5200
@@ -13467,17 +14986,30 @@ Power_Management:LTC4417HGN
Power_Management:LTC4417HUF
Power_Management:LTC4417IGN
Power_Management:LTC4417IUF
+Power_Management:MAX14919xUP
Power_Management:MAX8586
+Power_Management:MAX9611
+Power_Management:MAX9612
+Power_Management:MIC2007YM6
+Power_Management:MIC2008YM6
+Power_Management:MIC2017YM6
+Power_Management:MIC2018YM6
Power_Management:MIC2025-1YM
Power_Management:MIC2025-1YMM
Power_Management:MIC2025-2YM
Power_Management:MIC2025-2YMM
-Power_Management:MIC2026-1BM
Power_Management:MIC2026-1BN
-Power_Management:MIC2026-2BM
+Power_Management:MIC2026-1xM
Power_Management:MIC2026-2BN
+Power_Management:MIC2026-2xM
+Power_Management:MIC2090-1YM5
+Power_Management:MIC2090-2YM5
+Power_Management:MIC2091-1YM5
+Power_Management:MIC2091-2YM5
+Power_Management:MIC2544-2YM
Power_Management:MIC2587-1
Power_Management:MIC2587R-1
+Power_Management:NIS5420MTxTXG
Power_Management:NPC45560-H
Power_Management:NPC45560-L
Power_Management:PD70224
@@ -13488,6 +15020,7 @@ Power_Management:RT9742BGJ5F
Power_Management:RT9742BNGJ5F
Power_Management:SN6505ADBV
Power_Management:SN6505BDBV
+Power_Management:SN6507DGQ
Power_Management:STM6600
Power_Management:STM6601
Power_Management:SiP32431DR3
@@ -13498,7 +15031,12 @@ Power_Management:TLE8104E
Power_Management:TPS2041B
Power_Management:TPS2042D
Power_Management:TPS2044D
+Power_Management:TPS2051CDBV
Power_Management:TPS2054D
+Power_Management:TPS2065CDBV
+Power_Management:TPS2065CDBVx-2
+Power_Management:TPS2069CDBV
+Power_Management:TPS2116DRL
Power_Management:TPS22810DRV
Power_Management:TPS22917DBV
Power_Management:TPS22929D
@@ -13524,19 +15062,31 @@ Power_Management:UCC39002D
Power_Protection:CDNBS08-SLVU2.8-4
Power_Protection:CDSOT236-0504C
Power_Protection:CM1213A-01SO
+Power_Protection:CM1624
+Power_Protection:D3V3X8U9LP3810
Power_Protection:D3V3XA4B10LP
Power_Protection:DT1240A-08LP3810
Power_Protection:ECMF02-2AMX6
+Power_Protection:ECMF04-4HSWM10
Power_Protection:EMI2121MTTAG
Power_Protection:EMI8132
Power_Protection:ESD224DQA
+Power_Protection:ESDA14V2SC5
+Power_Protection:ESDA5V3L
+Power_Protection:ESDA5V3SC5
Power_Protection:ESDA6V1-5SC6
Power_Protection:ESDA6V1BC6
+Power_Protection:ESDA6V1SC5
Power_Protection:ESDLC5V0PB8
Power_Protection:IP3319CX6
+Power_Protection:IP4234CZ6
+Power_Protection:IP4251CZ8-4-TTL
Power_Protection:IP4252CZ12
Power_Protection:IP4252CZ16
Power_Protection:IP4252CZ8
+Power_Protection:IP4252CZ8-4-TTL
+Power_Protection:IP4253CZ8-4-TTL
+Power_Protection:IP4254CZ8-4-TTL
Power_Protection:NCP349MN
Power_Protection:NCP349MNAE
Power_Protection:NCP349MNAM
@@ -13579,18 +15129,50 @@ Power_Protection:SP0505BAJT
Power_Protection:SP7538P
Power_Protection:SRV05-4
Power_Protection:SZNUP2105L
-Power_Protection:TPD2E2U06
+Power_Protection:TBU-CA-025-050-WH
+Power_Protection:TBU-CA-025-100-WH
+Power_Protection:TBU-CA-025-200-WH
+Power_Protection:TBU-CA-025-300-WH
+Power_Protection:TBU-CA-025-500-WH
+Power_Protection:TBU-CA-040-050-WH
+Power_Protection:TBU-CA-040-100-WH
+Power_Protection:TBU-CA-040-200-WH
+Power_Protection:TBU-CA-040-300-WH
+Power_Protection:TBU-CA-040-500-WH
+Power_Protection:TBU-CA-050-050-WH
+Power_Protection:TBU-CA-050-100-WH
+Power_Protection:TBU-CA-050-200-WH
+Power_Protection:TBU-CA-050-300-WH
+Power_Protection:TBU-CA-050-500-WH
+Power_Protection:TBU-CA-065-050-WH
+Power_Protection:TBU-CA-065-100-WH
+Power_Protection:TBU-CA-065-200-WH
+Power_Protection:TBU-CA-065-300-WH
+Power_Protection:TBU-CA-065-500-WH
+Power_Protection:TBU-CA-085-050-WH
+Power_Protection:TBU-CA-085-100-WH
+Power_Protection:TBU-CA-085-200-WH
+Power_Protection:TBU-CA-085-300-WH
+Power_Protection:TBU-CA-085-500-WH
+Power_Protection:TPD1E05U06DPY
+Power_Protection:TPD1E05U06DYA
+Power_Protection:TPD2E2U06DCK
+Power_Protection:TPD2E2U06DRL
Power_Protection:TPD2EUSB30
Power_Protection:TPD2EUSB30A
Power_Protection:TPD2S017
Power_Protection:TPD3E001DRLR
+Power_Protection:TPD3F303DPV
Power_Protection:TPD3S014
Power_Protection:TPD3S044
Power_Protection:TPD4E02B04DQA
+Power_Protection:TPD4E05U06DQA
Power_Protection:TPD4EUSB30
Power_Protection:TPD4S014
Power_Protection:TPD4S1394
+Power_Protection:TPD6E05U06RVZ
Power_Protection:TPD6F003
+Power_Protection:TPD6S300A
Power_Protection:TPD8F003
Power_Protection:TVS0500DRV
Power_Protection:TVS1400DRV
@@ -13625,6 +15207,12 @@ Power_Supervisor:CAT811RTBI-GT3
Power_Supervisor:CAT811STBI-GT3
Power_Supervisor:CAT811TTBI-GT3
Power_Supervisor:CAT811ZTBI-GT3
+Power_Supervisor:DIO705
+Power_Supervisor:DIO706
+Power_Supervisor:DIO706J
+Power_Supervisor:DIO706R
+Power_Supervisor:DIO706S
+Power_Supervisor:DIO706T
Power_Supervisor:LM3880
Power_Supervisor:LM809
Power_Supervisor:LM810
@@ -13637,8 +15225,15 @@ Power_Supervisor:MAX6371
Power_Supervisor:MAX6372
Power_Supervisor:MAX6373
Power_Supervisor:MAX6374
+Power_Supervisor:MAX690ACSA
+Power_Supervisor:MAX690xPA
Power_Supervisor:MAX691xPE
Power_Supervisor:MAX691xWE
+Power_Supervisor:MAX692ACSA
+Power_Supervisor:MAX692xPA
+Power_Supervisor:MAX694xPA
+Power_Supervisor:MAX802LCSA
+Power_Supervisor:MAX805LCSA
Power_Supervisor:MAX811LEUS-T
Power_Supervisor:MAX811MEUS-T
Power_Supervisor:MAX811REUS-T
@@ -13683,12 +15278,14 @@ Power_Supervisor:TCM810
Power_Supervisor:TL7702A
Power_Supervisor:TL7702B
Power_Supervisor:TL7705A
-Power_Supervisor:TL7705ACPSR
+Power_Supervisor:TL7705AxPS
Power_Supervisor:TL7705B
Power_Supervisor:TL7709A
Power_Supervisor:TL7712A
Power_Supervisor:TL7715A
Power_Supervisor:TL7733B
+Power_Supervisor:TLV810EA29DBZ
+Power_Supervisor:TPS3430WDRC
Power_Supervisor:TPS3702
Power_Supervisor:TPS3808DBV
Power_Supervisor:TPS3831
@@ -13707,10 +15304,22 @@ Reference_Current:LT3092xTS8
Reference_Current:PSSI2021SAY
Reference_Current:REF200AU
Reference_Voltage:AD586
+Reference_Voltage:ADR1399KEZ
+Reference_Voltage:ADR1399KHZ
Reference_Voltage:ADR420ARMZ
Reference_Voltage:ADR421ARMZ
Reference_Voltage:ADR423ARMZ
Reference_Voltage:ADR425ARMZ
+Reference_Voltage:ADR440ARMZ
+Reference_Voltage:ADR440xRZ
+Reference_Voltage:ADR441ARMZ
+Reference_Voltage:ADR441xRZ
+Reference_Voltage:ADR443ARMZ
+Reference_Voltage:ADR443xRZ
+Reference_Voltage:ADR444ARMZ
+Reference_Voltage:ADR444xRZ
+Reference_Voltage:ADR445ARMZ
+Reference_Voltage:ADR445xRZ
Reference_Voltage:ADR4520
Reference_Voltage:ADR4525
Reference_Voltage:ADR4530
@@ -13775,6 +15384,9 @@ Reference_Voltage:LM4132xMF-2.5
Reference_Voltage:LM4132xMF-3.0
Reference_Voltage:LM4132xMF-3.3
Reference_Voltage:LM4132xMF-4.1
+Reference_Voltage:LT1009CMS8
+Reference_Voltage:LT1009xS8
+Reference_Voltage:LT1009xZ
Reference_Voltage:LT1019xN8
Reference_Voltage:LT1461AxS8-2.5
Reference_Voltage:LT1461AxS8-3
@@ -13821,10 +15433,62 @@ Reference_Voltage:LT6657BHMS8-2.5
Reference_Voltage:LT6657BHMS8-3
Reference_Voltage:LT6657BHMS8-4.096
Reference_Voltage:LT6657BHMS8-5
+Reference_Voltage:MAX6001
+Reference_Voltage:MAX6002
+Reference_Voltage:MAX6003
+Reference_Voltage:MAX6004
+Reference_Voltage:MAX6005
Reference_Voltage:MAX6035xSA25
Reference_Voltage:MAX6035xxUR25
Reference_Voltage:MAX6035xxUR30
Reference_Voltage:MAX6035xxUR50
+Reference_Voltage:MAX6070AAUT12+T
+Reference_Voltage:MAX6070AAUT18+T
+Reference_Voltage:MAX6070AAUT18V+T
+Reference_Voltage:MAX6070AAUT21+T
+Reference_Voltage:MAX6070AAUT25+T
+Reference_Voltage:MAX6070AAUT30+T
+Reference_Voltage:MAX6070AAUT33+T
+Reference_Voltage:MAX6070AAUT33V+T
+Reference_Voltage:MAX6070AAUT41+T
+Reference_Voltage:MAX6070AAUT50+T
+Reference_Voltage:MAX6070AAUT50V+T
+Reference_Voltage:MAX6070BAUT12+T
+Reference_Voltage:MAX6070BAUT12V+T
+Reference_Voltage:MAX6070BAUT18+T
+Reference_Voltage:MAX6070BAUT21+T
+Reference_Voltage:MAX6070BAUT21V+T
+Reference_Voltage:MAX6070BAUT25+T
+Reference_Voltage:MAX6070BAUT25V+T
+Reference_Voltage:MAX6070BAUT30+T
+Reference_Voltage:MAX6070BAUT33+T
+Reference_Voltage:MAX6070BAUT33V+T
+Reference_Voltage:MAX6070BAUT41+T
+Reference_Voltage:MAX6070BAUT41V+T
+Reference_Voltage:MAX6070BAUT50+T
+Reference_Voltage:MAX6070BAUT50V+T
+Reference_Voltage:MAX6070DAUT12V+T
+Reference_Voltage:MAX6070DAUT25V+T
+Reference_Voltage:MAX6070DAUT30V+T
+Reference_Voltage:MAX6070DAUT41V+T
+Reference_Voltage:MAX6071AAUT12+T
+Reference_Voltage:MAX6071AAUT18+T
+Reference_Voltage:MAX6071AAUT21+T
+Reference_Voltage:MAX6071AAUT25+T
+Reference_Voltage:MAX6071AAUT30+T
+Reference_Voltage:MAX6071AAUT30V+T
+Reference_Voltage:MAX6071AAUT33+T
+Reference_Voltage:MAX6071AAUT41+T
+Reference_Voltage:MAX6071AAUT50+T
+Reference_Voltage:MAX6071BAUT12+T
+Reference_Voltage:MAX6071BAUT18+T
+Reference_Voltage:MAX6071BAUT21+T
+Reference_Voltage:MAX6071BAUT25+T
+Reference_Voltage:MAX6071BAUT25V+T
+Reference_Voltage:MAX6071BAUT30+T
+Reference_Voltage:MAX6071BAUT33+T
+Reference_Voltage:MAX6071BAUT41+T
+Reference_Voltage:MAX6071BAUT50+T
Reference_Voltage:MAX6100
Reference_Voltage:MAX6101
Reference_Voltage:MAX6102
@@ -13917,6 +15581,19 @@ Reference_Voltage:REF3225AMDBVREP
Reference_Voltage:REF3230AMDBVREP
Reference_Voltage:REF3233AMDBVREP
Reference_Voltage:REF3240AMDBVREP
+Reference_Voltage:REF35102QDBVR
+Reference_Voltage:REF35120QDBVR
+Reference_Voltage:REF35125QDBVR
+Reference_Voltage:REF35160QDBVR
+Reference_Voltage:REF35170QDBVR
+Reference_Voltage:REF35180QDBVR
+Reference_Voltage:REF35205QDBVR
+Reference_Voltage:REF35250QDBVR
+Reference_Voltage:REF35300QDBVR
+Reference_Voltage:REF35330QDBVR
+Reference_Voltage:REF35360QDBVR
+Reference_Voltage:REF35409QDBVR
+Reference_Voltage:REF35500QDBVR
Reference_Voltage:REF5010AD
Reference_Voltage:REF5010ADGK
Reference_Voltage:REF5010ID
@@ -14233,6 +15910,8 @@ Regulator_Linear:AP2204RA-3.3
Regulator_Linear:AP2204RA-5.0
Regulator_Linear:AP2204RB-3.3
Regulator_Linear:AP2204RB-5.0
+Regulator_Linear:AP22615AWU
+Regulator_Linear:AP22615BWU
Regulator_Linear:AP7361C-10E
Regulator_Linear:AP7361C-12E
Regulator_Linear:AP7361C-15E
@@ -14248,6 +15927,10 @@ Regulator_Linear:AP7370-30FDC
Regulator_Linear:AP7370-33FDC
Regulator_Linear:AP7370-36FDC
Regulator_Linear:AP7370-50FDC
+Regulator_Linear:AP7381-28SA-7
+Regulator_Linear:AP7381-33SA-7
+Regulator_Linear:AP7381-50SA-7
+Regulator_Linear:AP7381-70SA-7
Regulator_Linear:AP7384-28SA
Regulator_Linear:AP7384-28V
Regulator_Linear:AP7384-28Y
@@ -14940,6 +16623,8 @@ Regulator_Linear:LT3010
Regulator_Linear:LT3010-5
Regulator_Linear:LT3011xDD
Regulator_Linear:LT3011xMSE
+Regulator_Linear:LT3014xDD
+Regulator_Linear:LT3014xS5
Regulator_Linear:LT3015Q
Regulator_Linear:LT3015xQ-12
Regulator_Linear:LT3015xQ-15
@@ -14952,14 +16637,18 @@ Regulator_Linear:LT3032-12
Regulator_Linear:LT3032-15
Regulator_Linear:LT3032-3.3
Regulator_Linear:LT3032-5
+Regulator_Linear:LT3033xUDC
Regulator_Linear:LT3042xMSE
+Regulator_Linear:LT3045xDD
Regulator_Linear:LT3045xMSE
Regulator_Linear:LT3080xDD
Regulator_Linear:LT3080xMS8E
Regulator_Linear:LT3080xQ
Regulator_Linear:LT3080xST
Regulator_Linear:LT3080xT
+Regulator_Linear:LT3091xT7
Regulator_Linear:LT3093xMSE
+Regulator_Linear:LT3094xDD
Regulator_Linear:LT3094xMSE
Regulator_Linear:LTC3026-1
Regulator_Linear:MAX1615xUK
@@ -14967,6 +16656,10 @@ Regulator_Linear:MAX1616xUK
Regulator_Linear:MAX1658ESA
Regulator_Linear:MAX1659ESA
Regulator_Linear:MAX16910
+Regulator_Linear:MAX38908xTD
+Regulator_Linear:MAX38909xTD
+Regulator_Linear:MAX38911ATA+
+Regulator_Linear:MAX38912ATA+
Regulator_Linear:MAX5092AATE
Regulator_Linear:MAX5092BATE
Regulator_Linear:MAX5093AATE
@@ -15130,6 +16823,18 @@ Regulator_Linear:MCP1804x-C002xMT
Regulator_Linear:MCP1804x-C002xOT
Regulator_Linear:MCP1825S
Regulator_Linear:MCP1826S
+Regulator_Linear:ME6211C10M5
+Regulator_Linear:ME6211C12M5
+Regulator_Linear:ME6211C15M5
+Regulator_Linear:ME6211C18M5
+Regulator_Linear:ME6211C21M5
+Regulator_Linear:ME6211C25M5
+Regulator_Linear:ME6211C27M5
+Regulator_Linear:ME6211C28M5
+Regulator_Linear:ME6211C29M5
+Regulator_Linear:ME6211C30M5
+Regulator_Linear:ME6211C33M5
+Regulator_Linear:ME6211C50M5
Regulator_Linear:MIC29152WT
Regulator_Linear:MIC29152WU
Regulator_Linear:MIC29153WT
@@ -15186,6 +16891,7 @@ Regulator_Linear:MIC5317-2.5xM5
Regulator_Linear:MIC5317-2.8xM5
Regulator_Linear:MIC5317-3.0xM5
Regulator_Linear:MIC5317-3.3xM5
+Regulator_Linear:MIC5350
Regulator_Linear:MIC5353-1.8YMT
Regulator_Linear:MIC5353-2.5YMT
Regulator_Linear:MIC5353-2.6YMT
@@ -15296,6 +17002,9 @@ Regulator_Linear:NCV8114BSN180T1G
Regulator_Linear:NCV8114BSN280T1G
Regulator_Linear:NCV8114BSN300T1G
Regulator_Linear:NCV8114BSN330T1G
+Regulator_Linear:NDP6802SF-33
+Regulator_Linear:NDP6802SF-50
+Regulator_Linear:NDP6802SF-A2
Regulator_Linear:NVC8674DS120
Regulator_Linear:NVC8674DS50
Regulator_Linear:OM1323_TO220
@@ -15428,6 +17137,8 @@ Regulator_Linear:TLV70237_WSON6
Regulator_Linear:TLV70242PDSE
Regulator_Linear:TLV70245_SOT23-5
Regulator_Linear:TLV702475_SOT23-5
+Regulator_Linear:TLV7113318DDSE
+Regulator_Linear:TLV7113333DDSE
Regulator_Linear:TLV71209_SOT23-5
Regulator_Linear:TLV71210_SOT23-5
Regulator_Linear:TLV71211_SOT23-5
@@ -15442,6 +17153,7 @@ Regulator_Linear:TLV713285PDBV
Regulator_Linear:TLV71328PDBV
Regulator_Linear:TLV71330PDBV
Regulator_Linear:TLV71333PDBV
+Regulator_Linear:TLV71x_WSON-6
Regulator_Linear:TLV73310PDBV
Regulator_Linear:TLV73311PDBV
Regulator_Linear:TLV73312PDBV
@@ -15498,6 +17210,8 @@ Regulator_Linear:TLV75733PDRV
Regulator_Linear:TLV75740PDRV
Regulator_Linear:TLV75801PDBV
Regulator_Linear:TLV75801PDRV
+Regulator_Linear:TLV76133DCY
+Regulator_Linear:TLV76150DCY
Regulator_Linear:TLV76701DRVx
Regulator_Linear:TLV76701QWDRBxQ1
Regulator_Linear:TLV76708DRVx
@@ -15542,6 +17256,9 @@ Regulator_Linear:TPS72201
Regulator_Linear:TPS72215
Regulator_Linear:TPS72216
Regulator_Linear:TPS72218
+Regulator_Linear:TPS72301DBV
+Regulator_Linear:TPS72301DDC
+Regulator_Linear:TPS72325DBV
Regulator_Linear:TPS73018DBV
Regulator_Linear:TPS730285DBV
Regulator_Linear:TPS73101DBV
@@ -15566,6 +17283,8 @@ Regulator_Linear:TPS73632DBV
Regulator_Linear:TPS73633DBV
Regulator_Linear:TPS73643DBV
Regulator_Linear:TPS74401_VQFN
+Regulator_Linear:TPS74801AWDRC
+Regulator_Linear:TPS74801DRC
Regulator_Linear:TPS75005RGW
Regulator_Linear:TPS76301
Regulator_Linear:TPS76316
@@ -15643,10 +17362,19 @@ Regulator_Linear:TPS7A0530PDBZ
Regulator_Linear:TPS7A0531PDBV
Regulator_Linear:TPS7A0533PDBV
Regulator_Linear:TPS7A0533PDBZ
+Regulator_Linear:TPS7A20xxxDQN
+Regulator_Linear:TPS7A3301RGW
+Regulator_Linear:TPS7A39
+Regulator_Linear:TPS7A4101DGN
+Regulator_Linear:TPS7A4701xRGW
Regulator_Linear:TPS7A7001DDA
Regulator_Linear:TPS7A7200RGW
Regulator_Linear:TPS7A90
Regulator_Linear:TPS7A91
+Regulator_Linear:UA78M05QDCYRQ1
+Regulator_Linear:UA78M08QDCYRQ1
+Regulator_Linear:UA78M10QDCYRQ1
+Regulator_Linear:UA78M33QDCYRQ1
Regulator_Linear:XC6206PxxxMR
Regulator_Linear:XC6210B332MR
Regulator_Linear:XC6220B331MR
@@ -15670,12 +17398,25 @@ Regulator_SwitchedCapacitor:LT1054
Regulator_SwitchedCapacitor:LT1054L
Regulator_SwitchedCapacitor:LT1054xSW
Regulator_SwitchedCapacitor:LTC1044
+Regulator_SwitchedCapacitor:LTC1502xMS8-3.3
+Regulator_SwitchedCapacitor:LTC1502xS8-3.3
+Regulator_SwitchedCapacitor:LTC1503CMS8-1.8
+Regulator_SwitchedCapacitor:LTC1503CMS8-2
+Regulator_SwitchedCapacitor:LTC1503xS8-1.8
+Regulator_SwitchedCapacitor:LTC1503xS8-2
+Regulator_SwitchedCapacitor:LTC1751
Regulator_SwitchedCapacitor:LTC1754
+Regulator_SwitchedCapacitor:LTC3260xDE
+Regulator_SwitchedCapacitor:LTC3260xMSE
Regulator_SwitchedCapacitor:LTC660
Regulator_SwitchedCapacitor:MAX1044
Regulator_SwitchedCapacitor:RT9361AxE
Regulator_SwitchedCapacitor:RT9361BxE
Regulator_SwitchedCapacitor:TPS60151DRV
+Regulator_SwitchedCapacitor:TPS60400DBV
+Regulator_SwitchedCapacitor:TPS60401DBV
+Regulator_SwitchedCapacitor:TPS60402DBV
+Regulator_SwitchedCapacitor:TPS60403DBV
Regulator_SwitchedCapacitor:TPS60500DGS
Regulator_SwitchedCapacitor:TPS60501DGS
Regulator_SwitchedCapacitor:TPS60502DGS
@@ -15723,10 +17464,15 @@ Regulator_Switching:ADuM6000
Regulator_Switching:AOZ1280CI
Regulator_Switching:AOZ1282CI
Regulator_Switching:AOZ1282CI-1
+Regulator_Switching:AOZ6663DI
+Regulator_Switching:AOZ6663DI-01
Regulator_Switching:AP3012
Regulator_Switching:AP3211K
Regulator_Switching:AP3402
+Regulator_Switching:AP3441SHE
+Regulator_Switching:AP62150WU
Regulator_Switching:AP62150Z6
+Regulator_Switching:AP62250WU
Regulator_Switching:AP62250Z6
Regulator_Switching:AP62300TWU
Regulator_Switching:AP62300WU
@@ -15799,6 +17545,8 @@ Regulator_Switching:GL2576-5.0TB5T
Regulator_Switching:GL2576-ASF8DR
Regulator_Switching:GL2576-ATA5R
Regulator_Switching:GL2576-ATB5T
+Regulator_Switching:HT7463A
+Regulator_Switching:HT7463B
Regulator_Switching:ISL8117FRZ
Regulator_Switching:ISL8117FVEZ
Regulator_Switching:KA5H02659RN
@@ -15813,10 +17561,15 @@ Regulator_Switching:KA5M0265RTU
Regulator_Switching:KA5M0265RYDTU
Regulator_Switching:KA5M0280RTU
Regulator_Switching:KA5M0280RYDTU
+Regulator_Switching:L4962-A
+Regulator_Switching:L4962E-A
+Regulator_Switching:L4962EH-A
Regulator_Switching:L5973D
Regulator_Switching:L7980A
Regulator_Switching:LD7575
-Regulator_Switching:LGS6302
+Regulator_Switching:LGS5116B
+Regulator_Switching:LGS5145
+Regulator_Switching:LGS6302B5
Regulator_Switching:LM22676MR-5
Regulator_Switching:LM22676MR-ADJ
Regulator_Switching:LM22678TJ-5
@@ -15993,6 +17746,8 @@ Regulator_Switching:LMR33630CDDA
Regulator_Switching:LMR33640ADDA
Regulator_Switching:LMR33640DDDA
Regulator_Switching:LMR36510ADDA
+Regulator_Switching:LMR50410
+Regulator_Switching:LMR51430
Regulator_Switching:LMR62014XMF
Regulator_Switching:LMR62421XMF
Regulator_Switching:LMR62421XSD
@@ -16152,6 +17907,8 @@ Regulator_Switching:LT3430-1
Regulator_Switching:LT3439
Regulator_Switching:LT3471
Regulator_Switching:LT3472
+Regulator_Switching:LT3483AxS6
+Regulator_Switching:LT3483xS6
Regulator_Switching:LT3514xUFD
Regulator_Switching:LT3580xDD
Regulator_Switching:LT3580xMS8E
@@ -16162,15 +17919,19 @@ Regulator_Switching:LT3757EDD
Regulator_Switching:LT3757EMSE
Regulator_Switching:LT3988
Regulator_Switching:LT8303
+Regulator_Switching:LT8306
Regulator_Switching:LT8610
Regulator_Switching:LT8610AC
Regulator_Switching:LT8610AC-1
+Regulator_Switching:LT8705AxFE
Regulator_Switching:LTC1436A
Regulator_Switching:LTC1436A-PLL
Regulator_Switching:LTC1437A
Regulator_Switching:LTC1878EMS8
Regulator_Switching:LTC3105xDD
Regulator_Switching:LTC3105xMS
+Regulator_Switching:LTC3245xDE
+Regulator_Switching:LTC3245xMSE
Regulator_Switching:LTC3406AES5
Regulator_Switching:LTC3406B-2ES5
Regulator_Switching:LTC3406BES5-1.2
@@ -16187,24 +17948,33 @@ Regulator_Switching:LTC3525-3.3
Regulator_Switching:LTC3525-5
Regulator_Switching:LTC3525D-3.3
Regulator_Switching:LTC3525L-3
-Regulator_Switching:LTC3630ADHC
-Regulator_Switching:LTC3630AMSE
-Regulator_Switching:LTC3630DHC
-Regulator_Switching:LTC3630MSE
-Regulator_Switching:LTC3638
-Regulator_Switching:LTC3639
+Regulator_Switching:LTC3561EDD
+Regulator_Switching:LTC3630AxDHC
+Regulator_Switching:LTC3630AxMSE
+Regulator_Switching:LTC3630xDHC
+Regulator_Switching:LTC3630xMSE
+Regulator_Switching:LTC3638xMSE
+Regulator_Switching:LTC3639xMSE
Regulator_Switching:LTC3886
-Regulator_Switching:LTC7138
+Regulator_Switching:LTC7138xMSE
+Regulator_Switching:LTM4626
Regulator_Switching:LTM4637xV
Regulator_Switching:LTM4637xY
+Regulator_Switching:LTM4638
+Regulator_Switching:LTM4657
Regulator_Switching:LTM4668
Regulator_Switching:LTM4668A
+Regulator_Switching:LTM4671
+Regulator_Switching:LTM8049
Regulator_Switching:LTM8063
Regulator_Switching:LV2862XDDC
Regulator_Switching:LV2862YDDC
Regulator_Switching:MAX15062A
Regulator_Switching:MAX15062B
Regulator_Switching:MAX15062C
+Regulator_Switching:MAX1522
+Regulator_Switching:MAX1523
+Regulator_Switching:MAX1524
Regulator_Switching:MAX17501AxTB
Regulator_Switching:MAX17501BxTB
Regulator_Switching:MAX17501ExTB
@@ -16225,6 +17995,7 @@ Regulator_Switching:MAX5035DUPA
Regulator_Switching:MAX5035DUSA
Regulator_Switching:MAX5035EUSA
Regulator_Switching:MAX777L
+Regulator_Switching:MAX77827AEFD
Regulator_Switching:MAX778L
Regulator_Switching:MAX779L
Regulator_Switching:MC33063AD
@@ -16232,26 +18003,28 @@ Regulator_Switching:MC33063AP
Regulator_Switching:MC33063MNTXG
Regulator_Switching:MC34063AD
Regulator_Switching:MC34063AP
-Regulator_Switching:MCP16301
-Regulator_Switching:MCP16301H
-Regulator_Switching:MCP16311MNY
-Regulator_Switching:MCP16311MS
-Regulator_Switching:MCP16312MNY
-Regulator_Switching:MCP16312MS
-Regulator_Switching:MCP16331CH
-Regulator_Switching:MCP16331MN
-Regulator_Switching:MCP1640BCH
-Regulator_Switching:MCP1640BMC
-Regulator_Switching:MCP1640CCH
-Regulator_Switching:MCP1640CH
-Regulator_Switching:MCP1640CMC
-Regulator_Switching:MCP1640DCH
-Regulator_Switching:MCP1640DMC
-Regulator_Switching:MCP1640MC
-Regulator_Switching:MCP1650
-Regulator_Switching:MCP1651
-Regulator_Switching:MCP1652
-Regulator_Switching:MCP1653
+Regulator_Switching:MCP1623x-xCHY
+Regulator_Switching:MCP1623x-xMC
+Regulator_Switching:MCP16301Hx-xCH
+Regulator_Switching:MCP16301x-xCH
+Regulator_Switching:MCP16311x-xMNY
+Regulator_Switching:MCP16311x-xMS
+Regulator_Switching:MCP16312x-xMNY
+Regulator_Switching:MCP16312x-xMS
+Regulator_Switching:MCP16331x-xCH
+Regulator_Switching:MCP16331x-xMNY
+Regulator_Switching:MCP1640Bx-xCHY
+Regulator_Switching:MCP1640Bx-xMC
+Regulator_Switching:MCP1640Cx-xCHY
+Regulator_Switching:MCP1640Cx-xMC
+Regulator_Switching:MCP1640Dx-xCHY
+Regulator_Switching:MCP1640Dx-xMC
+Regulator_Switching:MCP1640x-xCHY
+Regulator_Switching:MCP1640x-xMC
+Regulator_Switching:MCP1650x-xMC
+Regulator_Switching:MCP1651x-xMC
+Regulator_Switching:MCP1652x-xMC
+Regulator_Switching:MCP1653x-xUN
Regulator_Switching:MIC2177
Regulator_Switching:MIC2177-3.3
Regulator_Switching:MIC2177-5.0
@@ -16259,6 +18032,7 @@ Regulator_Switching:MIC2178
Regulator_Switching:MIC2178-3.3
Regulator_Switching:MIC2178-5.0
Regulator_Switching:MIC2207
+Regulator_Switching:MIC2253
Regulator_Switching:MIC2290
Regulator_Switching:MIC23050-4YML
Regulator_Switching:MIC23050-CYML
@@ -16271,6 +18045,7 @@ Regulator_Switching:MP171GJ
Regulator_Switching:MP171GS
Regulator_Switching:MP2303ADN
Regulator_Switching:MP2303ADP
+Regulator_Switching:MPM3550EGLE
Regulator_Switching:MT3608
Regulator_Switching:MUN12AD01-SH
Regulator_Switching:MUN12AD03-SH
@@ -16427,6 +18202,18 @@ Regulator_Switching:R-78S3.3-0.1
Regulator_Switching:SC33063AD
Regulator_Switching:SC34063AP
Regulator_Switching:SC4503TSK
+Regulator_Switching:SIC431A
+Regulator_Switching:SIC431B
+Regulator_Switching:SIC431C
+Regulator_Switching:SIC431D
+Regulator_Switching:SIC437A
+Regulator_Switching:SIC437B
+Regulator_Switching:SIC437C
+Regulator_Switching:SIC437D
+Regulator_Switching:SIC438A
+Regulator_Switching:SIC438B
+Regulator_Switching:SIC438C
+Regulator_Switching:SIC438D
Regulator_Switching:ST1S10PHR
Regulator_Switching:ST1S10PUR
Regulator_Switching:ST1S12XX
@@ -16451,14 +18238,22 @@ Regulator_Switching:TDN_5-4815WISM
Regulator_Switching:TDN_5-4819WISM
Regulator_Switching:TL497
Regulator_Switching:TL497A
+Regulator_Switching:TL5001
+Regulator_Switching:TL5001A
Regulator_Switching:TLV61046ADB
+Regulator_Switching:TLV61070ADBV
+Regulator_Switching:TLV61225DC
Regulator_Switching:TLV62080DSGx
Regulator_Switching:TLV62084ADSGx
Regulator_Switching:TLV62084DSGx
Regulator_Switching:TLV62095RGTx
+Regulator_Switching:TLV62565DBVx
+Regulator_Switching:TLV62566DBVx
+Regulator_Switching:TLV62568ADRL
Regulator_Switching:TLV62568DBV
Regulator_Switching:TLV62568DDC
Regulator_Switching:TLV62568DRL
+Regulator_Switching:TLV62569ADRL
Regulator_Switching:TLV62569DBV
Regulator_Switching:TLV62569DDC
Regulator_Switching:TLV62569DRL
@@ -16648,12 +18443,16 @@ Regulator_Switching:TOP270VG
Regulator_Switching:TOP271EG
Regulator_Switching:TOP271KG
Regulator_Switching:TOP271VG
+Regulator_Switching:TOS06-05SIL
+Regulator_Switching:TOS06-12SIL
Regulator_Switching:TPS51363
Regulator_Switching:TPS5403
Regulator_Switching:TPS54061DRB
Regulator_Switching:TPS54202DDC
Regulator_Switching:TPS5420D
Regulator_Switching:TPS54233
+Regulator_Switching:TPS54260DGQ
+Regulator_Switching:TPS54260DRC
Regulator_Switching:TPS54302
Regulator_Switching:TPS54308
Regulator_Switching:TPS5430DDA
@@ -16664,10 +18463,19 @@ Regulator_Switching:TPS54360DDA
Regulator_Switching:TPS54560BDDA
Regulator_Switching:TPS560200
Regulator_Switching:TPS562200
+Regulator_Switching:TPS562202
+Regulator_Switching:TPS562202S
+Regulator_Switching:TPS562203
+Regulator_Switching:TPS562206
Regulator_Switching:TPS563200
+Regulator_Switching:TPS563202S
+Regulator_Switching:TPS563203
+Regulator_Switching:TPS563206
Regulator_Switching:TPS563240DDC
+Regulator_Switching:TPS563300
Regulator_Switching:TPS56339DDC
Regulator_Switching:TPS565208
+Regulator_Switching:TPS56528DDA
Regulator_Switching:TPS568215RNN
Regulator_Switching:TPS61040DBV
Regulator_Switching:TPS61040DDC
@@ -16675,6 +18483,10 @@ Regulator_Switching:TPS61040DRV
Regulator_Switching:TPS61041DBV
Regulator_Switching:TPS61041DDC
Regulator_Switching:TPS61041DRV
+Regulator_Switching:TPS61085DGK
+Regulator_Switching:TPS61085PW
+Regulator_Switching:TPS61089
+Regulator_Switching:TPS610891
Regulator_Switching:TPS61090
Regulator_Switching:TPS61091
Regulator_Switching:TPS61092
@@ -16747,7 +18559,29 @@ Regulator_Switching:TPS62208DBV
Regulator_Switching:TPS62821DLC
Regulator_Switching:TPS62822DLC
Regulator_Switching:TPS62823DLC
+Regulator_Switching:TPS628436DRL
+Regulator_Switching:TPS628436YKA
+Regulator_Switching:TPS628437DRL
+Regulator_Switching:TPS628437YKA
+Regulator_Switching:TPS628438DRL
+Regulator_Switching:TPS628438YKA
+Regulator_Switching:TPS62912
+Regulator_Switching:TPS62913
+Regulator_Switching:TPS62932
Regulator_Switching:TPS62933
+Regulator_Switching:TPS62933F
+Regulator_Switching:TPS62933O
+Regulator_Switching:TPS62933P
+Regulator_Switching:TPS62A01ADRL
+Regulator_Switching:TPS62A01APDDC
+Regulator_Switching:TPS62A01DRL
+Regulator_Switching:TPS62A01PDDC
+Regulator_Switching:TPS62A02ADRL
+Regulator_Switching:TPS62A02APDDC
+Regulator_Switching:TPS62A02DRL
+Regulator_Switching:TPS62A02NADRL
+Regulator_Switching:TPS62A02NDRL
+Regulator_Switching:TPS62A02PDDC
Regulator_Switching:TPS63000
Regulator_Switching:TPS63000-Q1
Regulator_Switching:TPS63001
@@ -16762,8 +18596,25 @@ Regulator_Switching:TPS65131RGE
Regulator_Switching:TPS82130
Regulator_Switching:TPS82140
Regulator_Switching:TPS82150
+Regulator_Switching:TSR0.6-48120WI
+Regulator_Switching:TSR0.6-48150WI
+Regulator_Switching:TSR0.6-48240WI
+Regulator_Switching:TSR0.6-4833WI
+Regulator_Switching:TSR0.6-4850WI
+Regulator_Switching:TSR0.6-4865WI
+Regulator_Switching:TSR0.6-4890WI
Regulator_Switching:TSR1-2433E
Regulator_Switching:TSR1-2450E
+Regulator_Switching:TSR2-24120N
+Regulator_Switching:TSR2-2412N
+Regulator_Switching:TSR2-24150N
+Regulator_Switching:TSR2-2415N
+Regulator_Switching:TSR2-2418N
+Regulator_Switching:TSR2-2425N
+Regulator_Switching:TSR2-2433N
+Regulator_Switching:TSR2-2450N
+Regulator_Switching:TSR2-2465N
+Regulator_Switching:TSR2-2490N
Regulator_Switching:TSR_1-2412
Regulator_Switching:TSR_1-24120
Regulator_Switching:TSR_1-2415
@@ -16791,12 +18642,22 @@ Relay:ADW11
Relay:AZ850-x
Relay:AZ850P1-x
Relay:AZ850P2-x
+Relay:AZSR131-1AE-12D
+Relay:COTO_3602_Split
+Relay:COTO_3650_Split
+Relay:COTO_3660_Split
Relay:DIPxx-1Axx-11x
Relay:DIPxx-1Axx-12x
Relay:DIPxx-1Axx-12xD
Relay:DIPxx-1Axx-13x
Relay:DIPxx-1Cxx-51x
Relay:DIPxx-2Axx-21x
+Relay:DR-24V
+Relay:DR-3V
+Relay:DR-5V
+Relay:DR-L-3V
+Relay:DR-L2-3V_Form1
+Relay:DR-L2-3V_Form2
Relay:EC2-12NU
Relay:EC2-12SNU
Relay:EC2-12TNU
@@ -16890,11 +18751,15 @@ Relay:G2RL-1A-H
Relay:G2RL-2
Relay:G2RL-2A
Relay:G5LE-1
+Relay:G5NB
Relay:G5Q-1
Relay:G5Q-1A
Relay:G5V-1
Relay:G5V-2
Relay:G5V-2_Split
+Relay:G6A
+Relay:G6AK
+Relay:G6AU
Relay:G6E
Relay:G6EU
Relay:G6H-2
@@ -16904,6 +18769,7 @@ Relay:G6KU-2
Relay:G6S-2
Relay:G6SK-2
Relay:G6SU-2
+Relay:HF115F-2Z-x4
Relay:HF3-01
Relay:HF3-02
Relay:HF3-03
@@ -16918,6 +18784,8 @@ Relay:HF3-54
Relay:HF3-55
Relay:HF3-56
Relay:HF3-57
+Relay:HK19F-DCxxV-SHC
+Relay:HONGFA_HFD2-0xx-x-L2-x
Relay:IM00
Relay:IM01
Relay:IM02
@@ -16945,9 +18813,39 @@ Relay:IM45
Relay:IM46
Relay:IM47
Relay:IM48
+Relay:JQC-3FF-005-1H
+Relay:JQC-3FF-005-1Z
+Relay:JQC-3FF-006-1H
+Relay:JQC-3FF-006-1Z
+Relay:JQC-3FF-009-1H
+Relay:JQC-3FF-009-1Z
+Relay:JQC-3FF-012-1H
+Relay:JQC-3FF-012-1Z
+Relay:JQC-3FF-018-1H
+Relay:JQC-3FF-018-1Z
+Relay:JQC-3FF-024-1H
+Relay:JQC-3FF-024-1Z
+Relay:JQC-3FF-048-1H
+Relay:JQC-3FF-048-1Z
Relay:JW2
Relay:MSxx-1Axx-75
Relay:MSxx-1Bxx-75
+Relay:Panasonic_ALFG1PF09
+Relay:Panasonic_ALFG1PF091
+Relay:Panasonic_ALFG1PF12
+Relay:Panasonic_ALFG1PF121
+Relay:Panasonic_ALFG1PF18
+Relay:Panasonic_ALFG1PF181
+Relay:Panasonic_ALFG1PF24
+Relay:Panasonic_ALFG1PF241
+Relay:Panasonic_ALFG2PF09
+Relay:Panasonic_ALFG2PF091
+Relay:Panasonic_ALFG2PF12
+Relay:Panasonic_ALFG2PF121
+Relay:Panasonic_ALFG2PF18
+Relay:Panasonic_ALFG2PF181
+Relay:Panasonic_ALFG2PF24
+Relay:Panasonic_ALFG2PF241
Relay:RAYEX-L90
Relay:RAYEX-L90A
Relay:RAYEX-L90AS
@@ -16971,9 +18869,19 @@ Relay:RTE2xFxx
Relay:RTE2xxxx
Relay:RTE4xxxx
Relay:Relay_DPDT
+Relay:Relay_DPDT_Latching_1coil
+Relay:Relay_DPDT_Latching_2coil
+Relay:Relay_DPST-NC
Relay:Relay_DPST-NO
+Relay:Relay_DPST_Latching_1coil
+Relay:Relay_DPST_Latching_2coil
Relay:Relay_SPDT
+Relay:Relay_SPDT_Latching_1coil
+Relay:Relay_SPDT_Latching_2coil
+Relay:Relay_SPST-NC
Relay:Relay_SPST-NO
+Relay:Relay_SPST_Latching_1coil
+Relay:Relay_SPST_Latching_2coil
Relay:SANYOU_SRD_Form_A
Relay:SANYOU_SRD_Form_B
Relay:SANYOU_SRD_Form_C
@@ -16984,6 +18892,8 @@ Relay:TE_PCH-1xxx2M
Relay:TIANBO-HJR-4102-L
Relay:UMS05-1A80-75D
Relay:UMS05-1A80-75L
+Relay:V23072-Cx061-xxx8
+Relay:V23072-Cx062-xxx8
Relay:Y14x-1C-xxDS
Relay_SolidState:34.81-7048
Relay_SolidState:34.81-8240
@@ -17005,6 +18915,7 @@ Relay_SolidState:AQH3213A
Relay_SolidState:AQH3223
Relay_SolidState:AQH3223A
Relay_SolidState:ASSR-1218
+Relay_SolidState:BC2213A
Relay_SolidState:CPC1002N
Relay_SolidState:CPC1017N
Relay_SolidState:CPC1117N
@@ -17018,6 +18929,7 @@ Relay_SolidState:FODM3022
Relay_SolidState:FODM3023
Relay_SolidState:FODM3052
Relay_SolidState:FODM3053
+Relay_SolidState:HHG1D-1
Relay_SolidState:LAA110
Relay_SolidState:LBB110
Relay_SolidState:LCC110
@@ -17082,16 +18994,22 @@ RF:CC1200
RF:CC2500
RF:DC4759J5020AHF-1
RF:DC4759J5020AHF-2
+RF:DW1000
+RF:F113
+RF:F115
+RF:F117
RF:HMC394LP4
RF:HMC431
RF:LAT-3
RF:LRPS-2-1
+RF:LTC5507ES6
RF:MAADSS0008
RF:MAAVSS0004
RF:MC12080
RF:MC12093D
RF:MICRF112YMM
RF:MICRF220AYQS
+RF:MRF89XA
RF:NRF24L01
RF:NRF24L01_Breakout
RF:PAT1220-C-0DB
@@ -17109,6 +19027,9 @@ RF:PD4859J5050S2HF
RF:RMK-3-451
RF:RMK-5-51
RF:SE5004L
+RF:SX1231IMLTRT
+RF:SX1261IMLTRT
+RF:SX1262IMLTRT
RF:SX1272
RF:SX1273
RF:SX1276
@@ -17220,6 +19141,7 @@ RF_Bluetooth:BM78SPPS5NC2
RF_Bluetooth:BTM112
RF_Bluetooth:BTM222
RF_Bluetooth:MOD-nRF8001
+RF_Bluetooth:Microchip_BM83
RF_Bluetooth:RFD77101
RF_Bluetooth:RN42
RF_Bluetooth:RN42N
@@ -17227,6 +19149,7 @@ RF_Bluetooth:RN4871
RF_Bluetooth:SPBTLE-RF
RF_Bluetooth:SPBTLE-RF0
RF_Bluetooth:nRF8001
+RF_Filter:B3715
RF_Filter:BFCN-1445
RF_Filter:BFCN-1525
RF_Filter:BFCN-152W-75
@@ -17450,13 +19373,25 @@ RF_GPS:RXM-GPS-RM
RF_GPS:SAM-M8Q
RF_GPS:SIM28ML
RF_GPS:ZED-F9P
+RF_GPS:ZOE-M8G
+RF_GPS:ZOE-M8Q
RF_GSM:BC66
RF_GSM:BC95
+RF_GSM:BG95-M1
+RF_GSM:BG95-M2
+RF_GSM:BG95-M3
+RF_GSM:BG95-M4
+RF_GSM:BG95-M5
+RF_GSM:BG95-M6
+RF_GSM:BG95-M8
+RF_GSM:BG95-MF
+RF_GSM:LENA-R8001
RF_GSM:M95
RF_GSM:SARA-U201
RF_GSM:SARA-U260
RF_GSM:SARA-U270
RF_GSM:SARA-U280
+RF_GSM:SE150A4
RF_GSM:SIM7020C
RF_GSM:SIM7020E
RF_GSM:SIM800C
@@ -17483,6 +19418,7 @@ RF_Module:DCTR-52DA
RF_Module:DCTR-52DAT
RF_Module:DWM1000
RF_Module:DWM1001
+RF_Module:DWM3000
RF_Module:E18-MS1-PCB
RF_Module:E73-2G4M04S-52810
RF_Module:E73-2G4M04S-52832
@@ -17490,12 +19426,26 @@ RF_Module:ESP-07
RF_Module:ESP-12E
RF_Module:ESP-12F
RF_Module:ESP-WROOM-02
-RF_Module:ESP32-PICO-D4
+RF_Module:ESP32-C3-DevKitM-1
+RF_Module:ESP32-C3-WROOM-02
+RF_Module:ESP32-C3-WROOM-02U
+RF_Module:ESP32-C6-MINI-1
RF_Module:ESP32-S2-WROVER
RF_Module:ESP32-S2-WROVER-I
+RF_Module:ESP32-S3-MINI-1
+RF_Module:ESP32-S3-MINI-1U
+RF_Module:ESP32-S3-WROOM-1
+RF_Module:ESP32-S3-WROOM-2
RF_Module:ESP32-WROOM-32
RF_Module:ESP32-WROOM-32D
+RF_Module:ESP32-WROOM-32E
+RF_Module:ESP32-WROOM-32E-R2
RF_Module:ESP32-WROOM-32U
+RF_Module:ESP32-WROOM-32UE
+RF_Module:ESP32-WROOM-32UE-R2
+RF_Module:HT-CT62
+RF_Module:Jadak_Thingmagic_M6e-Nano
+RF_Module:MDBT42Q-512K
RF_Module:MDBT50Q-1MV2
RF_Module:MDBT50Q-512K
RF_Module:MDBT50Q-P1MV2
@@ -17524,12 +19474,15 @@ RF_Module:RFM97W-868S2
RF_Module:RFM97W-915S2
RF_Module:RFM98W-315S2
RF_Module:RFM98W-433S2
+RF_Module:STM32WB5MMG
RF_Module:TD1205
RF_Module:TD1208
RF_Module:TR-52DA
RF_Module:TR-52DAT
RF_Module:TR-72DA
RF_Module:TR-72DAT
+RF_Module:WEMOS_C3_mini
+RF_Module:WEMOS_D1_mini
RF_Module:iM880A
RF_Module:iM880B
RF_NFC:PN5321A3HN_C1xx
@@ -17551,6 +19504,7 @@ RF_Switch:ADG918BRM
RF_Switch:ADG919BCPZ
RF_Switch:ADG919BRMZ
RF_Switch:AS179-92LF
+RF_Switch:BGS12WN6E6327
RF_Switch:HMC7992
RF_Switch:HMC849A
RF_Switch:KSW-2-46
@@ -17582,8 +19536,12 @@ RF_ZigBee:TWE-L-DP-W
RF_ZigBee:TWE-L-WX
RF_ZigBee:XBee_SMT
Security:ATAES132A-SH
+Security:ATECC508A-MAHDA
+Security:ATECC508A-SSHDA
Security:ATECC608A-MAHDA
Security:ATECC608A-SSHDA
+Security:ATECC608B-MAHDA
+Security:ATECC608B-SSHDA
Sensor:ADE7758
Sensor:ADE7763xRS
Sensor:ADE7953xCP
@@ -17599,6 +19557,7 @@ Sensor:INA260
Sensor:LTC2990
Sensor:MAX30102
Sensor:Nuclear-Radiation_Detector
+Sensor:RPR-0521RS
Sensor:SHT1x
Sensor_Audio:ICS-43434
Sensor_Audio:IM69D120
@@ -17607,6 +19566,7 @@ Sensor_Audio:IM73A135V01
Sensor_Audio:MP45DT02
Sensor_Audio:SPH0641LU4H-1
Sensor_Audio:SPH0645LM4H
+Sensor_Audio:SPM0687LR5H-1
Sensor_Current:A1363xKTTN-1
Sensor_Current:A1363xKTTN-10
Sensor_Current:A1363xKTTN-2
@@ -17772,7 +19732,9 @@ Sensor_Current:ACS781xLRTR-150U
Sensor_Current:CKSR_15-NP
Sensor_Current:CKSR_25-NP
Sensor_Current:CKSR_50-NP
+Sensor_Current:CKSR_50-NP-SP1
Sensor_Current:CKSR_6-NP
+Sensor_Current:CKSR_75-NP
Sensor_Current:CQ-2063
Sensor_Current:CQ-2064
Sensor_Current:CQ-2065
@@ -17819,6 +19781,7 @@ Sensor_Current:CZ-3813
Sensor_Current:CZ-3814
Sensor_Current:CZ-3815
Sensor_Current:HO120-NP
+Sensor_Current:HO128-NP
Sensor_Current:HO15-NP
Sensor_Current:HO15-NPxSP33
Sensor_Current:HO15-NSM
@@ -17855,18 +19818,34 @@ Sensor_Current:IR22771S
Sensor_Current:IR2277S
Sensor_Current:IR25750L
Sensor_Current:LA100-P
+Sensor_Current:LA25-NP
Sensor_Current:LA25-P
Sensor_Current:LA55-P
Sensor_Current:LTSR15-NP
Sensor_Current:LTSR25-NP
Sensor_Current:LTSR6-NP
+Sensor_Current:MCA1101-20-3
+Sensor_Current:MCA1101-20-5
+Sensor_Current:MCA1101-5-3
+Sensor_Current:MCA1101-5-5
+Sensor_Current:MCA1101-50-3
+Sensor_Current:MCA1101-50-5
+Sensor_Current:MCA1101-65-5
+Sensor_Distance:TMF8820
+Sensor_Distance:TMF8821
+Sensor_Distance:TMF8828
+Sensor_Distance:VL53L0CXV0DH1
Sensor_Distance:VL53L1CXV0FY1
+Sensor_Energy:ATM90E26-YU
Sensor_Energy:INA219AxD
Sensor_Energy:INA219AxDCN
Sensor_Energy:INA219BxD
Sensor_Energy:INA219BxDCN
Sensor_Energy:INA226
+Sensor_Energy:INA228
Sensor_Energy:INA233
+Sensor_Energy:INA237
+Sensor_Energy:INA238
Sensor_Energy:LTC4151xMS
Sensor_Energy:MCP39F521
Sensor_Energy:PAC1931x-xJ6CX
@@ -17914,6 +19893,7 @@ Sensor_Gas:MQ-6
Sensor_Gas:MiCS-5524
Sensor_Gas:SCD40-D-R2
Sensor_Gas:SCD41-D-R2
+Sensor_Gas:TGS-5141
Sensor_Humidity:ENS210
Sensor_Humidity:HDC1080
Sensor_Humidity:HDC2080
@@ -17974,10 +19954,14 @@ Sensor_Magnetic:LIS3MDL
Sensor_Magnetic:MA730
Sensor_Magnetic:MMC5633NJL
Sensor_Magnetic:MMC5883MA
+Sensor_Magnetic:MT6701CT
+Sensor_Magnetic:MT6701QT
+Sensor_Magnetic:MT6816CT
Sensor_Magnetic:SM351LT
Sensor_Magnetic:SM353LT
Sensor_Magnetic:Si7210-B-xx-IM2
Sensor_Magnetic:Si7210-B-xx-IV
+Sensor_Magnetic:TLE5012B
Sensor_Magnetic:TLV493D
Sensor_Magnetic:TMAG5110A2xxDBV
Sensor_Magnetic:TMAG5110A4xxDBV
@@ -17999,6 +19983,10 @@ Sensor_Motion:BMI160
Sensor_Motion:BNO055
Sensor_Motion:ICM-20602
Sensor_Motion:ICM-20948
+Sensor_Motion:IIM-42652
+Sensor_Motion:IIS3DWB
+Sensor_Motion:IPS2200
+Sensor_Motion:ISM330DHCX
Sensor_Motion:KX022-1020
Sensor_Motion:KX122-1042
Sensor_Motion:KX222-1054
@@ -18021,11 +20009,13 @@ Sensor_Motion:MPU-6000
Sensor_Motion:MPU-6050
Sensor_Motion:MPU-9150
Sensor_Motion:MPU-9250
+Sensor_Motion:SC7A20
Sensor_Optical:A1050
Sensor_Optical:A1060
Sensor_Optical:A9013
Sensor_Optical:A9050
Sensor_Optical:A9060
+Sensor_Optical:APDS-9251-001
Sensor_Optical:APDS-9301
Sensor_Optical:APDS-9306
Sensor_Optical:APDS-9306-065
@@ -18086,16 +20076,19 @@ Sensor_Optical:SFH2440
Sensor_Optical:SFH2701
Sensor_Optical:SFH300
Sensor_Optical:SFH309
+Sensor_Optical:SFH320
Sensor_Optical:SFH3201
Sensor_Optical:TEPT4400
Sensor_Optical:TSL2550D
Sensor_Optical:TSL2550T
+Sensor_Optical:TSL25911FN
Sensor_Optical:VT93xx
Sensor_Pressure:40PC015G
Sensor_Pressure:40PC100G
Sensor_Pressure:40PC150G
Sensor_Pressure:40PC250G
Sensor_Pressure:BMP280
+Sensor_Pressure:LPS22DF
Sensor_Pressure:LPS22HB
Sensor_Pressure:LPS22HH
Sensor_Pressure:LPS25HB
@@ -18109,12 +20102,17 @@ Sensor_Pressure:MS5525DSO
Sensor_Pressure:MS5607-02BA
Sensor_Pressure:MS5611-01BA
Sensor_Pressure:MS5837-xxBA
+Sensor_Pressure:WSEN-PADS_2511020213301
Sensor_Pressure:XGZP6897D
Sensor_Pressure:XGZP6899D
+Sensor_Proximity:AD7150BRMZ
+Sensor_Proximity:AD7151BRMZ
+Sensor_Proximity:APDS-9160-003
Sensor_Proximity:BPR-105
Sensor_Proximity:BPR-105F
Sensor_Proximity:BPR-205
Sensor_Proximity:CNY70
+Sensor_Proximity:GP2S700HCP
Sensor_Proximity:ITR1201SR10AR
Sensor_Proximity:ITR8307
Sensor_Proximity:ITR8307-F43
@@ -18130,6 +20128,7 @@ Sensor_Proximity:LG206D
Sensor_Proximity:LG206L
Sensor_Proximity:QRE1113
Sensor_Proximity:QRE1113GR
+Sensor_Proximity:RPR-0720
Sensor_Proximity:SFH900
Sensor_Proximity:SFH9201
Sensor_Proximity:SFH9202
@@ -18177,9 +20176,14 @@ Sensor_Temperature:LM35-LP
Sensor_Temperature:LM35-NEB
Sensor_Temperature:LM73
Sensor_Temperature:LM73-1
+Sensor_Temperature:LM74CIM
+Sensor_Temperature:LM74CITP
Sensor_Temperature:LM75B
Sensor_Temperature:LM75C
Sensor_Temperature:LM92CIM
+Sensor_Temperature:LM94021
+Sensor_Temperature:LMT01DQX
+Sensor_Temperature:LMT01LPG
Sensor_Temperature:LMT84DCK
Sensor_Temperature:LMT85DCK
Sensor_Temperature:LMT86DCK
@@ -18236,10 +20240,13 @@ Sensor_Temperature:TMP102xxDRL
Sensor_Temperature:TMP1075D
Sensor_Temperature:TMP1075DGK
Sensor_Temperature:TMP1075DSG
+Sensor_Temperature:TMP110D
Sensor_Temperature:TMP112xxDRL
+Sensor_Temperature:TMP114
Sensor_Temperature:TMP116xxDRV
Sensor_Temperature:TMP117xxDRV
Sensor_Temperature:TMP117xxYBG
+Sensor_Temperature:TMP119AIYBGR
Sensor_Temperature:TMP20AIDCK
Sensor_Temperature:TMP20AIDRL
Sensor_Temperature:TMP36xS
@@ -18305,6 +20312,7 @@ Simulation_SPICE:PMOS
Simulation_SPICE:PMOS_Substrate
Simulation_SPICE:PNP
Simulation_SPICE:PNP_Substrate
+Simulation_SPICE:SWITCH
Simulation_SPICE:TLINE
Simulation_SPICE:VAM
Simulation_SPICE:VDC
@@ -18316,6 +20324,8 @@ Simulation_SPICE:VSFFM
Simulation_SPICE:VSIN
Simulation_SPICE:VTRNOISE
Simulation_SPICE:VTRRANDOM
+Switch:CK_KMS2xxG
+Switch:CK_KMS2xxGP
Switch:SW_Coded
Switch:SW_Coded_SH-7010
Switch:SW_Coded_SH-7030
@@ -18362,21 +20372,36 @@ Switch:SW_Push_Open
Switch:SW_Push_Open_Dual
Switch:SW_Push_Open_Dual_x2
Switch:SW_Push_SPDT
+Switch:SW_Push_Shielded
Switch:SW_Reed
Switch:SW_Reed_Opener
Switch:SW_Reed_SPDT
-Switch:SW_Rotary12
-Switch:SW_Rotary2x6
-Switch:SW_Rotary3x4
-Switch:SW_Rotary4x3
+Switch:SW_Rotary_1x12
+Switch:SW_Rotary_1x3_MP
+Switch:SW_Rotary_1x4_MP
+Switch:SW_Rotary_1x5_MP
+Switch:SW_Rotary_1x6_MP
+Switch:SW_Rotary_1x7_MP
+Switch:SW_Rotary_1x8_MP
+Switch:SW_Rotary_1x9_MP
+Switch:SW_Rotary_2x6
+Switch:SW_Rotary_3x4
+Switch:SW_Rotary_4x3
Switch:SW_SP3T
+Switch:SW_SP3T_NR01103
+Switch:SW_SP4T_NR01104
+Switch:SW_SP5T_NR01105
Switch:SW_SPDT
+Switch:SW_SPDT_312
Switch:SW_SPDT_321
Switch:SW_SPDT_MSM
+Switch:SW_SPDT_XKB_DMx-xxxx-1
Switch:SW_SPST
Switch:SW_SPST_LED
Switch:SW_SPST_Lamp
Switch:SW_SPST_Temperature
+Switch:SW_Slide_DPDT
+Switch:SW_Wuerth_450301014042
Timer:8253
Timer:8254
Timer:8284
@@ -18388,6 +20413,7 @@ Timer:AD9515
Timer:CD4541BE
Timer:CD4541BM
Timer:CD4541BPW
+Timer:DS1023S
Timer:ICM7209
Timer:ICM7555xB
Timer:ICM7555xP
@@ -18495,6 +20521,7 @@ Timer_RTC:PCF8523T
Timer_RTC:PCF8523TK
Timer_RTC:PCF8523TS
Timer_RTC:PCF85263AT
+Timer_RTC:PCF85263ATL
Timer_RTC:PCF85263ATT
Timer_RTC:PCF85263ATT1
Timer_RTC:PCF85363ATT
@@ -18502,7 +20529,9 @@ Timer_RTC:PCF85363ATT1
Timer_RTC:PCF8563T
Timer_RTC:PCF8563TS
Timer_RTC:RV-1805-C3
+Timer_RTC:RV-3028-C7
Timer_RTC:RV-8523-C3
+Timer_RTC:RX8901CE
Transformer:0433BM15A0001
Transformer:0868BM15C0001
Transformer:0896BM15A0001
@@ -18544,12 +20573,14 @@ Transformer:ADTT1-6
Transformer:ADTT1.5-1
Transformer:ADTT3-2
Transformer:ADTT4-1
+Transformer:B0322J5050AHF
Transformer:CST1
Transformer:CST1_Split
Transformer:CST2
Transformer:CST2010
Transformer:CST2010_Split
Transformer:CST2_Split
+Transformer:ED8_4
Transformer:ETC1-1-13
Transformer:LL1587
Transformer:P0544NL
@@ -18576,6 +20607,7 @@ Transformer:PA3493NL
Transformer:PE-68386NL
Transformer:PT61017PEL
Transformer:PT61020EL
+Transformer:TC1-1-13M+
Transformer:TEZ0.5-D-1
Transformer:TEZ0.5-D-2
Transformer:TEZ1.5-D-1
@@ -18609,10 +20641,14 @@ Transformer:TRANSF5
Transformer:TRANSF6
Transformer:TRANSF7
Transformer:TRANSF8
+Transformer:Triad_VPP16-310
Transformer:Wuerth_749013011A
Transformer:Wuerth_750315371
Transformer:Wuerth_750343373
+Transformer:Wuerth_760871131
Transformer:Wurth_750319177
+Transformer:ZMCT103C
+Transformer:ZMPT101K
Transistor_Array:A2982
Transistor_Array:MC1413BD
Transistor_Array:MC1413BP
@@ -18622,6 +20658,8 @@ Transistor_Array:NCV1413B
Transistor_Array:SN75468
Transistor_Array:SN75469
Transistor_Array:TBD62783A
+Transistor_Array:TBD62785AFWG
+Transistor_Array:TBD62785APG
Transistor_Array:ULN2002
Transistor_Array:ULN2002A
Transistor_Array:ULN2003
@@ -18659,6 +20697,7 @@ Transistor_BJT:BC140
Transistor_BJT:BC141
Transistor_BJT:BC160
Transistor_BJT:BC161
+Transistor_BJT:BC212
Transistor_BJT:BC237
Transistor_BJT:BC240
Transistor_BJT:BC307
@@ -18785,6 +20824,7 @@ Transistor_BJT:BFR92
Transistor_BJT:BFT92
Transistor_BJT:BUT11
Transistor_BJT:BUT11A
+Transistor_BJT:DMMT5401
Transistor_BJT:DTA113T
Transistor_BJT:DTA113Z
Transistor_BJT:DTA114E
@@ -18892,22 +20932,47 @@ Transistor_BJT:MJE13003
Transistor_BJT:MJE13005G
Transistor_BJT:MJE13007G
Transistor_BJT:MJE13009G
+Transistor_BJT:MMBT2222A
Transistor_BJT:MMBT3904
Transistor_BJT:MMBT3906
Transistor_BJT:MMBT5550L
Transistor_BJT:MMBT5551L
+Transistor_BJT:MMBTA06
Transistor_BJT:MMBTA42
+Transistor_BJT:MMBTA44
+Transistor_BJT:MMBTA56
Transistor_BJT:MMBTA92
+Transistor_BJT:MMBTA94
Transistor_BJT:MMDT2222A
Transistor_BJT:MMDT3904
Transistor_BJT:MMDT3906
Transistor_BJT:MMDT3946
Transistor_BJT:MMDT5401
Transistor_BJT:MMDT5551
+Transistor_BJT:MMDTA06
Transistor_BJT:MPSA42
Transistor_BJT:MPSA92
+Transistor_BJT:MUN5111DW1
+Transistor_BJT:MUN5112DW1
+Transistor_BJT:MUN5113DW1
+Transistor_BJT:MUN5114DW1
Transistor_BJT:MUN5211DW1
+Transistor_BJT:MUN5212DW1
+Transistor_BJT:MUN5213DW1
+Transistor_BJT:MUN5214DW1
+Transistor_BJT:MUN5311DW1
+Transistor_BJT:MUN5312DW1
+Transistor_BJT:MUN5313DW1
+Transistor_BJT:MUN5314DW1
+Transistor_BJT:MUN5330DW1
+Transistor_BJT:MUN5331DW1
+Transistor_BJT:MUN5332DW1
+Transistor_BJT:MUN5333DW1
+Transistor_BJT:MUN5334DW1
+Transistor_BJT:MUN5335DW1
+Transistor_BJT:MUN5336DW1
Transistor_BJT:PBSS301PZ
+Transistor_BJT:PMBT2222A
Transistor_BJT:PMBT2222AYS
Transistor_BJT:PMBT3904YS
Transistor_BJT:PMBT3906YS
@@ -18920,8 +20985,62 @@ Transistor_BJT:PZT3904
Transistor_BJT:PZT3906
Transistor_BJT:PZTA42
Transistor_BJT:PZTA92
+Transistor_BJT:Q_Dual_NPN_C2C1E1E2
+Transistor_BJT:Q_Dual_NPN_NPN_B1E2B2C2E1C1
+Transistor_BJT:Q_Dual_NPN_NPN_BRT_E1B1C2E2B2C1
+Transistor_BJT:Q_Dual_NPN_NPN_BRT_No_R2_C1B2E2C2B1E1
+Transistor_BJT:Q_Dual_NPN_NPN_BRT_No_R2_E1B1C2E2B2C1
+Transistor_BJT:Q_Dual_NPN_NPN_C1E1C2E2B2B1
+Transistor_BJT:Q_Dual_NPN_NPN_E1B1C2E2B2C1
+Transistor_BJT:Q_Dual_NPN_PNP_B1E2B2C2E1C1
+Transistor_BJT:Q_Dual_NPN_PNP_BRT_E1B1C2E2B2C1
+Transistor_BJT:Q_Dual_NPN_PNP_E1B1C2E2B2C1
+Transistor_BJT:Q_Dual_PNP_C2C1E1E2
+Transistor_BJT:Q_Dual_PNP_NPN_BRT_E1B1C2E2B2C1
+Transistor_BJT:Q_Dual_PNP_PNP_BRT_E1B1C2E2B2C1
+Transistor_BJT:Q_Dual_PNP_PNP_C1B1B2C2E2E1
+Transistor_BJT:Q_Dual_PNP_PNP_C1E1C2E2B2B1
+Transistor_BJT:Q_Dual_PNP_PNP_E1B1C2E2B2C1
+Transistor_BJT:Q_NPN_BCE
+Transistor_BJT:Q_NPN_BCEC
+Transistor_BJT:Q_NPN_BEC
+Transistor_BJT:Q_NPN_BRT_BEC
+Transistor_BJT:Q_NPN_BRT_ECB
+Transistor_BJT:Q_NPN_CBE
+Transistor_BJT:Q_NPN_CEB
+Transistor_BJT:Q_NPN_Darlington_BCE
+Transistor_BJT:Q_NPN_Darlington_BCEC
+Transistor_BJT:Q_NPN_Darlington_BEC
+Transistor_BJT:Q_NPN_Darlington_CBE
+Transistor_BJT:Q_NPN_Darlington_CEB
+Transistor_BJT:Q_NPN_Darlington_EBC
+Transistor_BJT:Q_NPN_Darlington_ECB
+Transistor_BJT:Q_NPN_Darlington_ECBC
+Transistor_BJT:Q_NPN_EBC
+Transistor_BJT:Q_NPN_ECB
+Transistor_BJT:Q_NPN_ECBC
+Transistor_BJT:Q_PNP_BCE
+Transistor_BJT:Q_PNP_BCEC
+Transistor_BJT:Q_PNP_BEC
+Transistor_BJT:Q_PNP_BRT_BEC
+Transistor_BJT:Q_PNP_BRT_ECB
+Transistor_BJT:Q_PNP_CBE
+Transistor_BJT:Q_PNP_CEB
+Transistor_BJT:Q_PNP_Darlington_BCE
+Transistor_BJT:Q_PNP_Darlington_BCEC
+Transistor_BJT:Q_PNP_Darlington_BEC
+Transistor_BJT:Q_PNP_Darlington_CBE
+Transistor_BJT:Q_PNP_Darlington_CEB
+Transistor_BJT:Q_PNP_Darlington_EBC
+Transistor_BJT:Q_PNP_Darlington_ECB
+Transistor_BJT:Q_PNP_Darlington_ECBC
+Transistor_BJT:Q_PNP_EBC
+Transistor_BJT:Q_PNP_ECB
+Transistor_BJT:Q_PNP_ECBC
Transistor_BJT:S8050
Transistor_BJT:S8550
+Transistor_BJT:SS8050
+Transistor_BJT:SS8550
Transistor_BJT:SSM2210
Transistor_BJT:SSM2220
Transistor_BJT:TIP120
@@ -18952,6 +21071,8 @@ Transistor_FET:2N7002K
Transistor_FET:3SK263
Transistor_FET:AO3400A
Transistor_FET:AO3401A
+Transistor_FET:AO4842
+Transistor_FET:AO4892
Transistor_FET:AON6411
Transistor_FET:BF244A
Transistor_FET:BF244B
@@ -18962,6 +21083,7 @@ Transistor_FET:BF245C
Transistor_FET:BF545A
Transistor_FET:BF545B
Transistor_FET:BF545C
+Transistor_FET:BF994S
Transistor_FET:BS107
Transistor_FET:BS108
Transistor_FET:BS170
@@ -19014,6 +21136,7 @@ Transistor_FET:BSC265N10LSFG
Transistor_FET:BSC340N08NS3G
Transistor_FET:BSC440N10NS3G
Transistor_FET:BSD235C
+Transistor_FET:BSD840N
Transistor_FET:BSF030NE2LQ
Transistor_FET:BSF035NE2LQ
Transistor_FET:BSF450NE7NH3
@@ -19046,6 +21169,7 @@ Transistor_FET:BUK7M67-60EX
Transistor_FET:BUK7M6R3-40EX
Transistor_FET:BUK7M8R0-40EX
Transistor_FET:BUK7M9R9-60EX
+Transistor_FET:BUK9832-55A
Transistor_FET:BUK9M10-30EX
Transistor_FET:BUK9M11-40EX
Transistor_FET:BUK9M12-60EX
@@ -19092,10 +21216,12 @@ Transistor_FET:C3M0120100J
Transistor_FET:C3M0120100K
Transistor_FET:C3M0280090D
Transistor_FET:C3M0280090J
+Transistor_FET:CSD13380F3
Transistor_FET:CSD16301Q2
Transistor_FET:CSD16321Q5
Transistor_FET:CSD16322Q5
Transistor_FET:CSD16325Q5
+Transistor_FET:CSD16327Q3
Transistor_FET:CSD16342Q5A
Transistor_FET:CSD16401Q5
Transistor_FET:CSD16403Q5A
@@ -19136,9 +21262,11 @@ Transistor_FET:CSD17559Q5
Transistor_FET:CSD17570Q5B
Transistor_FET:CSD17573Q5B
Transistor_FET:CSD17576Q5B
+Transistor_FET:CSD17577Q3A
Transistor_FET:CSD17577Q5A
Transistor_FET:CSD17578Q5A
Transistor_FET:CSD17579Q5A
+Transistor_FET:CSD17581Q3A
Transistor_FET:CSD18501Q5A
Transistor_FET:CSD18502Q5B
Transistor_FET:CSD18503Q5A
@@ -19151,6 +21279,7 @@ Transistor_FET:CSD18533Q5A
Transistor_FET:CSD18534Q5A
Transistor_FET:CSD18537NQ5A
Transistor_FET:CSD18540Q5B
+Transistor_FET:CSD18543Q3A
Transistor_FET:CSD18563Q5A
Transistor_FET:CSD19502Q5B
Transistor_FET:CSD19531Q5A
@@ -19159,6 +21288,8 @@ Transistor_FET:CSD19533Q5A
Transistor_FET:CSD19534Q5A
Transistor_FET:CSD19537Q3
Transistor_FET:CSD25302Q2
+Transistor_FET:CSD25402Q3A
+Transistor_FET:CSD25480F3
Transistor_FET:DMC2053UVT
Transistor_FET:DMC3071LVT
Transistor_FET:DMG1012T
@@ -19173,6 +21304,7 @@ Transistor_FET:DMG9926UDM
Transistor_FET:DMN10H220L
Transistor_FET:DMN10H700S
Transistor_FET:DMN13H750S
+Transistor_FET:DMN2040U
Transistor_FET:DMN2041L
Transistor_FET:DMN2050L
Transistor_FET:DMN2056U
@@ -19181,6 +21313,7 @@ Transistor_FET:DMN2075U
Transistor_FET:DMN2230U
Transistor_FET:DMN24H11DS
Transistor_FET:DMN24H3D5L
+Transistor_FET:DMN3008SFG
Transistor_FET:DMN3033LDM
Transistor_FET:DMN3042L
Transistor_FET:DMN3051L
@@ -19193,9 +21326,18 @@ Transistor_FET:DMN3404L
Transistor_FET:DMN6075S
Transistor_FET:DMN60H080DS
Transistor_FET:DMN6140L
+Transistor_FET:DMN61D8LQ
Transistor_FET:DMN67D7L
Transistor_FET:DMN67D8L
Transistor_FET:DMP3013SFV
+Transistor_FET:DMP6050SSD
+Transistor_FET:DMT6008LFG
+Transistor_FET:EPC2035
+Transistor_FET:EPC2036
+Transistor_FET:EPC2037
+Transistor_FET:EPC2038
+Transistor_FET:EPC2203
+Transistor_FET:EPC2219
Transistor_FET:FDC2512
Transistor_FET:FDC6330L
Transistor_FET:FDC86244
@@ -19239,7 +21381,10 @@ Transistor_FET:FDS9435A
Transistor_FET:FDS9926A
Transistor_FET:FDS9934C
Transistor_FET:FQP27P06
+Transistor_FET:GS66502B
+Transistor_FET:GS66504B
Transistor_FET:GS66508B
+Transistor_FET:IF3602
Transistor_FET:IGLD60R070D1
Transistor_FET:IGLD60R190D1
Transistor_FET:IGO60R070D1
@@ -19375,6 +21520,9 @@ Transistor_FET:IRLML9301
Transistor_FET:IRLZ24
Transistor_FET:IRLZ34N
Transistor_FET:IRLZ44N
+Transistor_FET:JFE150DBV
+Transistor_FET:JFE150DCK
+Transistor_FET:JFE2140D
Transistor_FET:MMBF170
Transistor_FET:MMBF4391
Transistor_FET:MMBF4392
@@ -19391,6 +21539,54 @@ Transistor_FET:PMN48XP
Transistor_FET:PSMN5R2-60YL
Transistor_FET:QM6006D
Transistor_FET:QM6015D
+Transistor_FET:Q_Dual_NMOS_G1S2G2D2S1D1
+Transistor_FET:Q_Dual_NMOS_S1G1D2S2G2D1
+Transistor_FET:Q_Dual_NMOS_S1G1S2G2D2D1
+Transistor_FET:Q_Dual_NMOS_S1G1S2G2D2D2D1D1
+Transistor_FET:Q_Dual_PMOS_G1S2G2D2S1D1
+Transistor_FET:Q_Dual_PMOS_S1G1D2S2G2D1
+Transistor_FET:Q_Dual_PMOS_S1G1S2G2D2D2D1D1
+Transistor_FET:Q_NMOS_DGS
+Transistor_FET:Q_NMOS_DSG
+Transistor_FET:Q_NMOS_GDS
+Transistor_FET:Q_NMOS_GDSD
+Transistor_FET:Q_NMOS_GSD
+Transistor_FET:Q_NMOS_SDGD
+Transistor_FET:Q_NMOS_SGD
+Transistor_FET:Q_PMOS_DGS
+Transistor_FET:Q_PMOS_DSG
+Transistor_FET:Q_PMOS_GDS
+Transistor_FET:Q_PMOS_GDSD
+Transistor_FET:Q_PMOS_GSD
+Transistor_FET:Q_PMOS_SDG
+Transistor_FET:Q_PMOS_SDGD
+Transistor_FET:Q_PMOS_SGD
+Transistor_FET:RQ6E080AJ
+Transistor_FET:RS9N50D
+Transistor_FET:RSQ030N08HZG
+Transistor_FET:SCTL35N65G2V
+Transistor_FET:SGT65R65AL
+Transistor_FET:SQJQ100E
+Transistor_FET:SQJQ100EL
+Transistor_FET:SQJQ112E
+Transistor_FET:SQJQ114EL
+Transistor_FET:SQJQ116EL
+Transistor_FET:SQJQ130EL
+Transistor_FET:SQJQ140E
+Transistor_FET:SQJQ142E
+Transistor_FET:SQJQ144AE
+Transistor_FET:SQJQ146E
+Transistor_FET:SQJQ148E
+Transistor_FET:SQJQ150E
+Transistor_FET:SQJQ160E
+Transistor_FET:SQJQ160EL
+Transistor_FET:SQJQ184E
+Transistor_FET:SQJQ186E
+Transistor_FET:SQJQ402E
+Transistor_FET:SQJQ404E
+Transistor_FET:SQJQ410EL
+Transistor_FET:SQJQ466E
+Transistor_FET:SQJQ480E
Transistor_FET:STB15N80K5
Transistor_FET:STB33N65M2
Transistor_FET:STB40N60M2
@@ -19404,6 +21600,7 @@ Transistor_FET:SUD50P04-08
Transistor_FET:SUD50P06-15
Transistor_FET:SUD50P08-25L
Transistor_FET:SUD50P10-43L
+Transistor_FET:Si1308EDL
Transistor_FET:Si1442DH
Transistor_FET:Si2319CDS
Transistor_FET:Si2371EDS
@@ -19417,10 +21614,13 @@ Transistor_FET:Si7450DP
Transistor_FET:Si7617DN
Transistor_FET:SiA449DJ
Transistor_FET:SiA453EDJ
+Transistor_FET:SiA462DJ
+Transistor_FET:SiR696DP
Transistor_FET:SiS415DNT
Transistor_FET:SiS443DN
Transistor_FET:SiS454DN
Transistor_FET:SiSS27DN
+Transistor_FET:T2N7002AK
Transistor_FET:TP0610L
Transistor_FET:TP0610T
Transistor_FET:TSM2301ACX
@@ -19452,6 +21652,12 @@ Transistor_FET:ZXMP4A16G
Transistor_FET_Other:DN2540N3-G
Transistor_FET_Other:DN2540N5-G
Transistor_FET_Other:DN2540N8-G
+Transistor_FET_Other:Q_NMOS_Depletion_DGS
+Transistor_FET_Other:Q_NMOS_Depletion_DSG
+Transistor_FET_Other:Q_NMOS_Depletion_GDS
+Transistor_FET_Other:Q_NMOS_Depletion_GSD
+Transistor_FET_Other:Q_NMOS_Depletion_SDG
+Transistor_FET_Other:Q_NMOS_Depletion_SGD
Transistor_IGBT:IRG4PF50W
Transistor_IGBT:STGP7NC60HD
Transistor_Power_Module:A2C25S12M3
@@ -19514,6 +21720,13 @@ Triac_Thyristor:BTB16-800BW
Triac_Thyristor:BTB16-800C
Triac_Thyristor:BTB16-800CW
Triac_Thyristor:BTB16-800SW
+Triac_Thyristor:CT401T
+Triac_Thyristor:Generic_Triac_A1A2G
+Triac_Thyristor:Generic_Triac_A1GA2
+Triac_Thyristor:Generic_Triac_A2A1G
+Triac_Thyristor:Generic_Triac_A2GA1
+Triac_Thyristor:Generic_Triac_GA1A2
+Triac_Thyristor:Generic_Triac_GA2A1
Triac_Thyristor:TIC106
Triac_Thyristor:TIC116
Triac_Thyristor:TIC126
diff --git a/src/ApiPlatform/AddDocumentedAPIPropertiesJSONSchemaFactory.php b/src/ApiPlatform/AddDocumentedAPIPropertiesJSONSchemaFactory.php
deleted file mode 100644
index db629a4a..00000000
--- a/src/ApiPlatform/AddDocumentedAPIPropertiesJSONSchemaFactory.php
+++ /dev/null
@@ -1,116 +0,0 @@
-.
- */
-
-declare(strict_types=1);
-
-
-namespace App\ApiPlatform;
-
-use ApiPlatform\JsonSchema\Schema;
-use ApiPlatform\JsonSchema\SchemaFactoryInterface;
-use ApiPlatform\Metadata\Operation;
-use Symfony\Component\DependencyInjection\Attribute\AsDecorator;
-
-/**
- * This decorator adds the properties given by DocumentedAPIProperty attributes on the classes to the schema.
- */
-#[AsDecorator('api_platform.json_schema.schema_factory')]
-class AddDocumentedAPIPropertiesJSONSchemaFactory implements SchemaFactoryInterface
-{
-
- public function __construct(private readonly SchemaFactoryInterface $decorated)
- {
- }
-
- public function buildSchema(
- string $className,
- string $format = 'json',
- string $type = Schema::TYPE_OUTPUT,
- Operation $operation = null,
- Schema $schema = null,
- array $serializerContext = null,
- bool $forceCollection = false
- ): Schema {
-
-
- $schema = $this->decorated->buildSchema($className, $format, $type, $operation, $schema, $serializerContext, $forceCollection);
-
- //Check if there is are DocumentedAPIProperty attributes on the class
- $reflectionClass = new \ReflectionClass($className);
- $attributes = $reflectionClass->getAttributes(DocumentedAPIProperty::class);
- foreach ($attributes as $attribute) {
- /** @var DocumentedAPIProperty $api_property */
- $api_property = $attribute->newInstance();
- $this->addPropertyToSchema($schema, $api_property->schemaName, $api_property->property,
- $api_property, $serializerContext ?? [], $format);
- }
-
- return $schema;
- }
-
- private function addPropertyToSchema(Schema $schema, string $definitionName, string $normalizedPropertyName, DocumentedAPIProperty $propertyMetadata, array $serializerContext, string $format): void
- {
- $version = $schema->getVersion();
- $swagger = Schema::VERSION_SWAGGER === $version;
-
- $propertySchema = [];
-
- if (false === $propertyMetadata->writeable) {
- $propertySchema['readOnly'] = true;
- }
- if (!$swagger && false === $propertyMetadata->readable) {
- $propertySchema['writeOnly'] = true;
- }
- if (null !== $description = $propertyMetadata->description) {
- $propertySchema['description'] = $description;
- }
-
- $deprecationReason = $propertyMetadata->deprecationReason;
-
- // see https://github.com/json-schema-org/json-schema-spec/pull/737
- if (!$swagger && null !== $deprecationReason) {
- $propertySchema['deprecated'] = true;
- }
-
- if (!empty($default = $propertyMetadata->default)) {
- if ($default instanceof \BackedEnum) {
- $default = $default->value;
- }
- $propertySchema['default'] = $default;
- }
-
- if (!empty($example = $propertyMetadata->example)) {
- $propertySchema['example'] = $example;
- }
-
- if (!isset($propertySchema['example']) && isset($propertySchema['default'])) {
- $propertySchema['example'] = $propertySchema['default'];
- }
-
- $propertySchema['type'] = $propertyMetadata->type;
- $propertySchema['nullable'] = $propertyMetadata->nullable;
-
- $propertySchema = new \ArrayObject($propertySchema);
-
- $schema->getDefinitions()[$definitionName]['properties'][$normalizedPropertyName] = $propertySchema;
- }
-
-
-}
\ No newline at end of file
diff --git a/src/ApiPlatform/DocumentedAPIProperty.php b/src/ApiPlatform/DocumentedAPIProperties/DocumentedAPIProperty.php
similarity index 59%
rename from src/ApiPlatform/DocumentedAPIProperty.php
rename to src/ApiPlatform/DocumentedAPIProperties/DocumentedAPIProperty.php
index c4c0a337..57d275be 100644
--- a/src/ApiPlatform/DocumentedAPIProperty.php
+++ b/src/ApiPlatform/DocumentedAPIProperties/DocumentedAPIProperty.php
@@ -21,7 +21,9 @@
declare(strict_types=1);
-namespace App\ApiPlatform;
+namespace App\ApiPlatform\DocumentedAPIProperties;
+
+use ApiPlatform\Metadata\ApiProperty;
/**
* When this attribute is applied to a class, an property will be added to the API documentation using the given parameters.
@@ -64,4 +66,55 @@ final class DocumentedAPIProperty
)
{
}
+
+ public function toAPIProperty(bool $use_swagger = false): ApiProperty
+ {
+ $openApiContext = [];
+
+ if (false === $this->writeable) {
+ $openApiContext['readOnly'] = true;
+ }
+ if (!$use_swagger && false === $this->readable) {
+ $openApiContext['writeOnly'] = true;
+ }
+ if (null !== $description = $this->description) {
+ $openApiContext['description'] = $description;
+ }
+
+ $deprecationReason = $this->deprecationReason;
+
+ // see https://github.com/json-schema-org/json-schema-spec/pull/737
+ if (!$use_swagger && null !== $deprecationReason) {
+ $openApiContext['deprecated'] = true;
+ }
+
+ if (!empty($default = $this->default)) {
+ if ($default instanceof \BackedEnum) {
+ $default = $default->value;
+ }
+ $openApiContext['default'] = $default;
+ }
+
+ if (!empty($example = $this->example)) {
+ $openApiContext['example'] = $example;
+ }
+
+ if (!isset($openApiContext['example']) && isset($openApiContext['default'])) {
+ $openApiContext['example'] = $openApiContext['default'];
+ }
+
+ $openApiContext['type'] = $this->type;
+ $openApiContext['nullable'] = $this->nullable;
+
+
+
+ return new ApiProperty(
+ description: $this->description,
+ readable: $this->readable,
+ writable: $this->writeable,
+ openapiContext: $openApiContext,
+ types: $this->type,
+ property: $this->property
+ );
+ }
}
\ No newline at end of file
diff --git a/src/ApiPlatform/DocumentedAPIProperties/PropertyMetadataFactory.php b/src/ApiPlatform/DocumentedAPIProperties/PropertyMetadataFactory.php
new file mode 100644
index 00000000..49e9a031
--- /dev/null
+++ b/src/ApiPlatform/DocumentedAPIProperties/PropertyMetadataFactory.php
@@ -0,0 +1,73 @@
+.
+ */
+
+declare(strict_types=1);
+
+
+namespace App\ApiPlatform\DocumentedAPIProperties;
+
+use ApiPlatform\Metadata\ApiProperty;
+use ApiPlatform\Metadata\Property\Factory\PropertyMetadataFactoryInterface;
+use ReflectionClass;
+use Symfony\Component\DependencyInjection\Attribute\AsDecorator;
+
+/**
+ * This decorator adds the virtual properties defined by the DocumentedAPIProperty attribute to the property metadata
+ * which then get picked up by the openapi schema generator
+ */
+#[AsDecorator('api_platform.metadata.property.metadata_factory')]
+class PropertyMetadataFactory implements PropertyMetadataFactoryInterface
+{
+ public function __construct(private PropertyMetadataFactoryInterface $decorated)
+ {
+ }
+
+ public function create(string $resourceClass, string $property, array $options = []): ApiProperty
+ {
+ $metadata = $this->decorated->create($resourceClass, $property, $options);
+
+ //Only become active in the context of the openapi schema generation
+ if (!isset($options['schema_type'])) {
+ return $metadata;
+ }
+
+ if (!class_exists($resourceClass)) {
+ return $metadata;
+ }
+
+ $refClass = new ReflectionClass($resourceClass);
+ $attributes = $refClass->getAttributes(DocumentedAPIProperty::class);
+
+ //Look for the DocumentedAPIProperty attribute with the given property name
+ foreach ($attributes as $attribute) {
+ /** @var DocumentedAPIProperty $api_property */
+ $api_property = $attribute->newInstance();
+ //If attribute not matches the property name, skip it
+ if ($api_property->property !== $property) {
+ continue;
+ }
+
+ //Return the virtual property
+ return $api_property->toAPIProperty();
+ }
+
+ return $metadata;
+ }
+}
\ No newline at end of file
diff --git a/src/ApiPlatform/DocumentedAPIProperties/PropertyNameCollectionFactory.php b/src/ApiPlatform/DocumentedAPIProperties/PropertyNameCollectionFactory.php
new file mode 100644
index 00000000..3157cbf3
--- /dev/null
+++ b/src/ApiPlatform/DocumentedAPIProperties/PropertyNameCollectionFactory.php
@@ -0,0 +1,68 @@
+.
+ */
+
+declare(strict_types=1);
+
+
+namespace App\ApiPlatform\DocumentedAPIProperties;
+
+use ApiPlatform\Metadata\Property\Factory\PropertyNameCollectionFactoryInterface;
+use ApiPlatform\Metadata\Property\PropertyNameCollection;
+use ReflectionClass;
+use Symfony\Component\DependencyInjection\Attribute\AsDecorator;
+
+/**
+ * This decorator adds the virtual property names defined by the DocumentedAPIProperty attribute to the property name collection
+ * which then get picked up by the openapi schema generator
+ */
+#[AsDecorator('api_platform.metadata.property.name_collection_factory')]
+class PropertyNameCollectionFactory implements PropertyNameCollectionFactoryInterface
+{
+ public function __construct(private readonly PropertyNameCollectionFactoryInterface $decorated)
+ {
+ }
+
+ public function create(string $resourceClass, array $options = []): PropertyNameCollection
+ {
+ // Get the default properties from the decorated service
+ $propertyNames = $this->decorated->create($resourceClass, $options);
+
+ //Only become active in the context of the openapi schema generation
+ if (!isset($options['schema_type'])) {
+ return $propertyNames;
+ }
+
+ if (!class_exists($resourceClass)) {
+ return $propertyNames;
+ }
+
+ $properties = iterator_to_array($propertyNames);
+
+ $refClass = new ReflectionClass($resourceClass);
+
+ foreach ($refClass->getAttributes(DocumentedAPIProperty::class) as $attribute) {
+ /** @var DocumentedAPIProperty $instance */
+ $instance = $attribute->newInstance();
+ $properties[] = $instance->property;
+ }
+
+ return new PropertyNameCollection($properties);
+ }
+}
\ No newline at end of file
diff --git a/src/ApiPlatform/Filter/EntityFilter.php b/src/ApiPlatform/Filter/EntityFilter.php
index 50c1404f..85bc3833 100644
--- a/src/ApiPlatform/Filter/EntityFilter.php
+++ b/src/ApiPlatform/Filter/EntityFilter.php
@@ -37,7 +37,7 @@ class EntityFilter extends AbstractFilter
public function __construct(
ManagerRegistry $managerRegistry,
private readonly EntityFilterHelper $filter_helper,
- LoggerInterface $logger = null,
+ ?LoggerInterface $logger = null,
?array $properties = null,
?NameConverterInterface $nameConverter = null
) {
@@ -50,7 +50,7 @@ class EntityFilter extends AbstractFilter
QueryBuilder $queryBuilder,
QueryNameGeneratorInterface $queryNameGenerator,
string $resourceClass,
- Operation $operation = null,
+ ?Operation $operation = null,
array $context = []
): void {
if (
diff --git a/src/ApiPlatform/Filter/EntityFilterHelper.php b/src/ApiPlatform/Filter/EntityFilterHelper.php
index 42cc567f..45e04fde 100644
--- a/src/ApiPlatform/Filter/EntityFilterHelper.php
+++ b/src/ApiPlatform/Filter/EntityFilterHelper.php
@@ -92,12 +92,6 @@ class EntityFilterHelper
'type' => Type::BUILTIN_TYPE_STRING,
'required' => false,
'description' => 'Filter using a comma seperated list of element IDs. Use + to include all direct children and ++ to include all children recursively.',
- 'openapi' => [
- 'example' => '',
- 'allowReserved' => false,// if true, query parameters will be not percent-encoded
- 'allowEmptyValue' => true,
- 'explode' => false, // to be true, the type must be Type::BUILTIN_TYPE_ARRAY, ?product=blue,green will be ?product=blue&product=green
- ],
];
}
return $description;
diff --git a/src/ApiPlatform/Filter/LikeFilter.php b/src/ApiPlatform/Filter/LikeFilter.php
index f88c89b1..a8e96eb9 100644
--- a/src/ApiPlatform/Filter/LikeFilter.php
+++ b/src/ApiPlatform/Filter/LikeFilter.php
@@ -38,7 +38,7 @@ final class LikeFilter extends AbstractFilter
QueryBuilder $queryBuilder,
QueryNameGeneratorInterface $queryNameGenerator,
string $resourceClass,
- Operation $operation = null,
+ ?Operation $operation = null,
array $context = []
): void {
// Otherwise filter is applied to order and page as well
@@ -50,7 +50,7 @@ final class LikeFilter extends AbstractFilter
}
$parameterName = $queryNameGenerator->generateParameterName($property); // Generate a unique parameter name to avoid collisions with other filters
$queryBuilder
- ->andWhere(sprintf('o.%s LIKE :%s', $property, $parameterName))
+ ->andWhere(sprintf('ILIKE(o.%s, :%s) = TRUE', $property, $parameterName))
->setParameter($parameterName, $value);
}
@@ -67,12 +67,6 @@ final class LikeFilter extends AbstractFilter
'type' => Type::BUILTIN_TYPE_STRING,
'required' => false,
'description' => 'Filter using a LIKE SQL expression. Use % as wildcard for multiple characters and _ for single characters. For example, to search for all items containing foo, use foo. To search for all items starting with foo, use foo%. To search for all items ending with foo, use %foo',
- 'openapi' => [
- 'example' => '',
- 'allowReserved' => false,// if true, query parameters will be not percent-encoded
- 'allowEmptyValue' => true,
- 'explode' => false, // to be true, the type must be Type::BUILTIN_TYPE_ARRAY, ?product=blue,green will be ?product=blue&product=green
- ],
];
}
return $description;
diff --git a/src/ApiPlatform/Filter/PartStoragelocationFilter.php b/src/ApiPlatform/Filter/PartStoragelocationFilter.php
index 860fb320..4d0ad2df 100644
--- a/src/ApiPlatform/Filter/PartStoragelocationFilter.php
+++ b/src/ApiPlatform/Filter/PartStoragelocationFilter.php
@@ -38,7 +38,7 @@ class PartStoragelocationFilter extends AbstractFilter
public function __construct(
ManagerRegistry $managerRegistry,
private readonly EntityFilterHelper $filter_helper,
- LoggerInterface $logger = null,
+ ?LoggerInterface $logger = null,
?array $properties = null,
?NameConverterInterface $nameConverter = null
) {
@@ -51,7 +51,7 @@ class PartStoragelocationFilter extends AbstractFilter
QueryBuilder $queryBuilder,
QueryNameGeneratorInterface $queryNameGenerator,
string $resourceClass,
- Operation $operation = null,
+ ?Operation $operation = null,
array $context = []
): void {
//Do not check for mapping here, as we are using a virtual property
diff --git a/src/ApiPlatform/Filter/TagFilter.php b/src/ApiPlatform/Filter/TagFilter.php
new file mode 100644
index 00000000..98648ee9
--- /dev/null
+++ b/src/ApiPlatform/Filter/TagFilter.php
@@ -0,0 +1,96 @@
+.
+ */
+
+declare(strict_types=1);
+
+
+namespace App\ApiPlatform\Filter;
+
+use ApiPlatform\Doctrine\Orm\Filter\AbstractFilter;
+use ApiPlatform\Doctrine\Orm\Util\QueryNameGeneratorInterface;
+use ApiPlatform\Metadata\Operation;
+use Doctrine\ORM\QueryBuilder;
+use Symfony\Component\PropertyInfo\Type;
+
+/**
+ * Due to their nature, tags are stored in a single string, separated by commas, which requires some more complex search logic.
+ * This filter allows to easily search for tags in a part entity.
+ */
+final class TagFilter extends AbstractFilter
+{
+
+ protected function filterProperty(
+ string $property,
+ $value,
+ QueryBuilder $queryBuilder,
+ QueryNameGeneratorInterface $queryNameGenerator,
+ string $resourceClass,
+ ?Operation $operation = null,
+ array $context = []
+ ): void {
+ // Ignore filter if property is not enabled or mapped
+ if (
+ !$this->isPropertyEnabled($property, $resourceClass) ||
+ !$this->isPropertyMapped($property, $resourceClass)
+ ) {
+ return;
+ }
+
+ //Escape any %, _ or \ in the tag
+ $value = addcslashes($value, '%_\\');
+
+ $tag_identifier_prefix = $queryNameGenerator->generateParameterName($property);
+
+ $expr = $queryBuilder->expr();
+
+ $tmp = $expr->orX(
+ 'ILIKE(o.'.$property.', :' . $tag_identifier_prefix . '_1) = TRUE',
+ 'ILIKE(o.'.$property.', :' . $tag_identifier_prefix . '_2) = TRUE',
+ 'ILIKE(o.'.$property.', :' . $tag_identifier_prefix . '_3) = TRUE',
+ 'ILIKE(o.'.$property.', :' . $tag_identifier_prefix . '_4) = TRUE',
+ );
+
+ $queryBuilder->andWhere($tmp);
+
+ //Set the parameters for the LIKE expression, in each variation of the tag (so with a comma, at the end, at the beginning, and on both ends, and equaling the tag)
+ $queryBuilder->setParameter($tag_identifier_prefix . '_1', '%,' . $value . ',%');
+ $queryBuilder->setParameter($tag_identifier_prefix . '_2', '%,' . $value);
+ $queryBuilder->setParameter($tag_identifier_prefix . '_3', $value . ',%');
+ $queryBuilder->setParameter($tag_identifier_prefix . '_4', $value);
+ }
+
+ public function getDescription(string $resourceClass): array
+ {
+ if (!$this->properties) {
+ return [];
+ }
+
+ $description = [];
+ foreach (array_keys($this->properties) as $property) {
+ $description[(string)$property] = [
+ 'property' => $property,
+ 'type' => Type::BUILTIN_TYPE_STRING,
+ 'required' => false,
+ 'description' => 'Filter for tags of a part',
+ ];
+ }
+ return $description;
+ }
+}
\ No newline at end of file
diff --git a/src/ApiPlatform/NormalizePropertyNameCollectionFactory.php b/src/ApiPlatform/NormalizePropertyNameCollectionFactory.php
new file mode 100644
index 00000000..c6a8220e
--- /dev/null
+++ b/src/ApiPlatform/NormalizePropertyNameCollectionFactory.php
@@ -0,0 +1,77 @@
+.
+ */
+
+declare(strict_types=1);
+
+
+namespace App\ApiPlatform;
+
+use ApiPlatform\Metadata\Property\Factory\PropertyNameCollectionFactoryInterface;
+use ApiPlatform\Metadata\Property\PropertyNameCollection;
+use Symfony\Component\DependencyInjection\Attribute\AsDecorator;
+use function Symfony\Component\String\u;
+
+/**
+ * This decorator removes all camelCase property names from the property name collection, if a snake_case version exists.
+ * This is a fix for https://github.com/Part-DB/Part-DB-server/issues/862, as the openapi schema generator wrongly collects
+ * both camelCase and snake_case property names, which leads to duplicate properties in the schema.
+ * This seems to come from the fact that the openapi schema generator uses no serializerContext, which seems then to collect
+ * the getters too...
+ */
+#[AsDecorator('api_platform.metadata.property.name_collection_factory')]
+class NormalizePropertyNameCollectionFactory implements PropertyNameCollectionFactoryInterface
+{
+ public function __construct(private readonly PropertyNameCollectionFactoryInterface $decorated)
+ {
+ }
+
+ public function create(string $resourceClass, array $options = []): PropertyNameCollection
+ {
+ // Get the default properties from the decorated service
+ $propertyNames = $this->decorated->create($resourceClass, $options);
+
+ //Only become active in the context of the openapi schema generation
+ if (!isset($options['schema_type'])) {
+ return $propertyNames;
+ }
+
+ //If we are not in the jsonapi generator (which sets no serializer groups), return the property names as is
+ if (isset($options['serializer_groups'])) {
+ return $propertyNames;
+ }
+
+ //Remove all camelCase property names from the collection, if a snake_case version exists
+ $properties = iterator_to_array($propertyNames);
+
+ foreach ($properties as $property) {
+ if (str_contains($property, '_')) {
+ $camelized = u($property)->camel()->toString();
+
+ //If the camelized version exists, remove it from the collection
+ $index = array_search($camelized, $properties, true);
+ if ($index !== false) {
+ unset($properties[$index]);
+ }
+ }
+ }
+
+ return new PropertyNameCollection($properties);
+ }
+}
\ No newline at end of file
diff --git a/src/Command/Attachments/CleanAttachmentsCommand.php b/src/Command/Attachments/CleanAttachmentsCommand.php
index e9ffd286..59bc99ee 100644
--- a/src/Command/Attachments/CleanAttachmentsCommand.php
+++ b/src/Command/Attachments/CleanAttachmentsCommand.php
@@ -73,6 +73,9 @@ class CleanAttachmentsCommand extends Command
//Ignore image cache folder
$finder->exclude('cache');
+ //Ignore automigration folder
+ $finder->exclude('.automigration-backup');
+
$fs = new Filesystem();
$file_list = [];
diff --git a/src/Command/Attachments/DownloadAttachmentsCommand.php b/src/Command/Attachments/DownloadAttachmentsCommand.php
new file mode 100644
index 00000000..34deef0e
--- /dev/null
+++ b/src/Command/Attachments/DownloadAttachmentsCommand.php
@@ -0,0 +1,136 @@
+.
+ */
+
+declare(strict_types=1);
+
+
+namespace App\Command\Attachments;
+
+use App\Entity\Attachments\Attachment;
+use App\Entity\Attachments\AttachmentUpload;
+use App\Exceptions\AttachmentDownloadException;
+use App\Services\Attachments\AttachmentManager;
+use App\Services\Attachments\AttachmentSubmitHandler;
+use Doctrine\ORM\EntityManagerInterface;
+use Symfony\Component\Console\Attribute\AsCommand;
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Style\SymfonyStyle;
+
+#[AsCommand('partdb:attachments:download', "Downloads all attachments which have only an external URL to the local filesystem.")]
+class DownloadAttachmentsCommand extends Command
+{
+ public function __construct(private readonly AttachmentSubmitHandler $attachmentSubmitHandler,
+ private EntityManagerInterface $entityManager)
+ {
+ parent::__construct();
+ }
+
+ public function configure(): void
+ {
+ $this->setHelp('This command downloads all attachments, which only have an external URL, to the local filesystem, so that you have an offline copy of the attachments.');
+ $this->addOption('--private', null, null, 'If set, the attachments will be downloaded to the private storage.');
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output): int
+ {
+ $io = new SymfonyStyle($input, $output);
+
+ $qb = $this->entityManager->createQueryBuilder();
+ $qb->select('attachment')
+ ->from(Attachment::class, 'attachment')
+ ->where('attachment.external_path IS NOT NULL')
+ ->andWhere('attachment.external_path != \'\'')
+ ->andWhere('attachment.internal_path IS NULL');
+
+ $query = $qb->getQuery();
+ $attachments = $query->getResult();
+
+ if (count($attachments) === 0) {
+ $io->success('No attachments with external URL found.');
+ return Command::SUCCESS;
+ }
+
+ $io->note('Found ' . count($attachments) . ' attachments with external URL, that will be downloaded.');
+
+ //If the option --private is set, the attachments will be downloaded to the private storage.
+ $private = $input->getOption('private');
+ if ($private) {
+ if (!$io->confirm('Attachments will be downloaded to the private storage. Continue?')) {
+ return Command::SUCCESS;
+ }
+ } else {
+ if (!$io->confirm('Attachments will be downloaded to the public storage, where everybody knowing the correct URL can access it. Continue?')){
+ return Command::SUCCESS;
+ }
+ }
+
+ $progressBar = $io->createProgressBar(count($attachments));
+ $progressBar->setFormat("%current%/%max% [%bar%] %percent:3s%% %elapsed:16s%/%estimated:-16s% \n%message%");
+
+ $progressBar->setMessage('Starting download...');
+ $progressBar->start();
+
+
+ $errors = [];
+
+ foreach ($attachments as $attachment) {
+ /** @var Attachment $attachment */
+ $progressBar->setMessage(sprintf('%s (ID: %s) from %s', $attachment->getName(), $attachment->getID(), $attachment->getHost()));
+ $progressBar->advance();
+
+ try {
+ $attachmentUpload = new AttachmentUpload(file: null, downloadUrl: true, private: $private);
+ $this->attachmentSubmitHandler->handleUpload($attachment, $attachmentUpload);
+
+ //Write changes to the database
+ $this->entityManager->flush();
+ } catch (AttachmentDownloadException $e) {
+ $errors[] = [
+ 'attachment' => $attachment,
+ 'error' => $e->getMessage()
+ ];
+ }
+ }
+
+ $progressBar->finish();
+
+ //Fix the line break after the progress bar
+ $io->newLine();
+ $io->newLine();
+
+ if (count($errors) > 0) {
+ $io->warning('Some attachments could not be downloaded:');
+ foreach ($errors as $error) {
+ $io->warning(sprintf("Attachment %s (ID %s) could not be downloaded from %s:\n%s",
+ $error['attachment']->getName(),
+ $error['attachment']->getID(),
+ $error['attachment']->getExternalPath(),
+ $error['error'])
+ );
+ }
+ } else {
+ $io->success('All attachments downloaded successfully.');
+ }
+
+ return Command::SUCCESS;
+ }
+}
\ No newline at end of file
diff --git a/src/Command/Attachments/SanitizeSVGAttachmentsCommand.php b/src/Command/Attachments/SanitizeSVGAttachmentsCommand.php
new file mode 100644
index 00000000..7f6550f0
--- /dev/null
+++ b/src/Command/Attachments/SanitizeSVGAttachmentsCommand.php
@@ -0,0 +1,90 @@
+.
+ */
+
+declare(strict_types=1);
+
+
+namespace App\Command\Attachments;
+
+use App\Entity\Attachments\Attachment;
+use App\Services\Attachments\AttachmentSubmitHandler;
+use Doctrine\ORM\EntityManagerInterface;
+use Symfony\Component\Console\Attribute\AsCommand;
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Style\SymfonyStyle;
+
+#[AsCommand('partdb:attachments:sanitize-svg', "Sanitize uploaded SVG files.")]
+class SanitizeSVGAttachmentsCommand extends Command
+{
+ public function __construct(private readonly EntityManagerInterface $entityManager, private readonly AttachmentSubmitHandler $attachmentSubmitHandler, ?string $name = null)
+ {
+ parent::__construct($name);
+ }
+
+ public function configure(): void
+ {
+ $this->setHelp('This command allows to sanitize SVG files uploaded via attachments. This happens automatically since version 1.17.1, this command is intended to be used for older files.');
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output): int
+ {
+ $io = new SymfonyStyle($input, $output);
+
+ $io->info('This command will sanitize all uploaded SVG files. This is only required if you have uploaded (untrusted) SVG files before version 1.17.1. If you are running a newer version, you don\'t need to run this command (again).');
+ if (!$io->confirm('Do you want to continue?', false)) {
+ $io->success('Command aborted.');
+ return Command::FAILURE;
+ }
+
+ $io->info('Sanitizing SVG files...');
+
+ //Finding all attachments with svg files
+ $qb = $this->entityManager->createQueryBuilder();
+ $qb->select('a')
+ ->from(Attachment::class, 'a')
+ ->where('a.internal_path LIKE :pattern ESCAPE \'#\'')
+ ->orWhere('a.original_filename LIKE :pattern ESCAPE \'#\'')
+ ->setParameter('pattern', '%.svg');
+
+ $attachments = $qb->getQuery()->getResult();
+ $io->note('Found '.count($attachments).' attachments with SVG files.');
+
+ if (count($attachments) === 0) {
+ $io->success('No SVG files found.');
+ return Command::FAILURE;
+ }
+
+ $io->info('Sanitizing SVG files...');
+ $io->progressStart(count($attachments));
+ foreach ($attachments as $attachment) {
+ /** @var Attachment $attachment */
+ $io->note('Sanitizing attachment '.$attachment->getId().' ('.($attachment->getFilename() ?? '???').')');
+ $this->attachmentSubmitHandler->sanitizeSVGAttachment($attachment);
+ $io->progressAdvance();
+
+ }
+ $io->progressFinish();
+
+ $io->success('Sanitization finished. All SVG files have been sanitized.');
+ return Command::SUCCESS;
+ }
+}
\ No newline at end of file
diff --git a/src/Command/CheckRequirementsCommand.php b/src/Command/CheckRequirementsCommand.php
index b5395f35..5e15e8e2 100644
--- a/src/Command/CheckRequirementsCommand.php
+++ b/src/Command/CheckRequirementsCommand.php
@@ -79,7 +79,7 @@ class CheckRequirementsCommand extends Command
//Checking 32-bit system
if (PHP_INT_SIZE === 4) {
$io->warning('You are using a 32-bit system. You will have problems with working with dates after the year 2038, therefore a 64-bit system is recommended.');
- } elseif (PHP_INT_SIZE === 8) {
+ } elseif (PHP_INT_SIZE === 8) { //@phpstan-ignore-line //PHP_INT_SIZE is always 4 or 8
if (!$only_issues) {
$io->success('You are using a 64-bit system.');
}
diff --git a/src/Command/Migrations/ConvertBBCodeCommand.php b/src/Command/Migrations/ConvertBBCodeCommand.php
index 2b6e4382..201263ff 100644
--- a/src/Command/Migrations/ConvertBBCodeCommand.php
+++ b/src/Command/Migrations/ConvertBBCodeCommand.php
@@ -79,6 +79,7 @@ class ConvertBBCodeCommand extends Command
/**
* Returns a list which entities and which properties need to be checked.
+ * @return array, string[]>
*/
protected function getTargetsLists(): array
{
@@ -109,7 +110,6 @@ class ConvertBBCodeCommand extends Command
$class
));
//Determine which entities of this type we need to modify
- /** @var EntityRepository $repo */
$repo = $this->em->getRepository($class);
$qb = $repo->createQueryBuilder('e')
->select('e');
diff --git a/src/Command/User/SetPasswordCommand.php b/src/Command/User/SetPasswordCommand.php
index 822277f1..30ef867b 100644
--- a/src/Command/User/SetPasswordCommand.php
+++ b/src/Command/User/SetPasswordCommand.php
@@ -83,6 +83,19 @@ class SetPasswordCommand extends Command
while (!$success) {
$pw1 = $io->askHidden('Please enter new password:');
+
+ if ($pw1 === null) {
+ $io->error('No password entered! Please try again.');
+
+ //If we are in non-interactive mode, we can not ask again
+ if (!$input->isInteractive()) {
+ $io->warning('Non-interactive mode detected. No password can be entered that way! If you are using docker exec, please use -it flag.');
+ return Command::FAILURE;
+ }
+
+ continue;
+ }
+
$pw2 = $io->askHidden('Please confirm:');
if ($pw1 !== $pw2) {
$io->error('The entered password did not match! Please try again.');
diff --git a/src/Command/User/UserEnableCommand.php b/src/Command/User/UserEnableCommand.php
index 00753e94..51ff2280 100644
--- a/src/Command/User/UserEnableCommand.php
+++ b/src/Command/User/UserEnableCommand.php
@@ -35,7 +35,7 @@ use Symfony\Component\Console\Style\SymfonyStyle;
#[AsCommand('partdb:users:enable|partdb:user:enable', 'Enables/Disable the login of one or more users')]
class UserEnableCommand extends Command
{
- public function __construct(protected EntityManagerInterface $entityManager, string $name = null)
+ public function __construct(protected EntityManagerInterface $entityManager, ?string $name = null)
{
parent::__construct($name);
}
diff --git a/src/Command/User/UsersPermissionsCommand.php b/src/Command/User/UsersPermissionsCommand.php
index 021853bb..6408e9c9 100644
--- a/src/Command/User/UsersPermissionsCommand.php
+++ b/src/Command/User/UsersPermissionsCommand.php
@@ -206,12 +206,15 @@ class UsersPermissionsCommand extends Command
return 'Allow>';
} elseif ($permission_value === false) {
return 'Disallow>';
- } elseif ($permission_value === null && !$inherit) {
+ }
+ // Permission value is null by this point
+ elseif (!$inherit) {
return 'Inherit>';
- } elseif ($permission_value === null && $inherit) {
+ } elseif ($inherit) {
return 'Disallow (Inherited)>';
}
+ //@phpstan-ignore-next-line This line is never reached, but PHPstorm complains otherwise
return '???';
}
}
diff --git a/src/Controller/AdminPages/BaseAdminController.php b/src/Controller/AdminPages/BaseAdminController.php
index 3c219e29..edc5917a 100644
--- a/src/Controller/AdminPages/BaseAdminController.php
+++ b/src/Controller/AdminPages/BaseAdminController.php
@@ -221,7 +221,6 @@ abstract class BaseAdminController extends AbstractController
}
}
- /** @var AbstractPartsContainingRepository $repo */
$repo = $this->entityManager->getRepository($this->entity_class);
return $this->render($this->twig_template, [
@@ -397,7 +396,7 @@ abstract class BaseAdminController extends AbstractController
{
if ($entity instanceof AbstractPartsContainingDBElement) {
/** @var AbstractPartsContainingRepository $repo */
- $repo = $this->entityManager->getRepository($this->entity_class);
+ $repo = $this->entityManager->getRepository($this->entity_class); //@phpstan-ignore-line
if ($repo->getPartsCount($entity) > 0) {
$this->addFlash('error', t('entity.delete.must_not_contain_parts', ['%PATH%' => $entity->getFullPath()]));
@@ -468,6 +467,11 @@ abstract class BaseAdminController extends AbstractController
$this->denyAccessUnlessGranted('read', $entity);
$entities = $em->getRepository($this->entity_class)->findAll();
+ if (count($entities) === 0) {
+ $this->addFlash('error', 'entity.export.flash.error.no_entities');
+ return $this->redirectToRoute($this->route_base.'_new');
+ }
+
return $exporter->exportEntityFromRequest($entities, $request);
}
diff --git a/src/Controller/AttachmentFileController.php b/src/Controller/AttachmentFileController.php
index 936d27c5..d8bd8d87 100644
--- a/src/Controller/AttachmentFileController.php
+++ b/src/Controller/AttachmentFileController.php
@@ -51,15 +51,15 @@ class AttachmentFileController extends AbstractController
$this->denyAccessUnlessGranted('show_private', $attachment);
}
- if ($attachment->isExternal()) {
- throw $this->createNotFoundException('The file for this attachment is external and can not stored locally!');
+ if (!$attachment->hasInternal()) {
+ throw $this->createNotFoundException('The file for this attachment is external and not stored locally!');
}
- if (!$helper->isFileExisting($attachment)) {
+ if (!$helper->isInternalFileExisting($attachment)) {
throw $this->createNotFoundException('The file associated with the attachment is not existing!');
}
- $file_path = $helper->toAbsoluteFilePath($attachment);
+ $file_path = $helper->toAbsoluteInternalFilePath($attachment);
$response = new BinaryFileResponse($file_path);
//Set header content disposition, so that the file will be downloaded
@@ -80,15 +80,15 @@ class AttachmentFileController extends AbstractController
$this->denyAccessUnlessGranted('show_private', $attachment);
}
- if ($attachment->isExternal()) {
- throw $this->createNotFoundException('The file for this attachment is external and can not stored locally!');
+ if (!$attachment->hasInternal()) {
+ throw $this->createNotFoundException('The file for this attachment is external and not stored locally!');
}
- if (!$helper->isFileExisting($attachment)) {
+ if (!$helper->isInternalFileExisting($attachment)) {
throw $this->createNotFoundException('The file associated with the attachment is not existing!');
}
- $file_path = $helper->toAbsoluteFilePath($attachment);
+ $file_path = $helper->toAbsoluteInternalFilePath($attachment);
$response = new BinaryFileResponse($file_path);
//Set header content disposition, so that the file will be downloaded
diff --git a/src/Controller/InfoProviderController.php b/src/Controller/InfoProviderController.php
index 46c5f041..a6ce3f1b 100644
--- a/src/Controller/InfoProviderController.php
+++ b/src/Controller/InfoProviderController.php
@@ -23,10 +23,13 @@ declare(strict_types=1);
namespace App\Controller;
+use App\Entity\Parts\Manufacturer;
use App\Entity\Parts\Part;
use App\Form\InfoProviderSystem\PartSearchType;
+use App\Services\InfoProviderSystem\ExistingPartFinder;
use App\Services\InfoProviderSystem\PartInfoRetriever;
use App\Services\InfoProviderSystem\ProviderRegistry;
+use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bridge\Doctrine\Attribute\MapEntity;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
@@ -42,7 +45,9 @@ class InfoProviderController extends AbstractController
{
public function __construct(private readonly ProviderRegistry $providerRegistry,
- private readonly PartInfoRetriever $infoRetriever)
+ private readonly PartInfoRetriever $infoRetriever,
+ private readonly ExistingPartFinder $existingPartFinder
+ )
{
}
@@ -72,21 +77,49 @@ class InfoProviderController extends AbstractController
//When we are updating a part, use its name as keyword, to make searching easier
//However we can only do this, if the form was not submitted yet
if ($update_target !== null && !$form->isSubmitted()) {
- $form->get('keyword')->setData($update_target->getName());
+ //Use the provider reference if available, otherwise use the manufacturer product number
+ $keyword = $update_target->getProviderReference()->getProviderId() ?? $update_target->getManufacturerProductNumber();
+ //Or the name if both are not available
+ if ($keyword === "") {
+ $keyword = $update_target->getName();
+ }
+
+ $form->get('keyword')->setData($keyword);
+
+ //If we are updating a part, which already has a provider, preselect that provider in the form
+ if ($update_target->getProviderReference()->getProviderKey() !== null) {
+ try {
+ $form->get('providers')->setData([$this->providerRegistry->getProviderByKey($update_target->getProviderReference()->getProviderKey())]);
+ } catch (\InvalidArgumentException $e) {
+ //If the provider is not found, just ignore it
+ }
+ }
}
if ($form->isSubmitted() && $form->isValid()) {
$keyword = $form->get('keyword')->getData();
$providers = $form->get('providers')->getData();
+ $dtos = [];
+
try {
- $results = $this->infoRetriever->searchByKeyword(keyword: $keyword, providers: $providers);
+ $dtos = $this->infoRetriever->searchByKeyword(keyword: $keyword, providers: $providers);
} catch (ClientException $e) {
$this->addFlash('error', t('info_providers.search.error.client_exception'));
$this->addFlash('error',$e->getMessage());
//Log the exception
$exceptionLogger->error('Error during info provider search: ' . $e->getMessage(), ['exception' => $e]);
}
+
+ // modify the array to an array of arrays that has a field for a matching local Part
+ // the advantage to use that format even when we don't look for local parts is that we
+ // always work with the same interface
+ $results = array_map(function ($result) {return ['dto' => $result, 'localPart' => null];}, $dtos);
+ if(!$update_target) {
+ foreach ($results as $index => $result) {
+ $results[$index]['localPart'] = $this->existingPartFinder->findFirstExisting($result['dto']);
+ }
+ }
}
return $this->render('info_providers/search/part_search.html.twig', [
diff --git a/src/Controller/LabelController.php b/src/Controller/LabelController.php
index d1bcfdbf..4950628b 100644
--- a/src/Controller/LabelController.php
+++ b/src/Controller/LabelController.php
@@ -108,8 +108,31 @@ class LabelController extends AbstractController
$pdf_data = null;
$filename = 'invalid.pdf';
- //Generate PDF either when the form is submitted and valid, or the form was not submit yet, and generate is set
if (($form->isSubmitted() && $form->isValid()) || ($generate && !$form->isSubmitted() && $profile instanceof LabelProfile)) {
+
+ //Check if the label should be saved as profile
+ if ($form->get('save_profile')->isClicked() && $this->isGranted('@labels.create_profiles')) { //@phpstan-ignore-line Phpstan does not recognize the isClicked method
+ //Retrieve the profile name from the form
+ $new_name = $form->get('save_profile_name')->getData();
+ //ensure that the name is not empty
+ if ($new_name === '' || $new_name === null) {
+ $form->get('save_profile_name')->addError(new FormError($this->translator->trans('label_generator.profile_name_empty')));
+ goto render;
+ }
+
+ $profile = new LabelProfile();
+ $profile->setName($form->get('save_profile_name')->getData());
+ $profile->setOptions($form_options);
+ $this->em->persist($profile);
+ $this->em->flush();
+ $this->addFlash('success', 'label_generator.profile_saved');
+
+ return $this->redirectToRoute('label_dialog_profile', [
+ 'profile' => $profile->getID(),
+ 'target_id' => (string) $form->get('target_id')->getData()
+ ]);
+ }
+
$target_id = (string) $form->get('target_id')->getData();
$targets = $this->findObjects($form_options->getSupportedElement(), $target_id);
if ($targets !== []) {
@@ -132,6 +155,7 @@ class LabelController extends AbstractController
}
}
+ render:
return $this->render('label_system/dialog.html.twig', [
'form' => $form,
'pdf_data' => $pdf_data,
@@ -152,7 +176,7 @@ class LabelController extends AbstractController
{
$id_array = $this->rangeParser->parse($ids);
- /** @var DBElementRepository $repo */
+ /** @var DBElementRepository $repo */
$repo = $this->em->getRepository($type->getEntityClass());
return $repo->getElementsFromIDArray($id_array);
diff --git a/src/Controller/PartController.php b/src/Controller/PartController.php
index d6acb36b..b11a5c90 100644
--- a/src/Controller/PartController.php
+++ b/src/Controller/PartController.php
@@ -229,6 +229,10 @@ class PartController extends AbstractController
$dto = $infoRetriever->getDetails($providerKey, $providerId);
$new_part = $infoRetriever->dtoToPart($dto);
+ if ($new_part->getCategory() === null || $new_part->getCategory()->getID() === null) {
+ $this->addFlash('warning', t("part.create_from_info_provider.no_category_yet"));
+ }
+
return $this->renderPartForm('new', $request, $new_part, [
'info_provider_dto' => $dto,
]);
diff --git a/src/Controller/PartImportExportController.php b/src/Controller/PartImportExportController.php
index 528ab3e3..45f90d75 100644
--- a/src/Controller/PartImportExportController.php
+++ b/src/Controller/PartImportExportController.php
@@ -112,8 +112,9 @@ class PartImportExportController extends AbstractController
$ids = $request->query->get('ids', '');
$parts = $this->partsTableActionHandler->idStringToArray($ids);
- if ($parts === []) {
- throw new \RuntimeException('No parts found!');
+ if (count($parts) === 0) {
+ $this->addFlash('error', 'entity.export.flash.error.no_entities');
+ return $this->redirectToRoute('homepage');
}
//Ensure that we have access to the parts
diff --git a/src/Controller/PartListsController.php b/src/Controller/PartListsController.php
index 677ad987..48995228 100644
--- a/src/Controller/PartListsController.php
+++ b/src/Controller/PartListsController.php
@@ -29,6 +29,7 @@ use App\DataTables\PartsDataTable;
use App\Entity\Parts\Category;
use App\Entity\Parts\Footprint;
use App\Entity\Parts\Manufacturer;
+use App\Entity\Parts\Part;
use App\Entity\Parts\StorageLocation;
use App\Entity\Parts\Supplier;
use App\Exceptions\InvalidRegexException;
@@ -43,8 +44,11 @@ use Symfony\Component\Form\FormInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
+use Symfony\Component\Translation\TranslatableMessage;
use Symfony\Contracts\Translation\TranslatorInterface;
+use function Symfony\Component\Translation\t;
+
class PartListsController extends AbstractController
{
public function __construct(private readonly EntityManagerInterface $entityManager, private readonly NodesListBuilder $nodesListBuilder, private readonly DataTableFactory $dataTableFactory, private readonly TranslatorInterface $translator)
@@ -60,6 +64,7 @@ class PartListsController extends AbstractController
$ids = $request->request->get('ids');
$action = $request->request->get('action');
$target = $request->request->get('target');
+ $redirectResponse = null;
if (!$this->isCsrfTokenValid('table_action', $request->request->get('_token'))) {
$this->addFlash('error', 'csfr_invalid');
@@ -70,17 +75,36 @@ class PartListsController extends AbstractController
if (null === $action || null === $ids) {
$this->addFlash('error', 'part.table.actions.no_params_given');
} else {
+ $errors = [];
+
$parts = $actionHandler->idStringToArray($ids);
- $redirectResponse = $actionHandler->handleAction($action, $parts, $target ? (int) $target : null, $redirect);
+ $redirectResponse = $actionHandler->handleAction($action, $parts, $target ? (int) $target : null, $redirect, $errors);
//Save changes
$this->entityManager->flush();
- $this->addFlash('success', 'part.table.actions.success');
+ if (count($errors) === 0) {
+ $this->addFlash('success', 'part.table.actions.success');
+ } else {
+ $this->addFlash('error', t('part.table.actions.error', ['%count%' => count($errors)]));
+ //Create a flash message for each error
+ foreach ($errors as $error) {
+ /** @var Part $part */
+ $part = $error['part'];
+
+ $this->addFlash('error',
+ t('part.table.actions.error_detail', [
+ '%part_name%' => $part->getName(),
+ '%part_id%' => $part->getID(),
+ '%message%' => $error['message']
+ ])
+ );
+ }
+ }
}
//If the action handler returned a response, we use it, otherwise we redirect back to the previous page.
- if (isset($redirectResponse) && $redirectResponse instanceof Response) {
+ if ($redirectResponse !== null) {
return $redirectResponse;
}
@@ -131,7 +155,11 @@ class PartListsController extends AbstractController
$filterForm->handleRequest($formRequest);
- $table = $this->dataTableFactory->createFromType(PartsDataTable::class, array_merge(['filter' => $filter], $additional_table_vars))
+ $table = $this->dataTableFactory->createFromType(
+ PartsDataTable::class,
+ array_merge(['filter' => $filter], $additional_table_vars),
+ ['lengthMenu' => PartsDataTable::LENGTH_MENU]
+ )
->handleRequest($request);
if ($table->isCallback()) {
diff --git a/src/Controller/ScanController.php b/src/Controller/ScanController.php
index 77183c89..aebadd89 100644
--- a/src/Controller/ScanController.php
+++ b/src/Controller/ScanController.php
@@ -42,10 +42,10 @@ declare(strict_types=1);
namespace App\Controller;
use App\Form\LabelSystem\ScanDialogType;
-use App\Services\LabelSystem\Barcodes\BarcodeScanHelper;
-use App\Services\LabelSystem\Barcodes\BarcodeRedirector;
-use App\Services\LabelSystem\Barcodes\BarcodeScanResult;
-use App\Services\LabelSystem\Barcodes\BarcodeSourceType;
+use App\Services\LabelSystem\BarcodeScanner\BarcodeRedirector;
+use App\Services\LabelSystem\BarcodeScanner\BarcodeScanHelper;
+use App\Services\LabelSystem\BarcodeScanner\BarcodeSourceType;
+use App\Services\LabelSystem\BarcodeScanner\LocalBarcodeScanResult;
use Doctrine\ORM\EntityNotFoundException;
use InvalidArgumentException;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
@@ -77,13 +77,21 @@ class ScanController extends AbstractController
$mode = $form['mode']->getData();
}
+ $infoModeData = null;
+
if ($input !== null) {
try {
$scan_result = $this->barcodeNormalizer->scanBarcodeContent($input, $mode ?? null);
- try {
- return $this->redirect($this->barcodeParser->getRedirectURL($scan_result));
- } catch (EntityNotFoundException) {
- $this->addFlash('success', 'scan.qr_not_found');
+ //Perform a redirect if the info mode is not enabled
+ if (!$form['info_mode']->getData()) {
+ try {
+ return $this->redirect($this->barcodeParser->getRedirectURL($scan_result));
+ } catch (EntityNotFoundException) {
+ $this->addFlash('success', 'scan.qr_not_found');
+ }
+ } else { //Otherwise retrieve infoModeData
+ $infoModeData = $scan_result->getDecodedForInfoMode();
+
}
} catch (InvalidArgumentException) {
$this->addFlash('error', 'scan.format_unknown');
@@ -92,6 +100,7 @@ class ScanController extends AbstractController
return $this->render('label_system/scanner/scanner.html.twig', [
'form' => $form,
+ 'infoModeData' => $infoModeData,
]);
}
@@ -109,7 +118,7 @@ class ScanController extends AbstractController
throw new InvalidArgumentException('Unknown type: '.$type);
}
//Construct the scan result manually, as we don't have a barcode here
- $scan_result = new BarcodeScanResult(
+ $scan_result = new LocalBarcodeScanResult(
target_type: BarcodeScanHelper::QR_TYPE_MAP[$type],
target_id: $id,
//The routes are only used on the internal generated QR codes
diff --git a/src/Controller/SelectAPIController.php b/src/Controller/SelectAPIController.php
index 50062118..c1e682c8 100644
--- a/src/Controller/SelectAPIController.php
+++ b/src/Controller/SelectAPIController.php
@@ -29,6 +29,7 @@ use App\Entity\Parts\Category;
use App\Entity\Parts\Footprint;
use App\Entity\Parts\Manufacturer;
use App\Entity\Parts\MeasurementUnit;
+use App\Entity\Parts\StorageLocation;
use App\Entity\ProjectSystem\Project;
use App\Form\Type\Helper\StructuralEntityChoiceHelper;
use App\Services\Trees\NodesListBuilder;
@@ -78,6 +79,12 @@ class SelectAPIController extends AbstractController
return $this->getResponseForClass(Project::class, false);
}
+ #[Route(path: '/storage_location', name: 'select_storage_location')]
+ public function locations(): Response
+ {
+ return $this->getResponseForClass(StorageLocation::class, true);
+ }
+
#[Route(path: '/export_level', name: 'select_export_level')]
public function exportLevel(): Response
{
diff --git a/src/Controller/ToolsController.php b/src/Controller/ToolsController.php
index 78e149e3..dbcb91a1 100644
--- a/src/Controller/ToolsController.php
+++ b/src/Controller/ToolsController.php
@@ -61,10 +61,10 @@ class ToolsController extends AbstractController
'default_theme' => $this->getParameter('partdb.global_theme'),
'enabled_locales' => $this->getParameter('partdb.locale_menu'),
'demo_mode' => $this->getParameter('partdb.demo_mode'),
- 'gpdr_compliance' => $this->getParameter('partdb.gdpr_compliance'),
+ 'gdpr_compliance' => $this->getParameter('partdb.gdpr_compliance'),
'use_gravatar' => $this->getParameter('partdb.users.use_gravatar'),
'email_password_reset' => $this->getParameter('partdb.users.email_pw_reset'),
- 'enviroment' => $this->getParameter('kernel.environment'),
+ 'environment' => $this->getParameter('kernel.environment'),
'is_debug' => $this->getParameter('kernel.debug'),
'email_sender' => $this->getParameter('partdb.mail.sender_email'),
'email_sender_name' => $this->getParameter('partdb.mail.sender_name'),
diff --git a/src/Controller/TypeaheadController.php b/src/Controller/TypeaheadController.php
index b1344532..89eac7ff 100644
--- a/src/Controller/TypeaheadController.php
+++ b/src/Controller/TypeaheadController.php
@@ -22,6 +22,7 @@ declare(strict_types=1);
namespace App\Controller;
+use App\Entity\Parameters\AbstractParameter;
use Symfony\Component\HttpFoundation\Response;
use App\Entity\Attachments\Attachment;
use App\Entity\Parts\Category;
@@ -92,7 +93,7 @@ class TypeaheadController extends AbstractController
/**
* This function map the parameter type to the class, so we can access its repository
- * @return class-string
+ * @return class-string
*/
private function typeToParameterClass(string $type): string
{
@@ -155,7 +156,7 @@ class TypeaheadController extends AbstractController
//Ensure user has the correct permissions
$this->denyAccessUnlessGranted('read', $test_obj);
- /** @var ParameterRepository $repository */
+ /** @var ParameterRepository $repository */
$repository = $entityManager->getRepository($class);
$data = $repository->autocompleteParamName($query);
diff --git a/src/Controller/UserSettingsController.php b/src/Controller/UserSettingsController.php
index f84547dc..4e56015a 100644
--- a/src/Controller/UserSettingsController.php
+++ b/src/Controller/UserSettingsController.php
@@ -240,7 +240,10 @@ class UserSettingsController extends AbstractController
$page_need_reload = true;
}
- /** @var Form $form We need a form implementation for the next calls */
+ if (!$form instanceof Form) {
+ throw new RuntimeException('Form is not an instance of Form, so we cannot retrieve the clicked button!');
+ }
+
//Remove the avatar attachment from the user if requested
if ($form->getClickedButton() && 'remove_avatar' === $form->getClickedButton()->getName() && $user->getMasterPictureAttachment() instanceof Attachment) {
$em->remove($user->getMasterPictureAttachment());
diff --git a/src/DataFixtures/APITokenFixtures.php b/src/DataFixtures/APITokenFixtures.php
index 4bcf3a60..0ab0b7bb 100644
--- a/src/DataFixtures/APITokenFixtures.php
+++ b/src/DataFixtures/APITokenFixtures.php
@@ -41,7 +41,7 @@ class APITokenFixtures extends Fixture implements DependentFixtureInterface
public function load(ObjectManager $manager): void
{
/** @var User $admin_user */
- $admin_user = $this->getReference(UserFixtures::ADMIN);
+ $admin_user = $this->getReference(UserFixtures::ADMIN, User::class);
$read_only_token = new ApiToken();
$read_only_token->setUser($admin_user);
diff --git a/src/DataFixtures/LogEntryFixtures.php b/src/DataFixtures/LogEntryFixtures.php
index b9788ec0..eb9cf731 100644
--- a/src/DataFixtures/LogEntryFixtures.php
+++ b/src/DataFixtures/LogEntryFixtures.php
@@ -35,7 +35,7 @@ use Doctrine\Persistence\ObjectManager;
class LogEntryFixtures extends Fixture implements DependentFixtureInterface
{
- public function load(ObjectManager $manager)
+ public function load(ObjectManager $manager): void
{
$this->createCategoryEntries($manager);
$this->createDeletedCategory($manager);
diff --git a/src/DataFixtures/PartFixtures.php b/src/DataFixtures/PartFixtures.php
index a9290cbf..a60d037d 100644
--- a/src/DataFixtures/PartFixtures.php
+++ b/src/DataFixtures/PartFixtures.php
@@ -106,7 +106,7 @@ class PartFixtures extends Fixture implements DependentFixtureInterface
$partLot2->setComment('Test');
$partLot2->setNeedsRefill(true);
$partLot2->setStorageLocation($manager->find(StorageLocation::class, 3));
- $partLot2->setVendorBarcode('lot2_vendor_barcode');
+ $partLot2->setUserBarcode('lot2_vendor_barcode');
$part->addPartLot($partLot2);
$orderdetail = new Orderdetail();
@@ -131,7 +131,7 @@ class PartFixtures extends Fixture implements DependentFixtureInterface
$attachment = new PartAttachment();
$attachment->setName('Test2');
- $attachment->setPath('invalid');
+ $attachment->setInternalPath('invalid');
$attachment->setShowInTable(true);
$attachment->setAttachmentType($manager->find(AttachmentType::class, 1));
$part->addAttachment($attachment);
diff --git a/src/DataFixtures/UserFixtures.php b/src/DataFixtures/UserFixtures.php
index 0571a4b0..922d0b1e 100644
--- a/src/DataFixtures/UserFixtures.php
+++ b/src/DataFixtures/UserFixtures.php
@@ -22,6 +22,7 @@ declare(strict_types=1);
namespace App\DataFixtures;
+use App\Entity\UserSystem\Group;
use App\Entity\UserSystem\User;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
@@ -41,7 +42,7 @@ class UserFixtures extends Fixture implements DependentFixtureInterface
{
$anonymous = new User();
$anonymous->setName('anonymous');
- $anonymous->setGroup($this->getReference(GroupFixtures::READONLY));
+ $anonymous->setGroup($this->getReference(GroupFixtures::READONLY, Group::class));
$anonymous->setNeedPwChange(false);
$anonymous->setPassword($this->encoder->hashPassword($anonymous, 'test'));
$manager->persist($anonymous);
@@ -50,7 +51,7 @@ class UserFixtures extends Fixture implements DependentFixtureInterface
$admin->setName('admin');
$admin->setPassword($this->encoder->hashPassword($admin, 'test'));
$admin->setNeedPwChange(false);
- $admin->setGroup($this->getReference(GroupFixtures::ADMINS));
+ $admin->setGroup($this->getReference(GroupFixtures::ADMINS, Group::class));
$manager->persist($admin);
$this->addReference(self::ADMIN, $admin);
@@ -60,7 +61,7 @@ class UserFixtures extends Fixture implements DependentFixtureInterface
$user->setEmail('user@invalid.invalid');
$user->setFirstName('Test')->setLastName('User');
$user->setPassword($this->encoder->hashPassword($user, 'test'));
- $user->setGroup($this->getReference(GroupFixtures::USERS));
+ $user->setGroup($this->getReference(GroupFixtures::USERS, Group::class));
$manager->persist($user);
$noread = new User();
diff --git a/src/DataTables/Adapters/TwoStepORMAdapter.php b/src/DataTables/Adapters/TwoStepORMAdapter.php
index 2086c907..51315c32 100644
--- a/src/DataTables/Adapters/TwoStepORMAdapter.php
+++ b/src/DataTables/Adapters/TwoStepORMAdapter.php
@@ -54,7 +54,7 @@ class TwoStepORMAdapter extends ORMAdapter
private \Closure|null $query_modifier = null;
- public function __construct(ManagerRegistry $registry = null)
+ public function __construct(?ManagerRegistry $registry = null)
{
parent::__construct($registry);
$this->detailQueryCallable = static function (QueryBuilder $qb, array $ids): never {
diff --git a/src/DataTables/AttachmentDataTable.php b/src/DataTables/AttachmentDataTable.php
index 0d6c5b53..16e6a7a7 100644
--- a/src/DataTables/AttachmentDataTable.php
+++ b/src/DataTables/AttachmentDataTable.php
@@ -50,8 +50,8 @@ final class AttachmentDataTable implements DataTableTypeInterface
{
$dataTable->add('dont_matter', RowClassColumn::class, [
'render' => function ($value, Attachment $context): string {
- //Mark attachments with missing files yellow
- if(!$this->attachmentHelper->isFileExisting($context)){
+ //Mark attachments yellow which have an internal file linked that doesn't exist
+ if($context->hasInternal() && !$this->attachmentHelper->isInternalFileExisting($context)){
return 'table-warning';
}
@@ -64,8 +64,8 @@ final class AttachmentDataTable implements DataTableTypeInterface
'className' => 'no-colvis',
'render' => function ($value, Attachment $context): string {
if ($context->isPicture()
- && !$context->isExternal()
- && $this->attachmentHelper->isFileExisting($context)) {
+ && $this->attachmentHelper->isInternalFileExisting($context)) {
+
$title = htmlspecialchars($context->getName());
if ($context->getFilename()) {
$title .= ' ('.htmlspecialchars($context->getFilename()).')';
@@ -93,26 +93,6 @@ final class AttachmentDataTable implements DataTableTypeInterface
$dataTable->add('name', TextColumn::class, [
'label' => 'attachment.edit.name',
'orderField' => 'NATSORT(attachment.name)',
- 'render' => function ($value, Attachment $context) {
- //Link to external source
- if ($context->isExternal()) {
- return sprintf(
- '%s ',
- htmlspecialchars((string) $context->getURL()),
- htmlspecialchars($value)
- );
- }
-
- if ($this->attachmentHelper->isFileExisting($context)) {
- return sprintf(
- '%s ',
- $this->entityURLGenerator->viewURL($context),
- htmlspecialchars($value)
- );
- }
-
- return $value;
- },
]);
$dataTable->add('attachment_type', TextColumn::class, [
@@ -136,25 +116,60 @@ final class AttachmentDataTable implements DataTableTypeInterface
),
]);
- $dataTable->add('filename', TextColumn::class, [
- 'label' => $this->translator->trans('attachment.table.filename'),
+ $dataTable->add('internal_link', TextColumn::class, [
+ 'label' => 'attachment.table.internal_file',
'propertyPath' => 'filename',
+ 'orderField' => 'NATSORT(attachment.original_filename)',
+ 'render' => function ($value, Attachment $context) {
+ if ($this->attachmentHelper->isInternalFileExisting($context)) {
+ return sprintf(
+ '%s ',
+ $this->entityURLGenerator->viewURL($context),
+ htmlspecialchars($value)
+ );
+ }
+
+ return $value;
+ }
+ ]);
+
+ $dataTable->add('external_link', TextColumn::class, [
+ 'label' => 'attachment.table.external_link',
+ 'propertyPath' => 'host',
+ 'orderField' => 'attachment.external_path',
+ 'render' => function ($value, Attachment $context) {
+ if ($context->hasExternal()) {
+ return sprintf(
+ '%s ',
+ htmlspecialchars((string) $context->getExternalPath()),
+ htmlspecialchars((string) $context->getExternalPath()),
+ htmlspecialchars($value),
+ );
+ }
+
+ return $value;
+ }
]);
$dataTable->add('filesize', TextColumn::class, [
'label' => $this->translator->trans('attachment.table.filesize'),
'render' => function ($value, Attachment $context) {
- if ($context->isExternal()) {
+ if (!$context->hasInternal()) {
return sprintf(
'
%s
',
- $this->translator->trans('attachment.external')
+ $this->translator->trans('attachment.external_only')
);
}
- if ($this->attachmentHelper->isFileExisting($context)) {
- return $this->attachmentHelper->getHumanFileSize($context);
+ if ($this->attachmentHelper->isInternalFileExisting($context)) {
+ return sprintf(
+ '
+ %s
+ ',
+ $this->attachmentHelper->getHumanFileSize($context)
+ );
}
return sprintf(
diff --git a/src/DataTables/Filters/AttachmentFilter.php b/src/DataTables/Filters/AttachmentFilter.php
index 9f8cf094..d41bbe39 100644
--- a/src/DataTables/Filters/AttachmentFilter.php
+++ b/src/DataTables/Filters/AttachmentFilter.php
@@ -45,6 +45,9 @@ class AttachmentFilter implements FilterInterface
public readonly DateTimeConstraint $lastModified;
public readonly DateTimeConstraint $addedDate;
+ public readonly TextConstraint $originalFileName;
+ public readonly TextConstraint $externalLink;
+
public function __construct(NodesListBuilder $nodesListBuilder)
{
@@ -55,6 +58,9 @@ class AttachmentFilter implements FilterInterface
$this->lastModified = new DateTimeConstraint('attachment.lastModified');
$this->addedDate = new DateTimeConstraint('attachment.addedDate');
$this->showInTable = new BooleanConstraint('attachment.show_in_table');
+ $this->originalFileName = new TextConstraint('attachment.original_filename');
+ $this->externalLink = new TextConstraint('attachment.external_path');
+
}
public function apply(QueryBuilder $queryBuilder): void
diff --git a/src/DataTables/Filters/Constraints/AbstractConstraint.php b/src/DataTables/Filters/Constraints/AbstractConstraint.php
index cbb62352..7f16511e 100644
--- a/src/DataTables/Filters/Constraints/AbstractConstraint.php
+++ b/src/DataTables/Filters/Constraints/AbstractConstraint.php
@@ -45,7 +45,7 @@ abstract class AbstractConstraint implements FilterInterface
* @var string The property where this BooleanConstraint should apply to
*/
protected string $property,
- string $identifier = null)
+ ?string $identifier = null)
{
$this->identifier = $identifier ?? $this->generateParameterIdentifier($property);
}
diff --git a/src/DataTables/Filters/Constraints/BooleanConstraint.php b/src/DataTables/Filters/Constraints/BooleanConstraint.php
index b3f1dc47..8eb4f042 100644
--- a/src/DataTables/Filters/Constraints/BooleanConstraint.php
+++ b/src/DataTables/Filters/Constraints/BooleanConstraint.php
@@ -28,7 +28,7 @@ class BooleanConstraint extends AbstractConstraint
{
public function __construct(
string $property,
- string $identifier = null,
+ ?string $identifier = null,
/** @var bool|null The value of our constraint */
protected ?bool $value = null
)
diff --git a/src/DataTables/Filters/Constraints/DateTimeConstraint.php b/src/DataTables/Filters/Constraints/DateTimeConstraint.php
index 23134de5..a3043170 100644
--- a/src/DataTables/Filters/Constraints/DateTimeConstraint.php
+++ b/src/DataTables/Filters/Constraints/DateTimeConstraint.php
@@ -34,7 +34,7 @@ class DateTimeConstraint extends AbstractConstraint
public function __construct(
string $property,
- string $identifier = null,
+ ?string $identifier = null,
/**
* The value1 used for comparison (this is the main one used for all mono-value comparisons)
*/
diff --git a/src/DataTables/Filters/Constraints/EntityConstraint.php b/src/DataTables/Filters/Constraints/EntityConstraint.php
index 6e9721f4..c75da80d 100644
--- a/src/DataTables/Filters/Constraints/EntityConstraint.php
+++ b/src/DataTables/Filters/Constraints/EntityConstraint.php
@@ -46,7 +46,7 @@ class EntityConstraint extends AbstractConstraint
public function __construct(protected ?NodesListBuilder $nodesListBuilder,
protected string $class,
string $property,
- string $identifier = null,
+ ?string $identifier = null,
protected ?AbstractDBElement $value = null,
protected ?string $operator = null)
{
diff --git a/src/DataTables/Filters/Constraints/NumberConstraint.php b/src/DataTables/Filters/Constraints/NumberConstraint.php
index c872dade..dc7cf733 100644
--- a/src/DataTables/Filters/Constraints/NumberConstraint.php
+++ b/src/DataTables/Filters/Constraints/NumberConstraint.php
@@ -31,7 +31,7 @@ class NumberConstraint extends AbstractConstraint
public function __construct(
string $property,
- string $identifier = null,
+ ?string $identifier = null,
/**
* The value1 used for comparison (this is the main one used for all mono-value comparisons)
*/
diff --git a/src/DataTables/Filters/Constraints/Part/LessThanDesiredConstraint.php b/src/DataTables/Filters/Constraints/Part/LessThanDesiredConstraint.php
index eb96ad33..011824e5 100644
--- a/src/DataTables/Filters/Constraints/Part/LessThanDesiredConstraint.php
+++ b/src/DataTables/Filters/Constraints/Part/LessThanDesiredConstraint.php
@@ -28,7 +28,7 @@ use Doctrine\ORM\QueryBuilder;
class LessThanDesiredConstraint extends BooleanConstraint
{
- public function __construct(string $property = null, string $identifier = null, ?bool $default_value = null)
+ public function __construct(?string $property = null, ?string $identifier = null, ?bool $default_value = null)
{
parent::__construct($property ?? '(
SELECT COALESCE(SUM(ld_partLot.amount), 0.0)
diff --git a/src/DataTables/Filters/Constraints/Part/TagsConstraint.php b/src/DataTables/Filters/Constraints/Part/TagsConstraint.php
index ae9d14cd..02eab7a1 100644
--- a/src/DataTables/Filters/Constraints/Part/TagsConstraint.php
+++ b/src/DataTables/Filters/Constraints/Part/TagsConstraint.php
@@ -30,7 +30,7 @@ class TagsConstraint extends AbstractConstraint
{
final public const ALLOWED_OPERATOR_VALUES = ['ANY', 'ALL', 'NONE'];
- public function __construct(string $property, string $identifier = null,
+ public function __construct(string $property, ?string $identifier = null,
protected ?string $value = null,
protected ?string $operator = '')
{
@@ -85,15 +85,18 @@ class TagsConstraint extends AbstractConstraint
*/
protected function getExpressionForTag(QueryBuilder $queryBuilder, string $tag): Orx
{
+ //Escape any %, _ or \ in the tag
+ $tag = addcslashes($tag, '%_\\');
+
$tag_identifier_prefix = uniqid($this->identifier . '_', false);
$expr = $queryBuilder->expr();
$tmp = $expr->orX(
- $expr->like($this->property, ':' . $tag_identifier_prefix . '_1'),
- $expr->like($this->property, ':' . $tag_identifier_prefix . '_2'),
- $expr->like($this->property, ':' . $tag_identifier_prefix . '_3'),
- $expr->eq($this->property, ':' . $tag_identifier_prefix . '_4'),
+ 'ILIKE(' . $this->property . ', :' . $tag_identifier_prefix . '_1) = TRUE',
+ 'ILIKE(' . $this->property . ', :' . $tag_identifier_prefix . '_2) = TRUE',
+ 'ILIKE(' . $this->property . ', :' . $tag_identifier_prefix . '_3) = TRUE',
+ 'ILIKE(' . $this->property . ', :' . $tag_identifier_prefix . '_4) = TRUE',
);
//Set the parameters for the LIKE expression, in each variation of the tag (so with a comma, at the end, at the beginning, and on both ends, and equaling the tag)
@@ -130,6 +133,7 @@ class TagsConstraint extends AbstractConstraint
return;
}
+ //@phpstan-ignore-next-line Keep this check to ensure that everything has the same structure even if we add a new operator
if ($this->operator === 'NONE') {
$queryBuilder->andWhere($queryBuilder->expr()->not($queryBuilder->expr()->orX(...$tagsExpressions)));
return;
diff --git a/src/DataTables/Filters/Constraints/TextConstraint.php b/src/DataTables/Filters/Constraints/TextConstraint.php
index 89567d83..31b12a5e 100644
--- a/src/DataTables/Filters/Constraints/TextConstraint.php
+++ b/src/DataTables/Filters/Constraints/TextConstraint.php
@@ -32,7 +32,7 @@ class TextConstraint extends AbstractConstraint
/**
* @param string $value
*/
- public function __construct(string $property, string $identifier = null, /**
+ public function __construct(string $property, ?string $identifier = null, /**
* @var string|null The value to compare to
*/
protected ?string $value = null, /**
@@ -107,7 +107,8 @@ class TextConstraint extends AbstractConstraint
}
if ($like_value !== null) {
- $this->addSimpleAndConstraint($queryBuilder, $this->property, $this->identifier, 'LIKE', $like_value);
+ $queryBuilder->andWhere(sprintf('ILIKE(%s, :%s) = TRUE', $this->property, $this->identifier));
+ $queryBuilder->setParameter($this->identifier, $like_value);
return;
}
diff --git a/src/DataTables/Filters/PartSearchFilter.php b/src/DataTables/Filters/PartSearchFilter.php
index 84dfe9b3..6e2e5894 100644
--- a/src/DataTables/Filters/PartSearchFilter.php
+++ b/src/DataTables/Filters/PartSearchFilter.php
@@ -21,7 +21,6 @@ declare(strict_types=1);
* along with this program. If not, see .
*/
namespace App\DataTables\Filters;
-
use Doctrine\ORM\QueryBuilder;
class PartSearchFilter implements FilterInterface
@@ -132,15 +131,15 @@ class PartSearchFilter implements FilterInterface
return sprintf("REGEXP(%s, :search_query) = TRUE", $field);
}
- return sprintf("%s LIKE :search_query", $field);
+ return sprintf("ILIKE(%s, :search_query) = TRUE", $field);
}, $fields_to_search);
- //Add Or concatation of the expressions to our query
+ //Add Or concatenation of the expressions to our query
$queryBuilder->andWhere(
$queryBuilder->expr()->orX(...$expressions)
);
- //For regex we pass the query as is, for like we add % to the start and end as wildcards
+ //For regex, we pass the query as is, for like we add % to the start and end as wildcards
if ($this->regex) {
$queryBuilder->setParameter('search_query', $this->keyword);
} else {
diff --git a/src/DataTables/PartsDataTable.php b/src/DataTables/PartsDataTable.php
index 28c564b1..3163a38b 100644
--- a/src/DataTables/PartsDataTable.php
+++ b/src/DataTables/PartsDataTable.php
@@ -57,6 +57,8 @@ use Symfony\Contracts\Translation\TranslatorInterface;
final class PartsDataTable implements DataTableTypeInterface
{
+ const LENGTH_MENU = [[10, 25, 50, 100, -1], [10, 25, 50, 100, "All"]];
+
public function __construct(
private readonly EntityURLGenerator $urlGenerator,
private readonly TranslatorInterface $translator,
@@ -137,7 +139,8 @@ final class PartsDataTable implements DataTableTypeInterface
])
->add('storelocation', TextColumn::class, [
'label' => $this->translator->trans('part.table.storeLocations'),
- 'orderField' => 'NATSORT(_storelocations.name)',
+ //We need to use a aggregate function to get the first store location, as we have a one-to-many relation
+ 'orderField' => 'NATSORT(MIN(_storelocations.name))',
'render' => fn ($value, Part $context) => $this->partDataTableHelper->renderStorageLocations($context),
], alias: 'storage_location')
diff --git a/src/DataTables/ProjectBomEntriesDataTable.php b/src/DataTables/ProjectBomEntriesDataTable.php
index 84a89320..fcb06984 100644
--- a/src/DataTables/ProjectBomEntriesDataTable.php
+++ b/src/DataTables/ProjectBomEntriesDataTable.php
@@ -87,16 +87,14 @@ class ProjectBomEntriesDataTable implements DataTableTypeInterface
if(!$context->getPart() instanceof Part) {
return htmlspecialchars((string) $context->getName());
}
- if($context->getPart() instanceof Part) {
- $tmp = $this->partDataTableHelper->renderName($context->getPart());
- if($context->getName() !== null && $context->getName() !== '') {
- $tmp .= ''.htmlspecialchars($context->getName()).' ';
- }
- return $tmp;
- }
- //@phpstan-ignore-next-line
- throw new \RuntimeException('This should never happen!');
+ //Part exists if we reach this point
+
+ $tmp = $this->partDataTableHelper->renderName($context->getPart());
+ if($context->getName() !== null && $context->getName() !== '') {
+ $tmp .= ''.htmlspecialchars($context->getName()).' ';
+ }
+ return $tmp;
},
])
->add('ipn', TextColumn::class, [
diff --git a/src/Doctrine/Functions/ILike.php b/src/Doctrine/Functions/ILike.php
new file mode 100644
index 00000000..5246220a
--- /dev/null
+++ b/src/Doctrine/Functions/ILike.php
@@ -0,0 +1,71 @@
+.
+ */
+
+declare(strict_types=1);
+
+
+namespace App\Doctrine\Functions;
+
+use Doctrine\DBAL\Platforms\AbstractMySQLPlatform;
+use Doctrine\DBAL\Platforms\PostgreSQLPlatform;
+use Doctrine\DBAL\Platforms\SQLitePlatform;
+use Doctrine\ORM\Query\AST\Functions\FunctionNode;
+use Doctrine\ORM\Query\Parser;
+use Doctrine\ORM\Query\SqlWalker;
+use Doctrine\ORM\Query\TokenType;
+
+/**
+ * A platform invariant version of the case-insensitive LIKE operation.
+ * On MySQL and SQLite this is the normal LIKE, but on PostgreSQL it is the ILIKE operator.
+ */
+class ILike extends FunctionNode
+{
+
+ public $value = null;
+
+ public $expr = null;
+
+ public function parse(Parser $parser): void
+ {
+ $parser->match(TokenType::T_IDENTIFIER);
+ $parser->match(TokenType::T_OPEN_PARENTHESIS);
+ $this->value = $parser->StringPrimary();
+ $parser->match(TokenType::T_COMMA);
+ $this->expr = $parser->StringExpression();
+ $parser->match(TokenType::T_CLOSE_PARENTHESIS);
+ }
+
+ public function getSql(SqlWalker $sqlWalker): string
+ {
+ $platform = $sqlWalker->getConnection()->getDatabasePlatform();
+
+ //
+ if ($platform instanceof AbstractMySQLPlatform || $platform instanceof SQLitePlatform) {
+ $operator = 'LIKE';
+ } elseif ($platform instanceof PostgreSQLPlatform) {
+ //Use the case-insensitive operator, to have the same behavior as MySQL
+ $operator = 'ILIKE';
+ } else {
+ throw new \RuntimeException('Platform ' . gettype($platform) . ' does not support case insensitive like expressions.');
+ }
+
+ return '(' . $this->value->dispatch($sqlWalker) . ' ' . $operator . ' ' . $this->expr->dispatch($sqlWalker) . ')';
+ }
+}
\ No newline at end of file
diff --git a/src/Doctrine/Middleware/SQLiteRegexExtensionMiddlewareDriver.php b/src/Doctrine/Middleware/SQLiteRegexExtensionMiddlewareDriver.php
index 80a81612..ad572d4c 100644
--- a/src/Doctrine/Middleware/SQLiteRegexExtensionMiddlewareDriver.php
+++ b/src/Doctrine/Middleware/SQLiteRegexExtensionMiddlewareDriver.php
@@ -44,15 +44,13 @@ class SQLiteRegexExtensionMiddlewareDriver extends AbstractDriverMiddleware
$native_connection = $connection->getNativeConnection();
//Ensure that the function really exists on the connection, as it is marked as experimental according to PHP documentation
- if($native_connection instanceof \PDO && method_exists($native_connection, 'sqliteCreateFunction' )) {
+ if($native_connection instanceof \PDO) {
$native_connection->sqliteCreateFunction('REGEXP', self::regexp(...), 2, \PDO::SQLITE_DETERMINISTIC);
$native_connection->sqliteCreateFunction('FIELD', self::field(...), -1, \PDO::SQLITE_DETERMINISTIC);
$native_connection->sqliteCreateFunction('FIELD2', self::field2(...), 2, \PDO::SQLITE_DETERMINISTIC);
//Create a new collation for natural sorting
- if (method_exists($native_connection, 'sqliteCreateCollation')) {
- $native_connection->sqliteCreateCollation('NATURAL_CMP', strnatcmp(...));
- }
+ $native_connection->sqliteCreateCollation('NATURAL_CMP', strnatcmp(...));
}
}
diff --git a/src/Doctrine/Purger/DoNotUsePurgerFactory.php b/src/Doctrine/Purger/DoNotUsePurgerFactory.php
index 95726fab..6d487573 100644
--- a/src/Doctrine/Purger/DoNotUsePurgerFactory.php
+++ b/src/Doctrine/Purger/DoNotUsePurgerFactory.php
@@ -44,7 +44,7 @@ class DoNotUsePurgerFactory implements PurgerFactory
throw new \LogicException('Do not use doctrine:fixtures:load directly. Use partdb:fixtures:load instead!');
}
- public function setEntityManager(EntityManagerInterface $em)
+ public function setEntityManager(EntityManagerInterface $em): void
{
// TODO: Implement setEntityManager() method.
}
diff --git a/src/Entity/Attachments/Attachment.php b/src/Entity/Attachments/Attachment.php
index 8dc01641..00cf581a 100644
--- a/src/Entity/Attachments/Attachment.php
+++ b/src/Entity/Attachments/Attachment.php
@@ -33,23 +33,24 @@ use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Patch;
use ApiPlatform\Metadata\Post;
-use App\ApiPlatform\DocumentedAPIProperty;
+use App\ApiPlatform\DocumentedAPIProperties\DocumentedAPIProperty;
use App\ApiPlatform\Filter\EntityFilter;
use App\ApiPlatform\Filter\LikeFilter;
use App\ApiPlatform\HandleAttachmentsUploadsProcessor;
-use App\Repository\AttachmentRepository;
-use App\EntityListeners\AttachmentDeleteListener;
-use Doctrine\DBAL\Types\Types;
use App\Entity\Base\AbstractNamedDBElement;
+use App\EntityListeners\AttachmentDeleteListener;
+use App\Repository\AttachmentRepository;
use App\Validator\Constraints\Selectable;
+use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
+use InvalidArgumentException;
+use LogicException;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Serializer\Annotation\SerializedName;
use Symfony\Component\Serializer\Attribute\DiscriminatorMap;
use Symfony\Component\Validator\Constraints as Assert;
+
use function in_array;
-use InvalidArgumentException;
-use LogicException;
/**
* Class Attachment.
@@ -78,11 +79,16 @@ use LogicException;
denormalizationContext: ['groups' => ['attachment:write', 'attachment:write:standalone', 'api:basic:write'], 'openapi_definition_name' => 'Write'],
processor: HandleAttachmentsUploadsProcessor::class,
)]
-#[DocumentedAPIProperty(schemaName: 'Attachment-Read', property: 'media_url', type: 'string', nullable: true,
- description: 'The URL to the file, where the attachment file can be downloaded. This can be an internal or external URL.',
- example: '/media/part/2/bc547-6508afa5a79c8.pdf')]
-#[DocumentedAPIProperty(schemaName: 'Attachment-Read', property: 'thumbnail_url', type: 'string', nullable: true,
- description: 'The URL to a thumbnail version of this file. This only exists for internal picture attachments.')]
+//This property is added by the denormalizer in order to resolve the placeholder
+#[DocumentedAPIProperty(
+ schemaName: 'Attachment-Read', property: 'internal_path', type: 'string', nullable: false,
+ description: 'The URL to the internally saved copy of the file, if one exists',
+ example: '/media/part/2/bc547-6508afa5a79c8.pdf'
+)]
+#[DocumentedAPIProperty(
+ schemaName: 'Attachment-Read', property: 'thumbnail_url', type: 'string', nullable: true,
+ description: 'The URL to a thumbnail version of this file. This only exists for internal picture attachments.'
+)]
#[ApiFilter(LikeFilter::class, properties: ["name"])]
#[ApiFilter(EntityFilter::class, properties: ["attachment_type"])]
#[ApiFilter(DateFilter::class, strategy: DateFilterInterface::EXCLUDE_NULL)]
@@ -91,8 +97,8 @@ use LogicException;
#[DiscriminatorMap(typeProperty: '_type', mapping: self::API_DISCRIMINATOR_MAP)]
abstract class Attachment extends AbstractNamedDBElement
{
- private const ORM_DISCRIMINATOR_MAP = ['PartDB\Part' => PartAttachment::class, 'Part' => PartAttachment::class,
- 'PartDB\Device' => ProjectAttachment::class, 'Device' => ProjectAttachment::class, 'AttachmentType' => AttachmentTypeAttachment::class,
+ private const ORM_DISCRIMINATOR_MAP = ['Part' => PartAttachment::class, 'Device' => ProjectAttachment::class,
+ 'AttachmentType' => AttachmentTypeAttachment::class,
'Category' => CategoryAttachment::class, 'Footprint' => FootprintAttachment::class, 'Manufacturer' => ManufacturerAttachment::class,
'Currency' => CurrencyAttachment::class, 'Group' => GroupAttachment::class, 'MeasurementUnit' => MeasurementUnitAttachment::class,
'Storelocation' => StorageLocationAttachment::class, 'Supplier' => SupplierAttachment::class,
@@ -119,10 +125,6 @@ abstract class Attachment extends AbstractNamedDBElement
*/
final public const MODEL_EXTS = ['x3d'];
- /**
- * When the path begins with one of the placeholders.
- */
- final public const INTERNAL_PLACEHOLDER = ['%BASE%', '%MEDIA%', '%SECURE%'];
/**
* @var array placeholders for attachments which using built in files
@@ -152,10 +154,21 @@ abstract class Attachment extends AbstractNamedDBElement
protected ?string $original_filename = null;
/**
- * @var string The path to the file relative to a placeholder path like %MEDIA%
+ * @var string|null If a copy of the file is stored internally, the path to the file relative to a placeholder
+ * path like %MEDIA%
*/
- #[ORM\Column(name: 'path', type: Types::STRING)]
- protected string $path = '';
+ #[ORM\Column(type: Types::STRING, nullable: true)]
+ protected ?string $internal_path = null;
+
+
+ /**
+ * @var string|null The path to the external source if the file is stored externally or was downloaded from an
+ * external source. Null if there is no external source.
+ */
+ #[ORM\Column(type: Types::STRING, nullable: true)]
+ #[Groups(['attachment:read'])]
+ #[ApiProperty(example: 'http://example.com/image.jpg')]
+ protected ?string $external_path = null;
/**
* @var string the name of this element
@@ -237,7 +250,7 @@ abstract class Attachment extends AbstractNamedDBElement
/**
* Check if this attachment is a picture (analyse the file's extension).
- * If the link is external, it is assumed that this is true.
+ * If the link is only external and doesn't contain an extension, it is assumed that this is true.
*
* @return bool * true if the file extension is a picture extension
* * otherwise false
@@ -245,54 +258,67 @@ abstract class Attachment extends AbstractNamedDBElement
#[Groups(['attachment:read'])]
public function isPicture(): bool
{
- if ($this->isExternal()) {
+ if($this->hasInternal()){
+
+ $extension = pathinfo($this->getInternalPath(), PATHINFO_EXTENSION);
+
+ return in_array(strtolower($extension), static::PICTURE_EXTS, true);
+
+ }
+ if ($this->hasExternal()) {
//Check if we can extract a file extension from the URL
- $extension = pathinfo(parse_url($this->path, PHP_URL_PATH) ?? '', PATHINFO_EXTENSION);
+ $extension = pathinfo(parse_url($this->getExternalPath(), PHP_URL_PATH) ?? '', PATHINFO_EXTENSION);
//If no extension is found or it is known picture extension, we assume that this is a picture extension
return $extension === '' || in_array(strtolower($extension), static::PICTURE_EXTS, true);
}
-
- $extension = pathinfo($this->getPath(), PATHINFO_EXTENSION);
-
- return in_array(strtolower($extension), static::PICTURE_EXTS, true);
+ //File doesn't have an internal, nor an external copy. This shouldn't happen, but it certainly isn't a picture...
+ return false;
}
/**
* Check if this attachment is a 3D model and therefore can be directly shown to user.
- * If the attachment is external, false is returned (3D Models must be internal).
+ * If no internal copy exists, false is returned (3D Models must be internal).
*/
#[Groups(['attachment:read'])]
#[SerializedName('3d_model')]
public function is3DModel(): bool
{
//We just assume that 3D Models are internally saved, otherwise we get problems loading them.
- if ($this->isExternal()) {
+ if (!$this->hasInternal()) {
return false;
}
- $extension = pathinfo($this->getPath(), PATHINFO_EXTENSION);
+ $extension = pathinfo($this->getInternalPath(), PATHINFO_EXTENSION);
return in_array(strtolower($extension), static::MODEL_EXTS, true);
}
/**
- * Checks if the attachment file is externally saved (the database saves an URL).
+ * Checks if this attachment has a path to an external file
*
- * @return bool true, if the file is saved externally
+ * @return bool true, if there is a path to an external file
+ * @phpstan-assert-if-true non-empty-string $this->external_path
+ * @phpstan-assert-if-true non-empty-string $this->getExternalPath())
*/
#[Groups(['attachment:read'])]
- public function isExternal(): bool
+ public function hasExternal(): bool
{
- //When path is empty, this attachment can not be external
- if ($this->path === '') {
- return false;
- }
+ return $this->external_path !== null && $this->external_path !== '';
+ }
- //After the %PLACEHOLDER% comes a slash, so we can check if we have a placeholder via explode
- $tmp = explode('/', $this->path);
-
- return !in_array($tmp[0], array_merge(static::INTERNAL_PLACEHOLDER, static::BUILTIN_PLACEHOLDER), true);
+ /**
+ * Checks if this attachment has a path to an internal file.
+ * Does not check if the file exists.
+ *
+ * @return bool true, if there is a path to an internal file
+ * @phpstan-assert-if-true non-empty-string $this->internal_path
+ * @phpstan-assert-if-true non-empty-string $this->getInternalPath())
+ */
+ #[Groups(['attachment:read'])]
+ public function hasInternal(): bool
+ {
+ return $this->internal_path !== null && $this->internal_path !== '';
}
/**
@@ -305,8 +331,12 @@ abstract class Attachment extends AbstractNamedDBElement
#[SerializedName('private')]
public function isSecure(): bool
{
+ if ($this->internal_path === null) {
+ return false;
+ }
+
//After the %PLACEHOLDER% comes a slash, so we can check if we have a placeholder via explode
- $tmp = explode('/', $this->path);
+ $tmp = explode('/', $this->internal_path);
return '%SECURE%' === $tmp[0];
}
@@ -320,7 +350,11 @@ abstract class Attachment extends AbstractNamedDBElement
#[Groups(['attachment:read'])]
public function isBuiltIn(): bool
{
- return static::checkIfBuiltin($this->path);
+ if ($this->internal_path === null) {
+ return false;
+ }
+
+ return static::checkIfBuiltin($this->internal_path);
}
/********************************************************************************
@@ -332,13 +366,13 @@ abstract class Attachment extends AbstractNamedDBElement
/**
* Returns the extension of the file referenced via the attachment.
* For a path like %BASE/path/foo.bar, bar will be returned.
- * If this attachment is external null is returned.
+ * If this attachment is only external null is returned.
*
* @return string|null the file extension in lower case
*/
public function getExtension(): ?string
{
- if ($this->isExternal()) {
+ if (!$this->hasInternal()) {
return null;
}
@@ -346,7 +380,7 @@ abstract class Attachment extends AbstractNamedDBElement
return strtolower(pathinfo($this->original_filename, PATHINFO_EXTENSION));
}
- return strtolower(pathinfo($this->getPath(), PATHINFO_EXTENSION));
+ return strtolower(pathinfo($this->getInternalPath(), PATHINFO_EXTENSION));
}
/**
@@ -361,52 +395,54 @@ abstract class Attachment extends AbstractNamedDBElement
}
/**
- * The URL to the external file, or the path to the built-in file.
+ * The URL to the external file, or the path to the built-in file, but not paths to uploaded files.
* Returns null, if the file is not external (and not builtin).
+ * The output of this function is such, that no changes occur when it is fed back into setURL().
+ * Required for the Attachment form field.
*/
- #[Groups(['attachment:read'])]
- #[SerializedName('url')]
public function getURL(): ?string
{
- if (!$this->isExternal() && !$this->isBuiltIn()) {
- return null;
+ if($this->hasExternal()){
+ return $this->getExternalPath();
}
-
- return $this->path;
+ if($this->isBuiltIn()){
+ return $this->getInternalPath();
+ }
+ return null;
}
/**
* Returns the hostname where the external file is stored.
- * Returns null, if the file is not external.
+ * Returns null, if there is no external path.
*/
public function getHost(): ?string
{
- if (!$this->isExternal()) {
+ if (!$this->hasExternal()) {
return null;
}
- return parse_url((string) $this->getURL(), PHP_URL_HOST);
+ return parse_url($this->getExternalPath(), PHP_URL_HOST);
}
- /**
- * Get the filepath, relative to %BASE%.
- *
- * @return string A string like %BASE/path/foo.bar
- */
- public function getPath(): string
+ public function getInternalPath(): ?string
{
- return $this->path;
+ return $this->internal_path;
+ }
+
+ public function getExternalPath(): ?string
+ {
+ return $this->external_path;
}
/**
* Returns the filename of the attachment.
* For a path like %BASE/path/foo.bar, foo.bar will be returned.
*
- * If the path is a URL (can be checked via isExternal()), null will be returned.
+ * If there is no internal copy of the file, null will be returned.
*/
public function getFilename(): ?string
{
- if ($this->isExternal()) {
+ if (!$this->hasInternal()) {
return null;
}
@@ -415,7 +451,7 @@ abstract class Attachment extends AbstractNamedDBElement
return $this->original_filename;
}
- return pathinfo($this->getPath(), PATHINFO_BASENAME);
+ return pathinfo($this->getInternalPath(), PATHINFO_BASENAME);
}
/**
@@ -488,15 +524,12 @@ abstract class Attachment extends AbstractNamedDBElement
}
/**
- * Sets the filepath (with relative placeholder) for this attachment.
- *
- * @param string $path the new filepath of the attachment
- *
- * @return Attachment
+ * Sets the path to a file hosted internally. If you set this path to a file that was not downloaded from the
+ * external source in external_path, make sure to reset external_path.
*/
- public function setPath(string $path): self
+ public function setInternalPath(?string $internal_path): self
{
- $this->path = $path;
+ $this->internal_path = $internal_path;
return $this;
}
@@ -512,34 +545,60 @@ abstract class Attachment extends AbstractNamedDBElement
}
/**
- * Sets the url associated with this attachment.
- * If the url is empty nothing is changed, to not override the file path.
- *
- * @return Attachment
+ * Sets up the paths using a user provided string which might contain an external path or a builtin path. Allows
+ * resetting the external path if an internal path exists. Resets any other paths if a (nonempty) new path is set.
*/
#[Groups(['attachment:write'])]
#[SerializedName('url')]
+ #[ApiProperty(description: 'Set the path of the attachment here.
+ Provide either an external URL, a path to a builtin file (like %FOOTPRINTS%/Active/ICs/IC_DFS.png) or an empty
+ string if the attachment has an internal file associated and you\'d like to reset the external source.
+ If you set a new (nonempty) file path any associated internal file will be removed!')]
public function setURL(?string $url): self
{
- //Do nothing if the URL is empty
- if ($url === null || $url === '') {
+ //Don't allow the user to set an empty external path if the internal path is empty already
+ if (($url === null || $url === "") && !$this->hasInternal()) {
return $this;
}
- $url = trim($url);
- //Escape spaces in URL
- $url = str_replace(' ', '%20', $url);
-
- //Only set if the URL is not empty
- if ($url !== null && $url !== '') {
- if (str_contains($url, '%BASE%') || str_contains($url, '%MEDIA%')) {
- throw new InvalidArgumentException('You can not reference internal files via the url field! But nice try!');
- }
-
- $this->path = $url;
- //Reset internal filename
- $this->original_filename = null;
+ //The URL field can also contain the special builtin internal paths, so we need to distinguish here
+ if ($this::checkIfBuiltin($url)) {
+ $this->setInternalPath($url);
+ //make sure the external path isn't still pointing to something unrelated
+ $this->setExternalPath(null);
+ } else {
+ $this->setExternalPath($url);
}
+ return $this;
+ }
+
+
+ /**
+ * Sets the path to a file hosted on an external server. Setting the external path to a (nonempty) value different
+ * from the the old one _clears_ the internal path, so that the external path reflects where any associated internal
+ * file came from.
+ */
+ public function setExternalPath(?string $external_path): self
+ {
+ //If we only clear the external path, don't reset the internal path, since that could be confusing
+ if($external_path === null || $external_path === '') {
+ $this->external_path = null;
+ return $this;
+ }
+
+ $external_path = trim($external_path);
+ //Escape spaces in URL
+ $external_path = str_replace(' ', '%20', $external_path);
+
+ if($this->external_path === $external_path) {
+ //Nothing changed, nothing to do
+ return $this;
+ }
+
+ $this->external_path = $external_path;
+ $this->internal_path = null;
+ //Reset internal filename
+ $this->original_filename = null;
return $this;
}
@@ -551,12 +610,17 @@ abstract class Attachment extends AbstractNamedDBElement
/**
* Checks if the given path is a path to a builtin resource.
*
- * @param string $path The path that should be checked
+ * @param string|null $path The path that should be checked
*
* @return bool true if the path is pointing to a builtin resource
*/
- public static function checkIfBuiltin(string $path): bool
+ public static function checkIfBuiltin(?string $path): bool
{
+ //An empty path can't be a builtin
+ if ($path === null) {
+ return false;
+ }
+
//After the %PLACEHOLDER% comes a slash, so we can check if we have a placeholder via explode
$tmp = explode('/', $path);
//Builtins must have a %PLACEHOLDER% construction
diff --git a/src/Entity/Attachments/AttachmentContainingDBElement.php b/src/Entity/Attachments/AttachmentContainingDBElement.php
index 3c863e85..a78cb1f4 100644
--- a/src/Entity/Attachments/AttachmentContainingDBElement.php
+++ b/src/Entity/Attachments/AttachmentContainingDBElement.php
@@ -33,7 +33,7 @@ use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
/**
- * @template-covariant AT of Attachment
+ * @template AT of Attachment
*/
#[ORM\MappedSuperclass(repositoryClass: AttachmentContainingDBElementRepository::class)]
abstract class AttachmentContainingDBElement extends AbstractNamedDBElement implements HasMasterAttachmentInterface, HasAttachmentsInterface
diff --git a/src/Entity/Base/AbstractCompany.php b/src/Entity/Base/AbstractCompany.php
index e3d4fd61..947d1339 100644
--- a/src/Entity/Base/AbstractCompany.php
+++ b/src/Entity/Base/AbstractCompany.php
@@ -33,8 +33,8 @@ use Symfony\Component\Validator\Constraints as Assert;
/**
* This abstract class is used for companies like suppliers or manufacturers.
*
- * @template-covariant AT of Attachment
- * @template-covariant PT of AbstractParameter
+ * @template AT of Attachment
+ * @template PT of AbstractParameter
* @extends AbstractPartsContainingDBElement
*/
#[ORM\MappedSuperclass]
@@ -162,7 +162,7 @@ abstract class AbstractCompany extends AbstractPartsContainingDBElement
*
* @return string the link to the article
*/
- public function getAutoProductUrl(string $partnr = null): string
+ public function getAutoProductUrl(?string $partnr = null): string
{
if (is_string($partnr)) {
return str_replace('%PARTNUMBER%', $partnr, $this->auto_product_url);
diff --git a/src/Entity/Base/AbstractPartsContainingDBElement.php b/src/Entity/Base/AbstractPartsContainingDBElement.php
index e2209987..70d88fa9 100644
--- a/src/Entity/Base/AbstractPartsContainingDBElement.php
+++ b/src/Entity/Base/AbstractPartsContainingDBElement.php
@@ -31,8 +31,8 @@ use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
/**
- * @template-covariant AT of Attachment
- * @template-covariant PT of AbstractParameter
+ * @template AT of Attachment
+ * @template PT of AbstractParameter
* @extends AbstractStructuralDBElement
*/
#[ORM\MappedSuperclass(repositoryClass: AbstractPartsContainingRepository::class)]
diff --git a/src/Entity/Base/AbstractStructuralDBElement.php b/src/Entity/Base/AbstractStructuralDBElement.php
index 09ec94a6..660710db 100644
--- a/src/Entity/Base/AbstractStructuralDBElement.php
+++ b/src/Entity/Base/AbstractStructuralDBElement.php
@@ -53,8 +53,8 @@ use Symfony\Component\Serializer\Annotation\Groups;
*
* @see \App\Tests\Entity\Base\AbstractStructuralDBElementTest
*
- * @template-covariant AT of Attachment
- * @template-covariant PT of AbstractParameter
+ * @template AT of Attachment
+ * @template PT of AbstractParameter
* @template-use ParametersTrait
* @extends AttachmentContainingDBElement
* @uses ParametersTrait
@@ -318,6 +318,7 @@ abstract class AbstractStructuralDBElement extends AttachmentContainingDBElement
return new ArrayCollection();
}
+ //@phpstan-ignore-next-line
return $this->children ?? new ArrayCollection();
}
diff --git a/src/Entity/LabelSystem/LabelSupportedElement.php b/src/Entity/LabelSystem/LabelSupportedElement.php
index 2f9afa85..7649e586 100644
--- a/src/Entity/LabelSystem/LabelSupportedElement.php
+++ b/src/Entity/LabelSystem/LabelSupportedElement.php
@@ -22,6 +22,8 @@ declare(strict_types=1);
*/
namespace App\Entity\LabelSystem;
+use App\Entity\Base\AbstractDBElement;
+use App\Entity\Base\AbstractNamedDBElement;
use App\Entity\Parts\Part;
use App\Entity\Parts\PartLot;
use App\Entity\Parts\StorageLocation;
@@ -34,7 +36,7 @@ enum LabelSupportedElement: string
/**
* Returns the entity class for the given element type
- * @return string
+ * @return class-string
*/
public function getEntityClass(): string
{
diff --git a/src/Entity/LogSystem/SecurityEventLogEntry.php b/src/Entity/LogSystem/SecurityEventLogEntry.php
index ffcfd6a5..12e8e65e 100644
--- a/src/Entity/LogSystem/SecurityEventLogEntry.php
+++ b/src/Entity/LogSystem/SecurityEventLogEntry.php
@@ -44,9 +44,9 @@ namespace App\Entity\LogSystem;
use App\Entity\Base\AbstractDBElement;
use App\Entity\UserSystem\User;
use App\Events\SecurityEvents;
+use App\Helpers\IPAnonymizer;
use Doctrine\ORM\Mapping as ORM;
use InvalidArgumentException;
-use Symfony\Component\HttpFoundation\IpUtils;
/**
* This log entry is created when something security related to a user happens.
@@ -127,14 +127,14 @@ class SecurityEventLogEntry extends AbstractLogEntry
* Sets the IP address used to log in the user.
*
* @param string $ip the IP address used to log in the user
- * @param bool $anonymize Anonymize the IP address (remove last block) to be GPDR compliant
+ * @param bool $anonymize Anonymize the IP address (remove last block) to be GDPR compliant
*
* @return $this
*/
public function setIPAddress(string $ip, bool $anonymize = true): self
{
if ($anonymize) {
- $ip = IpUtils::anonymize($ip);
+ $ip = IPAnonymizer::anonymize($ip);
}
$this->extra['i'] = $ip;
diff --git a/src/Entity/LogSystem/UserLoginLogEntry.php b/src/Entity/LogSystem/UserLoginLogEntry.php
index c9e6bc21..0719a740 100644
--- a/src/Entity/LogSystem/UserLoginLogEntry.php
+++ b/src/Entity/LogSystem/UserLoginLogEntry.php
@@ -22,8 +22,9 @@ declare(strict_types=1);
namespace App\Entity\LogSystem;
+use App\Helpers\IPAnonymizer;
use Doctrine\ORM\Mapping as ORM;
-use Symfony\Component\HttpFoundation\IpUtils;
+
/**
* This log entry is created when a user logs in.
@@ -52,14 +53,14 @@ class UserLoginLogEntry extends AbstractLogEntry
* Sets the IP address used to log in the user.
*
* @param string $ip the IP address used to log in the user
- * @param bool $anonymize Anonymize the IP address (remove last block) to be GPDR compliant
+ * @param bool $anonymize Anonymize the IP address (remove last block) to be GDPR compliant
*
* @return $this
*/
public function setIPAddress(string $ip, bool $anonymize = true): self
{
if ($anonymize) {
- $ip = IpUtils::anonymize($ip);
+ $ip = IPAnonymizer::anonymize($ip);
}
$this->extra['i'] = $ip;
diff --git a/src/Entity/LogSystem/UserLogoutLogEntry.php b/src/Entity/LogSystem/UserLogoutLogEntry.php
index ba52de87..f9f9a3dc 100644
--- a/src/Entity/LogSystem/UserLogoutLogEntry.php
+++ b/src/Entity/LogSystem/UserLogoutLogEntry.php
@@ -22,8 +22,8 @@ declare(strict_types=1);
namespace App\Entity\LogSystem;
+use App\Helpers\IPAnonymizer;
use Doctrine\ORM\Mapping as ORM;
-use Symfony\Component\HttpFoundation\IpUtils;
#[ORM\Entity]
class UserLogoutLogEntry extends AbstractLogEntry
@@ -49,14 +49,14 @@ class UserLogoutLogEntry extends AbstractLogEntry
* Sets the IP address used to log in the user.
*
* @param string $ip the IP address used to log in the user
- * @param bool $anonymize Anonymize the IP address (remove last block) to be GPDR compliant
+ * @param bool $anonymize Anonymize the IP address (remove last block) to be GDPR compliant
*
* @return $this
*/
public function setIPAddress(string $ip, bool $anonymize = true): self
{
if ($anonymize) {
- $ip = IpUtils::anonymize($ip);
+ $ip = IPAnonymizer::anonymize($ip);
}
$this->extra['i'] = $ip;
diff --git a/src/Entity/OAuthToken.php b/src/Entity/OAuthToken.php
index 0073aeed..bc692369 100644
--- a/src/Entity/OAuthToken.php
+++ b/src/Entity/OAuthToken.php
@@ -54,7 +54,7 @@ class OAuthToken extends AbstractNamedDBElement implements AccessTokenInterface
*/
private const DEFAULT_EXPIRATION_TIME = 3600;
- public function __construct(string $name, ?string $refresh_token, ?string $token = null, \DateTimeImmutable $expires_at = null)
+ public function __construct(string $name, ?string $refresh_token, ?string $token = null, ?\DateTimeImmutable $expires_at = null)
{
//If token is given, you also have to give the expires_at date
if ($token !== null && $expires_at === null) {
diff --git a/src/Entity/Parameters/AbstractParameter.php b/src/Entity/Parameters/AbstractParameter.php
index c42682f9..edcedc3e 100644
--- a/src/Entity/Parameters/AbstractParameter.php
+++ b/src/Entity/Parameters/AbstractParameter.php
@@ -208,7 +208,7 @@ abstract class AbstractParameter extends AbstractNamedDBElement implements Uniqu
*/
#[Groups(['parameter:read', 'full'])]
#[SerializedName('formatted')]
- public function getFormattedValue(): string
+ public function getFormattedValue(bool $latex_formatted = false): string
{
//If we just only have text value, return early
if (null === $this->value_typical && null === $this->value_min && null === $this->value_max) {
@@ -218,7 +218,7 @@ abstract class AbstractParameter extends AbstractNamedDBElement implements Uniqu
$str = '';
$bracket_opened = false;
if ($this->value_typical) {
- $str .= $this->getValueTypicalWithUnit();
+ $str .= $this->getValueTypicalWithUnit($latex_formatted);
if ($this->value_min || $this->value_max) {
$bracket_opened = true;
$str .= ' (';
@@ -226,11 +226,11 @@ abstract class AbstractParameter extends AbstractNamedDBElement implements Uniqu
}
if ($this->value_max && $this->value_min) {
- $str .= $this->getValueMinWithUnit().' ... '.$this->getValueMaxWithUnit();
+ $str .= $this->getValueMinWithUnit($latex_formatted).' ... '.$this->getValueMaxWithUnit($latex_formatted);
} elseif ($this->value_max) {
- $str .= 'max. '.$this->getValueMaxWithUnit();
+ $str .= 'max. '.$this->getValueMaxWithUnit($latex_formatted);
} elseif ($this->value_min) {
- $str .= 'min. '.$this->getValueMinWithUnit();
+ $str .= 'min. '.$this->getValueMinWithUnit($latex_formatted);
}
//Add closing bracket
@@ -344,25 +344,25 @@ abstract class AbstractParameter extends AbstractNamedDBElement implements Uniqu
/**
* Return a formatted version with the minimum value with the unit of this parameter.
*/
- public function getValueTypicalWithUnit(): string
+ public function getValueTypicalWithUnit(bool $with_latex = false): string
{
- return $this->formatWithUnit($this->value_typical);
+ return $this->formatWithUnit($this->value_typical, with_latex: $with_latex);
}
/**
* Return a formatted version with the maximum value with the unit of this parameter.
*/
- public function getValueMaxWithUnit(): string
+ public function getValueMaxWithUnit(bool $with_latex = false): string
{
- return $this->formatWithUnit($this->value_max);
+ return $this->formatWithUnit($this->value_max, with_latex: $with_latex);
}
/**
* Return a formatted version with the typical value with the unit of this parameter.
*/
- public function getValueMinWithUnit(): string
+ public function getValueMinWithUnit(bool $with_latex = false): string
{
- return $this->formatWithUnit($this->value_min);
+ return $this->formatWithUnit($this->value_min, with_latex: $with_latex);
}
/**
@@ -441,11 +441,18 @@ abstract class AbstractParameter extends AbstractNamedDBElement implements Uniqu
/**
* Return a string representation and (if possible) with its unit.
*/
- protected function formatWithUnit(float $value, string $format = '%g'): string
+ protected function formatWithUnit(float $value, string $format = '%g', bool $with_latex = false): string
{
$str = sprintf($format, $value);
if ($this->unit !== '') {
- return $str.' '.$this->unit;
+
+ if (!$with_latex) {
+ $unit = $this->unit;
+ } else {
+ $unit = '$\mathrm{'.$this->unit.'}$';
+ }
+
+ return $str.' '.$unit;
}
return $str;
diff --git a/src/Entity/Parts/Part.php b/src/Entity/Parts/Part.php
index 4addf503..14a7903f 100644
--- a/src/Entity/Parts/Part.php
+++ b/src/Entity/Parts/Part.php
@@ -22,6 +22,7 @@ declare(strict_types=1);
namespace App\Entity\Parts;
+use App\ApiPlatform\Filter\TagFilter;
use Doctrine\Common\Collections\Criteria;
use ApiPlatform\Doctrine\Common\Filter\DateFilterInterface;
use ApiPlatform\Doctrine\Orm\Filter\BooleanFilter;
@@ -97,7 +98,8 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface;
#[ApiFilter(PropertyFilter::class)]
#[ApiFilter(EntityFilter::class, properties: ["category", "footprint", "manufacturer", "partUnit"])]
#[ApiFilter(PartStoragelocationFilter::class, properties: ["storage_location"])]
-#[ApiFilter(LikeFilter::class, properties: ["name", "comment", "description", "ipn", "tags", "manufacturer_product_number"])]
+#[ApiFilter(LikeFilter::class, properties: ["name", "comment", "description", "ipn", "manufacturer_product_number"])]
+#[ApiFilter(TagFilter::class, properties: ["tags"])]
#[ApiFilter(BooleanFilter::class, properties: ["favorite" , "needs_review"])]
#[ApiFilter(RangeFilter::class, properties: ["mass", "minamount"])]
#[ApiFilter(DateFilter::class, strategy: DateFilterInterface::EXCLUDE_NULL)]
@@ -118,7 +120,7 @@ class Part extends AttachmentContainingDBElement
/** @var Collection
*/
#[Assert\Valid]
- #[Groups(['full', 'part:read', 'part:write'])]
+ #[Groups(['full', 'part:read', 'part:write', 'import'])]
#[ORM\OneToMany(mappedBy: 'element', targetEntity: PartParameter::class, cascade: ['persist', 'remove'], orphanRemoval: true)]
#[ORM\OrderBy(['group' => Criteria::ASC, 'name' => 'ASC'])]
#[UniqueObjectCollection(fields: ['name', 'group', 'element'])]
diff --git a/src/Entity/Parts/PartLot.php b/src/Entity/Parts/PartLot.php
index 70475efd..d893e6de 100644
--- a/src/Entity/Parts/PartLot.php
+++ b/src/Entity/Parts/PartLot.php
@@ -68,7 +68,7 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface;
#[ORM\Index(columns: ['needs_refill'], name: 'part_lots_idx_needs_refill')]
#[ORM\Index(columns: ['vendor_barcode'], name: 'part_lots_idx_barcode')]
#[ValidPartLot]
-#[UniqueEntity(['vendor_barcode'], message: 'validator.part_lot.vendor_barcode_must_be_unique')]
+#[UniqueEntity(['user_barcode'], message: 'validator.part_lot.vendor_barcode_must_be_unique')]
#[ApiResource(
operations: [
new Get(security: 'is_granted("read", object)'),
@@ -166,10 +166,10 @@ class PartLot extends AbstractDBElement implements TimeStampableInterface, Named
/**
* @var string|null The content of the barcode of this part lot (e.g. a barcode on the package put by the vendor)
*/
- #[ORM\Column(type: Types::STRING, nullable: true)]
+ #[ORM\Column(name: "vendor_barcode", type: Types::STRING, nullable: true)]
#[Groups(['part_lot:read', 'part_lot:write'])]
#[Length(max: 255)]
- protected ?string $vendor_barcode = null;
+ protected ?string $user_barcode = null;
public function __clone()
{
@@ -185,7 +185,6 @@ class PartLot extends AbstractDBElement implements TimeStampableInterface, Named
*
* @return bool|null True, if the part lot is expired. Returns null, if no expiration date was set.
*
- * @throws Exception If an error with the DateTime occurs
*/
public function isExpired(): ?bool
{
@@ -376,19 +375,19 @@ class PartLot extends AbstractDBElement implements TimeStampableInterface, Named
* null if no barcode is set.
* @return string|null
*/
- public function getVendorBarcode(): ?string
+ public function getUserBarcode(): ?string
{
- return $this->vendor_barcode;
+ return $this->user_barcode;
}
/**
* Set the content of the barcode of this part lot (e.g. a barcode on the package put by the vendor).
- * @param string|null $vendor_barcode
+ * @param string|null $user_barcode
* @return $this
*/
- public function setVendorBarcode(?string $vendor_barcode): PartLot
+ public function setUserBarcode(?string $user_barcode): PartLot
{
- $this->vendor_barcode = $vendor_barcode;
+ $this->user_barcode = $user_barcode;
return $this;
}
diff --git a/src/Entity/Parts/Supplier.php b/src/Entity/Parts/Supplier.php
index 6b01a92c..2c004e9e 100644
--- a/src/Entity/Parts/Supplier.php
+++ b/src/Entity/Parts/Supplier.php
@@ -103,7 +103,7 @@ class Supplier extends AbstractCompany
protected ?AbstractStructuralDBElement $parent = null;
/**
- * @var Collection|Orderdetail[]
+ * @var Collection
*/
#[ORM\OneToMany(mappedBy: 'supplier', targetEntity: Orderdetail::class)]
protected Collection $orderdetails;
diff --git a/src/Entity/ProjectSystem/Project.php b/src/Entity/ProjectSystem/Project.php
index 1d1ed413..a103d694 100644
--- a/src/Entity/ProjectSystem/Project.php
+++ b/src/Entity/ProjectSystem/Project.php
@@ -333,7 +333,6 @@ class Project extends AbstractStructuralDBElement
{
//If this project has subprojects, and these have builds part, they must be included in the BOM
foreach ($this->getChildren() as $child) {
- /** @var $child Project */
if (!$child->getBuildPart() instanceof Part) {
continue;
}
diff --git a/src/Entity/UserSystem/User.php b/src/Entity/UserSystem/User.php
index b26a842d..b39bea4f 100644
--- a/src/Entity/UserSystem/User.php
+++ b/src/Entity/UserSystem/User.php
@@ -102,7 +102,7 @@ use Jbtronics\TFAWebauthn\Model\TwoFactorInterface as WebauthnTwoFactorInterface
#[ApiFilter(LikeFilter::class, properties: ["name", "aboutMe"])]
#[ApiFilter(DateFilter::class, strategy: DateFilterInterface::EXCLUDE_NULL)]
#[ApiFilter(OrderFilter::class, properties: ['name', 'id', 'addedDate', 'lastModified'])]
-#[NoLockout]
+#[NoLockout(groups: ['permissions:edit'])]
class User extends AttachmentContainingDBElement implements UserInterface, HasPermissionsInterface, TwoFactorInterface,
BackupCodeInterface, TrustedDeviceInterface, WebauthnTwoFactorInterface, PreferredProviderInterface, PasswordAuthenticatedUserInterface, SamlUserInterface
{
@@ -256,7 +256,7 @@ class User extends AttachmentContainingDBElement implements UserInterface, HasPe
protected ?string $password = null;
#[Assert\NotBlank]
- #[Assert\Regex('/^[\w\.\+\-\$]+$/', message: 'user.invalid_username')]
+ #[Assert\Regex('/^[\w\.\+\-\$]+[\w\.\+\-\$\@]*$/', message: 'user.invalid_username')]
#[Groups(['user:read'])]
protected string $name = '';
@@ -893,8 +893,6 @@ class User extends AttachmentContainingDBElement implements UserInterface, HasPe
* @param string[] $codes An array containing the backup codes
*
* @return $this
- *
- * @throws Exception If an error with the datetime occurs
*/
public function setBackupCodes(array $codes): self
{
diff --git a/src/EntityListeners/AttachmentDeleteListener.php b/src/EntityListeners/AttachmentDeleteListener.php
index e9df5972..1f39b2d0 100644
--- a/src/EntityListeners/AttachmentDeleteListener.php
+++ b/src/EntityListeners/AttachmentDeleteListener.php
@@ -52,8 +52,8 @@ class AttachmentDeleteListener
#[PreUpdate]
public function preUpdateHandler(Attachment $attachment, PreUpdateEventArgs $event): void
{
- if ($event->hasChangedField('path')) {
- $old_path = $event->getOldValue('path');
+ if ($event->hasChangedField('internal_path')) {
+ $old_path = $event->getOldValue('internal_path');
//Dont delete file if the attachment uses a builtin ressource:
if (Attachment::checkIfBuiltin($old_path)) {
diff --git a/src/EventSubscriber/WebpackAutoPathSubscriber.php b/src/EventSubscriber/WebpackAutoPathSubscriber.php
deleted file mode 100644
index f040a646..00000000
--- a/src/EventSubscriber/WebpackAutoPathSubscriber.php
+++ /dev/null
@@ -1,57 +0,0 @@
-.
- */
-
-declare(strict_types=1);
-
-
-namespace App\EventSubscriber;
-
-use Symfony\Component\EventDispatcher\EventSubscriberInterface;
-use Symfony\WebpackEncoreBundle\Event\RenderAssetTagEvent;
-
-/**
- * This class fixes the wrong pathes generated by webpack using the auto publicPath mode.
- * Basically it replaces the wrong /auto/ part of the path with the correct /build/ in all encore entrypoints.
- */
-class WebpackAutoPathSubscriber implements EventSubscriberInterface
-{
- public static function getSubscribedEvents(): array
- {
- return [
- RenderAssetTagEvent::class => 'onRenderAssetTag'
- ];
- }
-
- public function onRenderAssetTag(RenderAssetTagEvent $event): void
- {
- if ($event->isScriptTag()) {
- $event->setAttribute('src', $this->resolveAuto($event->getUrl()));
- }
- if ($event->isLinkTag()) {
- $event->setAttribute('href', $this->resolveAuto($event->getUrl()));
- }
- }
-
- private function resolveAuto(string $path): string
- {
- //Replace the first occurence of /auto/ with /build/ to get the correct path
- return preg_replace('/\/auto\//', '/build/', $path, 1);
- }
-}
\ No newline at end of file
diff --git a/src/Form/Filters/AttachmentFilterType.php b/src/Form/Filters/AttachmentFilterType.php
index e6746feb..ff80bd38 100644
--- a/src/Form/Filters/AttachmentFilterType.php
+++ b/src/Form/Filters/AttachmentFilterType.php
@@ -100,6 +100,15 @@ class AttachmentFilterType extends AbstractType
'label' => 'attachment.edit.show_in_table'
]);
+ $builder->add('originalFileName', TextConstraintType::class, [
+ 'label' => 'attachment.file_name'
+ ]);
+
+ $builder->add('externalLink', TextConstraintType::class, [
+ 'label' => 'attachment.table.external_link'
+ ]);
+
+
$builder->add('lastModified', DateTimeConstraintType::class, [
'label' => 'lastModified'
]);
diff --git a/src/Form/LabelSystem/LabelDialogType.php b/src/Form/LabelSystem/LabelDialogType.php
index 33c79797..f2710b19 100644
--- a/src/Form/LabelSystem/LabelDialogType.php
+++ b/src/Form/LabelSystem/LabelDialogType.php
@@ -71,6 +71,22 @@ class LabelDialogType extends AbstractType
'label' => false,
'disabled' => !$this->security->isGranted('@labels.edit_options') || $options['disable_options'],
]);
+
+ $builder->add('save_profile_name', TextType::class, [
+ 'required' => false,
+ 'attr' =>[
+ 'placeholder' => 'label_generator.save_profile_name',
+ ]
+ ]);
+
+ $builder->add('save_profile', SubmitType::class, [
+ 'label' => 'label_generator.save_profile',
+ 'disabled' => !$this->security->isGranted('@labels.create_profiles'),
+ 'attr' => [
+ 'class' => 'btn btn-outline-success'
+ ]
+ ]);
+
$builder->add('update', SubmitType::class, [
'label' => 'label_generator.update',
]);
diff --git a/src/Form/LabelSystem/ScanDialogType.php b/src/Form/LabelSystem/ScanDialogType.php
index 5230dd5a..13ff8e6f 100644
--- a/src/Form/LabelSystem/ScanDialogType.php
+++ b/src/Form/LabelSystem/ScanDialogType.php
@@ -41,8 +41,9 @@ declare(strict_types=1);
namespace App\Form\LabelSystem;
-use App\Services\LabelSystem\Barcodes\BarcodeSourceType;
+use App\Services\LabelSystem\BarcodeScanner\BarcodeSourceType;
use Symfony\Component\Form\AbstractType;
+use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\EnumType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
@@ -55,6 +56,8 @@ class ScanDialogType extends AbstractType
{
$builder->add('input', TextType::class, [
'label' => 'scan_dialog.input',
+ //Do not trim the input, otherwise this damages Format06 barcodes which end with non-printable characters
+ 'trim' => false,
'attr' => [
'autofocus' => true,
'id' => 'scan_dialog_input',
@@ -71,9 +74,14 @@ class ScanDialogType extends AbstractType
null => 'scan_dialog.mode.auto',
BarcodeSourceType::INTERNAL => 'scan_dialog.mode.internal',
BarcodeSourceType::IPN => 'scan_dialog.mode.ipn',
- BarcodeSourceType::VENDOR => 'scan_dialog.mode.vendor',
+ BarcodeSourceType::USER_DEFINED => 'scan_dialog.mode.user',
+ BarcodeSourceType::EIGP114 => 'scan_dialog.mode.eigp'
},
+ ]);
+ $builder->add('info_mode', CheckboxType::class, [
+ 'label' => 'scan_dialog.info_mode',
+ 'required' => false,
]);
$builder->add('submit', SubmitType::class, [
diff --git a/src/Form/Part/PartBaseType.php b/src/Form/Part/PartBaseType.php
index 4a71f03a..b1d2ebea 100644
--- a/src/Form/Part/PartBaseType.php
+++ b/src/Form/Part/PartBaseType.php
@@ -101,6 +101,8 @@ class PartBaseType extends AbstractType
'dto_value' => $dto?->category,
'label' => 'part.edit.category',
'disable_not_selectable' => true,
+ //Do not require category for new parts, so that the user must select the category by hand and cannot forget it (the requirement is handled by the constraint in the entity)
+ 'required' => !$new_part,
])
->add('footprint', StructuralEntityType::class, [
'class' => Footprint::class,
diff --git a/src/Form/Part/PartLotType.php b/src/Form/Part/PartLotType.php
index da061c7f..7d545340 100644
--- a/src/Form/Part/PartLotType.php
+++ b/src/Form/Part/PartLotType.php
@@ -103,10 +103,12 @@ class PartLotType extends AbstractType
'help' => 'part_lot.owner.help',
]);
- $builder->add('vendor_barcode', TextType::class, [
- 'label' => 'part_lot.edit.vendor_barcode',
+ $builder->add('user_barcode', TextType::class, [
+ 'label' => 'part_lot.edit.user_barcode',
'help' => 'part_lot.edit.vendor_barcode.help',
'required' => false,
+ //Do not remove whitespace chars on the beginning and end of the string
+ 'trim' => false,
]);
}
diff --git a/src/Form/TFAGoogleSettingsType.php b/src/Form/TFAGoogleSettingsType.php
index e00ba494..7917f705 100644
--- a/src/Form/TFAGoogleSettingsType.php
+++ b/src/Form/TFAGoogleSettingsType.php
@@ -53,6 +53,7 @@ class TFAGoogleSettingsType extends AbstractType
'google_confirmation',
TextType::class,
[
+ 'label' => 'tfa.check.code.confirmation',
'mapped' => false,
'attr' => [
'maxlength' => '6',
@@ -60,7 +61,7 @@ class TFAGoogleSettingsType extends AbstractType
'pattern' => '\d*',
'autocomplete' => 'off',
],
- 'constraints' => [new ValidGoogleAuthCode()],
+ 'constraints' => [new ValidGoogleAuthCode(groups: ["google_authenticator"])],
]
);
@@ -92,6 +93,7 @@ class TFAGoogleSettingsType extends AbstractType
{
$resolver->setDefaults([
'data_class' => User::class,
+ 'validation_groups' => ['google_authenticator'],
]);
}
}
diff --git a/src/Form/Type/ExponentialNumberType.php b/src/Form/Type/ExponentialNumberType.php
index b76196d9..f566afbb 100644
--- a/src/Form/Type/ExponentialNumberType.php
+++ b/src/Form/Type/ExponentialNumberType.php
@@ -39,7 +39,7 @@ class ExponentialNumberType extends AbstractType
return NumberType::class;
}
- public function configureOptions(OptionsResolver $resolver)
+ public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
//We want to allow the full precision of the number, so disable rounding
@@ -47,7 +47,7 @@ class ExponentialNumberType extends AbstractType
]);
}
- public function buildForm(FormBuilderInterface $builder, array $options)
+ public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->resetViewTransformers();
diff --git a/src/Form/Type/Helper/StructuralEntityChoiceHelper.php b/src/Form/Type/Helper/StructuralEntityChoiceHelper.php
index e8e19ad6..1210d188 100644
--- a/src/Form/Type/Helper/StructuralEntityChoiceHelper.php
+++ b/src/Form/Type/Helper/StructuralEntityChoiceHelper.php
@@ -43,7 +43,7 @@ class StructuralEntityChoiceHelper
/**
* Generates the choice attributes for the given AbstractStructuralDBElement.
- * @return array|string[]
+ * @return array
*/
public function generateChoiceAttr(AbstractNamedDBElement $choice, Options|array $options): array
{
diff --git a/src/Form/Type/Helper/StructuralEntityChoiceLoader.php b/src/Form/Type/Helper/StructuralEntityChoiceLoader.php
index b79fad1b..e2e4e841 100644
--- a/src/Form/Type/Helper/StructuralEntityChoiceLoader.php
+++ b/src/Form/Type/Helper/StructuralEntityChoiceLoader.php
@@ -24,6 +24,7 @@ declare(strict_types=1);
namespace App\Form\Type\Helper;
use App\Entity\Base\AbstractNamedDBElement;
+use App\Entity\Base\AbstractStructuralDBElement;
use App\Repository\StructuralDBElementRepository;
use App\Services\Trees\NodesListBuilder;
use Doctrine\ORM\EntityManagerInterface;
@@ -33,6 +34,9 @@ use Symfony\Component\Form\FormInterface;
use Symfony\Component\OptionsResolver\Options;
use Symfony\Contracts\Translation\TranslatorInterface;
+/**
+ * @template T of AbstractStructuralDBElement
+ */
class StructuralEntityChoiceLoader extends AbstractChoiceLoader
{
private ?string $additional_element = null;
@@ -90,10 +94,14 @@ class StructuralEntityChoiceLoader extends AbstractChoiceLoader
}
}
+
+ /** @var class-string $class */
$class = $this->options['class'];
- /** @var StructuralDBElementRepository $repo */
+
+ /** @var StructuralDBElementRepository $repo */
$repo = $this->entityManager->getRepository($class);
+
$entities = $repo->getNewEntityFromPath($value, '->');
$results = [];
diff --git a/src/Form/Type/TriStateCheckboxType.php b/src/Form/Type/TriStateCheckboxType.php
index 7d1e1c7c..4523a839 100644
--- a/src/Form/Type/TriStateCheckboxType.php
+++ b/src/Form/Type/TriStateCheckboxType.php
@@ -99,7 +99,6 @@ final class TriStateCheckboxType extends AbstractType implements DataTransformer
*
* @return mixed The value in the transformed representation
*
- * @throws TransformationFailedException when the transformation fails
*/
public function transform(mixed $value)
{
@@ -142,8 +141,6 @@ final class TriStateCheckboxType extends AbstractType implements DataTransformer
* @param mixed $value The value in the transformed representation
*
* @return mixed The value in the original representation
- *
- * @throws TransformationFailedException when the transformation fails
*/
public function reverseTransform(mixed $value)
{
diff --git a/src/Form/UserAdminForm.php b/src/Form/UserAdminForm.php
index d1e5924e..864bcf6b 100644
--- a/src/Form/UserAdminForm.php
+++ b/src/Form/UserAdminForm.php
@@ -57,6 +57,8 @@ class UserAdminForm extends AbstractType
parent::configureOptions($resolver); // TODO: Change the autogenerated stub
$resolver->setRequired('attachment_class');
$resolver->setDefault('parameter_class', false);
+
+ $resolver->setDefault('validation_groups', ['Default', 'permissions:edit']);
}
public function buildForm(FormBuilderInterface $builder, array $options): void
diff --git a/src/Helpers/FilenameSanatizer.php b/src/Helpers/FilenameSanatizer.php
index 0ca07dfc..f6744b1a 100644
--- a/src/Helpers/FilenameSanatizer.php
+++ b/src/Helpers/FilenameSanatizer.php
@@ -36,6 +36,9 @@ class FilenameSanatizer
*/
public static function sanitizeFilename(string $filename): string
{
+ //Convert to ASCII
+ $filename = iconv('UTF-8', 'ASCII//TRANSLIT', $filename);
+
$filename = preg_replace(
'~
[<>:"/\\\|?*]| # file system reserved https://en.wikipedia.org/wiki/Filename#Reserved_characters_and_words
diff --git a/src/Helpers/IPAnonymizer.php b/src/Helpers/IPAnonymizer.php
new file mode 100644
index 00000000..9662852f
--- /dev/null
+++ b/src/Helpers/IPAnonymizer.php
@@ -0,0 +1,49 @@
+.
+ */
+
+declare(strict_types=1);
+
+
+namespace App\Helpers;
+
+use Symfony\Component\HttpFoundation\IpUtils;
+
+/**
+ * Utils to assist with IP anonymization.
+ * The IPUtils::anonymize has a certain edgecase with local-link addresses, which is handled here.
+ * See: https://github.com/Part-DB/Part-DB-server/issues/782
+ */
+final class IPAnonymizer
+{
+ public static function anonymize(string $ip): string
+ {
+ /**
+ * If the IP contains a % symbol, then it is a local-link address with scoping according to RFC 4007
+ * In that case, we only care about the part before the % symbol, as the following functions, can only work with
+ * the IP address itself. As the scope can leak information (containing interface name), we do not want to
+ * include it in our anonymized IP data.
+ */
+ if (str_contains($ip, '%')) {
+ $ip = substr($ip, 0, strpos($ip, '%'));
+ }
+
+ return IpUtils::anonymize($ip);
+ }
+}
\ No newline at end of file
diff --git a/src/Migration/WithPermPresetsTrait.php b/src/Migration/WithPermPresetsTrait.php
index 5182f3b6..44bc4510 100644
--- a/src/Migration/WithPermPresetsTrait.php
+++ b/src/Migration/WithPermPresetsTrait.php
@@ -62,7 +62,7 @@ trait WithPermPresetsTrait
return json_encode($user->getPermissions());
}
- public function setContainer(ContainerInterface $container = null): void
+ public function setContainer(?ContainerInterface $container = null): void
{
if ($container !== null) {
$this->container = $container;
diff --git a/src/Repository/AttachmentRepository.php b/src/Repository/AttachmentRepository.php
index 240ab058..4fc0abc9 100644
--- a/src/Repository/AttachmentRepository.php
+++ b/src/Repository/AttachmentRepository.php
@@ -58,15 +58,15 @@ class AttachmentRepository extends DBElementRepository
{
$qb = $this->createQueryBuilder('attachment');
$qb->select('COUNT(attachment)')
- ->where('attachment.path LIKE :like');
- $qb->setParameter('like', '\\%SECURE\\%%');
+ ->where('attachment.internal_path LIKE :like ESCAPE \'#\'');
+ $qb->setParameter('like', '#%SECURE#%%');
$query = $qb->getQuery();
return (int) $query->getSingleScalarResult();
}
/**
- * Gets the count of all external attachments (attachments only containing a URL).
+ * Gets the count of all external attachments (attachments containing only an external path).
*
* @throws NoResultException
* @throws NonUniqueResultException
@@ -75,17 +75,16 @@ class AttachmentRepository extends DBElementRepository
{
$qb = $this->createQueryBuilder('attachment');
$qb->select('COUNT(attachment)')
- ->where('attachment.path LIKE :http')
- ->orWhere('attachment.path LIKE :https');
- $qb->setParameter('http', 'http://%');
- $qb->setParameter('https', 'https://%');
+ ->where('attachment.external_path IS NOT NULL')
+ ->andWhere('attachment.internal_path IS NULL');
+
$query = $qb->getQuery();
return (int) $query->getSingleScalarResult();
}
/**
- * Gets the count of all attachments where a user uploaded a file.
+ * Gets the count of all attachments where a user uploaded a file or a file was downloaded from an external source.
*
* @throws NoResultException
* @throws NonUniqueResultException
@@ -94,12 +93,12 @@ class AttachmentRepository extends DBElementRepository
{
$qb = $this->createQueryBuilder('attachment');
$qb->select('COUNT(attachment)')
- ->where('attachment.path LIKE :base')
- ->orWhere('attachment.path LIKE :media')
- ->orWhere('attachment.path LIKE :secure');
- $qb->setParameter('secure', '\\%SECURE\\%%');
- $qb->setParameter('base', '\\%BASE\\%%');
- $qb->setParameter('media', '\\%MEDIA\\%%');
+ ->where('attachment.internal_path LIKE :base ESCAPE \'#\'')
+ ->orWhere('attachment.internal_path LIKE :media ESCAPE \'#\'')
+ ->orWhere('attachment.internal_path LIKE :secure ESCAPE \'#\'');
+ $qb->setParameter('secure', '#%SECURE#%%');
+ $qb->setParameter('base', '#%BASE#%%');
+ $qb->setParameter('media', '#%MEDIA#%%');
$query = $qb->getQuery();
return (int) $query->getSingleScalarResult();
diff --git a/src/Repository/LogEntryRepository.php b/src/Repository/LogEntryRepository.php
index bf9909c5..6850d06b 100644
--- a/src/Repository/LogEntryRepository.php
+++ b/src/Repository/LogEntryRepository.php
@@ -160,7 +160,7 @@ class LogEntryRepository extends DBElementRepository
* @param int|null $limit
* @param int|null $offset
*/
- public function getLogsOrderedByTimestamp(string $order = 'DESC', int $limit = null, int $offset = null): array
+ public function getLogsOrderedByTimestamp(string $order = 'DESC', ?int $limit = null, ?int $offset = null): array
{
return $this->findBy([], ['timestamp' => $order], $limit, $offset);
}
diff --git a/src/Repository/ParameterRepository.php b/src/Repository/ParameterRepository.php
index a837435e..6c6c867d 100644
--- a/src/Repository/ParameterRepository.php
+++ b/src/Repository/ParameterRepository.php
@@ -44,7 +44,7 @@ class ParameterRepository extends DBElementRepository
->select('parameter.name')
->addSelect('parameter.symbol')
->addSelect('parameter.unit')
- ->where('parameter.name LIKE :name');
+ ->where('ILIKE(parameter.name, :name) = TRUE');
if ($exact) {
$qb->setParameter('name', $name);
} else {
diff --git a/src/Repository/PartRepository.php b/src/Repository/PartRepository.php
index 84357b72..edccd74b 100644
--- a/src/Repository/PartRepository.php
+++ b/src/Repository/PartRepository.php
@@ -81,10 +81,10 @@ class PartRepository extends NamedDBElementRepository
->leftJoin('part.category', 'category')
->leftJoin('part.footprint', 'footprint')
- ->where('part.name LIKE :query')
- ->orWhere('part.description LIKE :query')
- ->orWhere('category.name LIKE :query')
- ->orWhere('footprint.name LIKE :query')
+ ->where('ILIKE(part.name, :query) = TRUE')
+ ->orWhere('ILIKE(part.description, :query) = TRUE')
+ ->orWhere('ILIKE(category.name, :query) = TRUE')
+ ->orWhere('ILIKE(footprint.name, :query) = TRUE')
;
$qb->setParameter('query', '%'.$query.'%');
diff --git a/src/Repository/StructuralDBElementRepository.php b/src/Repository/StructuralDBElementRepository.php
index 47c85db3..781c7622 100644
--- a/src/Repository/StructuralDBElementRepository.php
+++ b/src/Repository/StructuralDBElementRepository.php
@@ -151,7 +151,7 @@ class StructuralDBElementRepository extends AttachmentContainingDBElementReposit
}
if (null === $entity) {
$class = $this->getClassName();
- /** @var AbstractStructuralDBElement $entity */
+ /** @var TEntityClass $entity */
$entity = new $class;
$entity->setName($name);
$entity->setParent($parent);
@@ -265,7 +265,7 @@ class StructuralDBElementRepository extends AttachmentContainingDBElementReposit
}
$class = $this->getClassName();
- /** @var AbstractStructuralDBElement $entity */
+ /** @var TEntityClass $entity */
$entity = new $class;
$entity->setName($name);
diff --git a/src/Security/ApiTokenAuthenticator.php b/src/Security/ApiTokenAuthenticator.php
index 23ab68b9..a52b1f7c 100644
--- a/src/Security/ApiTokenAuthenticator.php
+++ b/src/Security/ApiTokenAuthenticator.php
@@ -131,7 +131,7 @@ class ApiTokenAuthenticator implements AuthenticatorInterface
/**
* @see https://datatracker.ietf.org/doc/html/rfc6750#section-3
*/
- private function getAuthenticateHeader(string $errorDescription = null): string
+ private function getAuthenticateHeader(?string $errorDescription = null): string
{
$data = [
'realm' => $this->realm,
diff --git a/src/Security/AuthenticationEntryPoint.php b/src/Security/AuthenticationEntryPoint.php
index c26e7667..41f624b2 100644
--- a/src/Security/AuthenticationEntryPoint.php
+++ b/src/Security/AuthenticationEntryPoint.php
@@ -47,7 +47,7 @@ class AuthenticationEntryPoint implements AuthenticationEntryPointInterface
) {
}
- public function start(Request $request, AuthenticationException $authException = null): Response
+ public function start(Request $request, ?AuthenticationException $authException = null): Response
{
//Check if the request is an API request
if ($this->isJSONRequest($request)) {
diff --git a/src/Security/EnsureSAMLUserForSAMLLoginChecker.php b/src/Security/EnsureSAMLUserForSAMLLoginChecker.php
index 7b540984..0ebf893c 100644
--- a/src/Security/EnsureSAMLUserForSAMLLoginChecker.php
+++ b/src/Security/EnsureSAMLUserForSAMLLoginChecker.php
@@ -25,6 +25,7 @@ namespace App\Security;
use App\Entity\UserSystem\User;
use Nbgrp\OneloginSamlBundle\Security\Http\Authenticator\Token\SamlToken;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\Security\Core\Event\AuthenticationSuccessEvent;
use Symfony\Component\Security\Core\Exception\CustomUserMessageAccountStatusException;
use Symfony\Contracts\Translation\TranslatorInterface;
@@ -50,13 +51,20 @@ class EnsureSAMLUserForSAMLLoginChecker implements EventSubscriberInterface
$token = $event->getAuthenticationToken();
$user = $token->getUser();
- //If we are using SAML, we need to check that the user is a SAML user.
- if ($token instanceof SamlToken) {
- if ($user instanceof User && !$user->isSamlUser()) {
- throw new CustomUserMessageAccountStatusException($this->translator->trans('saml.error.cannot_login_local_user_per_saml', [], 'security'));
- }
- } elseif ($user instanceof User && $user->isSamlUser()) {
- //Ensure that you can not login locally with a SAML user (even if this should not happen, as the password is not set)
+ //Do not check for anonymous users
+ if (!$user instanceof User) {
+ return;
+ }
+
+ //Do not allow SAML users to login as local user
+ if ($token instanceof SamlToken && !$user->isSamlUser()) {
+ throw new CustomUserMessageAccountStatusException($this->translator->trans('saml.error.cannot_login_local_user_per_saml',
+ [], 'security'));
+ }
+
+ //Do not allow local users to login as SAML user via local username and password
+ if ($token instanceof UsernamePasswordToken && $user->isSamlUser()) {
+ //Ensure that you can not login locally with a SAML user (even though this should not happen, as the password is not set)
throw new CustomUserMessageAccountStatusException($this->translator->trans('saml.error.cannot_login_saml_user_locally', [], 'security'));
}
}
diff --git a/src/Security/SamlUserFactory.php b/src/Security/SamlUserFactory.php
index d5c68146..312be859 100644
--- a/src/Security/SamlUserFactory.php
+++ b/src/Security/SamlUserFactory.php
@@ -116,10 +116,10 @@ class SamlUserFactory implements SamlUserFactoryInterface, EventSubscriberInterf
* Maps a list of SAML roles to a local group ID.
* The first available mapping will be used (so the order of the $map is important, first match wins).
* @param array $roles The list of SAML roles
- * @param array $map|null The mapping from SAML roles. If null, the global mapping will be used.
+ * @param array|null $map The mapping from SAML roles. If null, the global mapping will be used.
* @return int|null The ID of the local group or null if no mapping was found.
*/
- public function mapSAMLRolesToLocalGroupID(array $roles, array $map = null): ?int
+ public function mapSAMLRolesToLocalGroupID(array $roles, ?array $map = null): ?int
{
$map ??= $this->saml_role_mapping;
diff --git a/src/Security/UserChecker.php b/src/Security/UserChecker.php
index fd53a295..16afb37e 100644
--- a/src/Security/UserChecker.php
+++ b/src/Security/UserChecker.php
@@ -40,12 +40,10 @@ final class UserChecker implements UserCheckerInterface
/**
* Checks the user account before authentication.
- *
- * @throws AccountStatusException
*/
public function checkPreAuth(UserInterface $user): void
{
- // TODO: Implement checkPreAuth() method.
+ //We don't need to check the user before authentication, just implemented to fulfill the interface
}
/**
diff --git a/src/Serializer/AttachmentNormalizer.php b/src/Serializer/AttachmentNormalizer.php
index bb167fc6..bd791d04 100644
--- a/src/Serializer/AttachmentNormalizer.php
+++ b/src/Serializer/AttachmentNormalizer.php
@@ -42,7 +42,7 @@ class AttachmentNormalizer implements NormalizerInterface, NormalizerAwareInterf
{
}
- public function normalize(mixed $object, string $format = null, array $context = []): array|null
+ public function normalize(mixed $object, ?string $format = null, array $context = []): array|null
{
if (!$object instanceof Attachment) {
throw new \InvalidArgumentException('This normalizer only supports Attachment objects!');
@@ -52,15 +52,19 @@ class AttachmentNormalizer implements NormalizerInterface, NormalizerAwareInterf
$context[self::ALREADY_CALLED] = true;
$data = $this->normalizer->normalize($object, $format, $context);
+ $data['internal_path'] = $this->attachmentURLGenerator->getInternalViewURL($object);
- $data['media_url'] = $this->attachmentURLGenerator->getViewURL($object);
//Add thumbnail url if the attachment is a picture
$data['thumbnail_url'] = $object->isPicture() ? $this->attachmentURLGenerator->getThumbnailURL($object) : null;
+ //For backwards compatibility reasons
+ //Deprecated: Use internal_path and external_path instead
+ $data['media_url'] = $data['internal_path'] ?? $object->getExternalPath();
+
return $data;
}
- public function supportsNormalization(mixed $data, string $format = null, array $context = []): bool
+ public function supportsNormalization(mixed $data, ?string $format = null, array $context = []): bool
{
// avoid recursion: only call once per object
if (isset($context[self::ALREADY_CALLED])) {
diff --git a/src/Serializer/BigNumberNormalizer.php b/src/Serializer/BigNumberNormalizer.php
index 8ef06d67..10cedfa5 100644
--- a/src/Serializer/BigNumberNormalizer.php
+++ b/src/Serializer/BigNumberNormalizer.php
@@ -33,12 +33,12 @@ use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
class BigNumberNormalizer implements NormalizerInterface, DenormalizerInterface
{
- public function supportsNormalization($data, string $format = null, array $context = []): bool
+ public function supportsNormalization($data, ?string $format = null, array $context = []): bool
{
return $data instanceof BigNumber;
}
- public function normalize($object, string $format = null, array $context = []): string
+ public function normalize($object, ?string $format = null, array $context = []): string
{
if (!$object instanceof BigNumber) {
throw new \InvalidArgumentException('This normalizer only supports BigNumber objects!');
@@ -58,7 +58,7 @@ class BigNumberNormalizer implements NormalizerInterface, DenormalizerInterface
];
}
- public function denormalize(mixed $data, string $type, string $format = null, array $context = []): BigNumber|null
+ public function denormalize(mixed $data, string $type, ?string $format = null, array $context = []): BigNumber|null
{
if (!is_a($type, BigNumber::class, true)) {
throw new \InvalidArgumentException('This normalizer only supports BigNumber objects!');
@@ -67,7 +67,7 @@ class BigNumberNormalizer implements NormalizerInterface, DenormalizerInterface
return $type::of($data);
}
- public function supportsDenormalization(mixed $data, string $type, string $format = null, array $context = []): bool
+ public function supportsDenormalization(mixed $data, string $type, ?string $format = null, array $context = []): bool
{
//data must be a string or a number (int, float, etc.) and the type must be BigNumber or BigDecimal
return (is_string($data) || is_numeric($data)) && (is_subclass_of($type, BigNumber::class));
diff --git a/src/Serializer/PartNormalizer.php b/src/Serializer/PartNormalizer.php
index 650b0214..9050abfc 100644
--- a/src/Serializer/PartNormalizer.php
+++ b/src/Serializer/PartNormalizer.php
@@ -63,13 +63,13 @@ class PartNormalizer implements NormalizerInterface, DenormalizerInterface, Norm
{
}
- public function supportsNormalization($data, string $format = null, array $context = []): bool
+ public function supportsNormalization($data, ?string $format = null, array $context = []): bool
{
//We only remove the type field for CSV export
return !isset($context[self::ALREADY_CALLED]) && $format === 'csv' && $data instanceof Part ;
}
- public function normalize($object, string $format = null, array $context = []): array
+ public function normalize($object, ?string $format = null, array $context = []): array
{
if (!$object instanceof Part) {
throw new \InvalidArgumentException('This normalizer only supports Part objects!');
@@ -94,7 +94,14 @@ class PartNormalizer implements NormalizerInterface, DenormalizerInterface, Norm
public function supportsDenormalization($data, string $type, string $format = null, array $context = []): bool
{
- return !isset($context[self::ALREADY_CALLED]) && is_array($data) && is_a($type, Part::class, true);
+ //Only denormalize if we are doing a file import operation
+ if (!($context['partdb_import'] ?? false)) {
+ return false;
+ }
+
+ //Only make the denormalizer available on import operations
+ return !isset($context[self::ALREADY_CALLED])
+ && is_array($data) && is_a($type, Part::class, true);
}
private function normalizeKeys(array &$data): array
@@ -110,7 +117,7 @@ class PartNormalizer implements NormalizerInterface, DenormalizerInterface, Norm
return $data;
}
- public function denormalize($data, string $type, string $format = null, array $context = []): ?Part
+ public function denormalize($data, string $type, ?string $format = null, array $context = []): ?Part
{
$this->normalizeKeys($data);
diff --git a/src/Serializer/StructuralElementDenormalizer.php b/src/Serializer/StructuralElementDenormalizer.php
index 17b3d81e..d9b03ae7 100644
--- a/src/Serializer/StructuralElementDenormalizer.php
+++ b/src/Serializer/StructuralElementDenormalizer.php
@@ -49,7 +49,7 @@ class StructuralElementDenormalizer implements DenormalizerInterface, Denormaliz
{
}
- public function supportsDenormalization($data, string $type, string $format = null, array $context = []): bool
+ public function supportsDenormalization($data, string $type, ?string $format = null, array $context = []): bool
{
//Only denormalize if we are doing a file import operation
if (!($context['partdb_import'] ?? false)) {
@@ -69,7 +69,16 @@ class StructuralElementDenormalizer implements DenormalizerInterface, Denormaliz
&& in_array('import', $context['groups'] ?? [], true);
}
- public function denormalize($data, string $type, string $format = null, array $context = []): ?AbstractStructuralDBElement
+ /**
+ * @template T of AbstractStructuralDBElement
+ * @param $data
+ * @phpstan-param class-string $type
+ * @param string|null $format
+ * @param array $context
+ * @return AbstractStructuralDBElement|null
+ * @phpstan-return T|null
+ */
+ public function denormalize($data, string $type, ?string $format = null, array $context = []): ?AbstractStructuralDBElement
{
//Do not use API Platform's denormalizer
$context[SkippableItemNormalizer::DISABLE_ITEM_NORMALIZER] = true;
@@ -85,7 +94,7 @@ class StructuralElementDenormalizer implements DenormalizerInterface, Denormaliz
$deserialized_entity = $this->denormalizer->denormalize($data, $type, $format, $context);
//Check if we already have the entity in the database (via path)
- /** @var StructuralDBElementRepository $repo */
+ /** @var StructuralDBElementRepository $repo */
$repo = $this->entityManager->getRepository($type);
$path = $deserialized_entity->getFullPath(AbstractStructuralDBElement::PATH_DELIMITER_ARROW);
diff --git a/src/Serializer/StructuralElementFromNameDenormalizer.php b/src/Serializer/StructuralElementFromNameDenormalizer.php
index ef72aaea..1d7255b7 100644
--- a/src/Serializer/StructuralElementFromNameDenormalizer.php
+++ b/src/Serializer/StructuralElementFromNameDenormalizer.php
@@ -36,7 +36,7 @@ class StructuralElementFromNameDenormalizer implements DenormalizerInterface
{
}
- public function supportsDenormalization($data, string $type, string $format = null, array $context = []): bool
+ public function supportsDenormalization($data, string $type, ?string $format = null, array $context = []): bool
{
//Only denormalize if we are doing a file import operation
if (!($context['partdb_import'] ?? false)) {
@@ -51,10 +51,10 @@ class StructuralElementFromNameDenormalizer implements DenormalizerInterface
* @phpstan-param class-string $type
* @phpstan-return T|null
*/
- public function denormalize($data, string $type, string $format = null, array $context = []): AbstractStructuralDBElement|null
+ public function denormalize($data, string $type, ?string $format = null, array $context = []): AbstractStructuralDBElement|null
{
//Retrieve the repository for the given type
- /** @var StructuralDBElementRepository $repo */
+ /** @var StructuralDBElementRepository $repo */
$repo = $this->em->getRepository($type);
$path_delimiter = $context['path_delimiter'] ?? '->';
diff --git a/src/Serializer/StructuralElementNormalizer.php b/src/Serializer/StructuralElementNormalizer.php
index 1838f210..e73f69be 100644
--- a/src/Serializer/StructuralElementNormalizer.php
+++ b/src/Serializer/StructuralElementNormalizer.php
@@ -38,7 +38,7 @@ class StructuralElementNormalizer implements NormalizerInterface
{
}
- public function supportsNormalization($data, string $format = null, array $context = []): bool
+ public function supportsNormalization($data, ?string $format = null, array $context = []): bool
{
//Only normalize if we are doing a file export operation
if (!($context['partdb_export'] ?? false)) {
@@ -48,7 +48,7 @@ class StructuralElementNormalizer implements NormalizerInterface
return $data instanceof AbstractStructuralDBElement;
}
- public function normalize($object, string $format = null, array $context = []): mixed
+ public function normalize($object, ?string $format = null, array $context = []): mixed
{
if (!$object instanceof AbstractStructuralDBElement) {
throw new \InvalidArgumentException('This normalizer only supports AbstractStructural objects!');
diff --git a/src/Services/Attachments/AttachmentManager.php b/src/Services/Attachments/AttachmentManager.php
index 4429179e..1075141b 100644
--- a/src/Services/Attachments/AttachmentManager.php
+++ b/src/Services/Attachments/AttachmentManager.php
@@ -44,35 +44,31 @@ class AttachmentManager
*
* @param Attachment $attachment The attachment for which the file should be generated
*
- * @return SplFileInfo|null The fileinfo for the attachment file. Null, if the attachment is external or has
+ * @return SplFileInfo|null The fileinfo for the attachment file. Null, if the attachment is only external or has
* invalid file.
*/
public function attachmentToFile(Attachment $attachment): ?SplFileInfo
{
- if ($attachment->isExternal() || !$this->isFileExisting($attachment)) {
+ if (!$this->isInternalFileExisting($attachment)) {
return null;
}
- return new SplFileInfo($this->toAbsoluteFilePath($attachment));
+ return new SplFileInfo($this->toAbsoluteInternalFilePath($attachment));
}
/**
- * Returns the absolute filepath of the attachment. Null is returned, if the attachment is externally saved,
- * or is not existing.
+ * Returns the absolute filepath to the internal copy of the attachment. Null is returned, if the attachment is
+ * only externally saved, or is not existing.
*
* @param Attachment $attachment The attachment for which the filepath should be determined
*/
- public function toAbsoluteFilePath(Attachment $attachment): ?string
+ public function toAbsoluteInternalFilePath(Attachment $attachment): ?string
{
- if ($attachment->getPath() === '') {
+ if (!$attachment->hasInternal()){
return null;
}
- if ($attachment->isExternal()) {
- return null;
- }
-
- $path = $this->pathResolver->placeholderToRealPath($attachment->getPath());
+ $path = $this->pathResolver->placeholderToRealPath($attachment->getInternalPath());
//realpath does not work with null as argument
if (null === $path) {
@@ -89,8 +85,8 @@ class AttachmentManager
}
/**
- * Checks if the file in this attachement is existing. This works for files on the HDD, and for URLs
- * (it's not checked if the ressource behind the URL is really existing, so for every external attachment true is returned).
+ * Checks if the file in this attachment is existing. This works for files on the HDD, and for URLs
+ * (it's not checked if the resource behind the URL is really existing, so for every external attachment true is returned).
*
* @param Attachment $attachment The attachment for which the existence should be checked
*
@@ -98,15 +94,23 @@ class AttachmentManager
*/
public function isFileExisting(Attachment $attachment): bool
{
- if ($attachment->getPath() === '') {
- return false;
- }
-
- if ($attachment->isExternal()) {
+ if($attachment->hasExternal()){
return true;
}
+ return $this->isInternalFileExisting($attachment);
+ }
- $absolute_path = $this->toAbsoluteFilePath($attachment);
+ /**
+ * Checks if the internal file in this attachment is existing. Returns false if the attachment doesn't have an
+ * internal file.
+ *
+ * @param Attachment $attachment The attachment for which the existence should be checked
+ *
+ * @return bool true if the file is existing
+ */
+ public function isInternalFileExisting(Attachment $attachment): bool
+ {
+ $absolute_path = $this->toAbsoluteInternalFilePath($attachment);
if (null === $absolute_path) {
return false;
@@ -117,21 +121,17 @@ class AttachmentManager
/**
* Returns the filesize of the attachments in bytes.
- * For external attachments or not existing attachments, null is returned.
+ * For purely external attachments or inexistent attachments, null is returned.
*
* @param Attachment $attachment the filesize for which the filesize should be calculated
*/
public function getFileSize(Attachment $attachment): ?int
{
- if ($attachment->isExternal()) {
+ if (!$this->isInternalFileExisting($attachment)) {
return null;
}
- if (!$this->isFileExisting($attachment)) {
- return null;
- }
-
- $tmp = filesize($this->toAbsoluteFilePath($attachment));
+ $tmp = filesize($this->toAbsoluteInternalFilePath($attachment));
return false !== $tmp ? $tmp : null;
}
diff --git a/src/Services/Attachments/AttachmentPathResolver.php b/src/Services/Attachments/AttachmentPathResolver.php
index e3e7a3ca..1b52c89b 100644
--- a/src/Services/Attachments/AttachmentPathResolver.php
+++ b/src/Services/Attachments/AttachmentPathResolver.php
@@ -115,12 +115,16 @@ class AttachmentPathResolver
* Converts an relative placeholder filepath (with %MEDIA% or older %BASE%) to an absolute filepath on disk.
* The directory separator is always /. Relative pathes are not realy possible (.. is striped).
*
- * @param string $placeholder_path the filepath with placeholder for which the real path should be determined
+ * @param string|null $placeholder_path the filepath with placeholder for which the real path should be determined
*
* @return string|null The absolute real path of the file, or null if the placeholder path is invalid
*/
- public function placeholderToRealPath(string $placeholder_path): ?string
+ public function placeholderToRealPath(?string $placeholder_path): ?string
{
+ if (null === $placeholder_path) {
+ return null;
+ }
+
//The new attachments use %MEDIA% as placeholders, which is the directory set in media_directory
//Older path entries are given via %BASE% which was the project root
diff --git a/src/Services/Attachments/AttachmentReverseSearch.php b/src/Services/Attachments/AttachmentReverseSearch.php
index 5f4f86de..e05192d0 100644
--- a/src/Services/Attachments/AttachmentReverseSearch.php
+++ b/src/Services/Attachments/AttachmentReverseSearch.php
@@ -55,7 +55,7 @@ class AttachmentReverseSearch
$repo = $this->em->getRepository(Attachment::class);
return $repo->findBy([
- 'path' => [$relative_path_new, $relative_path_old],
+ 'internal_path' => [$relative_path_new, $relative_path_old],
]);
}
diff --git a/src/Services/Attachments/AttachmentSubmitHandler.php b/src/Services/Attachments/AttachmentSubmitHandler.php
index d9b2a380..89457cea 100644
--- a/src/Services/Attachments/AttachmentSubmitHandler.php
+++ b/src/Services/Attachments/AttachmentSubmitHandler.php
@@ -65,7 +65,7 @@ class AttachmentSubmitHandler
'htpasswd', ''];
public function __construct(protected AttachmentPathResolver $pathResolver, protected bool $allow_attachments_downloads,
- protected HttpClientInterface $httpClient, protected MimeTypesInterface $mimeTypes,
+ protected HttpClientInterface $httpClient, protected MimeTypesInterface $mimeTypes, protected readonly SVGSanitizer $SVGSanitizer,
protected FileTypeFilterTools $filterTools, /**
* @var string The user configured maximum upload size. This is a string like "10M" or "1G" and will be converted to
*/
@@ -207,13 +207,16 @@ class AttachmentSubmitHandler
if ($file instanceof UploadedFile) {
$this->upload($attachment, $file, $secure_attachment);
- } elseif ($upload->downloadUrl && $attachment->isExternal()) {
+ } elseif ($upload->downloadUrl && $attachment->hasExternal()) {
$this->downloadURL($attachment, $secure_attachment);
}
//Move the attachment files to secure location (and back) if needed
$this->moveFile($attachment, $secure_attachment);
+ //Sanitize the SVG if needed
+ $this->sanitizeSVGAttachment($attachment);
+
//Rename blacklisted (unsecure) files to a better extension
$this->renameBlacklistedExtensions($attachment);
@@ -244,12 +247,12 @@ class AttachmentSubmitHandler
protected function renameBlacklistedExtensions(Attachment $attachment): Attachment
{
//We can not do anything on builtins or external ressources
- if ($attachment->isBuiltIn() || $attachment->isExternal()) {
+ if ($attachment->isBuiltIn() || !$attachment->hasInternal()) {
return $attachment;
}
//Determine the old filepath
- $old_path = $this->pathResolver->placeholderToRealPath($attachment->getPath());
+ $old_path = $this->pathResolver->placeholderToRealPath($attachment->getInternalPath());
if ($old_path === null || $old_path === '' || !file_exists($old_path)) {
return $attachment;
}
@@ -267,7 +270,7 @@ class AttachmentSubmitHandler
$fs->rename($old_path, $new_path);
//Update the attachment
- $attachment->setPath($this->pathResolver->realPathToPlaceholder($new_path));
+ $attachment->setInternalPath($this->pathResolver->realPathToPlaceholder($new_path));
}
@@ -275,17 +278,17 @@ class AttachmentSubmitHandler
}
/**
- * Move the given attachment to secure location (or back to public folder) if needed.
+ * Move the internal copy of the given attachment to a secure location (or back to public folder) if needed.
*
* @param Attachment $attachment the attachment for which the file should be moved
* @param bool $secure_location this value determines, if the attachment is moved to the secure or public folder
*
- * @return Attachment The attachment with the updated filepath
+ * @return Attachment The attachment with the updated internal filepath
*/
protected function moveFile(Attachment $attachment, bool $secure_location): Attachment
{
//We can not do anything on builtins or external ressources
- if ($attachment->isBuiltIn() || $attachment->isExternal()) {
+ if ($attachment->isBuiltIn() || !$attachment->hasInternal()) {
return $attachment;
}
@@ -295,7 +298,7 @@ class AttachmentSubmitHandler
}
//Determine the old filepath
- $old_path = $this->pathResolver->placeholderToRealPath($attachment->getPath());
+ $old_path = $this->pathResolver->placeholderToRealPath($attachment->getInternalPath());
if (!file_exists($old_path)) {
return $attachment;
}
@@ -319,7 +322,7 @@ class AttachmentSubmitHandler
//Save info to attachment entity
$new_path = $this->pathResolver->realPathToPlaceholder($new_path);
- $attachment->setPath($new_path);
+ $attachment->setInternalPath($new_path);
return $attachment;
}
@@ -329,7 +332,7 @@ class AttachmentSubmitHandler
*
* @param bool $secureAttachment True if the file should be moved to the secure attachment storage
*
- * @return Attachment The attachment with the new filepath
+ * @return Attachment The attachment with the downloaded copy
*/
protected function downloadURL(Attachment $attachment, bool $secureAttachment): Attachment
{
@@ -338,16 +341,35 @@ class AttachmentSubmitHandler
throw new RuntimeException('Download of attachments is not allowed!');
}
- $url = $attachment->getURL();
+ $url = $attachment->getExternalPath();
$fs = new Filesystem();
$attachment_folder = $this->generateAttachmentPath($attachment, $secureAttachment);
$tmp_path = $attachment_folder.DIRECTORY_SEPARATOR.$this->generateAttachmentFilename($attachment, 'tmp');
try {
- $response = $this->httpClient->request('GET', $url, [
+ $opts = [
'buffer' => false,
- ]);
+ //Use user-agent and other headers to make the server think we are a browser
+ 'headers' => [
+ "sec-ch-ua" => "\"Not(A:Brand\";v=\"99\", \"Google Chrome\";v=\"133\", \"Chromium\";v=\"133\"",
+ "sec-ch-ua-mobile" => "?0",
+ "sec-ch-ua-platform" => "\"Windows\"",
+ "user-agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
+ "sec-fetch-site" => "none",
+ "sec-fetch-mode" => "navigate",
+ ],
+
+ ];
+ $response = $this->httpClient->request('GET', $url, $opts);
+ //Digikey wants TLSv1.3, so try again with that if we get a 403
+ if ($response->getStatusCode() === 403) {
+ $opts['crypto_method'] = STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT;
+ $response = $this->httpClient->request('GET', $url, $opts);
+ }
+ # if you have these changes and downloads still fail, check if it's due to an unknown certificate. Curl by
+ # default uses the systems ca store and that doesn't contain all the intermediate certificates needed to
+ # verify the leafs
if (200 !== $response->getStatusCode()) {
throw new AttachmentDownloadException('Status code: '.$response->getStatusCode());
@@ -399,7 +421,7 @@ class AttachmentSubmitHandler
//Make our file path relative to %BASE%
$new_path = $this->pathResolver->realPathToPlaceholder($new_path);
//Save the path to the attachment
- $attachment->setPath($new_path);
+ $attachment->setInternalPath($new_path);
} catch (TransportExceptionInterface) {
throw new AttachmentDownloadException('Transport error!');
}
@@ -427,7 +449,9 @@ class AttachmentSubmitHandler
//Make our file path relative to %BASE%
$file_path = $this->pathResolver->realPathToPlaceholder($file_path);
//Save the path to the attachment
- $attachment->setPath($file_path);
+ $attachment->setInternalPath($file_path);
+ //reset any external paths the attachment might have had
+ $attachment->setExternalPath(null);
//And save original filename
$attachment->setFilename($file->getClientOriginalName());
@@ -477,4 +501,32 @@ class AttachmentSubmitHandler
return $this->max_upload_size_bytes;
}
+
+ /**
+ * Sanitizes the given SVG file, if the attachment is an internal SVG file.
+ * @param Attachment $attachment
+ * @return Attachment
+ */
+ public function sanitizeSVGAttachment(Attachment $attachment): Attachment
+ {
+ //We can not do anything on builtins or external ressources
+ if ($attachment->isBuiltIn() || !$attachment->hasInternal()) {
+ return $attachment;
+ }
+
+ //Resolve the path to the file
+ $path = $this->pathResolver->placeholderToRealPath($attachment->getInternalPath());
+
+ //Check if the file exists
+ if (!file_exists($path)) {
+ return $attachment;
+ }
+
+ //Check if the file is an SVG
+ if ($attachment->getExtension() === "svg") {
+ $this->SVGSanitizer->sanitizeFile($path);
+ }
+
+ return $attachment;
+ }
}
diff --git a/src/Services/Attachments/AttachmentURLGenerator.php b/src/Services/Attachments/AttachmentURLGenerator.php
index d28a8d65..c22cefe4 100644
--- a/src/Services/Attachments/AttachmentURLGenerator.php
+++ b/src/Services/Attachments/AttachmentURLGenerator.php
@@ -92,9 +92,9 @@ class AttachmentURLGenerator
* Returns a URL under which the attachment file can be viewed.
* @return string|null The URL or null if the attachment file is not existing
*/
- public function getViewURL(Attachment $attachment): ?string
+ public function getInternalViewURL(Attachment $attachment): ?string
{
- $absolute_path = $this->attachmentHelper->toAbsoluteFilePath($attachment);
+ $absolute_path = $this->attachmentHelper->toAbsoluteInternalFilePath($attachment);
if (null === $absolute_path) {
return null;
}
@@ -111,6 +111,7 @@ class AttachmentURLGenerator
/**
* Returns a URL to a thumbnail of the attachment file.
+ * For external files the original URL is returned.
* @return string|null The URL or null if the attachment file is not existing
*/
public function getThumbnailURL(Attachment $attachment, string $filter_name = 'thumbnail_sm'): ?string
@@ -119,11 +120,14 @@ class AttachmentURLGenerator
throw new InvalidArgumentException('Thumbnail creation only works for picture attachments!');
}
- if ($attachment->isExternal() && ($attachment->getURL() !== null && $attachment->getURL() !== '')) {
- return $attachment->getURL();
+ if (!$attachment->hasInternal()){
+ if($attachment->hasExternal()) {
+ return $attachment->getExternalPath();
+ }
+ return null;
}
- $absolute_path = $this->attachmentHelper->toAbsoluteFilePath($attachment);
+ $absolute_path = $this->attachmentHelper->toAbsoluteInternalFilePath($attachment);
if (null === $absolute_path) {
return null;
}
@@ -137,7 +141,7 @@ class AttachmentURLGenerator
//GD can not work with SVG, so serve it directly...
//We can not use getExtension here, because it uses the original filename and not the real extension
//Instead we use the logic, which is also used to determine if the attachment is a picture
- $extension = pathinfo(parse_url($attachment->getPath(), PHP_URL_PATH) ?? '', PATHINFO_EXTENSION);
+ $extension = pathinfo(parse_url($attachment->getInternalPath(), PHP_URL_PATH) ?? '', PATHINFO_EXTENSION);
if ('svg' === $extension) {
return $this->assets->getUrl($asset_path);
}
@@ -157,7 +161,7 @@ class AttachmentURLGenerator
/**
* Returns a download link to the file associated with the attachment.
*/
- public function getDownloadURL(Attachment $attachment): string
+ public function getInternalDownloadURL(Attachment $attachment): string
{
//Redirect always to download controller, which sets the correct headers for downloading:
return $this->urlGenerator->generate('attachment_download', ['id' => $attachment->getID()]);
diff --git a/src/Services/Attachments/SVGSanitizer.php b/src/Services/Attachments/SVGSanitizer.php
new file mode 100644
index 00000000..9ac5956b
--- /dev/null
+++ b/src/Services/Attachments/SVGSanitizer.php
@@ -0,0 +1,58 @@
+.
+ */
+
+declare(strict_types=1);
+
+
+namespace App\Services\Attachments;
+
+use Rhukster\DomSanitizer\DOMSanitizer;
+
+class SVGSanitizer
+{
+
+ /**
+ * Sanitizes the given SVG string by removing any potentially harmful content (like inline scripts).
+ * @param string $input
+ * @return string
+ */
+ public function sanitizeString(string $input): string
+ {
+ return (new DOMSanitizer(DOMSanitizer::SVG))->sanitize($input);
+ }
+
+ /**
+ * Sanitizes the given SVG file by removing any potentially harmful content (like inline scripts).
+ * The sanitized content is written back to the file.
+ * @param string $filepath
+ */
+ public function sanitizeFile(string $filepath): void
+ {
+ //Open the file and read the content
+ $content = file_get_contents($filepath);
+ if ($content === false) {
+ throw new \RuntimeException('Could not read file: ' . $filepath);
+ }
+ //Sanitize the content
+ $sanitizedContent = $this->sanitizeString($content);
+ //Write the sanitized content back to the file
+ file_put_contents($filepath, $sanitizedContent);
+ }
+}
\ No newline at end of file
diff --git a/src/Services/EDA/KiCadHelper.php b/src/Services/EDA/KiCadHelper.php
index 13de01e8..d4cbab34 100644
--- a/src/Services/EDA/KiCadHelper.php
+++ b/src/Services/EDA/KiCadHelper.php
@@ -27,6 +27,7 @@ use App\Entity\Parts\Category;
use App\Entity\Parts\Footprint;
use App\Entity\Parts\Part;
use App\Services\Cache\ElementCacheTagGenerator;
+use App\Services\EntityURLGenerator;
use App\Services\Trees\NodesListBuilder;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
@@ -44,6 +45,7 @@ class KiCadHelper
private readonly EntityManagerInterface $em,
private readonly ElementCacheTagGenerator $tagGenerator,
private readonly UrlGeneratorInterface $urlGenerator,
+ private readonly EntityURLGenerator $entityURLGenerator,
private readonly TranslatorInterface $translator,
/** The maximum level of the shown categories. 0 Means only the top level categories are shown. -1 means only a single one containing */
private readonly int $category_depth,
@@ -64,6 +66,10 @@ class KiCadHelper
$secure_class_name = $this->tagGenerator->getElementTypeCacheTag(Category::class);
$item->tag($secure_class_name);
+ //Invalidate the cache on part changes (as the visibility depends on parts, and the parts can change)
+ $secure_class_name = $this->tagGenerator->getElementTypeCacheTag(Part::class);
+ $item->tag($secure_class_name);
+
//If the category depth is smaller than 0, create only one dummy category
if ($this->category_depth < 0) {
return [
@@ -108,6 +114,8 @@ class KiCadHelper
$result[] = [
'id' => (string)$category->getId(),
'name' => $category->getFullPath('/'),
+ //Show the category link as the category description, this also fixes an segfault in KiCad see issue #878
+ 'description' => $this->entityURLGenerator->listPartsURL($category),
];
}
diff --git a/src/Services/EntityMergers/Mergers/EntityMergerHelperTrait.php b/src/Services/EntityMergers/Mergers/EntityMergerHelperTrait.php
index a5c9a5fa..64c952a9 100644
--- a/src/Services/EntityMergers/Mergers/EntityMergerHelperTrait.php
+++ b/src/Services/EntityMergers/Mergers/EntityMergerHelperTrait.php
@@ -247,7 +247,8 @@ trait EntityMergerHelperTrait
{
return $this->mergeCollections($target, $other, 'attachments', fn(Attachment $t, Attachment $o): bool => $t->getName() === $o->getName()
&& $t->getAttachmentType() === $o->getAttachmentType()
- && $t->getPath() === $o->getPath());
+ && $t->getExternalPath() === $o->getExternalPath()
+ && $t->getInternalPath() === $o->getInternalPath());
}
/**
diff --git a/src/Services/EntityURLGenerator.php b/src/Services/EntityURLGenerator.php
index 5718daec..78db06f0 100644
--- a/src/Services/EntityURLGenerator.php
+++ b/src/Services/EntityURLGenerator.php
@@ -156,25 +156,34 @@ class EntityURLGenerator
public function viewURL(Attachment $entity): string
{
- if ($entity->isExternal()) { //For external attachments, return the link to external path
- return $entity->getURL() ?? throw new \RuntimeException('External attachment has no URL!');
+ //If the underlying file path is invalid, null gets returned, which is not allowed here.
+ //We still have the chance to use an external path, if it is set.
+ if ($entity->hasInternal() && ($url = $this->attachmentURLGenerator->getInternalViewURL($entity)) !== null) {
+ return $url;
}
- //return $this->urlGenerator->generate('attachment_view', ['id' => $entity->getID()]);
- return $this->attachmentURLGenerator->getViewURL($entity) ?? '';
+
+ if($entity->hasExternal()) {
+ return $entity->getExternalPath();
+ }
+
+ throw new \RuntimeException('Attachment has no internal nor external path!');
}
public function downloadURL($entity): string
{
- if ($entity instanceof Attachment) {
- if ($entity->isExternal()) { //For external attachments, return the link to external path
- return $entity->getURL() ?? throw new \RuntimeException('External attachment has no URL!');
- }
-
- return $this->attachmentURLGenerator->getDownloadURL($entity);
+ if (!($entity instanceof Attachment)) {
+ throw new EntityNotSupportedException(sprintf('The given entity is not supported yet! Passed class type: %s', $entity::class));
}
- //Otherwise throw an error
- throw new EntityNotSupportedException(sprintf('The given entity is not supported yet! Passed class type: %s', $entity::class));
+ if ($entity->hasInternal()) {
+ return $this->attachmentURLGenerator->getInternalDownloadURL($entity);
+ }
+
+ if($entity->hasExternal()) {
+ return $entity->getExternalPath();
+ }
+
+ throw new \RuntimeException('Attachment has not internal or external path!');
}
/**
diff --git a/src/Services/Formatters/MoneyFormatter.php b/src/Services/Formatters/MoneyFormatter.php
index d49b77cf..44a49cb5 100644
--- a/src/Services/Formatters/MoneyFormatter.php
+++ b/src/Services/Formatters/MoneyFormatter.php
@@ -46,7 +46,7 @@ class MoneyFormatter
public function format(string|float $value, ?Currency $currency = null, int $decimals = 5, bool $show_all_digits = false): string
{
$iso_code = $this->base_currency;
- if ($currency instanceof Currency && ($currency->getIsoCode() !== null && $currency->getIsoCode() !== '')) {
+ if ($currency instanceof Currency && ($currency->getIsoCode() !== '')) {
$iso_code = $currency->getIsoCode();
}
diff --git a/src/Services/ImportExportSystem/BOMImporter.php b/src/Services/ImportExportSystem/BOMImporter.php
index 246ccf32..d4876445 100644
--- a/src/Services/ImportExportSystem/BOMImporter.php
+++ b/src/Services/ImportExportSystem/BOMImporter.php
@@ -153,6 +153,7 @@ class BOMImporter
break;
}
+ //@phpstan-ignore-next-line We want to keep this check just to be safe when something changes
$new_index = self::MAP_KICAD_PCB_FIELDS[$index] ?? throw new \UnexpectedValueException('Invalid field index!');
$out[$new_index] = $field;
}
diff --git a/src/Services/ImportExportSystem/EntityImporter.php b/src/Services/ImportExportSystem/EntityImporter.php
index 4c60a71b..cecab12d 100644
--- a/src/Services/ImportExportSystem/EntityImporter.php
+++ b/src/Services/ImportExportSystem/EntityImporter.php
@@ -44,6 +44,12 @@ use Symfony\Component\Validator\Validator\ValidatorInterface;
*/
class EntityImporter
{
+
+ /**
+ * The encodings that are supported by the importer, and that should be autodeceted.
+ */
+ private const ENCODINGS = ["ASCII", "UTF-8", "ISO-8859-1", "ISO-8859-15", "Windows-1252", "UTF-16", "UTF-32"];
+
public function __construct(protected SerializerInterface $serializer, protected EntityManagerInterface $em, protected ValidatorInterface $validator)
{
}
@@ -58,13 +64,16 @@ class EntityImporter
* @phpstan-param class-string $class_name
* @param AbstractStructuralDBElement|null $parent the element which will be used as parent element for new elements
* @param array $errors an associative array containing all validation errors
- * @param-out array $errors
+ * @param-out list $errors
*
* @return AbstractNamedDBElement[] An array containing all valid imported entities (with the type $class_name)
* @return T[]
*/
public function massCreation(string $lines, string $class_name, ?AbstractStructuralDBElement $parent = null, array &$errors = []): array
{
+ //Try to detect the text encoding of the data and convert it to UTF-8
+ $lines = mb_convert_encoding($lines, 'UTF-8', mb_detect_encoding($lines, self::ENCODINGS));
+
//Expand every line to a single entry:
$names = explode("\n", $lines);
@@ -124,13 +133,15 @@ class EntityImporter
if ($repo instanceof StructuralDBElementRepository) {
$entities = $repo->getNewEntityFromPath($new_path);
$entity = end($entities);
+ if ($entity === false) {
+ throw new InvalidArgumentException('getNewEntityFromPath returned an empty array!');
+ }
} else { //Otherwise just create a new entity
$entity = new $class_name;
$entity->setName($name);
}
-
//Validate entity
$tmp = $this->validator->validate($entity);
//If no error occured, write entry to DB:
@@ -159,6 +170,9 @@ class EntityImporter
*/
public function importString(string $data, array $options = [], array &$errors = []): array
{
+ //Try to detect the text encoding of the data and convert it to UTF-8
+ $data = mb_convert_encoding($data, 'UTF-8', mb_detect_encoding($data, self::ENCODINGS));
+
$resolver = new OptionsResolver();
$this->configureOptions($resolver);
$options = $resolver->resolve($options);
@@ -215,6 +229,11 @@ class EntityImporter
//Iterate over each $entity write it to DB.
foreach ($entities as $key => $entity) {
+ //Ensure that entity is a NamedDBElement
+ if (!$entity instanceof AbstractNamedDBElement) {
+ throw new \RuntimeException("Encountered an entity that is not a NamedDBElement!");
+ }
+
//Validate entity
$tmp = $this->validator->validate($entity);
@@ -269,7 +288,7 @@ class EntityImporter
*
* @param File $file the file that should be used for importing
* @param array $options options for the import process
- * @param AbstractNamedDBElement[] $entities The imported entities are returned in this array
+ * @param-out AbstractNamedDBElement[] $entities The imported entities are returned in this array
*
* @return array An associative array containing an ConstraintViolationList and the entity name as key are returned,
* if an error happened during validation. When everything was successfully, the array should be empty.
@@ -305,7 +324,7 @@ class EntityImporter
* @param array $options options for the import process
* @param-out array $errors
*
- * @return array an array containing the deserialized elements
+ * @return AbstractNamedDBElement[] an array containing the deserialized elements
*/
public function importFile(File $file, array $options = [], array &$errors = []): array
{
@@ -338,7 +357,7 @@ class EntityImporter
* @param iterable $entities the list of entities that should be fixed
* @param AbstractStructuralDBElement|null $parent the parent, to which the entity should be set
*/
- protected function correctParentEntites(iterable $entities, AbstractStructuralDBElement $parent = null): void
+ protected function correctParentEntites(iterable $entities, ?AbstractStructuralDBElement $parent = null): void
{
foreach ($entities as $entity) {
/** @var AbstractStructuralDBElement $entity */
diff --git a/src/Services/ImportExportSystem/PartKeeprImporter/PKImportHelperTrait.php b/src/Services/ImportExportSystem/PartKeeprImporter/PKImportHelperTrait.php
index 574bc32b..1e4cd3ba 100644
--- a/src/Services/ImportExportSystem/PartKeeprImporter/PKImportHelperTrait.php
+++ b/src/Services/ImportExportSystem/PartKeeprImporter/PKImportHelperTrait.php
@@ -105,7 +105,7 @@ trait PKImportHelperTrait
//Next comes the filename plus extension
$path .= '/'.$attachment_row['filename'].'.'.$attachment_row['extension'];
- $attachment->setPath($path);
+ $attachment->setInternalPath($path);
return $attachment;
}
@@ -205,10 +205,6 @@ trait PKImportHelperTrait
*/
protected function setIDOfEntity(AbstractDBElement $element, int|string $id): void
{
- if (!is_int($id) && !is_string($id)) {
- throw new \InvalidArgumentException('ID must be an integer or string');
- }
-
$id = (int) $id;
$metadata = $this->em->getClassMetadata($element::class);
diff --git a/src/Services/InfoProviderSystem/DTOs/ParameterDTO.php b/src/Services/InfoProviderSystem/DTOs/ParameterDTO.php
index 3332700b..0b54d1a9 100644
--- a/src/Services/InfoProviderSystem/DTOs/ParameterDTO.php
+++ b/src/Services/InfoProviderSystem/DTOs/ParameterDTO.php
@@ -72,9 +72,9 @@ class ParameterDTO
group: $group);
}
- //If the attribute contains "..." or a tilde we assume it is a range
- if (preg_match('/(\.{3}|~)/', $value) === 1) {
- $parts = preg_split('/\s*(\.{3}|~)\s*/', $value);
+ //If the attribute contains ".." or "..." or a tilde we assume it is a range
+ if (preg_match('/(\.{2,3}|~)/', $value) === 1) {
+ $parts = preg_split('/\s*(\.{2,3}|~)\s*/', $value);
if (count($parts) === 2) {
//Try to extract number and unit from value (allow leading +)
if ($unit === null || trim($unit) === '') {
diff --git a/src/Services/InfoProviderSystem/DTOtoEntityConverter.php b/src/Services/InfoProviderSystem/DTOtoEntityConverter.php
index 2c2b4076..40f69498 100644
--- a/src/Services/InfoProviderSystem/DTOtoEntityConverter.php
+++ b/src/Services/InfoProviderSystem/DTOtoEntityConverter.php
@@ -27,6 +27,7 @@ use App\Entity\Attachments\AttachmentType;
use App\Entity\Attachments\PartAttachment;
use App\Entity\Base\AbstractStructuralDBElement;
use App\Entity\Parameters\PartParameter;
+use App\Entity\Parts\Category;
use App\Entity\Parts\Footprint;
use App\Entity\Parts\InfoProviderReference;
use App\Entity\Parts\Manufacturer;
@@ -36,6 +37,7 @@ use App\Entity\Parts\Supplier;
use App\Entity\PriceInformations\Currency;
use App\Entity\PriceInformations\Orderdetail;
use App\Entity\PriceInformations\Pricedetail;
+use App\Repository\Parts\CategoryRepository;
use App\Services\InfoProviderSystem\DTOs\FileDTO;
use App\Services\InfoProviderSystem\DTOs\ParameterDTO;
use App\Services\InfoProviderSystem\DTOs\PartDetailDTO;
@@ -156,6 +158,12 @@ final class DTOtoEntityConverter
$entity->setMass($dto->mass);
+ //Try to map the category to an existing entity (but never create a new one)
+ if ($dto->category) {
+ //@phpstan-ignore-next-line For some reason php does not recognize the repo returns a category
+ $entity->setCategory($this->em->getRepository(Category::class)->findForInfoProvider($dto->category));
+ }
+
$entity->setManufacturer($this->getOrCreateEntity(Manufacturer::class, $dto->manufacturer));
$entity->setFootprint($this->getOrCreateEntity(Footprint::class, $dto->footprint));
@@ -166,9 +174,21 @@ final class DTOtoEntityConverter
//Set the provider reference on the part
$entity->setProviderReference(InfoProviderReference::fromPartDTO($dto));
+ $param_groups = [];
+
//Add parameters
foreach ($dto->parameters ?? [] as $parameter) {
- $entity->addParameter($this->convertParameter($parameter));
+ $new_param = $this->convertParameter($parameter);
+
+ $key = $new_param->getName() . '##' . $new_param->getGroup();
+ //If there is already an parameter with the same name and group, rename the new parameter, by suffixing a number
+ if (count($param_groups[$key] ?? []) > 0) {
+ $new_param->setName($new_param->getName() . ' (' . (count($param_groups[$key]) + 1) . ')');
+ }
+
+ $param_groups[$key][] = $new_param;
+
+ $entity->addParameter($new_param);
}
//Add preview image
@@ -184,6 +204,8 @@ final class DTOtoEntityConverter
$entity->setMasterPictureAttachment($preview_image);
}
+ $attachments_grouped = [];
+
//Add other images
$images = $this->files_unique($dto->images ?? []);
foreach ($images as $image) {
@@ -192,14 +214,29 @@ final class DTOtoEntityConverter
continue;
}
- $entity->addAttachment($this->convertFile($image, $image_type));
+ $attachment = $this->convertFile($image, $image_type);
+
+ $attachments_grouped[$attachment->getName()][] = $attachment;
+ if (count($attachments_grouped[$attachment->getName()] ?? []) > 1) {
+ $attachment->setName($attachment->getName() . ' (' . (count($attachments_grouped[$attachment->getName()]) + 1) . ')');
+ }
+
+
+ $entity->addAttachment($attachment);
}
//Add datasheets
$datasheet_type = $this->getDatasheetType();
$datasheets = $this->files_unique($dto->datasheets ?? []);
foreach ($datasheets as $datasheet) {
- $entity->addAttachment($this->convertFile($datasheet, $datasheet_type));
+ $attachment = $this->convertFile($datasheet, $datasheet_type);
+
+ $attachments_grouped[$attachment->getName()][] = $attachment;
+ if (count($attachments_grouped[$attachment->getName()] ?? []) > 1) {
+ $attachment->setName($attachment->getName() . ' (' . (count($attachments_grouped[$attachment->getName()])) . ')');
+ }
+
+ $entity->addAttachment($attachment);
}
//Add orderdetails and prices
diff --git a/src/Services/InfoProviderSystem/ExistingPartFinder.php b/src/Services/InfoProviderSystem/ExistingPartFinder.php
new file mode 100644
index 00000000..762c1517
--- /dev/null
+++ b/src/Services/InfoProviderSystem/ExistingPartFinder.php
@@ -0,0 +1,77 @@
+findAllExisting($dto);
+ return count($results) > 0 ? $results[0] : null;
+ }
+
+ /**
+ * Returns all existing local parts that match the search result.
+ * If no part is found, return an empty array.
+ * @param SearchResultDTO $dto
+ * @return Part[]
+ */
+ public function findAllExisting(SearchResultDTO $dto): array
+ {
+ $qb = $this->em->getRepository(Part::class)->createQueryBuilder('part');
+ $qb->select('part')
+ ->leftJoin('part.manufacturer', 'manufacturer')
+ ->Orwhere($qb->expr()->andX(
+ 'part.providerReference.provider_key = :providerKey',
+ 'part.providerReference.provider_id = :providerId',
+ ))
+
+ //Or the manufacturer (allowing for alternative names) and the MPN (or part name) must match
+ ->OrWhere(
+ $qb->expr()->andX(
+ $qb->expr()->orX(
+ "ILIKE(manufacturer.name, :manufacturerName) = TRUE",
+ "ILIKE(manufacturer.alternative_names, :manufacturerAltNames) = TRUE",
+ ),
+ $qb->expr()->orX(
+ "ILIKE(part.manufacturer_product_number, :mpn) = TRUE",
+ "ILIKE(part.name, :mpn) = TRUE",
+ )
+ )
+ )
+ ;
+
+ $qb->setParameter('providerKey', $dto->provider_key);
+ $qb->setParameter('providerId', $dto->provider_id);
+
+ $qb->setParameter('manufacturerName', $dto->manufacturer);
+ $qb->setParameter('manufacturerAltNames', '%'.$dto->manufacturer.'%');
+ $qb->setParameter('mpn', $dto->mpn);
+
+ return $qb->getQuery()->getResult();
+ }
+}
\ No newline at end of file
diff --git a/src/Services/InfoProviderSystem/PartInfoRetriever.php b/src/Services/InfoProviderSystem/PartInfoRetriever.php
index 1a31b197..0eb74642 100644
--- a/src/Services/InfoProviderSystem/PartInfoRetriever.php
+++ b/src/Services/InfoProviderSystem/PartInfoRetriever.php
@@ -27,6 +27,7 @@ use App\Entity\Parts\Part;
use App\Services\InfoProviderSystem\DTOs\PartDetailDTO;
use App\Services\InfoProviderSystem\DTOs\SearchResultDTO;
use App\Services\InfoProviderSystem\Providers\InfoProviderInterface;
+use Symfony\Component\DependencyInjection\Attribute\Autowire;
use Symfony\Contracts\Cache\CacheInterface;
use Symfony\Contracts\Cache\ItemInterface;
@@ -34,10 +35,12 @@ final class PartInfoRetriever
{
private const CACHE_DETAIL_EXPIRATION = 60 * 60 * 24 * 4; // 4 days
- private const CACHE_RESULT_EXPIRATION = 60 * 60 * 24 * 7; // 7 days
+ private const CACHE_RESULT_EXPIRATION = 60 * 60 * 24 * 4; // 7 days
public function __construct(private readonly ProviderRegistry $provider_registry,
- private readonly DTOtoEntityConverter $dto_to_entity_converter, private readonly CacheInterface $partInfoCache)
+ private readonly DTOtoEntityConverter $dto_to_entity_converter, private readonly CacheInterface $partInfoCache,
+ #[Autowire(param: "kernel.debug")]
+ private readonly bool $debugMode = false)
{
}
@@ -56,6 +59,11 @@ final class PartInfoRetriever
$provider = $this->provider_registry->getProviderByKey($provider);
}
+ //Ensure that the provider is active
+ if (!$provider->isActive()) {
+ throw new \RuntimeException("The provider with key {$provider->getProviderKey()} is not active!");
+ }
+
if (!$provider instanceof InfoProviderInterface) {
throw new \InvalidArgumentException("The provider must be either a provider key or a provider instance!");
}
@@ -77,7 +85,7 @@ final class PartInfoRetriever
$escaped_keyword = urlencode($keyword);
return $this->partInfoCache->get("search_{$provider->getProviderKey()}_{$escaped_keyword}", function (ItemInterface $item) use ($provider, $keyword) {
//Set the expiration time
- $item->expiresAfter(self::CACHE_RESULT_EXPIRATION);
+ $item->expiresAfter(!$this->debugMode ? self::CACHE_RESULT_EXPIRATION : 1);
return $provider->searchByKeyword($keyword);
});
@@ -94,11 +102,16 @@ final class PartInfoRetriever
{
$provider = $this->provider_registry->getProviderByKey($provider_key);
+ //Ensure that the provider is active
+ if (!$provider->isActive()) {
+ throw new \RuntimeException("The provider with key $provider_key is not active!");
+ }
+
//Generate key and escape reserved characters from the provider id
$escaped_part_id = urlencode($part_id);
return $this->partInfoCache->get("details_{$provider_key}_{$escaped_part_id}", function (ItemInterface $item) use ($provider, $part_id) {
//Set the expiration time
- $item->expiresAfter(self::CACHE_DETAIL_EXPIRATION);
+ $item->expiresAfter(!$this->debugMode ? self::CACHE_DETAIL_EXPIRATION : 1);
return $provider->getDetails($part_id);
});
diff --git a/src/Services/InfoProviderSystem/Providers/DigikeyProvider.php b/src/Services/InfoProviderSystem/Providers/DigikeyProvider.php
index d8e93321..b20368ce 100644
--- a/src/Services/InfoProviderSystem/Providers/DigikeyProvider.php
+++ b/src/Services/InfoProviderSystem/Providers/DigikeyProvider.php
@@ -108,12 +108,15 @@ class DigikeyProvider implements InfoProviderInterface
{
$request = [
'Keywords' => $keyword,
- 'RecordCount' => 50,
- 'RecordStartPosition' => 0,
- 'ExcludeMarketPlaceProducts' => 'true',
+ 'Limit' => 50,
+ 'Offset' => 0,
+ 'FilterOptionsRequest' => [
+ 'MarketPlaceFilter' => 'ExcludeMarketPlace',
+ ],
];
- $response = $this->digikeyClient->request('POST', '/Search/v3/Products/Keyword', [
+ //$response = $this->digikeyClient->request('POST', '/Search/v3/Products/Keyword', [
+ $response = $this->digikeyClient->request('POST', '/products/v4/search/keyword', [
'json' => $request,
'auth_bearer' => $this->authTokenManager->getAlwaysValidTokenString(self::OAUTH_APP_NAME)
]);
@@ -124,18 +127,21 @@ class DigikeyProvider implements InfoProviderInterface
$result = [];
$products = $response_array['Products'];
foreach ($products as $product) {
- $result[] = new SearchResultDTO(
- provider_key: $this->getProviderKey(),
- provider_id: $product['DigiKeyPartNumber'],
- name: $product['ManufacturerPartNumber'],
- description: $product['DetailedDescription'] ?? $product['ProductDescription'],
- category: $this->getCategoryString($product),
- manufacturer: $product['Manufacturer']['Value'] ?? null,
- mpn: $product['ManufacturerPartNumber'],
- preview_image_url: $product['PrimaryPhoto'] ?? null,
- manufacturing_status: $this->productStatusToManufacturingStatus($product['ProductStatus']),
- provider_url: $product['ProductUrl'],
- );
+ foreach ($product['ProductVariations'] as $variation) {
+ $result[] = new SearchResultDTO(
+ provider_key: $this->getProviderKey(),
+ provider_id: $variation['DigiKeyProductNumber'],
+ name: $product['ManufacturerProductNumber'],
+ description: $product['Description']['DetailedDescription'] ?? $product['Description']['ProductDescription'],
+ category: $this->getCategoryString($product),
+ manufacturer: $product['Manufacturer']['Name'] ?? null,
+ mpn: $product['ManufacturerProductNumber'],
+ preview_image_url: $product['PhotoUrl'] ?? null,
+ manufacturing_status: $this->productStatusToManufacturingStatus($product['ProductStatus']['Id']),
+ provider_url: $product['ProductUrl'],
+ footprint: $variation['PackageType']['Name'], //Use the footprint field, to show the user the package type (Tape & Reel, etc., as digikey has many different package types)
+ );
+ }
}
return $result;
@@ -143,62 +149,79 @@ class DigikeyProvider implements InfoProviderInterface
public function getDetails(string $id): PartDetailDTO
{
- $response = $this->digikeyClient->request('GET', '/Search/v3/Products/' . urlencode($id), [
+ $response = $this->digikeyClient->request('GET', '/products/v4/search/' . urlencode($id) . '/productdetails', [
'auth_bearer' => $this->authTokenManager->getAlwaysValidTokenString(self::OAUTH_APP_NAME)
]);
- $product = $response->toArray();
+ $response_array = $response->toArray();
+ $product = $response_array['Product'];
$footprint = null;
$parameters = $this->parametersToDTOs($product['Parameters'] ?? [], $footprint);
- $media = $this->mediaToDTOs($product['MediaLinks']);
+ $media = $this->mediaToDTOs($id);
+
+ // Get the price_breaks of the selected variation
+ $price_breaks = [];
+ foreach ($product['ProductVariations'] as $variation) {
+ if ($variation['DigiKeyProductNumber'] == $id) {
+ $price_breaks = $variation['StandardPricing'] ?? [];
+ break;
+ }
+ }
return new PartDetailDTO(
provider_key: $this->getProviderKey(),
- provider_id: $product['DigiKeyPartNumber'],
- name: $product['ManufacturerPartNumber'],
- description: $product['DetailedDescription'] ?? $product['ProductDescription'],
+ provider_id: $id,
+ name: $product['ManufacturerProductNumber'],
+ description: $product['Description']['DetailedDescription'] ?? $product['Description']['ProductDescription'],
category: $this->getCategoryString($product),
- manufacturer: $product['Manufacturer']['Value'] ?? null,
- mpn: $product['ManufacturerPartNumber'],
- preview_image_url: $product['PrimaryPhoto'] ?? null,
- manufacturing_status: $this->productStatusToManufacturingStatus($product['ProductStatus']),
+ manufacturer: $product['Manufacturer']['Name'] ?? null,
+ mpn: $product['ManufacturerProductNumber'],
+ preview_image_url: $product['PhotoUrl'] ?? null,
+ manufacturing_status: $this->productStatusToManufacturingStatus($product['ProductStatus']['Id']),
provider_url: $product['ProductUrl'],
footprint: $footprint,
datasheets: $media['datasheets'],
images: $media['images'],
parameters: $parameters,
- vendor_infos: $this->pricingToDTOs($product['StandardPricing'] ?? [], $product['DigiKeyPartNumber'], $product['ProductUrl']),
+ vendor_infos: $this->pricingToDTOs($price_breaks, $id, $product['ProductUrl']),
);
}
/**
* Converts the product status from the Digikey API to the manufacturing status used in Part-DB
- * @param string|null $dk_status
+ * @param int|null $dk_status
* @return ManufacturingStatus|null
*/
- private function productStatusToManufacturingStatus(?string $dk_status): ?ManufacturingStatus
+ private function productStatusToManufacturingStatus(?int $dk_status): ?ManufacturingStatus
{
+ // The V4 can use strings to get the status, but if you have changed the PROVIDER_DIGIKEY_LANGUAGE it will not match.
+ // Using the Id instead which should be fixed.
+ //
+ // The API is not well documented and the ID are not there yet, so were extracted using "trial and error".
+ // The 'Preliminary' id was not found in several categories so I was unable to extract it. Disabled for now.
return match ($dk_status) {
null => null,
- 'Active' => ManufacturingStatus::ACTIVE,
- 'Obsolete' => ManufacturingStatus::DISCONTINUED,
- 'Discontinued at Digi-Key', 'Last Time Buy' => ManufacturingStatus::EOL,
- 'Not For New Designs' => ManufacturingStatus::NRFND,
- 'Preliminary' => ManufacturingStatus::ANNOUNCED,
+ 0 => ManufacturingStatus::ACTIVE,
+ 1 => ManufacturingStatus::DISCONTINUED,
+ 2, 4 => ManufacturingStatus::EOL,
+ 7 => ManufacturingStatus::NRFND,
+ //'Preliminary' => ManufacturingStatus::ANNOUNCED,
default => ManufacturingStatus::NOT_SET,
};
}
private function getCategoryString(array $product): string
{
- $category = $product['Category']['Value'];
- $sub_category = $product['Family']['Value'];
+ $category = $product['Category']['Name'];
+ $sub_category = current($product['Category']['ChildCategories']);
- //Replace the ' - ' category separator with ' -> '
- $sub_category = str_replace(' - ', ' -> ', $sub_category);
+ if ($sub_category) {
+ //Replace the ' - ' category separator with ' -> '
+ $category = $category . ' -> ' . str_replace(' - ', ' -> ', $sub_category["Name"]);
+ }
- return $category . ' -> ' . $sub_category;
+ return $category;
}
/**
@@ -215,18 +238,18 @@ class DigikeyProvider implements InfoProviderInterface
foreach ($parameters as $parameter) {
if ($parameter['ParameterId'] === 1291) { //Meaning "Manufacturer given footprint"
- $footprint_name = $parameter['Value'];
+ $footprint_name = $parameter['ValueText'];
}
- if (in_array(trim((string) $parameter['Value']), ['', '-'], true)) {
+ if (in_array(trim((string) $parameter['ValueText']), ['', '-'], true)) {
continue;
}
//If the parameter was marked as text only, then we do not try to parse it as a numerical value
if (in_array($parameter['ParameterId'], self::TEXT_ONLY_PARAMETERS, true)) {
- $results[] = new ParameterDTO(name: $parameter['Parameter'], value_text: $parameter['Value']);
+ $results[] = new ParameterDTO(name: $parameter['ParameterText'], value_text: $parameter['ValueText']);
} else { //Otherwise try to parse it as a numerical value
- $results[] = ParameterDTO::parseValueIncludingUnit($parameter['Parameter'], $parameter['Value']);
+ $results[] = ParameterDTO::parseValueIncludingUnit($parameter['ParameterText'], $parameter['ValueText']);
}
}
@@ -254,16 +277,22 @@ class DigikeyProvider implements InfoProviderInterface
}
/**
- * @param array $media_links
+ * @param string $id The Digikey product number, to get the media for
* @return FileDTO[][]
* @phpstan-return array
*/
- private function mediaToDTOs(array $media_links): array
+ private function mediaToDTOs(string $id): array
{
$datasheets = [];
$images = [];
- foreach ($media_links as $media_link) {
+ $response = $this->digikeyClient->request('GET', '/products/v4/search/' . urlencode($id) . '/media', [
+ 'auth_bearer' => $this->authTokenManager->getAlwaysValidTokenString(self::OAUTH_APP_NAME)
+ ]);
+
+ $media_array = $response->toArray();
+
+ foreach ($media_array['MediaLinks'] as $media_link) {
$file = new FileDTO(url: $media_link['Url'], name: $media_link['Title']);
switch ($media_link['MediaType']) {
diff --git a/src/Services/InfoProviderSystem/Providers/Element14Provider.php b/src/Services/InfoProviderSystem/Providers/Element14Provider.php
index ad70f9d9..b942b929 100644
--- a/src/Services/InfoProviderSystem/Providers/Element14Provider.php
+++ b/src/Services/InfoProviderSystem/Providers/Element14Provider.php
@@ -29,13 +29,14 @@ use App\Services\InfoProviderSystem\DTOs\ParameterDTO;
use App\Services\InfoProviderSystem\DTOs\PartDetailDTO;
use App\Services\InfoProviderSystem\DTOs\PriceDTO;
use App\Services\InfoProviderSystem\DTOs\PurchaseInfoDTO;
+use Composer\CaBundle\CaBundle;
use Symfony\Contracts\HttpClient\HttpClientInterface;
class Element14Provider implements InfoProviderInterface
{
private const ENDPOINT_URL = 'https://api.element14.com/catalog/products';
- private const API_VERSION_NUMBER = '1.2';
+ private const API_VERSION_NUMBER = '1.4';
private const NUMBER_OF_RESULTS = 20;
public const DISTRIBUTOR_NAME = 'Farnell';
@@ -43,9 +44,19 @@ class Element14Provider implements InfoProviderInterface
private const COMPLIANCE_ATTRIBUTES = ['euEccn', 'hazardous', 'MSL', 'productTraceability', 'rohsCompliant',
'rohsPhthalatesCompliant', 'SVHC', 'tariffCode', 'usEccn', 'hazardCode'];
- public function __construct(private readonly HttpClientInterface $element14Client, private readonly string $api_key, private readonly string $store_id)
- {
+ private readonly HttpClientInterface $element14Client;
+ public function __construct(HttpClientInterface $element14Client, private readonly string $api_key, private readonly string $store_id)
+ {
+ /* We use the mozilla CA from the composer ca bundle directly, as some debian systems seems to have problems
+ * with the SSL.COM CA, element14 uses. See https://github.com/Part-DB/Part-DB-server/issues/866
+ *
+ * This is a workaround until the issue is resolved in debian (or never).
+ * As this only affects this provider, this should have no negative impact and the CA bundle is still secure.
+ */
+ $this->element14Client = $element14Client->withOptions([
+ 'cafile' => CaBundle::getBundledCaBundlePath(),
+ ]);
}
public function getProviderInfo(): array
@@ -83,7 +94,7 @@ class Element14Provider implements InfoProviderInterface
'resultsSettings.responseGroup' => 'large',
'callInfo.apiKey' => $this->api_key,
'callInfo.responseDataFormat' => 'json',
- 'callInfo.version' => self::API_VERSION_NUMBER,
+ 'versionNumber' => self::API_VERSION_NUMBER,
],
]);
@@ -107,21 +118,18 @@ class Element14Provider implements InfoProviderInterface
mpn: $product['translatedManufacturerPartNumber'],
preview_image_url: $this->toImageUrl($product['image'] ?? null),
manufacturing_status: $this->releaseStatusCodeToManufacturingStatus($product['releaseStatusCode'] ?? null),
- provider_url: $this->generateProductURL($product['sku']),
+ provider_url: $product['productURL'],
+ notes: $product['productOverview']['description'] ?? null,
datasheets: $this->parseDataSheets($product['datasheets'] ?? null),
parameters: $this->attributesToParameters($product['attributes'] ?? null),
- vendor_infos: $this->pricesToVendorInfo($product['sku'], $product['prices'] ?? [])
+ vendor_infos: $this->pricesToVendorInfo($product['sku'], $product['prices'] ?? [], $product['productURL']),
+
);
}
return $result;
}
- private function generateProductURL($sku): string
- {
- return 'https://' . $this->store_id . '/' . $sku;
- }
-
/**
* @param array|null $datasheets
* @return FileDTO[]|null Array of FileDTOs
@@ -161,7 +169,7 @@ class Element14Provider implements InfoProviderInterface
* @param array $prices
* @return array
*/
- private function pricesToVendorInfo(string $sku, array $prices): array
+ private function pricesToVendorInfo(string $sku, array $prices, string $product_url): array
{
$price_dtos = [];
@@ -179,7 +187,7 @@ class Element14Provider implements InfoProviderInterface
distributor_name: self::DISTRIBUTOR_NAME,
order_number: $sku,
prices: $price_dtos,
- product_url: $this->generateProductURL($sku)
+ product_url: $product_url
)
];
}
diff --git a/src/Services/InfoProviderSystem/Providers/LCSCProvider.php b/src/Services/InfoProviderSystem/Providers/LCSCProvider.php
index 601d5ebc..d903a8dd 100755
--- a/src/Services/InfoProviderSystem/Providers/LCSCProvider.php
+++ b/src/Services/InfoProviderSystem/Providers/LCSCProvider.php
@@ -97,6 +97,9 @@ class LCSCProvider implements InfoProviderInterface
private function getRealDatasheetUrl(?string $url): string
{
if ($url !== null && trim($url) !== '' && preg_match("/^https:\/\/(datasheet\.lcsc\.com|www\.lcsc\.com\/datasheet)\/.*(C\d+)\.pdf$/", $url, $matches) > 0) {
+ if (preg_match("/^https:\/\/datasheet\.lcsc\.com\/lcsc\/(.*\.pdf)$/", $url, $rewriteMatches) > 0) {
+ $url = 'https://www.lcsc.com/datasheet/lcsc_datasheet_' . $rewriteMatches[1];
+ }
$response = $this->lcscClient->request('GET', $url, [
'headers' => [
'Referer' => 'https://www.lcsc.com/product-detail/_' . $matches[2] . '.html'
diff --git a/src/Services/InfoProviderSystem/Providers/MouserProvider.php b/src/Services/InfoProviderSystem/Providers/MouserProvider.php
index 84f5d65b..90bad263 100644
--- a/src/Services/InfoProviderSystem/Providers/MouserProvider.php
+++ b/src/Services/InfoProviderSystem/Providers/MouserProvider.php
@@ -94,6 +94,7 @@ class MouserProvider implements InfoProviderInterface
From the startingRecord, the number of records specified will be returned up to the end of the recordset.
This is useful for paging through the complete recordset of parts matching keyword.
+
searchOptions string
Optional.
If not provided, the default is None.
@@ -176,11 +177,16 @@ class MouserProvider implements InfoProviderInterface
throw new \RuntimeException('No part found with ID '.$id);
}
+ //Manually filter out the part with the correct ID
+ $tmp = array_filter($tmp, fn(PartDetailDTO $part) => $part->provider_id === $id);
+ if (count($tmp) === 0) {
+ throw new \RuntimeException('No part found with ID '.$id);
+ }
if (count($tmp) > 1) {
- throw new \RuntimeException('Multiple parts found with ID '.$id . ' ('.count($tmp).' found). This is basically a bug in Mousers API response. See issue #616.');
+ throw new \RuntimeException('Multiple parts found with ID '.$id);
}
- return $tmp[0];
+ return reset($tmp);
}
public function getCapabilities(): array
@@ -205,7 +211,7 @@ class MouserProvider implements InfoProviderInterface
if (isset($arr['SearchResults'])) {
$products = $arr['SearchResults']['Parts'] ?? [];
} else {
- throw new \RuntimeException('Unknown response format');
+ throw new \RuntimeException('Unknown response format: ' .json_encode($arr, JSON_THROW_ON_ERROR));
}
$result = [];
diff --git a/src/Services/InfoProviderSystem/Providers/OEMSecretsProvider.php b/src/Services/InfoProviderSystem/Providers/OEMSecretsProvider.php
index f3b59adc..ccf800f8 100644
--- a/src/Services/InfoProviderSystem/Providers/OEMSecretsProvider.php
+++ b/src/Services/InfoProviderSystem/Providers/OEMSecretsProvider.php
@@ -771,11 +771,6 @@ class OEMSecretsProvider implements InfoProviderInterface
// Logic to extract parameters from the description
$extractedParameters = $this->parseDescriptionToParameters($description) ?? [];
- // Ensure that $extractedParameters is an array
- if (!is_array($extractedParameters)) {
- $extractedParameters = [];
- }
-
foreach ($extractedParameters as $newParam) {
$isDuplicate = false;
foreach ($parameters as $existingParam) {
@@ -1226,7 +1221,7 @@ class OEMSecretsProvider implements InfoProviderInterface
* - 'value_min' => string|null The minimum value in a range, if applicable.
* - 'value_max' => string|null The maximum value in a range, if applicable.
*/
- private function customSplitIntoValueAndUnit(string $value1, string $value2 = null): array
+ private function customSplitIntoValueAndUnit(string $value1, ?string $value2 = null): array
{
// Separate numbers and units (basic parsing handling)
$unit = null;
diff --git a/src/Services/InfoProviderSystem/Providers/PollinProvider.php b/src/Services/InfoProviderSystem/Providers/PollinProvider.php
new file mode 100644
index 00000000..09ab8fd4
--- /dev/null
+++ b/src/Services/InfoProviderSystem/Providers/PollinProvider.php
@@ -0,0 +1,249 @@
+.
+ */
+
+declare(strict_types=1);
+
+
+namespace App\Services\InfoProviderSystem\Providers;
+
+use App\Entity\Parts\ManufacturingStatus;
+use App\Entity\Parts\Part;
+use App\Services\InfoProviderSystem\DTOs\FileDTO;
+use App\Services\InfoProviderSystem\DTOs\ParameterDTO;
+use App\Services\InfoProviderSystem\DTOs\PartDetailDTO;
+use App\Services\InfoProviderSystem\DTOs\PriceDTO;
+use App\Services\InfoProviderSystem\DTOs\PurchaseInfoDTO;
+use App\Services\InfoProviderSystem\DTOs\SearchResultDTO;
+use Symfony\Component\DependencyInjection\Attribute\Autowire;
+use Symfony\Component\DomCrawler\Crawler;
+use Symfony\Contracts\HttpClient\HttpClientInterface;
+
+class PollinProvider implements InfoProviderInterface
+{
+
+ public function __construct(private readonly HttpClientInterface $client,
+ #[Autowire(env: 'bool:PROVIDER_POLLIN_ENABLED')]
+ private readonly bool $enabled = true,
+ )
+ {
+ }
+
+ public function getProviderInfo(): array
+ {
+ return [
+ 'name' => 'Pollin',
+ 'description' => 'Webscraping from pollin.de to get part information',
+ 'url' => 'https://www.pollin.de/',
+ 'disabled_help' => 'Set PROVIDER_POLLIN_ENABLED env to 1'
+ ];
+ }
+
+ public function getProviderKey(): string
+ {
+ return 'pollin';
+ }
+
+ public function isActive(): bool
+ {
+ return $this->enabled;
+ }
+
+ public function searchByKeyword(string $keyword): array
+ {
+ $response = $this->client->request('GET', 'https://www.pollin.de/search', [
+ 'query' => [
+ 'search' => $keyword
+ ]
+ ]);
+
+ $content = $response->getContent();
+
+ //If the response has us redirected to the product page, then just return the single item
+ if ($response->getInfo('redirect_count') > 0) {
+ return [$this->parseProductPage($content)];
+ }
+
+ $dom = new Crawler($content);
+
+ $results = [];
+
+ //Iterate over each div.product-box
+ $dom->filter('div.product-box')->each(function (Crawler $node) use (&$results) {
+ $results[] = new SearchResultDTO(
+ provider_key: $this->getProviderKey(),
+ provider_id: $node->filter('meta[itemprop="productID"]')->attr('content'),
+ name: $node->filter('a.product-name')->text(),
+ description: '',
+ preview_image_url: $node->filter('img.product-image')->attr('src'),
+ manufacturing_status: $this->mapAvailability($node->filter('link[itemprop="availability"]')->attr('href')),
+ provider_url: $node->filter('a.product-name')->attr('href')
+ );
+ });
+
+ return $results;
+ }
+
+ private function mapAvailability(string $availabilityURI): ManufacturingStatus
+ {
+ return match( $availabilityURI) {
+ 'http://schema.org/InStock' => ManufacturingStatus::ACTIVE,
+ 'http://schema.org/OutOfStock' => ManufacturingStatus::DISCONTINUED,
+ default => ManufacturingStatus::NOT_SET
+ };
+ }
+
+ public function getDetails(string $id): PartDetailDTO
+ {
+ //Ensure that $id is numeric
+ if (!is_numeric($id)) {
+ throw new \InvalidArgumentException("The id must be numeric!");
+ }
+
+ $response = $this->client->request('GET', 'https://www.pollin.de/search', [
+ 'query' => [
+ 'search' => $id
+ ]
+ ]);
+
+ //The response must have us redirected to the product page
+ if ($response->getInfo('redirect_count') > 0) {
+ throw new \RuntimeException("Could not resolve the product page for the given id!");
+ }
+
+ $content = $response->getContent();
+
+ return $this->parseProductPage($content);
+ }
+
+ private function parseProductPage(string $content): PartDetailDTO
+ {
+ $dom = new Crawler($content);
+
+ $productPageUrl = $dom->filter('meta[property="product:product_link"]')->attr('content');
+ $orderId = trim($dom->filter('span[itemprop="sku"]')->text()); //Text is important here
+
+ //Calculate the mass
+ $massStr = $dom->filter('meta[itemprop="weight"]')->attr('content');
+ //Remove the unit
+ $massStr = str_replace('kg', '', $massStr);
+ //Convert to float and convert to grams
+ $mass = (float) $massStr * 1000;
+
+ //Parse purchase info
+ $purchaseInfo = new PurchaseInfoDTO('Pollin', $orderId, $this->parsePrices($dom), $productPageUrl);
+
+ return new PartDetailDTO(
+ provider_key: $this->getProviderKey(),
+ provider_id: $orderId,
+ name: trim($dom->filter('meta[property="og:title"]')->attr('content')),
+ description: $dom->filter('meta[property="og:description"]')->attr('content'),
+ category: $this->parseCategory($dom),
+ manufacturer: $dom->filter('meta[property="product:brand"]')->count() > 0 ? $dom->filter('meta[property="product:brand"]')->attr('content') : null,
+ preview_image_url: $dom->filter('meta[property="og:image"]')->attr('content'),
+ manufacturing_status: $this->mapAvailability($dom->filter('link[itemprop="availability"]')->attr('href')),
+ provider_url: $productPageUrl,
+ notes: $this->parseNotes($dom),
+ datasheets: $this->parseDatasheets($dom),
+ parameters: $this->parseParameters($dom),
+ vendor_infos: [$purchaseInfo],
+ mass: $mass,
+ );
+ }
+
+ private function parseDatasheets(Crawler $dom): array
+ {
+ //Iterate over each a element withing div.pol-product-detail-download-files
+ $datasheets = [];
+ $dom->filter('div.pol-product-detail-download-files a')->each(function (Crawler $node) use (&$datasheets) {
+ $datasheets[] = new FileDTO($node->attr('href'), $node->text());
+ });
+
+ return $datasheets;
+ }
+
+ private function parseParameters(Crawler $dom): array
+ {
+ $parameters = [];
+
+ //Iterate over each tr.properties-row inside table.product-detail-properties-table
+ $dom->filter('table.product-detail-properties-table tr.properties-row')->each(function (Crawler $node) use (&$parameters) {
+ $parameters[] = ParameterDTO::parseValueIncludingUnit(
+ name: rtrim($node->filter('th.properties-label')->text(), ':'),
+ value: trim($node->filter('td.properties-value')->text())
+ );
+ });
+
+ return $parameters;
+ }
+
+ private function parseCategory(Crawler $dom): string
+ {
+ $category = '';
+
+ //Iterate over each li.breadcrumb-item inside ol.breadcrumb
+ $dom->filter('ol.breadcrumb li.breadcrumb-item')->each(function (Crawler $node) use (&$category) {
+ //Skip if it has breadcrumb-item-home class
+ if (str_contains($node->attr('class'), 'breadcrumb-item-home')) {
+ return;
+ }
+
+
+ $category .= $node->text() . ' -> ';
+ });
+
+ //Remove the last ' -> '
+ return substr($category, 0, -4);
+ }
+
+ private function parseNotes(Crawler $dom): string
+ {
+ //Concat product highlights and product description
+ return $dom->filter('div.product-detail-top-features')->html('') . ' ' . $dom->filter('div.product-detail-description-text')->html('');
+ }
+
+ private function parsePrices(Crawler $dom): array
+ {
+ //TODO: Properly handle multiple prices, for now we just look at the price for one piece
+
+ //We assume the currency is always the same
+ $currency = $dom->filter('meta[property="product:price:currency"]')->attr('content');
+
+ //If there is meta[property=highPrice] then use this as the price
+ if ($dom->filter('meta[itemprop="highPrice"]')->count() > 0) {
+ $price = $dom->filter('meta[itemprop="highPrice"]')->attr('content');
+ } else {
+ $price = $dom->filter('meta[property="product:price:amount"]')->attr('content');
+ }
+
+ return [
+ new PriceDTO(1.0, $price, $currency)
+ ];
+ }
+
+ public function getCapabilities(): array
+ {
+ return [
+ ProviderCapabilities::BASIC,
+ ProviderCapabilities::PICTURE,
+ ProviderCapabilities::PRICE,
+ ProviderCapabilities::DATASHEET
+ ];
+ }
+}
\ No newline at end of file
diff --git a/src/Services/InfoProviderSystem/Providers/ReicheltProvider.php b/src/Services/InfoProviderSystem/Providers/ReicheltProvider.php
new file mode 100644
index 00000000..0c31c411
--- /dev/null
+++ b/src/Services/InfoProviderSystem/Providers/ReicheltProvider.php
@@ -0,0 +1,285 @@
+.
+ */
+
+declare(strict_types=1);
+
+
+namespace App\Services\InfoProviderSystem\Providers;
+
+use App\Services\InfoProviderSystem\DTOs\FileDTO;
+use App\Services\InfoProviderSystem\DTOs\ParameterDTO;
+use App\Services\InfoProviderSystem\DTOs\PartDetailDTO;
+use App\Services\InfoProviderSystem\DTOs\PriceDTO;
+use App\Services\InfoProviderSystem\DTOs\PurchaseInfoDTO;
+use App\Services\InfoProviderSystem\DTOs\SearchResultDTO;
+use Symfony\Component\DependencyInjection\Attribute\Autowire;
+use Symfony\Component\DomCrawler\Crawler;
+use Symfony\Contracts\HttpClient\HttpClientInterface;
+
+class ReicheltProvider implements InfoProviderInterface
+{
+
+ public const DISTRIBUTOR_NAME = "Reichelt";
+
+ public function __construct(private readonly HttpClientInterface $client,
+ #[Autowire(env: "bool:PROVIDER_REICHELT_ENABLED")]
+ private readonly bool $enabled = true,
+ #[Autowire(env: "PROVIDER_REICHELT_LANGUAGE")]
+ private readonly string $language = "en",
+ #[Autowire(env: "PROVIDER_REICHELT_COUNTRY")]
+ private readonly string $country = "DE",
+ #[Autowire(env: "PROVIDER_REICHELT_INCLUDE_VAT")]
+ private readonly bool $includeVAT = false,
+ #[Autowire(env: "PROVIDER_REICHELT_CURRENCY")]
+ private readonly string $currency = "EUR",
+ )
+ {
+ }
+
+ public function getProviderInfo(): array
+ {
+ return [
+ 'name' => 'Reichelt',
+ 'description' => 'Webscraping from reichelt.com to get part information',
+ 'url' => 'https://www.reichelt.com/',
+ 'disabled_help' => 'Set PROVIDER_REICHELT_ENABLED env to 1'
+ ];
+ }
+
+ public function getProviderKey(): string
+ {
+ return 'reichelt';
+ }
+
+ public function isActive(): bool
+ {
+ return $this->enabled;
+ }
+
+ public function searchByKeyword(string $keyword): array
+ {
+ $response = $this->client->request('GET', sprintf($this->getBaseURL() . '/shop/search/%s', $keyword));
+ $html = $response->getContent();
+
+ //Parse the HTML and return the results
+ $dom = new Crawler($html);
+ //Iterate over all div.al_gallery_article elements
+ $results = [];
+ $dom->filter('div.al_gallery_article')->each(function (Crawler $element) use (&$results) {
+
+ //Extract product id from data-product attribute
+ $artId = json_decode($element->attr('data-product'), true, 2, JSON_THROW_ON_ERROR)['artid'];
+
+ $productID = $element->filter('meta[itemprop="productID"]')->attr('content');
+ $name = $element->filter('meta[itemprop="name"]')->attr('content');
+ $sku = $element->filter('meta[itemprop="sku"]')->attr('content');
+
+ //Try to extract a picture URL:
+ $pictureURL = $element->filter("div.al_artlogo img")->attr('src');
+
+ $results[] = new SearchResultDTO(
+ provider_key: $this->getProviderKey(),
+ provider_id: $artId,
+ name: $productID,
+ description: $name,
+ category: null,
+ manufacturer: $sku,
+ preview_image_url: $pictureURL,
+ provider_url: $element->filter('a.al_artinfo_link')->attr('href')
+ );
+ });
+
+ return $results;
+ }
+
+ public function getDetails(string $id): PartDetailDTO
+ {
+ //Check that the ID is a number
+ if (!is_numeric($id)) {
+ throw new \InvalidArgumentException("Invalid ID");
+ }
+
+ //Use this endpoint to resolve the artID to a product page
+ $response = $this->client->request('GET',
+ sprintf(
+ 'https://www.reichelt.com/?ACTION=514&id=74&article=%s&LANGUAGE=%s&CCOUNTRY=%s',
+ $id,
+ strtoupper($this->language),
+ strtoupper($this->country)
+ )
+ );
+ $json = $response->toArray();
+
+ //Retrieve the product page from the response
+ $productPage = $this->getBaseURL() . '/shop/product' . $json[0]['article_path'];
+
+
+ $response = $this->client->request('GET', $productPage, [
+ 'query' => [
+ 'CCTYPE' => $this->includeVAT ? 'private' : 'business',
+ 'currency' => $this->currency,
+ ],
+ ]);
+ $html = $response->getContent();
+ $dom = new Crawler($html);
+
+ //Extract the product notes
+ $notes = $dom->filter('p[itemprop="description"]')->html();
+
+ //Extract datasheets
+ $datasheets = [];
+ $dom->filter('div.articleDatasheet a')->each(function (Crawler $element) use (&$datasheets) {
+ $datasheets[] = new FileDTO($element->attr('href'), $element->filter('span')->text());
+ });
+
+ //Determine price for one unit
+ $priceString = $dom->filter('meta[itemprop="price"]')->attr('content');
+ $currency = $dom->filter('meta[itemprop="priceCurrency"]')->attr('content', 'EUR');
+
+ //Create purchase info
+ $purchaseInfo = new PurchaseInfoDTO(
+ distributor_name: self::DISTRIBUTOR_NAME,
+ order_number: $json[0]['article_artnr'],
+ prices: array_merge(
+ [new PriceDTO(1.0, $priceString, $currency, $this->includeVAT)]
+ , $this->parseBatchPrices($dom, $currency)),
+ product_url: $productPage
+ );
+
+ //Create part object
+ return new PartDetailDTO(
+ provider_key: $this->getProviderKey(),
+ provider_id: $id,
+ name: $json[0]['article_artnr'],
+ description: $json[0]['article_besch'],
+ category: $this->parseCategory($dom),
+ manufacturer: $json[0]['manufacturer_name'],
+ mpn: $this->parseMPN($dom),
+ preview_image_url: $json[0]['article_picture'],
+ provider_url: $productPage,
+ notes: $notes,
+ datasheets: $datasheets,
+ parameters: $this->parseParameters($dom),
+ vendor_infos: [$purchaseInfo]
+ );
+
+ }
+
+ private function parseMPN(Crawler $dom): string
+ {
+ //Find the small element directly after meta[itemprop="url"] element
+ $element = $dom->filter('meta[itemprop="url"] + small');
+ //If the text contains GTIN text, take the small element afterwards
+ if (str_contains($element->text(), 'GTIN')) {
+ $element = $dom->filter('meta[itemprop="url"] + small + small');
+ }
+
+ //The MPN is contained in the span inside the element
+ return $element->filter('span')->text();
+ }
+
+ private function parseBatchPrices(Crawler $dom, string $currency): array
+ {
+ //Iterate over each a.inline-block element in div.discountValue
+ $prices = [];
+ $dom->filter('div.discountValue a.inline-block')->each(function (Crawler $element) use (&$prices, $currency) {
+ //The minimum amount is the number in the span.block element
+ $minAmountText = $element->filter('span.block')->text();
+
+ //Extract a integer from the text
+ $matches = [];
+ if (!preg_match('/\d+/', $minAmountText, $matches)) {
+ return;
+ }
+
+ $minAmount = (int) $matches[0];
+
+ //The price is the text of the p.productPrice element
+ $priceString = $element->filter('p.productPrice')->text();
+ //Replace comma with dot
+ $priceString = str_replace(',', '.', $priceString);
+ //Strip any non-numeric characters
+ $priceString = preg_replace('/[^0-9.]/', '', $priceString);
+
+ $prices[] = new PriceDTO($minAmount, $priceString, $currency, $this->includeVAT);
+ });
+
+ return $prices;
+ }
+
+
+ private function parseCategory(Crawler $dom): string
+ {
+ // Look for ol.breadcrumb and iterate over the li elements
+ $category = '';
+ $dom->filter('ol.breadcrumb li.triangle-left')->each(function (Crawler $element) use (&$category) {
+ //Do not include the .breadcrumb-showmore element
+ if ($element->attr('id') === 'breadcrumb-showmore') {
+ return;
+ }
+
+ $category .= $element->text() . ' -> ';
+ });
+ //Remove the trailing ' -> '
+ $category = substr($category, 0, -4);
+
+ return $category;
+ }
+
+ /**
+ * @param Crawler $dom
+ * @return ParameterDTO[]
+ */
+ private function parseParameters(Crawler $dom): array
+ {
+ $parameters = [];
+ //Iterate over each ul.articleTechnicalData which contains the specifications of each group
+ $dom->filter('ul.articleTechnicalData')->each(function (Crawler $groupElement) use (&$parameters) {
+ $groupName = $groupElement->filter('li.articleTechnicalHeadline')->text();
+
+ //Iterate over each second li in ul.articleAttribute, which contains the specifications
+ $groupElement->filter('ul.articleAttribute li:nth-child(2n)')->each(function (Crawler $specElement) use (&$parameters, $groupName) {
+ $parameters[] = ParameterDTO::parseValueIncludingUnit(
+ name: $specElement->previousAll()->text(),
+ value: $specElement->text(),
+ group: $groupName
+ );
+ });
+ });
+
+ return $parameters;
+ }
+
+ private function getBaseURL(): string
+ {
+ //Without the trailing slash
+ return 'https://www.reichelt.com/' . strtolower($this->country) . '/' . strtolower($this->language);
+ }
+
+ public function getCapabilities(): array
+ {
+ return [
+ ProviderCapabilities::BASIC,
+ ProviderCapabilities::PICTURE,
+ ProviderCapabilities::DATASHEET,
+ ProviderCapabilities::PRICE,
+ ];
+ }
+}
\ No newline at end of file
diff --git a/src/Services/InfoProviderSystem/Providers/TMEClient.php b/src/Services/InfoProviderSystem/Providers/TMEClient.php
index 0e32e9a6..d4df133e 100644
--- a/src/Services/InfoProviderSystem/Providers/TMEClient.php
+++ b/src/Services/InfoProviderSystem/Providers/TMEClient.php
@@ -50,6 +50,16 @@ class TMEClient
return $this->token !== '' && $this->secret !== '';
}
+ /**
+ * Returns true if the client is using a private (account related token) instead of a deprecated anonymous token
+ * to authenticate with TME.
+ * @return bool
+ */
+ public function isUsingPrivateToken(): bool
+ {
+ //Private tokens are longer than anonymous ones (50 instead of 45 characters)
+ return strlen($this->token) > 45;
+ }
/**
* Generates the signature for the given action and parameters.
diff --git a/src/Services/InfoProviderSystem/Providers/TMEProvider.php b/src/Services/InfoProviderSystem/Providers/TMEProvider.php
index 61944b7d..32fc0c72 100644
--- a/src/Services/InfoProviderSystem/Providers/TMEProvider.php
+++ b/src/Services/InfoProviderSystem/Providers/TMEProvider.php
@@ -36,12 +36,19 @@ class TMEProvider implements InfoProviderInterface
private const VENDOR_NAME = 'TME';
+ /** @var bool If true, the prices are gross prices. If false, the prices are net prices. */
+ private readonly bool $get_gross_prices;
+
public function __construct(private readonly TMEClient $tmeClient, private readonly string $country,
private readonly string $language, private readonly string $currency,
- /** @var bool If true, the prices are gross prices. If false, the prices are net prices. */
- private readonly bool $get_gross_prices)
+ bool $get_gross_prices)
{
-
+ //If we have a private token, set get_gross_prices to false, as it is automatically determined by the account type then
+ if ($this->tmeClient->isUsingPrivateToken()) {
+ $this->get_gross_prices = false;
+ } else {
+ $this->get_gross_prices = $get_gross_prices;
+ }
}
public function getProviderInfo(): array
diff --git a/src/Services/LabelSystem/BarcodeScanner/BarcodeRedirector.php b/src/Services/LabelSystem/BarcodeScanner/BarcodeRedirector.php
new file mode 100644
index 00000000..2de7c035
--- /dev/null
+++ b/src/Services/LabelSystem/BarcodeScanner/BarcodeRedirector.php
@@ -0,0 +1,166 @@
+.
+ */
+
+declare(strict_types=1);
+
+/**
+ * This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony).
+ *
+ * Copyright (C) 2019 - 2022 Jan Böhmer (https://github.com/jbtronics)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+namespace App\Services\LabelSystem\BarcodeScanner;
+
+use App\Entity\LabelSystem\LabelSupportedElement;
+use App\Entity\Parts\Manufacturer;
+use App\Entity\Parts\Part;
+use App\Entity\Parts\PartLot;
+use Doctrine\ORM\EntityManagerInterface;
+use Doctrine\ORM\EntityNotFoundException;
+use InvalidArgumentException;
+use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
+
+/**
+ * @see \App\Tests\Services\LabelSystem\Barcodes\BarcodeRedirectorTest
+ */
+final class BarcodeRedirector
+{
+ public function __construct(private readonly UrlGeneratorInterface $urlGenerator, private readonly EntityManagerInterface $em)
+ {
+ }
+
+ /**
+ * Determines the URL to which the user should be redirected, when scanning a QR code.
+ *
+ * @param BarcodeScanResultInterface $barcodeScan The result of the barcode scan
+ * @return string the URL to which should be redirected
+ *
+ * @throws EntityNotFoundException
+ */
+ public function getRedirectURL(BarcodeScanResultInterface $barcodeScan): string
+ {
+ if($barcodeScan instanceof LocalBarcodeScanResult) {
+ return $this->getURLLocalBarcode($barcodeScan);
+ }
+
+ if ($barcodeScan instanceof EIGP114BarcodeScanResult) {
+ return $this->getURLVendorBarcode($barcodeScan);
+ }
+
+ throw new InvalidArgumentException('Unknown $barcodeScan type: '.get_class($barcodeScan));
+ }
+
+ private function getURLLocalBarcode(LocalBarcodeScanResult $barcodeScan): string
+ {
+ switch ($barcodeScan->target_type) {
+ case LabelSupportedElement::PART:
+ return $this->urlGenerator->generate('app_part_show', ['id' => $barcodeScan->target_id]);
+ case LabelSupportedElement::PART_LOT:
+ //Try to determine the part to the given lot
+ $lot = $this->em->find(PartLot::class, $barcodeScan->target_id);
+ if (!$lot instanceof PartLot) {
+ throw new EntityNotFoundException();
+ }
+
+ return $this->urlGenerator->generate('app_part_show', ['id' => $lot->getPart()->getID()]);
+
+ case LabelSupportedElement::STORELOCATION:
+ return $this->urlGenerator->generate('part_list_store_location', ['id' => $barcodeScan->target_id]);
+
+ default:
+ throw new InvalidArgumentException('Unknown $type: '.$barcodeScan->target_type->name);
+ }
+ }
+
+ /**
+ * Gets the URL to a part from a scan of a Vendor Barcode
+ */
+ private function getURLVendorBarcode(EIGP114BarcodeScanResult $barcodeScan): string
+ {
+ $part = $this->getPartFromVendor($barcodeScan);
+ return $this->urlGenerator->generate('app_part_show', ['id' => $part->getID()]);
+ }
+
+ /**
+ * Gets a part from a scan of a Vendor Barcode by filtering for parts
+ * with the same Info Provider Id or, if that fails, by looking for parts with a
+ * matching manufacturer product number. Only returns the first matching part.
+ */
+ private function getPartFromVendor(EIGP114BarcodeScanResult $barcodeScan) : Part
+ {
+ // first check via the info provider ID (e.g. Vendor ID). This might fail if the part was not added via
+ // the info provider system or if the part was bought from a different vendor than the data was retrieved
+ // from.
+ if($barcodeScan->digikeyPartNumber) {
+ $qb = $this->em->getRepository(Part::class)->createQueryBuilder('part');
+ //Lower() to be case insensitive
+ $qb->where($qb->expr()->like('LOWER(part.providerReference.provider_id)', 'LOWER(:vendor_id)'));
+ $qb->setParameter('vendor_id', $barcodeScan->digikeyPartNumber);
+ $results = $qb->getQuery()->getResult();
+ if ($results) {
+ return $results[0];
+ }
+ }
+
+ if(!$barcodeScan->supplierPartNumber){
+ throw new EntityNotFoundException();
+ }
+
+ //Fallback to the manufacturer part number. This may return false positives, since it is common for
+ //multiple manufacturers to use the same part number for their version of a common product
+ //We assume the user is able to realize when this returns the wrong part
+ //If the barcode specifies the manufacturer we try to use that as well
+ $mpnQb = $this->em->getRepository(Part::class)->createQueryBuilder('part');
+ $mpnQb->where($mpnQb->expr()->like('LOWER(part.manufacturer_product_number)', 'LOWER(:mpn)'));
+ $mpnQb->setParameter('mpn', $barcodeScan->supplierPartNumber);
+
+ if($barcodeScan->mouserManufacturer){
+ $manufacturerQb = $this->em->getRepository(Manufacturer::class)->createQueryBuilder("manufacturer");
+ $manufacturerQb->where($manufacturerQb->expr()->like("LOWER(manufacturer.name)", "LOWER(:manufacturer_name)"));
+ $manufacturerQb->setParameter("manufacturer_name", $barcodeScan->mouserManufacturer);
+ $manufacturers = $manufacturerQb->getQuery()->getResult();
+
+ if($manufacturers) {
+ $mpnQb->andWhere($mpnQb->expr()->eq("part.manufacturer", ":manufacturer"));
+ $mpnQb->setParameter("manufacturer", $manufacturers);
+ }
+
+ }
+
+ $results = $mpnQb->getQuery()->getResult();
+ if($results){
+ return $results[0];
+ }
+ throw new EntityNotFoundException();
+ }
+}
diff --git a/src/Services/LabelSystem/Barcodes/BarcodeScanHelper.php b/src/Services/LabelSystem/BarcodeScanner/BarcodeScanHelper.php
similarity index 81%
rename from src/Services/LabelSystem/Barcodes/BarcodeScanHelper.php
rename to src/Services/LabelSystem/BarcodeScanner/BarcodeScanHelper.php
index c9750ea3..e5930b36 100644
--- a/src/Services/LabelSystem/Barcodes/BarcodeScanHelper.php
+++ b/src/Services/LabelSystem/BarcodeScanner/BarcodeScanHelper.php
@@ -39,7 +39,7 @@ declare(strict_types=1);
* along with this program. If not, see .
*/
-namespace App\Services\LabelSystem\Barcodes;
+namespace App\Services\LabelSystem\BarcodeScanner;
use App\Entity\LabelSystem\LabelSupportedElement;
use App\Entity\Parts\Part;
@@ -75,20 +75,23 @@ final class BarcodeScanHelper
* will try to guess the type.
* @param string $input
* @param BarcodeSourceType|null $type
- * @return BarcodeScanResult
+ * @return BarcodeScanResultInterface
*/
- public function scanBarcodeContent(string $input, ?BarcodeSourceType $type = null): BarcodeScanResult
+ public function scanBarcodeContent(string $input, ?BarcodeSourceType $type = null): BarcodeScanResultInterface
{
//Do specific parsing
if ($type === BarcodeSourceType::INTERNAL) {
return $this->parseInternalBarcode($input) ?? throw new InvalidArgumentException('Could not parse barcode');
}
- if ($type === BarcodeSourceType::VENDOR) {
- return $this->parseVendorBarcode($input) ?? throw new InvalidArgumentException('Could not parse barcode');
+ if ($type === BarcodeSourceType::USER_DEFINED) {
+ return $this->parseUserDefinedBarcode($input) ?? throw new InvalidArgumentException('Could not parse barcode');
}
if ($type === BarcodeSourceType::IPN) {
return $this->parseIPNBarcode($input) ?? throw new InvalidArgumentException('Could not parse barcode');
}
+ if ($type === BarcodeSourceType::EIGP114) {
+ return $this->parseEIGP114Barcode($input);
+ }
//Null means auto and we try the different formats
$result = $this->parseInternalBarcode($input);
@@ -97,12 +100,17 @@ final class BarcodeScanHelper
return $result;
}
- //Try to parse as vendor barcode
- $result = $this->parseVendorBarcode($input);
+ //Try to parse as User defined barcode
+ $result = $this->parseUserDefinedBarcode($input);
if ($result !== null) {
return $result;
}
+ //If the barcode is formatted as EIGP114, we can parse it directly
+ if (EIGP114BarcodeScanResult::isFormat06Code($input)) {
+ return $this->parseEIGP114Barcode($input);
+ }
+
//Try to parse as IPN barcode
$result = $this->parseIPNBarcode($input);
if ($result !== null) {
@@ -112,11 +120,16 @@ final class BarcodeScanHelper
throw new InvalidArgumentException('Unknown barcode');
}
- private function parseVendorBarcode(string $input): ?BarcodeScanResult
+ private function parseEIGP114Barcode(string $input): EIGP114BarcodeScanResult
+ {
+ return EIGP114BarcodeScanResult::parseFormat06Code($input);
+ }
+
+ private function parseUserDefinedBarcode(string $input): ?LocalBarcodeScanResult
{
$lot_repo = $this->entityManager->getRepository(PartLot::class);
//Find only the first result
- $results = $lot_repo->findBy(['vendor_barcode' => $input], limit: 1);
+ $results = $lot_repo->findBy(['user_barcode' => $input], limit: 1);
if (count($results) === 0) {
return null;
@@ -124,14 +137,14 @@ final class BarcodeScanHelper
//We found a part, so use it to create the result
$lot = $results[0];
- return new BarcodeScanResult(
+ return new LocalBarcodeScanResult(
target_type: LabelSupportedElement::PART_LOT,
target_id: $lot->getID(),
- source_type: BarcodeSourceType::VENDOR
+ source_type: BarcodeSourceType::USER_DEFINED
);
}
- private function parseIPNBarcode(string $input): ?BarcodeScanResult
+ private function parseIPNBarcode(string $input): ?LocalBarcodeScanResult
{
$part_repo = $this->entityManager->getRepository(Part::class);
//Find only the first result
@@ -143,7 +156,7 @@ final class BarcodeScanHelper
//We found a part, so use it to create the result
$part = $results[0];
- return new BarcodeScanResult(
+ return new LocalBarcodeScanResult(
target_type: LabelSupportedElement::PART,
target_id: $part->getID(),
source_type: BarcodeSourceType::IPN
@@ -155,9 +168,9 @@ final class BarcodeScanHelper
* If the barcode could not be parsed at all, null is returned. If the barcode is a valid format, but could
* not be found in the database, an exception is thrown.
* @param string $input
- * @return BarcodeScanResult|null
+ * @return LocalBarcodeScanResult|null
*/
- private function parseInternalBarcode(string $input): ?BarcodeScanResult
+ private function parseInternalBarcode(string $input): ?LocalBarcodeScanResult
{
$input = trim($input);
$matches = [];
@@ -167,7 +180,7 @@ final class BarcodeScanHelper
//Extract parts from QR code's URL
if (preg_match('#^https?://.*/scan/(\w+)/(\d+)/?$#', $input, $matches)) {
- return new BarcodeScanResult(
+ return new LocalBarcodeScanResult(
target_type: self::QR_TYPE_MAP[strtolower($matches[1])],
target_id: (int) $matches[2],
source_type: BarcodeSourceType::INTERNAL
@@ -183,7 +196,7 @@ final class BarcodeScanHelper
throw new InvalidArgumentException('Unknown prefix '.$prefix);
}
- return new BarcodeScanResult(
+ return new LocalBarcodeScanResult(
target_type: self::PREFIX_TYPE_MAP[$prefix],
target_id: $id,
source_type: BarcodeSourceType::INTERNAL
@@ -199,7 +212,7 @@ final class BarcodeScanHelper
throw new InvalidArgumentException('Unknown prefix '.$prefix);
}
- return new BarcodeScanResult(
+ return new LocalBarcodeScanResult(
target_type: self::PREFIX_TYPE_MAP[$prefix],
target_id: $id,
source_type: BarcodeSourceType::INTERNAL
@@ -208,7 +221,7 @@ final class BarcodeScanHelper
//Legacy Part-DB location labels used $L00336 format
if (preg_match('#^\$L(\d{5,})$#', $input, $matches)) {
- return new BarcodeScanResult(
+ return new LocalBarcodeScanResult(
target_type: LabelSupportedElement::STORELOCATION,
target_id: (int) $matches[1],
source_type: BarcodeSourceType::INTERNAL
@@ -217,7 +230,7 @@ final class BarcodeScanHelper
//Legacy Part-DB used EAN8 barcodes for part labels. Format 0000001(2) (note the optional 8th digit => checksum)
if (preg_match('#^(\d{7})\d?$#', $input, $matches)) {
- return new BarcodeScanResult(
+ return new LocalBarcodeScanResult(
target_type: LabelSupportedElement::PART,
target_id: (int) $matches[1],
source_type: BarcodeSourceType::INTERNAL
diff --git a/src/Services/LabelSystem/BarcodeScanner/BarcodeScanResultInterface.php b/src/Services/LabelSystem/BarcodeScanner/BarcodeScanResultInterface.php
new file mode 100644
index 00000000..88130351
--- /dev/null
+++ b/src/Services/LabelSystem/BarcodeScanner/BarcodeScanResultInterface.php
@@ -0,0 +1,36 @@
+.
+ */
+
+declare(strict_types=1);
+
+
+namespace App\Services\LabelSystem\BarcodeScanner;
+
+interface BarcodeScanResultInterface
+{
+ /**
+ * Returns all data that was decoded from the barcode in a format, that can be shown in a table to the user.
+ * The return values of this function are not meant to be parsed by code again, but should just give a information
+ * to the user.
+ * The keys of the returned array are the first column of the table and the values are the second column.
+ * @return array
+ */
+ public function getDecodedForInfoMode(): array;
+}
\ No newline at end of file
diff --git a/src/Services/LabelSystem/Barcodes/BarcodeSourceType.php b/src/Services/LabelSystem/BarcodeScanner/BarcodeSourceType.php
similarity index 83%
rename from src/Services/LabelSystem/Barcodes/BarcodeSourceType.php
rename to src/Services/LabelSystem/BarcodeScanner/BarcodeSourceType.php
index 20ba316a..40f707de 100644
--- a/src/Services/LabelSystem/Barcodes/BarcodeSourceType.php
+++ b/src/Services/LabelSystem/BarcodeScanner/BarcodeSourceType.php
@@ -21,7 +21,7 @@
declare(strict_types=1);
-namespace App\Services\LabelSystem\Barcodes;
+namespace App\Services\LabelSystem\BarcodeScanner;
/**
* This enum represents the different types, where a barcode/QR-code can be generated from
@@ -32,9 +32,14 @@ enum BarcodeSourceType
case INTERNAL;
/** This barcode is containing an internal part number (IPN) */
case IPN;
+
/**
- * This barcode is a custom barcode from a third party like a vendor, which was set via the vendor_barcode
- * field of a part lot.
+ * This barcode is a user defined barcode defined on a part lot
*/
- case VENDOR;
+ case USER_DEFINED;
+
+ /**
+ * EIGP114 formatted barcodes like used by digikey, mouser, etc.
+ */
+ case EIGP114;
}
\ No newline at end of file
diff --git a/src/Services/LabelSystem/BarcodeScanner/EIGP114BarcodeScanResult.php b/src/Services/LabelSystem/BarcodeScanner/EIGP114BarcodeScanResult.php
new file mode 100644
index 00000000..0b4f4b56
--- /dev/null
+++ b/src/Services/LabelSystem/BarcodeScanner/EIGP114BarcodeScanResult.php
@@ -0,0 +1,332 @@
+.
+ */
+
+declare(strict_types=1);
+
+
+namespace App\Services\LabelSystem\BarcodeScanner;
+
+/**
+ * This class represents the content of a EIGP114 barcode.
+ * Based on PR 811, EIGP 114.2018 (https://www.ecianow.org/assets/docs/GIPC/EIGP-114.2018%20ECIA%20Labeling%20Specification%20for%20Product%20and%20Shipment%20Identification%20in%20the%20Electronics%20Industry%20-%202D%20Barcode.pdf),
+ * , https://forum.digikey.com/t/digikey-product-labels-decoding-digikey-barcodes/41097
+ */
+class EIGP114BarcodeScanResult implements BarcodeScanResultInterface
+{
+
+ /**
+ * @var string|null Ship date in format YYYYMMDD
+ */
+ public readonly ?string $shipDate;
+
+ /**
+ * @var string|null Customer assigned part number – Optional based on
+ * agreements between Distributor and Supplier
+ */
+ public readonly ?string $customerPartNumber;
+
+ /**
+ * @var string|null Supplier assigned part number
+ */
+ public readonly ?string $supplierPartNumber;
+
+ /**
+ * @var int|null Quantity of product
+ */
+ public readonly ?int $quantity;
+
+ /**
+ * @var string|null Customer assigned purchase order number
+ */
+ public readonly ?string $customerPO;
+
+ /**
+ * @var string|null Line item number from PO. Required on Logistic Label when
+ * used on back of Packing Slip. See Section 4.9
+ */
+ public readonly ?string $customerPOLine;
+
+ /**
+ * 9D - YYWW (Year and Week of Manufacture). ) If no date code is used
+ * for a particular part, this field should be populated with N/T
+ * to indicate the product is Not Traceable by this data field.
+ * @var string|null
+ */
+ public readonly ?string $dateCode;
+
+ /**
+ * 10D - YYWW (Year and Week of Manufacture). ) If no date code is used
+ * for a particular part, this field should be populated with N/T
+ * to indicate the product is Not Traceable by this data field.
+ * @var string|null
+ */
+ public readonly ?string $alternativeDateCode;
+
+ /**
+ * Traceability number assigned to a batch or group of items. If
+ * no lot code is used for a particular part, this field should be
+ * populated with N/T to indicate the product is Not Traceable
+ * by this data field.
+ * @var string|null
+ */
+ public readonly ?string $lotCode;
+
+ /**
+ * Country where part was manufactured. Two-letter code from
+ * ISO 3166 country code list
+ * @var string|null
+ */
+ public readonly ?string $countryOfOrigin;
+
+ /**
+ * @var string|null Unique alphanumeric number assigned by supplier
+ * 3S - Package ID for Inner Pack when part of a mixed Logistic
+ * Carton. Always used in conjunction with a mixed logistic label
+ * with a 5S data identifier for Package ID.
+ */
+ public readonly ?string $packageId1;
+
+ /**
+ * @var string|null
+ * 4S - Package ID for Logistic Carton with like items
+ */
+ public readonly ?string $packageId2;
+
+ /**
+ * @var string|null
+ * 5S - Package ID for Logistic Carton with mixed items
+ */
+ public readonly ?string $packageId3;
+
+ /**
+ * @var string|null Unique alphanumeric number assigned by supplier.
+ */
+ public readonly ?string $packingListNumber;
+
+ /**
+ * @var string|null Ship date in format YYYYMMDD
+ */
+ public readonly ?string $serialNumber;
+
+ /**
+ * @var string|null Code for sorting and classifying LEDs. Use when applicable
+ */
+ public readonly ?string $binCode;
+
+ /**
+ * @var int|null Sequential carton count in format “#/#” or “# of #”
+ */
+ public readonly ?int $packageCount;
+
+ /**
+ * @var string|null Alphanumeric string assigned by the supplier to distinguish
+ * from one closely-related design variation to another. Use as
+ * required or when applicable
+ */
+ public readonly ?string $revisionNumber;
+
+ /**
+ * @var string|null Digikey Extension: This is not represented in the ECIA spec, but the field being used is found in the ANSI MH10.8.2-2016 spec on which the ECIA spec is based. In the ANSI spec it is called First Level (Supplier Assigned) Part Number.
+ */
+ public readonly ?string $digikeyPartNumber;
+
+ /**
+ * @var string|null Digikey Extension: This can be shared across multiple invoices and time periods and is generated as an order enters our system from any vector (web, API, phone order, etc.)
+ */
+ public readonly ?string $digikeySalesOrderNumber;
+
+ /**
+ * @var string|null Digikey extension: This is typically assigned per shipment as items are being released to be picked in the warehouse. A SO can have many Invoice numbers
+ */
+ public readonly ?string $digikeyInvoiceNumber;
+
+ /**
+ * @var string|null Digikey extension: This is for internal DigiKey purposes and defines the label type.
+ */
+ public readonly ?string $digikeyLabelType;
+
+ /**
+ * @var string|null You will also see this as the last part of a URL for a product detail page. Ex https://www.digikey.com/en/products/detail/w%C3%BCrth-elektronik/860010672008/5726907
+ */
+ public readonly ?string $digikeyPartID;
+
+ /**
+ * @var string|null Digikey Extension: For internal use of Digikey. Probably not needed
+ */
+ public readonly ?string $digikeyNA;
+
+ /**
+ * @var string|null Digikey Extension: This is a field of varying length used to keep the barcode approximately the same size between labels. It is safe to ignore.
+ */
+ public readonly ?string $digikeyPadding;
+
+ public readonly ?string $mouserPositionInOrder;
+
+ public readonly ?string $mouserManufacturer;
+
+
+
+ /**
+ *
+ * @param array $data The fields of the EIGP114 barcode, where the key is the field name and the value is the field content
+ */
+ public function __construct(public readonly array $data)
+ {
+ //IDs per EIGP 114.2018
+ $this->shipDate = $data['6D'] ?? null;
+ $this->customerPartNumber = $data['P'] ?? null;
+ $this->supplierPartNumber = $data['1P'] ?? null;
+ $this->quantity = isset($data['Q']) ? (int)$data['Q'] : null;
+ $this->customerPO = $data['K'] ?? null;
+ $this->customerPOLine = $data['4K'] ?? null;
+ $this->dateCode = $data['9D'] ?? null;
+ $this->alternativeDateCode = $data['10D'] ?? null;
+ $this->lotCode = $data['1T'] ?? null;
+ $this->countryOfOrigin = $data['4L'] ?? null;
+ $this->packageId1 = $data['3S'] ?? null;
+ $this->packageId2 = $data['4S'] ?? null;
+ $this->packageId3 = $data['5S'] ?? null;
+ $this->packingListNumber = $data['11K'] ?? null;
+ $this->serialNumber = $data['S'] ?? null;
+ $this->binCode = $data['33P'] ?? null;
+ $this->packageCount = isset($data['13Q']) ? (int)$data['13Q'] : null;
+ $this->revisionNumber = $data['2P'] ?? null;
+ //IDs used by Digikey
+ $this->digikeyPartNumber = $data['30P'] ?? null;
+ $this->digikeySalesOrderNumber = $data['1K'] ?? null;
+ $this->digikeyInvoiceNumber = $data['10K'] ?? null;
+ $this->digikeyLabelType = $data['11Z'] ?? null;
+ $this->digikeyPartID = $data['12Z'] ?? null;
+ $this->digikeyNA = $data['13Z'] ?? null;
+ $this->digikeyPadding = $data['20Z'] ?? null;
+ //IDs used by Mouser
+ $this->mouserPositionInOrder = $data['14K'] ?? null;
+ $this->mouserManufacturer = $data['1V'] ?? null;
+ }
+
+ /**
+ * Tries to guess the vendor of the barcode based on the supplied data field.
+ * This is experimental and should not be relied upon.
+ * @return string|null The guessed vendor as smallcase string (e.g. "digikey", "mouser", etc.), or null if the vendor could not be guessed
+ */
+ public function guessBarcodeVendor(): ?string
+ {
+ //If the barcode data contains the digikey extensions, we assume it is a digikey barcode
+ if (isset($this->data['13Z']) || isset($this->data['20Z']) || isset($this->data['12Z']) || isset($this->data['11Z'])) {
+ return 'digikey';
+ }
+
+ //If the barcode data contains the mouser extensions, we assume it is a mouser barcode
+ if (isset($this->data['14K']) || isset($this->data['1V'])) {
+ return 'mouser';
+ }
+
+ //According to this thread (https://github.com/inventree/InvenTree/issues/853), Newark/element14 codes contains a "3P" field
+ if (isset($this->data['3P'])) {
+ return 'element14';
+ }
+
+ return null;
+ }
+
+ /**
+ * Checks if the given input is a valid format06 formatted data.
+ * This just perform a simple check for the header, the content might be malformed still.
+ * @param string $input
+ * @return bool
+ */
+ public static function isFormat06Code(string $input): bool
+ {
+ //Code must begin with [)>06
+ if(!str_starts_with($input, "[)>\u{1E}06\u{1D}")){
+ return false;
+ }
+
+ //Digikey does not put a trailer onto the barcode, so we just check for the header
+
+ return true;
+ }
+
+ /**
+ * Parses a format06 code a returns a new instance of this class
+ * @param string $input
+ * @return self
+ */
+ public static function parseFormat06Code(string $input): self
+ {
+ //Ensure that the input is a valid format06 code
+ if (!self::isFormat06Code($input)) {
+ throw new \InvalidArgumentException("The given input is not a valid format06 code");
+ }
+
+ //Remove the trailer, if present
+ if (str_ends_with($input, "\u{1E}\u{04}")){
+ $input = substr($input, 5, -2);
+ }
+
+ //Split the input into the different fields (using the separator)
+ $parts = explode("\u{1D}", $input);
+
+ //The first field is the format identifier, which we do not need
+ array_shift($parts);
+
+ //Split the fields into key-value pairs
+ $results = [];
+
+ foreach($parts as $part) {
+ //^ 0* ([1-9]? \d* [A-Z])
+ //Start of the string Leading zeros are discarded Not a zero Any number of digits single uppercase Letter
+ // 00 1 4 K
+
+ if(!preg_match('/^0*([1-9]?\d*[A-Z])/', $part, $matches)) {
+ throw new \LogicException("Could not parse field: $part");
+ }
+ //Extract the key
+ $key = $matches[0];
+ //Extract the field value
+ $fieldValue = substr($part, strlen($matches[0]));
+
+ $results[$key] = $fieldValue;
+ }
+
+ return new self($results);
+ }
+
+ public function getDecodedForInfoMode(): array
+ {
+ $tmp = [
+ 'Barcode type' => 'EIGP114',
+ 'Guessed vendor from barcode' => $this->guessBarcodeVendor() ?? 'Unknown',
+ ];
+
+ //Iterate over all fields of this object and add them to the array if they are not null
+ foreach((array) $this as $key => $value) {
+ //Skip data key
+ if ($key === 'data') {
+ continue;
+ }
+ if($value !== null) {
+ $tmp[$key] = $value;
+ }
+ }
+
+ return $tmp;
+ }
+}
\ No newline at end of file
diff --git a/src/Services/LabelSystem/Barcodes/BarcodeScanResult.php b/src/Services/LabelSystem/BarcodeScanner/LocalBarcodeScanResult.php
similarity index 66%
rename from src/Services/LabelSystem/Barcodes/BarcodeScanResult.php
rename to src/Services/LabelSystem/BarcodeScanner/LocalBarcodeScanResult.php
index 7f1315b3..050aff6f 100644
--- a/src/Services/LabelSystem/Barcodes/BarcodeScanResult.php
+++ b/src/Services/LabelSystem/BarcodeScanner/LocalBarcodeScanResult.php
@@ -21,14 +21,15 @@
declare(strict_types=1);
-namespace App\Services\LabelSystem\Barcodes;
+namespace App\Services\LabelSystem\BarcodeScanner;
use App\Entity\LabelSystem\LabelSupportedElement;
/**
- * This class represents the result of a barcode scan, with the target type and the ID of the element
+ * This class represents the result of a barcode scan of a barcode that uniquely identifies a local entity,
+ * like an internally generated barcode or a barcode that was added manually to the system by a user
*/
-class BarcodeScanResult
+class LocalBarcodeScanResult implements BarcodeScanResultInterface
{
public function __construct(
public readonly LabelSupportedElement $target_type,
@@ -36,4 +37,13 @@ class BarcodeScanResult
public readonly BarcodeSourceType $source_type,
) {
}
+
+ public function getDecodedForInfoMode(): array
+ {
+ return [
+ 'Barcode type' => $this->source_type->name,
+ 'Target type' => $this->target_type->name,
+ 'Target ID' => $this->target_id,
+ ];
+ }
}
\ No newline at end of file
diff --git a/src/Services/LabelSystem/Barcodes/BarcodeRedirector.php b/src/Services/LabelSystem/Barcodes/BarcodeRedirector.php
deleted file mode 100644
index bc21b787..00000000
--- a/src/Services/LabelSystem/Barcodes/BarcodeRedirector.php
+++ /dev/null
@@ -1,89 +0,0 @@
-.
- */
-
-declare(strict_types=1);
-
-/**
- * This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony).
- *
- * Copyright (C) 2019 - 2022 Jan Böhmer (https://github.com/jbtronics)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-namespace App\Services\LabelSystem\Barcodes;
-
-use App\Entity\LabelSystem\LabelSupportedElement;
-use App\Entity\Parts\PartLot;
-use Doctrine\ORM\EntityManagerInterface;
-use Doctrine\ORM\EntityNotFoundException;
-use InvalidArgumentException;
-use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
-
-/**
- * @see \App\Tests\Services\LabelSystem\Barcodes\BarcodeRedirectorTest
- */
-final class BarcodeRedirector
-{
- public function __construct(private readonly UrlGeneratorInterface $urlGenerator, private readonly EntityManagerInterface $em)
- {
- }
-
- /**
- * Determines the URL to which the user should be redirected, when scanning a QR code.
- *
- * @param BarcodeScanResult $barcodeScan The result of the barcode scan
- * @return string the URL to which should be redirected
- *
- * @throws EntityNotFoundException
- */
- public function getRedirectURL(BarcodeScanResult $barcodeScan): string
- {
- switch ($barcodeScan->target_type) {
- case LabelSupportedElement::PART:
- return $this->urlGenerator->generate('app_part_show', ['id' => $barcodeScan->target_id]);
- case LabelSupportedElement::PART_LOT:
- //Try to determine the part to the given lot
- $lot = $this->em->find(PartLot::class, $barcodeScan->target_id);
- if (!$lot instanceof PartLot) {
- throw new EntityNotFoundException();
- }
-
- return $this->urlGenerator->generate('app_part_show', ['id' => $lot->getPart()->getID()]);
-
- case LabelSupportedElement::STORELOCATION:
- return $this->urlGenerator->generate('part_list_store_location', ['id' => $barcodeScan->target_id]);
-
- default:
- throw new InvalidArgumentException('Unknown $type: '.$barcodeScan->target_type->name);
- }
- }
-}
diff --git a/src/Services/LabelSystem/LabelExampleElementsGenerator.php b/src/Services/LabelSystem/LabelExampleElementsGenerator.php
index 199d5f46..d344c929 100644
--- a/src/Services/LabelSystem/LabelExampleElementsGenerator.php
+++ b/src/Services/LabelSystem/LabelExampleElementsGenerator.php
@@ -146,11 +146,11 @@ final class LabelExampleElementsGenerator
throw new InvalidArgumentException('$class must be an child of AbstractStructuralDBElement');
}
- /** @var AbstractStructuralDBElement $parent */
+ /** @var T $parent */
$parent = new $class();
$parent->setName('Example');
- /** @var AbstractStructuralDBElement $child */
+ /** @var T $child */
$child = new $class();
$child->setName((new ReflectionClass($class))->getShortName());
$child->setParent($parent);
diff --git a/src/Services/LabelSystem/LabelGenerator.php b/src/Services/LabelSystem/LabelGenerator.php
index d2b20c92..bfb8d27b 100644
--- a/src/Services/LabelSystem/LabelGenerator.php
+++ b/src/Services/LabelSystem/LabelGenerator.php
@@ -62,10 +62,6 @@ final class LabelGenerator
*/
public function generateLabel(LabelOptions $options, object|array $elements): string
{
- if (!is_array($elements) && !is_object($elements)) {
- throw new InvalidArgumentException('$element must be an object or an array of objects!');
- }
-
if (!is_array($elements)) {
$elements = [$elements];
}
diff --git a/src/Services/LabelSystem/LabelProfileDropdownHelper.php b/src/Services/LabelSystem/LabelProfileDropdownHelper.php
index ac5020a2..773923ab 100644
--- a/src/Services/LabelSystem/LabelProfileDropdownHelper.php
+++ b/src/Services/LabelSystem/LabelProfileDropdownHelper.php
@@ -74,8 +74,7 @@ final class LabelProfileDropdownHelper
$secure_class_name = $this->tagGenerator->getElementTypeCacheTag(LabelProfile::class);
$key = 'profile_dropdown_'.$this->keyGenerator->generateKey().'_'.$secure_class_name.'_'.$type->value;
-
- /** @var LabelProfileRepository $repo */
+
$repo = $this->entityManager->getRepository(LabelProfile::class);
return $this->cache->get($key, function (ItemInterface $item) use ($repo, $type, $secure_class_name) {
diff --git a/src/Services/LabelSystem/PlaceholderProviders/BarcodeProvider.php b/src/Services/LabelSystem/PlaceholderProviders/BarcodeProvider.php
index dd70177f..400fef35 100644
--- a/src/Services/LabelSystem/PlaceholderProviders/BarcodeProvider.php
+++ b/src/Services/LabelSystem/PlaceholderProviders/BarcodeProvider.php
@@ -63,12 +63,24 @@ final class BarcodeProvider implements PlaceholderProviderInterface
return $this->barcodeGenerator->generateHTMLBarcode($label_options, $label_target);
}
+ if ('[[BARCODE_DATAMATRIX]]' === $placeholder) {
+ $label_options = new LabelOptions();
+ $label_options->setBarcodeType(BarcodeType::DATAMATRIX);
+ return $this->barcodeGenerator->generateHTMLBarcode($label_options, $label_target);
+ }
+
if ('[[BARCODE_C39]]' === $placeholder) {
$label_options = new LabelOptions();
$label_options->setBarcodeType(BarcodeType::CODE39);
return $this->barcodeGenerator->generateHTMLBarcode($label_options, $label_target);
}
+ if ('[[BARCODE_C93]]' === $placeholder) {
+ $label_options = new LabelOptions();
+ $label_options->setBarcodeType(BarcodeType::CODE93);
+ return $this->barcodeGenerator->generateHTMLBarcode($label_options, $label_target);
+ }
+
if ('[[BARCODE_C128]]' === $placeholder) {
$label_options = new LabelOptions();
$label_options->setBarcodeType(BarcodeType::CODE128);
diff --git a/src/Services/LabelSystem/SandboxedTwigFactory.php b/src/Services/LabelSystem/SandboxedTwigFactory.php
index cdf0594f..d6ea6968 100644
--- a/src/Services/LabelSystem/SandboxedTwigFactory.php
+++ b/src/Services/LabelSystem/SandboxedTwigFactory.php
@@ -122,8 +122,8 @@ final class SandboxedTwigFactory
'getFullPath', 'getPathArray', 'getSubelements', 'getChildren', 'isNotSelectable', ],
AbstractCompany::class => ['getAddress', 'getPhoneNumber', 'getFaxNumber', 'getEmailAddress', 'getWebsite', 'getAutoProductUrl'],
AttachmentContainingDBElement::class => ['getAttachments', 'getMasterPictureAttachment'],
- Attachment::class => ['isPicture', 'is3DModel', 'isExternal', 'isSecure', 'isBuiltIn', 'getExtension',
- 'getElement', 'getURL', 'getHost', 'getFilename', 'getAttachmentType', 'getShowInTable', ],
+ Attachment::class => ['isPicture', 'is3DModel', 'hasExternal', 'hasInternal', 'isSecure', 'isBuiltIn', 'getExtension',
+ 'getElement', 'getExternalPath', 'getHost', 'getFilename', 'getAttachmentType', 'getShowInTable'],
AbstractParameter::class => ['getFormattedValue', 'getGroup', 'getSymbol', 'getValueMin', 'getValueMax',
'getValueTypical', 'getUnit', 'getValueText', ],
MeasurementUnit::class => ['getUnit', 'isInteger', 'useSIPrefix'],
diff --git a/src/Services/Parts/PartsTableActionHandler.php b/src/Services/Parts/PartsTableActionHandler.php
index bcfb3a8a..616df229 100644
--- a/src/Services/Parts/PartsTableActionHandler.php
+++ b/src/Services/Parts/PartsTableActionHandler.php
@@ -22,6 +22,7 @@ declare(strict_types=1);
*/
namespace App\Services\Parts;
+use App\Entity\Parts\StorageLocation;
use Symfony\Bundle\SecurityBundle\Security;
use App\Entity\Parts\Category;
use App\Entity\Parts\Footprint;
@@ -35,6 +36,9 @@ use InvalidArgumentException;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
+use Symfony\Contracts\Translation\TranslatableInterface;
+
+use function Symfony\Component\Translation\t;
final class PartsTableActionHandler
{
@@ -53,7 +57,6 @@ final class PartsTableActionHandler
{
$id_array = explode(',', $ids);
- /** @var PartRepository $repo */
$repo = $this->entityManager->getRepository(Part::class);
return $repo->getElementsFromIDArray($id_array);
@@ -62,8 +65,9 @@ final class PartsTableActionHandler
/**
* @param Part[] $selected_parts
* @return RedirectResponse|null Returns a redirect response if the user should be redirected to another page, otherwise null
+ * //@param-out list|array $errors
*/
- public function handleAction(string $action, array $selected_parts, ?int $target_id, ?string $redirect_url = null): ?RedirectResponse
+ public function handleAction(string $action, array $selected_parts, ?int $target_id, ?string $redirect_url = null, array &$errors = []): ?RedirectResponse
{
if ($action === 'add_to_project') {
return new RedirectResponse(
@@ -162,6 +166,29 @@ implode(',', array_map(static fn (PartLot $lot) => $lot->getID(), $part->getPart
$this->denyAccessUnlessGranted('@measurement_units.read');
$part->setPartUnit(null === $target_id ? null : $this->entityManager->find(MeasurementUnit::class, $target_id));
break;
+ case 'change_location':
+ $this->denyAccessUnlessGranted('@storelocations.read');
+ //Retrieve the first part lot and set the location for it
+ $part_lots = $part->getPartLots();
+ if ($part_lots->count() > 0) {
+ if ($part_lots->count() > 1) {
+ $errors[] = [
+ 'part' => $part,
+ 'message' => t('parts.table.action_handler.error.part_lots_multiple'),
+ ];
+ break;
+ }
+
+ $part_lot = $part_lots->first();
+ $part_lot->setStorageLocation(null === $target_id ? null : $this->entityManager->find(StorageLocation::class, $target_id));
+ } else { //Create a new part lot if there are none
+ $part_lot = new PartLot();
+ $part_lot->setPart($part);
+ $part_lot->setInstockUnknown(true); //We do not know how many parts are in stock, so we set it to true
+ $part_lot->setStorageLocation(null === $target_id ? null : $this->entityManager->find(StorageLocation::class, $target_id));
+ $this->entityManager->persist($part_lot);
+ }
+ break;
default:
throw new InvalidArgumentException('The given action is unknown! ('.$action.')');
diff --git a/src/Services/System/BannerHelper.php b/src/Services/System/BannerHelper.php
index 1b6da52a..3d5daef9 100644
--- a/src/Services/System/BannerHelper.php
+++ b/src/Services/System/BannerHelper.php
@@ -40,9 +40,6 @@ class BannerHelper
public function getBanner(): string
{
$banner = $this->partdb_banner;
- if (!is_string($banner)) {
- throw new \RuntimeException('The parameter "partdb.banner" must be a string.');
- }
if ($banner === '') {
$banner_path = $this->project_dir
.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'banner.md';
diff --git a/src/Services/Tools/StatisticsHelper.php b/src/Services/Tools/StatisticsHelper.php
index c1cace21..00bb05c9 100644
--- a/src/Services/Tools/StatisticsHelper.php
+++ b/src/Services/Tools/StatisticsHelper.php
@@ -122,7 +122,6 @@ class StatisticsHelper
throw new InvalidArgumentException('No count for the given type available!');
}
- /** @var EntityRepository $repo */
$repo = $this->em->getRepository($arr[$type]);
return $repo->count([]);
diff --git a/src/Services/Tools/TagFinder.php b/src/Services/Tools/TagFinder.php
index bfc7c9db..80c89e0f 100644
--- a/src/Services/Tools/TagFinder.php
+++ b/src/Services/Tools/TagFinder.php
@@ -66,7 +66,7 @@ class TagFinder
$qb->select('p.tags')
->from(Part::class, 'p')
- ->where('p.tags LIKE ?1')
+ ->where('ILIKE(p.tags, ?1) = TRUE')
->setMaxResults($options['query_limit'])
//->orderBy('RAND()')
->setParameter(1, '%'.$keyword.'%');
diff --git a/src/Services/Trees/NodesListBuilder.php b/src/Services/Trees/NodesListBuilder.php
index 0f94d79d..e65fa37e 100644
--- a/src/Services/Trees/NodesListBuilder.php
+++ b/src/Services/Trees/NodesListBuilder.php
@@ -23,9 +23,11 @@ declare(strict_types=1);
namespace App\Services\Trees;
use App\Entity\Base\AbstractDBElement;
+use App\Entity\Base\AbstractNamedDBElement;
use App\Entity\Base\AbstractStructuralDBElement;
use App\Repository\AttachmentContainingDBElementRepository;
use App\Repository\DBElementRepository;
+use App\Repository\NamedDBElementRepository;
use App\Repository\StructuralDBElementRepository;
use App\Services\Cache\ElementCacheTagGenerator;
use App\Services\Cache\UserCacheKeyGenerator;
@@ -51,7 +53,7 @@ class NodesListBuilder
* Gets a flattened hierarchical tree. Useful for generating option lists.
* In difference to the Repository Function, the results here are cached.
*
- * @template T of AbstractDBElement
+ * @template T of AbstractNamedDBElement
*
* @param string $class_name the class name of the entity you want to retrieve
* @phpstan-param class-string $class_name
@@ -69,7 +71,7 @@ class NodesListBuilder
$ids = $this->getFlattenedIDs($class_name, $parent);
//Retrieve the elements from the IDs, the order is the same as in the $ids array
- /** @var DBElementRepository $repo */
+ /** @var NamedDBElementRepository $repo */
$repo = $this->em->getRepository($class_name);
if ($repo instanceof AttachmentContainingDBElementRepository) {
@@ -81,7 +83,9 @@ class NodesListBuilder
/**
* This functions returns the (cached) list of the IDs of the elements for the flattened tree.
+ * @template T of AbstractNamedDBElement
* @param string $class_name
+ * @phpstan-param class-string $class_name
* @param AbstractStructuralDBElement|null $parent
* @return int[]
*/
@@ -96,10 +100,12 @@ class NodesListBuilder
// Invalidate when groups, an element with the class or the user changes
$item->tag(['groups', 'tree_list', $this->keyGenerator->generateKey(), $secure_class_name]);
- /** @var StructuralDBElementRepository $repo */
+ /** @var NamedDBElementRepository $repo */
$repo = $this->em->getRepository($class_name);
- return array_map(static fn(AbstractDBElement $element) => $element->getID(), $repo->getFlatList($parent));
+ return array_map(static fn(AbstractDBElement $element) => $element->getID(),
+ //@phpstan-ignore-next-line For some reason phpstan does not understand that $repo is a StructuralDBElementRepository
+ $repo->getFlatList($parent));
});
}
diff --git a/src/Services/Trees/TreeViewGenerator.php b/src/Services/Trees/TreeViewGenerator.php
index 81b64840..23d6a406 100644
--- a/src/Services/Trees/TreeViewGenerator.php
+++ b/src/Services/Trees/TreeViewGenerator.php
@@ -33,6 +33,7 @@ use App\Entity\Parts\Supplier;
use App\Entity\ProjectSystem\Project;
use App\Helpers\Trees\TreeViewNode;
use App\Helpers\Trees\TreeViewNodeIterator;
+use App\Repository\NamedDBElementRepository;
use App\Repository\StructuralDBElementRepository;
use App\Services\Cache\ElementCacheTagGenerator;
use App\Services\Cache\UserCacheKeyGenerator;
@@ -219,6 +220,7 @@ class TreeViewGenerator
* The treeview is generic, that means the href are null and ID values are set.
*
* @param string $class The class for which the tree should be generated
+ * @phpstan-param class-string $class
* @param AbstractStructuralDBElement|null $parent the parent the root elements should have
*
* @return TreeViewNode[]
@@ -232,12 +234,12 @@ class TreeViewGenerator
throw new InvalidArgumentException('$parent must be of the type $class!');
}
- /** @var StructuralDBElementRepository $repo */
+ /** @var NamedDBElementRepository $repo */
$repo = $this->em->getRepository($class);
//If we just want a part of a tree, don't cache it
if ($parent instanceof AbstractStructuralDBElement) {
- return $repo->getGenericNodeTree($parent);
+ return $repo->getGenericNodeTree($parent); //@phpstan-ignore-line PHPstan does not seem to recognize, that we have a StructuralDBElementRepository here, which have 1 argument
}
$secure_class_name = $this->tagGenerator->getElementTypeCacheTag($class);
@@ -246,7 +248,7 @@ class TreeViewGenerator
return $this->cache->get($key, function (ItemInterface $item) use ($repo, $parent, $secure_class_name) {
// Invalidate when groups, an element with the class or the user changes
$item->tag(['groups', 'tree_treeview', $this->keyGenerator->generateKey(), $secure_class_name]);
- return $repo->getGenericNodeTree($parent);
+ return $repo->getGenericNodeTree($parent); //@phpstan-ignore-line
});
}
}
diff --git a/src/Translation/Fixes/SegmentAwareXliffFileDumper.php b/src/Translation/Fixes/SegmentAwareXliffFileDumper.php
new file mode 100644
index 00000000..4b44ef01
--- /dev/null
+++ b/src/Translation/Fixes/SegmentAwareXliffFileDumper.php
@@ -0,0 +1,242 @@
+.
+ */
+
+declare(strict_types=1);
+
+
+namespace App\Translation\Fixes;
+
+use Symfony\Component\DependencyInjection\Attribute\AsDecorator;
+use Symfony\Component\Translation\Dumper\FileDumper;
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\Exception\InvalidArgumentException;
+
+/**
+ * Backport of the XliffFile dumper from Symfony 7.2, which supports segment attributes and notes, this keeps the
+ * metadata when editing the translations from inside Symfony.
+ */
+#[AsDecorator("translation.dumper.xliff")]
+class SegmentAwareXliffFileDumper extends FileDumper
+{
+
+ public function __construct(
+ private string $extension = 'xlf',
+ ) {
+ }
+
+ public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []): string
+ {
+ $xliffVersion = '1.2';
+ if (\array_key_exists('xliff_version', $options)) {
+ $xliffVersion = $options['xliff_version'];
+ }
+
+ if (\array_key_exists('default_locale', $options)) {
+ $defaultLocale = $options['default_locale'];
+ } else {
+ $defaultLocale = \Locale::getDefault();
+ }
+
+ if ('1.2' === $xliffVersion) {
+ return $this->dumpXliff1($defaultLocale, $messages, $domain, $options);
+ }
+ if ('2.0' === $xliffVersion) {
+ return $this->dumpXliff2($defaultLocale, $messages, $domain);
+ }
+
+ throw new InvalidArgumentException(\sprintf('No support implemented for dumping XLIFF version "%s".', $xliffVersion));
+ }
+
+ protected function getExtension(): string
+ {
+ return $this->extension;
+ }
+
+ private function dumpXliff1(string $defaultLocale, MessageCatalogue $messages, ?string $domain, array $options = []): string
+ {
+ $toolInfo = ['tool-id' => 'symfony', 'tool-name' => 'Symfony'];
+ if (\array_key_exists('tool_info', $options)) {
+ $toolInfo = array_merge($toolInfo, $options['tool_info']);
+ }
+
+ $dom = new \DOMDocument('1.0', 'utf-8');
+ $dom->formatOutput = true;
+
+ $xliff = $dom->appendChild($dom->createElement('xliff'));
+ $xliff->setAttribute('version', '1.2');
+ $xliff->setAttribute('xmlns', 'urn:oasis:names:tc:xliff:document:1.2');
+
+ $xliffFile = $xliff->appendChild($dom->createElement('file'));
+ $xliffFile->setAttribute('source-language', str_replace('_', '-', $defaultLocale));
+ $xliffFile->setAttribute('target-language', str_replace('_', '-', $messages->getLocale()));
+ $xliffFile->setAttribute('datatype', 'plaintext');
+ $xliffFile->setAttribute('original', 'file.ext');
+
+ $xliffHead = $xliffFile->appendChild($dom->createElement('header'));
+ $xliffTool = $xliffHead->appendChild($dom->createElement('tool'));
+ foreach ($toolInfo as $id => $value) {
+ $xliffTool->setAttribute($id, $value);
+ }
+
+ if ($catalogueMetadata = $messages->getCatalogueMetadata('', $domain) ?? []) {
+ $xliffPropGroup = $xliffHead->appendChild($dom->createElement('prop-group'));
+ foreach ($catalogueMetadata as $key => $value) {
+ $xliffProp = $xliffPropGroup->appendChild($dom->createElement('prop'));
+ $xliffProp->setAttribute('prop-type', $key);
+ $xliffProp->appendChild($dom->createTextNode($value));
+ }
+ }
+
+ $xliffBody = $xliffFile->appendChild($dom->createElement('body'));
+ foreach ($messages->all($domain) as $source => $target) {
+ $translation = $dom->createElement('trans-unit');
+
+ $translation->setAttribute('id', strtr(substr(base64_encode(hash('xxh128', $source, true)), 0, 7), '/+', '._'));
+ $translation->setAttribute('resname', $source);
+
+ $s = $translation->appendChild($dom->createElement('source'));
+ $s->appendChild($dom->createTextNode($source));
+
+ // Does the target contain characters requiring a CDATA section?
+ $text = 1 === preg_match('/[&<>]/', $target) ? $dom->createCDATASection($target) : $dom->createTextNode($target);
+
+ $targetElement = $dom->createElement('target');
+ $metadata = $messages->getMetadata($source, $domain);
+ if ($this->hasMetadataArrayInfo('target-attributes', $metadata)) {
+ foreach ($metadata['target-attributes'] as $name => $value) {
+ $targetElement->setAttribute($name, $value);
+ }
+ }
+ $t = $translation->appendChild($targetElement);
+ $t->appendChild($text);
+
+ if ($this->hasMetadataArrayInfo('notes', $metadata)) {
+ foreach ($metadata['notes'] as $note) {
+ if (!isset($note['content'])) {
+ continue;
+ }
+
+ $n = $translation->appendChild($dom->createElement('note'));
+ $n->appendChild($dom->createTextNode($note['content']));
+
+ if (isset($note['priority'])) {
+ $n->setAttribute('priority', $note['priority']);
+ }
+
+ if (isset($note['from'])) {
+ $n->setAttribute('from', $note['from']);
+ }
+ }
+ }
+
+ $xliffBody->appendChild($translation);
+ }
+
+ return $dom->saveXML();
+ }
+
+ private function dumpXliff2(string $defaultLocale, MessageCatalogue $messages, ?string $domain): string
+ {
+ $dom = new \DOMDocument('1.0', 'utf-8');
+ $dom->formatOutput = true;
+
+ $xliff = $dom->appendChild($dom->createElement('xliff'));
+ $xliff->setAttribute('xmlns', 'urn:oasis:names:tc:xliff:document:2.0');
+ $xliff->setAttribute('version', '2.0');
+ $xliff->setAttribute('srcLang', str_replace('_', '-', $defaultLocale));
+ $xliff->setAttribute('trgLang', str_replace('_', '-', $messages->getLocale()));
+
+ $xliffFile = $xliff->appendChild($dom->createElement('file'));
+ if (str_ends_with($domain, MessageCatalogue::INTL_DOMAIN_SUFFIX)) {
+ $xliffFile->setAttribute('id', substr($domain, 0, -\strlen(MessageCatalogue::INTL_DOMAIN_SUFFIX)).'.'.$messages->getLocale());
+ } else {
+ $xliffFile->setAttribute('id', $domain.'.'.$messages->getLocale());
+ }
+
+ if ($catalogueMetadata = $messages->getCatalogueMetadata('', $domain) ?? []) {
+ $xliff->setAttribute('xmlns:m', 'urn:oasis:names:tc:xliff:metadata:2.0');
+ $xliffMetadata = $xliffFile->appendChild($dom->createElement('m:metadata'));
+ foreach ($catalogueMetadata as $key => $value) {
+ $xliffMeta = $xliffMetadata->appendChild($dom->createElement('prop'));
+ $xliffMeta->setAttribute('type', $key);
+ $xliffMeta->appendChild($dom->createTextNode($value));
+ }
+ }
+
+ foreach ($messages->all($domain) as $source => $target) {
+ $translation = $dom->createElement('unit');
+ $translation->setAttribute('id', strtr(substr(base64_encode(hash('xxh128', $source, true)), 0, 7), '/+', '._'));
+
+ if (\strlen($source) <= 80) {
+ $translation->setAttribute('name', $source);
+ }
+
+ $metadata = $messages->getMetadata($source, $domain);
+
+ // Add notes section
+ if ($this->hasMetadataArrayInfo('notes', $metadata)) {
+ $notesElement = $dom->createElement('notes');
+ foreach ($metadata['notes'] as $note) {
+ $n = $dom->createElement('note');
+ $n->appendChild($dom->createTextNode($note['content'] ?? ''));
+ unset($note['content']);
+
+ foreach ($note as $name => $value) {
+ $n->setAttribute($name, $value);
+ }
+ $notesElement->appendChild($n);
+ }
+ $translation->appendChild($notesElement);
+ }
+
+ $segment = $translation->appendChild($dom->createElement('segment'));
+
+ if ($this->hasMetadataArrayInfo('segment-attributes', $metadata)) {
+ foreach ($metadata['segment-attributes'] as $name => $value) {
+ $segment->setAttribute($name, $value);
+ }
+ }
+
+ $s = $segment->appendChild($dom->createElement('source'));
+ $s->appendChild($dom->createTextNode($source));
+
+ // Does the target contain characters requiring a CDATA section?
+ $text = 1 === preg_match('/[&<>]/', $target) ? $dom->createCDATASection($target) : $dom->createTextNode($target);
+
+ $targetElement = $dom->createElement('target');
+ if ($this->hasMetadataArrayInfo('target-attributes', $metadata)) {
+ foreach ($metadata['target-attributes'] as $name => $value) {
+ $targetElement->setAttribute($name, $value);
+ }
+ }
+ $t = $segment->appendChild($targetElement);
+ $t->appendChild($text);
+
+ $xliffFile->appendChild($translation);
+ }
+
+ return $dom->saveXML();
+ }
+
+ private function hasMetadataArrayInfo(string $key, ?array $metadata = null): bool
+ {
+ return is_iterable($metadata[$key] ?? null);
+ }
+}
\ No newline at end of file
diff --git a/src/Translation/Fixes/SegmentAwareXliffFileLoader.php b/src/Translation/Fixes/SegmentAwareXliffFileLoader.php
new file mode 100644
index 00000000..12455e87
--- /dev/null
+++ b/src/Translation/Fixes/SegmentAwareXliffFileLoader.php
@@ -0,0 +1,262 @@
+.
+ */
+
+declare(strict_types=1);
+
+
+namespace App\Translation\Fixes;
+
+use Symfony\Component\Config\Resource\FileResource;
+use Symfony\Component\Config\Util\Exception\InvalidXmlException;
+use Symfony\Component\Config\Util\Exception\XmlParsingException;
+use Symfony\Component\Config\Util\XmlUtils;
+use Symfony\Component\DependencyInjection\Attribute\AsDecorator;
+use Symfony\Component\Translation\Exception\InvalidResourceException;
+use Symfony\Component\Translation\Exception\NotFoundResourceException;
+use Symfony\Component\Translation\Exception\RuntimeException;
+use Symfony\Component\Translation\Loader\LoaderInterface;
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\Util\XliffUtils;
+
+/**
+ * Backport of the XliffFile dumper from Symfony 7.2, which supports segment attributes and notes, this keeps the
+ * metadata when editing the translations from inside Symfony.
+ */
+#[AsDecorator("translation.loader.xliff")]
+class SegmentAwareXliffFileLoader implements LoaderInterface
+{
+ public function load(mixed $resource, string $locale, string $domain = 'messages'): MessageCatalogue
+ {
+ if (!class_exists(XmlUtils::class)) {
+ throw new RuntimeException('Loading translations from the Xliff format requires the Symfony Config component.');
+ }
+
+ if (!$this->isXmlString($resource)) {
+ if (!stream_is_local($resource)) {
+ throw new InvalidResourceException(\sprintf('This is not a local file "%s".', $resource));
+ }
+
+ if (!file_exists($resource)) {
+ throw new NotFoundResourceException(\sprintf('File "%s" not found.', $resource));
+ }
+
+ if (!is_file($resource)) {
+ throw new InvalidResourceException(\sprintf('This is neither a file nor an XLIFF string "%s".', $resource));
+ }
+ }
+
+ try {
+ if ($this->isXmlString($resource)) {
+ $dom = XmlUtils::parse($resource);
+ } else {
+ $dom = XmlUtils::loadFile($resource);
+ }
+ } catch (\InvalidArgumentException|XmlParsingException|InvalidXmlException $e) {
+ throw new InvalidResourceException(\sprintf('Unable to load "%s": ', $resource).$e->getMessage(), $e->getCode(), $e);
+ }
+
+ if ($errors = XliffUtils::validateSchema($dom)) {
+ throw new InvalidResourceException(\sprintf('Invalid resource provided: "%s"; Errors: ', $resource).XliffUtils::getErrorsAsString($errors));
+ }
+
+ $catalogue = new MessageCatalogue($locale);
+ $this->extract($dom, $catalogue, $domain);
+
+ if (is_file($resource) && class_exists(FileResource::class)) {
+ $catalogue->addResource(new FileResource($resource));
+ }
+
+ return $catalogue;
+ }
+
+ private function extract(\DOMDocument $dom, MessageCatalogue $catalogue, string $domain): void
+ {
+ $xliffVersion = XliffUtils::getVersionNumber($dom);
+
+ if ('1.2' === $xliffVersion) {
+ $this->extractXliff1($dom, $catalogue, $domain);
+ }
+
+ if ('2.0' === $xliffVersion) {
+ $this->extractXliff2($dom, $catalogue, $domain);
+ }
+ }
+
+ /**
+ * Extract messages and metadata from DOMDocument into a MessageCatalogue.
+ */
+ private function extractXliff1(\DOMDocument $dom, MessageCatalogue $catalogue, string $domain): void
+ {
+ $xml = simplexml_import_dom($dom);
+ $encoding = $dom->encoding ? strtoupper($dom->encoding) : null;
+
+ $namespace = 'urn:oasis:names:tc:xliff:document:1.2';
+ $xml->registerXPathNamespace('xliff', $namespace);
+
+ foreach ($xml->xpath('//xliff:file') as $file) {
+ $fileAttributes = $file->attributes();
+
+ $file->registerXPathNamespace('xliff', $namespace);
+
+ foreach ($file->xpath('.//xliff:prop') as $prop) {
+ $catalogue->setCatalogueMetadata($prop->attributes()['prop-type'], (string) $prop, $domain);
+ }
+
+ foreach ($file->xpath('.//xliff:trans-unit') as $translation) {
+ $attributes = $translation->attributes();
+
+ if (!(isset($attributes['resname']) || isset($translation->source))) {
+ continue;
+ }
+
+ $source = (string) (isset($attributes['resname']) && $attributes['resname'] ? $attributes['resname'] : $translation->source);
+
+ if (isset($translation->target)
+ && 'needs-translation' === (string) $translation->target->attributes()['state']
+ && \in_array((string) $translation->target, [$source, (string) $translation->source], true)
+ ) {
+ continue;
+ }
+
+ // If the xlf file has another encoding specified, try to convert it because
+ // simple_xml will always return utf-8 encoded values
+ $target = $this->utf8ToCharset((string) ($translation->target ?? $translation->source), $encoding);
+
+ $catalogue->set($source, $target, $domain);
+
+ $metadata = [
+ 'source' => (string) $translation->source,
+ 'file' => [
+ 'original' => (string) $fileAttributes['original'],
+ ],
+ ];
+ if ($notes = $this->parseNotesMetadata($translation->note, $encoding)) {
+ $metadata['notes'] = $notes;
+ }
+
+ if (isset($translation->target) && $translation->target->attributes()) {
+ $metadata['target-attributes'] = [];
+ foreach ($translation->target->attributes() as $key => $value) {
+ $metadata['target-attributes'][$key] = (string) $value;
+ }
+ }
+
+ if (isset($attributes['id'])) {
+ $metadata['id'] = (string) $attributes['id'];
+ }
+
+ $catalogue->setMetadata($source, $metadata, $domain);
+ }
+ }
+ }
+
+ private function extractXliff2(\DOMDocument $dom, MessageCatalogue $catalogue, string $domain): void
+ {
+ $xml = simplexml_import_dom($dom);
+ $encoding = $dom->encoding ? strtoupper($dom->encoding) : null;
+
+ $xml->registerXPathNamespace('xliff', 'urn:oasis:names:tc:xliff:document:2.0');
+
+ foreach ($xml->xpath('//xliff:unit') as $unit) {
+ foreach ($unit->segment as $segment) {
+ $attributes = $unit->attributes();
+ $source = $attributes['name'] ?? $segment->source;
+
+ // If the xlf file has another encoding specified, try to convert it because
+ // simple_xml will always return utf-8 encoded values
+ $target = $this->utf8ToCharset((string) ($segment->target ?? $segment->source), $encoding);
+
+ $catalogue->set((string) $source, $target, $domain);
+
+ $metadata = [];
+ if ($segment->attributes()) {
+ $metadata['segment-attributes'] = [];
+ foreach ($segment->attributes() as $key => $value) {
+ $metadata['segment-attributes'][$key] = (string) $value;
+ }
+ }
+
+ if (isset($segment->target) && $segment->target->attributes()) {
+ $metadata['target-attributes'] = [];
+ foreach ($segment->target->attributes() as $key => $value) {
+ $metadata['target-attributes'][$key] = (string) $value;
+ }
+ }
+
+ if (isset($unit->notes)) {
+ $metadata['notes'] = [];
+ foreach ($unit->notes->note as $noteNode) {
+ $note = [];
+ foreach ($noteNode->attributes() as $key => $value) {
+ $note[$key] = (string) $value;
+ }
+ $note['content'] = (string) $noteNode;
+ $metadata['notes'][] = $note;
+ }
+ }
+
+ $catalogue->setMetadata((string) $source, $metadata, $domain);
+ }
+ }
+ }
+
+ /**
+ * Convert a UTF8 string to the specified encoding.
+ */
+ private function utf8ToCharset(string $content, ?string $encoding = null): string
+ {
+ if ('UTF-8' !== $encoding && $encoding) {
+ return mb_convert_encoding($content, $encoding, 'UTF-8');
+ }
+
+ return $content;
+ }
+
+ private function parseNotesMetadata(?\SimpleXMLElement $noteElement = null, ?string $encoding = null): array
+ {
+ $notes = [];
+
+ if (null === $noteElement) {
+ return $notes;
+ }
+
+ /** @var \SimpleXMLElement $xmlNote */
+ foreach ($noteElement as $xmlNote) {
+ $noteAttributes = $xmlNote->attributes();
+ $note = ['content' => $this->utf8ToCharset((string) $xmlNote, $encoding)];
+ if (isset($noteAttributes['priority'])) {
+ $note['priority'] = (int) $noteAttributes['priority'];
+ }
+
+ if (isset($noteAttributes['from'])) {
+ $note['from'] = (string) $noteAttributes['from'];
+ }
+
+ $notes[] = $note;
+ }
+
+ return $notes;
+ }
+
+ private function isXmlString(string $resource): bool
+ {
+ return str_starts_with($resource, ' $this->eventCommentNeededHelper->isCommentNeeded($operation_type)
),
+
+ new TwigFunction('uri_without_host', $this->uri_without_host(...))
];
}
+
+ /**
+ * Similar to the getUri function of the request, but does not contain protocol and host.
+ * @param Request $request
+ * @return string
+ */
+ public function uri_without_host(Request $request): string
+ {
+ if (null !== $qs = $request->getQueryString()) {
+ $qs = '?'.$qs;
+ }
+
+ return $request->getBaseUrl().$request->getPathInfo().$qs;
+ }
}
diff --git a/src/Validator/Constraints/UniqueObjectCollection.php b/src/Validator/Constraints/UniqueObjectCollection.php
index c71fcc5d..6548494e 100644
--- a/src/Validator/Constraints/UniqueObjectCollection.php
+++ b/src/Validator/Constraints/UniqueObjectCollection.php
@@ -43,12 +43,12 @@ class UniqueObjectCollection extends Constraint
* @param array|string $fields the combination of fields that must contain unique values or a set of options
*/
public function __construct(
- array $options = null,
- string $message = null,
- callable $normalizer = null,
- array $groups = null,
+ ?array $options = null,
+ ?string $message = null,
+ ?callable $normalizer = null,
+ ?array $groups = null,
mixed $payload = null,
- array|string $fields = null,
+ array|string|null $fields = null,
public bool $allowNull = true,
) {
parent::__construct($options, $groups, $payload);
diff --git a/src/Validator/Constraints/ValidGoogleAuthCode.php b/src/Validator/Constraints/ValidGoogleAuthCode.php
index 482af35c..180d346e 100644
--- a/src/Validator/Constraints/ValidGoogleAuthCode.php
+++ b/src/Validator/Constraints/ValidGoogleAuthCode.php
@@ -31,8 +31,8 @@ class ValidGoogleAuthCode extends Constraint
* @param TwoFactorInterface|null $user The user to use for the validation process, if null, the current user is used
*/
public function __construct(
- array $options = null,
- array $groups = null,
+ ?array $options = null,
+ ?array $groups = null,
mixed $payload = null,
public ?TwoFactorInterface $user = null)
{
diff --git a/symfony.lock b/symfony.lock
index 8f230496..c7471b73 100644
--- a/symfony.lock
+++ b/symfony.lock
@@ -139,9 +139,6 @@
"florianv/swap-bundle": {
"version": "5.0.x-dev"
},
- "friendsofphp/proxy-manager-lts": {
- "version": "v1.0.5"
- },
"gregwar/captcha": {
"version": "v1.1.7"
},
@@ -172,9 +169,6 @@
"./config/packages/knpu_oauth2_client.yaml"
]
},
- "laminas/laminas-code": {
- "version": "3.4.1"
- },
"league/html-to-markdown": {
"version": "4.8.2"
},
@@ -414,15 +408,15 @@
"version": "v4.2.3"
},
"symfony/console": {
- "version": "5.3",
+ "version": "6.4",
"recipe": {
"repo": "github.com/symfony/recipes",
- "branch": "master",
+ "branch": "main",
"version": "5.3",
- "ref": "da0c8be8157600ad34f10ff0c9cc91232522e047"
+ "ref": "1781ff40d8a17d87cf53f8d4cf0c8346ed2bb461"
},
"files": [
- "./bin/console"
+ "bin/console"
]
},
"symfony/css-selector": {
@@ -474,15 +468,16 @@
"version": "v4.2.3"
},
"symfony/flex": {
- "version": "1.19",
+ "version": "2.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
- "version": "1.0",
- "ref": "146251ae39e06a95be0fe3d13c807bcf3938b172"
+ "version": "2.4",
+ "ref": "52e9754527a15e2b79d9a610f98185a1fe46622a"
},
"files": [
- ".env"
+ ".env",
+ ".env.dev"
]
},
"symfony/form": {
@@ -612,9 +607,6 @@
"symfony/property-info": {
"version": "v4.2.3"
},
- "symfony/proxy-manager-bridge": {
- "version": "v5.2.1"
- },
"symfony/routing": {
"version": "6.2",
"recipe": {
diff --git a/templates/admin/project_admin.html.twig b/templates/admin/project_admin.html.twig
index aafb364d..1a995069 100644
--- a/templates/admin/project_admin.html.twig
+++ b/templates/admin/project_admin.html.twig
@@ -36,7 +36,7 @@
{% if entity.buildPart %}
{{ entity.buildPart.name }}
{% else %}
- {% trans %}project.edit.associated_build_part.add{% endtrans %}
{% endif %}
{% trans %}project.edit.associated_build.hint{% endtrans %}
diff --git a/templates/attachment_list.html.twig b/templates/attachment_list.html.twig
index abb6f4ad..3ff45700 100644
--- a/templates/attachment_list.html.twig
+++ b/templates/attachment_list.html.twig
@@ -34,6 +34,8 @@
{{ form_row(filterForm.attachmentType) }}
{{ form_row(filterForm.targetType) }}
{{ form_row(filterForm.showInTable) }}
+ {{ form_row(filterForm.originalFileName) }}
+ {{ form_row(filterForm.externalLink) }}
{{ form_row(filterForm.lastModified) }}
{{ form_row(filterForm.addedDate) }}
{{ form_row(filterForm.dbId) }}
diff --git a/templates/base.html.twig b/templates/base.html.twig
index 020047df..e7c641c6 100644
--- a/templates/base.html.twig
+++ b/templates/base.html.twig
@@ -38,7 +38,7 @@
- {% if not app.user.theme is defined %}
+ {% if not app.user.theme is defined or app.user.theme is null %}
{% set theme = global_theme %}
{% else %}
{% set theme = app.user.theme %}
@@ -111,7 +111,7 @@
{# Back to top buton #}
-
diff --git a/templates/components/datatables.macro.html.twig b/templates/components/datatables.macro.html.twig
index 0a35d522..5ce0f23f 100644
--- a/templates/components/datatables.macro.html.twig
+++ b/templates/components/datatables.macro.html.twig
@@ -1,5 +1,5 @@
{% macro datatable(datatable, controller = 'elements/datatables/datatables', state_save_tag = null) %}
-
+
@@ -20,12 +20,12 @@
{% macro partsDatatableWithForm(datatable, state_save_tag = 'parts') %}
diff --git a/templates/components/search.macro.html.twig b/templates/components/search.macro.html.twig
index 9e9185bf..e62af2b1 100644
--- a/templates/components/search.macro.html.twig
+++ b/templates/components/search.macro.html.twig
@@ -1,7 +1,7 @@
{% macro settings_drodown(show_label_instead_icon = true) %}
-
+
{% if show_label_instead_icon %}{% trans %}search.options.label{% endtrans %}{% else %} {% endif %}
diff --git a/templates/form/filter_types_layout.html.twig b/templates/form/filter_types_layout.html.twig
index e99e6b62..cae9e3ea 100644
--- a/templates/form/filter_types_layout.html.twig
+++ b/templates/form/filter_types_layout.html.twig
@@ -54,7 +54,7 @@
{{ form_widget(form.name, {"attr": {"data-pages--parameters-autocomplete-target": "name"}}) }}
{{ form_widget(form.symbol, {"attr": {"data-pages--parameters-autocomplete-target": "symbol", "data-pages--latex-preview-target": "input"}}) }}
{{ form_widget(form.value) }}
- {{ form_widget(form.unit, {"attr": {"data-pages--parameters-autocomplete-target": "unit", "data-pages--latex-preview-target": "input"}}) }}
+ {{ form_widget(form.unit, {"attr": {"data-pages--parameters-autocomplete-target": "unit", "data-pages--latex-preview-target": "input"}}) }}
{{ form_widget(form.value_text) }}
diff --git a/templates/helper.twig b/templates/helper.twig
index b6cf2dbe..bd1d2aa7 100644
--- a/templates/helper.twig
+++ b/templates/helper.twig
@@ -218,14 +218,16 @@
{% trans %}specifications.property{% endtrans %}
+ {% trans %}specifications.symbol{% endtrans %}
{% trans %}specifications.value{% endtrans %}
{% for param in parameters %}
- {{ param.name }} {% if param.symbol is not empty %}${{ param.symbol }}$ {% endif %}
- {{ param.formattedValue }}
+ {{ param.name }}
+ {% if param.symbol is not empty %}${{ param.symbol }}$ {% endif %}
+ {{ param.formattedValue(true) }}
{% endfor %}
diff --git a/templates/info_providers/search/part_search.html.twig b/templates/info_providers/search/part_search.html.twig
index 0de72587..3d741c34 100644
--- a/templates/info_providers/search/part_search.html.twig
+++ b/templates/info_providers/search/part_search.html.twig
@@ -56,61 +56,104 @@
{% for result in results %}
-
+ {% set dto = result["dto"] %}
+ {# @var App\Entity\Parts\Part localPart #}
+ {% set localPart = result["localPart"] %}
+
+
-
- {% if result.provider_url is not null %}
- {{ result.name }}
+ {% if dto.provider_url is not null %}
+ {{ dto.name }}
{% else %}
- {{ result.name }}
+ {{ dto.name }}
{% endif %}
- {% if result.mpn is not null %}
+ {% if dto.mpn is not null %}
- {{ result.mpn }}
+ {{ dto.mpn }}
+ {% endif %}
+ {% if result["localPart"] is not null %}
+
{% endif %}
- {{ result.description }}
- {% if result.category is not null %}
+ {{ dto.description }}
+ {% if dto.category is not null %}
- {{ result.category }}
+ {{ dto.category }}
{% endif %}
- {{ result.manufacturer ?? '' }}
- {% if result.footprint is not null %}
+ {{ dto.manufacturer ?? '' }}
+ {% if dto.footprint is not null %}
- {{ result.footprint }}
+ {{ dto.footprint }}
{% endif %}
- {{ helper.m_status_to_badge(result.manufacturing_status) }}
+ {{ helper.m_status_to_badge(dto.manufacturing_status) }}
- {% if result.provider_url %}
-
- {{ info_provider_label(result.provider_key)|default(result.provider_key) }}
+ {% if dto.provider_url %}
+
+ {{ info_provider_label(dto.provider_key)|default(dto.provider_key) }}
{% else %}
- {{ info_provider_label(result.provider_key)|default(result.provider_key) }}
+ {{ info_provider_label(dto.provider_key)|default(dto.provider_key) }}
{% endif %}
- {{ result.provider_id }}
-
+ {{ dto.provider_id }}
+
+
+
{% if update_target %} {# We update an existing part #}
{% set href = path('info_providers_update_part',
- {'providerKey': result.provider_key, 'providerId': result.provider_id, 'id': update_target.iD}) %}
+ {'providerKey': dto.provider_key, 'providerId': dto.provider_id, 'id': update_target.iD}) %}
{% else %} {# Create a fresh part #}
{% set href = path('info_providers_create_part',
- {'providerKey': result.provider_key, 'providerId': result.provider_id}) %}
+ {'providerKey': dto.provider_key, 'providerId': dto.provider_id}) %}
{% endif %}
-
-
-
+ {# If we have no local part, then we can just show the create button #}
+ {% if localPart is null %}
+
+
+
+ {% else %} {# Otherwise add a button group with all three buttons #}
+
+
+ {% trans %}info_providers.search.existing_part_found.short{% endtrans %}
+
+
+
+
+ {% endif %}
{% endfor %}
diff --git a/templates/label_system/dialog.html.twig b/templates/label_system/dialog.html.twig
index a845d12e..50db99e7 100644
--- a/templates/label_system/dialog.html.twig
+++ b/templates/label_system/dialog.html.twig
@@ -59,7 +59,7 @@
{% trans %}label_generator.selected_profile{% endtrans %}
{{ profile.name ?? '-' }}
- {% if profile %}
+ {% if profile and is_granted("edit", profile) %}
{% endif %}
@@ -91,6 +91,25 @@
+
+ {% if is_granted("@labels.read_profiles") %}
+
+ {% endif %}
+
+
+
diff --git a/templates/label_system/scanner/scanner.html.twig b/templates/label_system/scanner/scanner.html.twig
index 39f4e140..1f978a9b 100644
--- a/templates/label_system/scanner/scanner.html.twig
+++ b/templates/label_system/scanner/scanner.html.twig
@@ -23,4 +23,22 @@
{{ form_end(form) }}
+
+ {% if infoModeData %}
+
+ {% trans %}label_scanner.decoded_info.title{% endtrans %}
+
+
+
+ {% for key, value in infoModeData %}
+
+ {{ key }}
+ {{ value }}
+
+ {% endfor %}
+
+
+
+ {% endif %}
+
{% endblock %}
diff --git a/templates/log_system/details/helper.macro.html.twig b/templates/log_system/details/helper.macro.html.twig
index 4d8c893f..e8957b66 100644
--- a/templates/log_system/details/helper.macro.html.twig
+++ b/templates/log_system/details/helper.macro.html.twig
@@ -22,7 +22,7 @@
data-delete-title="{% trans %}log.undo.confirm_title{% endtrans %}"
data-delete-message="{% trans %}log.undo.confirm_message{% endtrans %}">
-
+
diff --git a/templates/parts/edit/edit_form_styles.html.twig b/templates/parts/edit/edit_form_styles.html.twig
index 6658fa80..c2a89b6a 100644
--- a/templates/parts/edit/edit_form_styles.html.twig
+++ b/templates/parts/edit/edit_form_styles.html.twig
@@ -75,7 +75,7 @@
{{ form_widget(form.value_min) }}{{ form_errors(form.value_min) }}
{{ form_widget(form.value_typical) }}{{ form_errors(form.value_typical) }}
{{ form_widget(form.value_max) }}{{ form_errors(form.value_max) }}
- {{ form_widget(form.unit, {"attr": {"data-pages--parameters-autocomplete-target": "unit", "data-pages--latex-preview-target": "input"}}) }}{{ form_errors(form.unit) }}
+ {{ form_widget(form.unit, {"attr": {"data-pages--parameters-autocomplete-target": "unit", "data-pages--latex-preview-target": "input"}}) }}{{ form_errors(form.unit) }}
{{ form_widget(form.value_text) }}{{ form_errors(form.value_text) }}
{{ form_widget(form.group) }}{{ form_errors(form.group) }}
@@ -108,7 +108,7 @@
{{ form_row(form.comment) }}
{{ form_row(form.owner) }}
- {{ form_row(form.vendor_barcode) }}
+ {{ form_row(form.user_barcode) }}
@@ -152,35 +152,32 @@
{% set attach = form.vars.value %}
+ {# @var \App\Entity\Attachments\Attachment attach #}
{% if attach is not null %}
- {% if attachment_manager.fileExisting(attach) %}
- {% if not attach.external %}
-
-
+ {% if not attach.hasInternal() and attach.external %}
+
- {{ attach.filename }}
+ {% trans %}attachment.external_only{% endtrans %}
-
-
+
+ {% elseif attachment_manager.isInternalFileExisting(attach) %}
+
+
+ {{ attach.filename|u.truncate(25, ' ...') }}
+
+
+
{{ attachment_manager.humanFileSize(attach) }}
-
-
- {% else %}
-
-
-
- {% trans %}attachment.external{% endtrans %}
-
-
- {% endif %}
+
+
{% if attach.secure %}
-
+
{% trans %}attachment.secure{% endtrans %}
-
+
{% endif %}
{% if attach.secure and not is_granted('show_private', attach) %}
@@ -190,16 +187,21 @@
{% else %}
- {% trans %}attachment.view{% endtrans %}
+ {% trans %}attachment.view_local{% endtrans %}
{% endif %}
{% else %}
-
-
+
{% trans %}attachment.file_not_found{% endtrans %}
-
+
+ {% endif %}
+ {% if attach.external %}
+
{% endif %}
{% endif %}
diff --git a/templates/parts/info/_attachments_info.html.twig b/templates/parts/info/_attachments_info.html.twig
index 995c69eb..4f7c0455 100644
--- a/templates/parts/info/_attachments_info.html.twig
+++ b/templates/parts/info/_attachments_info.html.twig
@@ -24,18 +24,16 @@
{{ attachment.name }}
{{ attachment.attachmentType.fullPath }}
- {% if attachment.external %}
- {{ attachment.host }}
- {% else %}
+ {% if attachment.hasInternal() %}
{{ attachment.filename }}
{% endif %}
- {% if attachment.external %}
+ {% if not attachment.hasInternal() %}
- {% trans %}attachment.external{% endtrans %}
+ {% trans %}attachment.external_only{% endtrans %}
- {% elseif attachment_manager.fileExisting(attachment) %}
+ {% elseif attachment_manager.internalFileExisting(attachment) %}
{{ attachment_manager.humanFileSize(attachment) }}
@@ -58,14 +56,19 @@
-
+
+
+
+
-
+
diff --git a/templates/parts/info/_main_infos.html.twig b/templates/parts/info/_main_infos.html.twig
index 7bcdd355..bced5624 100644
--- a/templates/parts/info/_main_infos.html.twig
+++ b/templates/parts/info/_main_infos.html.twig
@@ -1,96 +1,131 @@
{% import "helper.twig" as helper %}
-
-
- {% include "parts/info/_picture.html.twig" %}
-
-
-
+{% endif %}
- {% set min_order_amount = pricedetail_helper.minOrderAmount(part) %}
- {% set max_order_amount = pricedetail_helper.maxDiscountAmount(part) %}
- {% set max_order_price = pricedetail_helper.calculateAvgPrice(part, max_order_amount, app.user.currency ?? null) %}
- {% set min_order_price = pricedetail_helper.calculateAvgPrice(part, min_order_amount, app.user.currency ?? null ) %}
- {% if max_order_price is not null %}
-
+
+ {{ part.name }}
+ {# You need edit permission to use the edit button #}
+ {% if timeTravel is not null %}
+
+ {% elseif is_granted('edit', part) %}
+
+ {% endif %}
+
+
+{# Slighlty highlight every text in this block over normal text (similar to h5) #}
+
+
+
+ {% trans %}description.label{% endtrans %}
+
+
+ {{ part.description|format_markdown(true) }}
+
+
+
+
+
+ {% trans %}category.label{% endtrans %}
+
+
+
+ {{ helper.structural_entity_link(part.category) }}
+
+
+
+
+
+ {% trans %}part.part_lots.label{% endtrans %}
+
+
+
+
+ {% if not part.amountUnknown %}
+ {# For known instock we can just show the label as normal #}
+ {{ part.amountSum | format_amount(part.partUnit) }}
+ {% else %}
+ {% if part.amountSum == 0.0 %}
+ ?
+ {% else %}
+ ≥{{ part.amountSum | format_amount(part.partUnit) }}
+ {% endif %}
+ {% endif %}
+ {% if part.expiredAmountSum > 0 %}
+ (+{{ part.expiredAmountSum }})
+ {% endif %}
+ /
+ {{ part.minAmount | format_amount(part.partUnit) }}
+
+ {% if part.notEnoughInstock %}
+ {% trans %}part.info.amount.less_than_desired{% endtrans %}
+ {% endif %}
+
+
+
+
+
+ {% trans %}footprint.label{% endtrans %}
+
+
+
+ {{ helper.structural_entity_link(part.footprint) }}
+
+
+
+ {% set min_order_amount = pricedetail_helper.minOrderAmount(part) %}
+ {% set max_order_amount = pricedetail_helper.maxDiscountAmount(part) %}
+ {% set max_order_price = pricedetail_helper.calculateAvgPrice(part, max_order_amount, app.user.currency ?? null) %}
+ {% set min_order_price = pricedetail_helper.calculateAvgPrice(part, min_order_amount, app.user.currency ?? null ) %}
+ {% if max_order_price is not null %}
+
+
+
+
{{ max_order_price | format_money(app.user.currency ?? null) }}
{% if min_order_price is not null and min_order_amount < max_order_amount %}
-
{% if max_order_price is not null %}{{ min_order_price | format_money(app.user.currency ?? null) }}{% else %}???{% endif %}
{% endif %}
-
-
- {% endif %}
- {#
- {% if part.comment != "" %}
-
-
-
- {{ part.comment|nl2br }}
-
-
- {% endif %} #}
-
-
\ No newline at end of file
+
+
+
+ {% endif %}
+
+ {# {% if part.comment != "" %}
+
+
+ {% trans %}comment.label{% endtrans %}
+
+
+
+ >{{ part.comment|nl2br }}
+
+
+ {% endif %} #}
+
+
diff --git a/templates/parts/info/_merge_modal.html.twig b/templates/parts/info/_merge_modal.html.twig
index b338e148..ea0d1b13 100644
--- a/templates/parts/info/_merge_modal.html.twig
+++ b/templates/parts/info/_merge_modal.html.twig
@@ -7,7 +7,7 @@
{% endif %}
-