From bb29f04c72204f5d9735ca59a3b58be1ce42310c Mon Sep 17 00:00:00 2001 From: Quinton Jason Date: Tue, 3 Feb 2026 14:58:09 -0600 Subject: [PATCH 1/5] fix(pds-multiselect): add csrfHeaderName prop --- .../components/pds-multiselect/pds-multiselect.tsx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/libs/core/src/components/pds-multiselect/pds-multiselect.tsx b/libs/core/src/components/pds-multiselect/pds-multiselect.tsx index 70939a3da..598de999c 100644 --- a/libs/core/src/components/pds-multiselect/pds-multiselect.tsx +++ b/libs/core/src/components/pds-multiselect/pds-multiselect.tsx @@ -164,6 +164,11 @@ export class PdsMultiselect { */ @Prop() csrfToken?: string; + /** + * CSRF header name for authenticated requests. Defaults to `X-CSRF-Token`. + */ + @Prop() csrfHeaderName?: string = 'X-CSRF-Token'; + // Internal state @State() isOpen: boolean = false; @State() searchQuery: string = ''; @@ -517,7 +522,8 @@ export class PdsMultiselect { }; if (csrfToken) { - headers['X-CSRF-Token'] = csrfToken; + const headerName = this.csrfHeaderName || 'X-CSRF-Token'; + headers[headerName] = csrfToken; } const response = await fetch(url.toString(), { @@ -603,7 +609,8 @@ export class PdsMultiselect { }; if (csrfToken) { - headers['X-CSRF-Token'] = csrfToken; + const headerName = this.csrfHeaderName || 'X-CSRF-Token'; + headers[headerName] = csrfToken; } const response = await fetch(url.toString(), { From 0fa912a5ce51d78c751507e377937f9870cf376e Mon Sep 17 00:00:00 2001 From: Quinton Jason Date: Tue, 3 Feb 2026 14:58:46 -0600 Subject: [PATCH 2/5] chore: added auto gen files --- libs/core/src/components.d.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/libs/core/src/components.d.ts b/libs/core/src/components.d.ts index fd743bfad..5ad9b5bb5 100644 --- a/libs/core/src/components.d.ts +++ b/libs/core/src/components.d.ts @@ -1399,6 +1399,11 @@ export namespace Components { * URL endpoint for creating new options. When set, shows "Add" option when no matches found. */ "createUrl"?: string; + /** + * CSRF header name for authenticated requests. Defaults to `X-CSRF-Token`. + * @default 'X-CSRF-Token' + */ + "csrfHeaderName"?: string; /** * CSRF token for authenticated requests. If not provided, attempts to read from meta tag. */ @@ -4401,6 +4406,11 @@ declare namespace LocalJSX { * URL endpoint for creating new options. When set, shows "Add" option when no matches found. */ "createUrl"?: string; + /** + * CSRF header name for authenticated requests. Defaults to `X-CSRF-Token`. + * @default 'X-CSRF-Token' + */ + "csrfHeaderName"?: string; /** * CSRF token for authenticated requests. If not provided, attempts to read from meta tag. */ From d54d8a7b5d0c6ad3d1b0a6d5b70f81f48b348e06 Mon Sep 17 00:00:00 2001 From: Quinton Jason Date: Tue, 3 Feb 2026 14:59:15 -0600 Subject: [PATCH 3/5] chore: auto gen files --- .../src/components/pds-multiselect/readme.md | 55 ++++++++++--------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/libs/core/src/components/pds-multiselect/readme.md b/libs/core/src/components/pds-multiselect/readme.md index 337e2f615..41c4eea04 100644 --- a/libs/core/src/components/pds-multiselect/readme.md +++ b/libs/core/src/components/pds-multiselect/readme.md @@ -17,33 +17,34 @@ A multiselect component that allows users to select multiple options from a sear ## Properties -| Property | Attribute | Description | Type | Default | -| -------------------------- | ---------------- | ------------------------------------------------------------------------------------------ | -------------------------------------- | ------------- | -| `asyncMethod` | `async-method` | HTTP method for async requests. | `"GET" \| "POST"` | `'GET'` | -| `asyncUrl` | `async-url` | URL endpoint for async data fetching. | `string` | `undefined` | -| `componentId` _(required)_ | `component-id` | A unique identifier used for the underlying component `id` attribute. | `string` | `undefined` | -| `createUrl` | `create-url` | URL endpoint for creating new options. When set, shows "Add" option when no matches found. | `string` | `undefined` | -| `csrfToken` | `csrf-token` | CSRF token for authenticated requests. If not provided, attempts to read from meta tag. | `string` | `undefined` | -| `debounce` | `debounce` | Debounce delay in milliseconds for search/fetch. | `number` | `300` | -| `disabled` | `disabled` | Determines whether or not the multiselect is disabled. | `boolean` | `false` | -| `errorMessage` | `error-message` | Error message to display. | `string` | `undefined` | -| `fetchTimeout` | `fetch-timeout` | Timeout in milliseconds for async fetch requests. | `number` | `30000` | -| `formatResult` | -- | Function to format async results. Receives raw API response item. | `(item: unknown) => MultiselectOption` | `undefined` | -| `helperMessage` | `helper-message` | Helper message to display below the input. | `string` | `undefined` | -| `hideLabel` | `hide-label` | Visually hides the label but keeps it accessible. | `boolean` | `false` | -| `invalid` | `invalid` | If true, the multiselect is in an invalid state. | `boolean` | `undefined` | -| `label` | `label` | Text to be displayed as the multiselect label. | `string` | `undefined` | -| `loading` | `loading` | Whether the component is currently loading async options. | `boolean` | `false` | -| `maxHeight` | `max-height` | Maximum height of the dropdown before scrolling. | `string` | `'300px'` | -| `maxSelections` | `max-selections` | Maximum number of selections allowed. | `number` | `undefined` | -| `minWidth` | `min-width` | Minimum width of the dropdown panel. | `string` | `'250px'` | -| `name` | `name` | Specifies the name. Submitted with the form as part of a name/value pair. | `string` | `undefined` | -| `options` | -- | Options provided externally (for consumer-managed async). | `MultiselectOption[]` | `undefined` | -| `panelWidth` | `panel-width` | Width of the dropdown panel. Defaults to the trigger width. | `string` | `undefined` | -| `placeholder` | `placeholder` | Placeholder text for the input field. | `string` | `'Select...'` | -| `required` | `required` | If true, the multiselect is required. | `boolean` | `false` | -| `triggerWidth` | `trigger-width` | Width of the trigger button (and reference for dropdown positioning). | `string` | `'100%'` | -| `value` | -- | Array of selected option values. | `string[]` | `[]` | +| Property | Attribute | Description | Type | Default | +| -------------------------- | ------------------ | ------------------------------------------------------------------------------------------ | -------------------------------------- | ---------------- | +| `asyncMethod` | `async-method` | HTTP method for async requests. | `"GET" \| "POST"` | `'GET'` | +| `asyncUrl` | `async-url` | URL endpoint for async data fetching. | `string` | `undefined` | +| `componentId` _(required)_ | `component-id` | A unique identifier used for the underlying component `id` attribute. | `string` | `undefined` | +| `createUrl` | `create-url` | URL endpoint for creating new options. When set, shows "Add" option when no matches found. | `string` | `undefined` | +| `csrfHeaderName` | `csrf-header-name` | CSRF header name for authenticated requests. Defaults to `X-CSRF-Token`. | `string` | `'X-CSRF-Token'` | +| `csrfToken` | `csrf-token` | CSRF token for authenticated requests. If not provided, attempts to read from meta tag. | `string` | `undefined` | +| `debounce` | `debounce` | Debounce delay in milliseconds for search/fetch. | `number` | `300` | +| `disabled` | `disabled` | Determines whether or not the multiselect is disabled. | `boolean` | `false` | +| `errorMessage` | `error-message` | Error message to display. | `string` | `undefined` | +| `fetchTimeout` | `fetch-timeout` | Timeout in milliseconds for async fetch requests. | `number` | `30000` | +| `formatResult` | -- | Function to format async results. Receives raw API response item. | `(item: unknown) => MultiselectOption` | `undefined` | +| `helperMessage` | `helper-message` | Helper message to display below the input. | `string` | `undefined` | +| `hideLabel` | `hide-label` | Visually hides the label but keeps it accessible. | `boolean` | `false` | +| `invalid` | `invalid` | If true, the multiselect is in an invalid state. | `boolean` | `undefined` | +| `label` | `label` | Text to be displayed as the multiselect label. | `string` | `undefined` | +| `loading` | `loading` | Whether the component is currently loading async options. | `boolean` | `false` | +| `maxHeight` | `max-height` | Maximum height of the dropdown before scrolling. | `string` | `'300px'` | +| `maxSelections` | `max-selections` | Maximum number of selections allowed. | `number` | `undefined` | +| `minWidth` | `min-width` | Minimum width of the dropdown panel. | `string` | `'250px'` | +| `name` | `name` | Specifies the name. Submitted with the form as part of a name/value pair. | `string` | `undefined` | +| `options` | -- | Options provided externally (for consumer-managed async). | `MultiselectOption[]` | `undefined` | +| `panelWidth` | `panel-width` | Width of the dropdown panel. Defaults to the trigger width. | `string` | `undefined` | +| `placeholder` | `placeholder` | Placeholder text for the input field. | `string` | `'Select...'` | +| `required` | `required` | If true, the multiselect is required. | `boolean` | `false` | +| `triggerWidth` | `trigger-width` | Width of the trigger button (and reference for dropdown positioning). | `string` | `'100%'` | +| `value` | -- | Array of selected option values. | `string[]` | `[]` | ## Events From 93ded5e67190bd5ff4ac61a7aff21e066d539088 Mon Sep 17 00:00:00 2001 From: DSS Automation Bot Date: Tue, 3 Feb 2026 21:03:47 +0000 Subject: [PATCH 4/5] chore(release): release 3.15.3-dev.0 --- CHANGELOG.md | 10 ++++++++++ libs/core/package.json | 4 ++-- libs/doc-components/package.json | 2 +- libs/react/package.json | 4 ++-- package-lock.json | 10 +++++----- 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a931c0f7d..9ba5adc2f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +## 3.15.3-dev.0 (2026-02-03) + +### Bug Fixes 🐛 + +- **pds-multiselect:** add csrfHeaderName prop ([bb29f04c](https://github.com/Kajabi/pine/commit/bb29f04c)) + +### ❤️ Thank You + +- Quinton Jason + ## 3.15.2 (2026-02-02) ### Bug Fixes 🐛 diff --git a/libs/core/package.json b/libs/core/package.json index ba335e853..1da063aa3 100644 --- a/libs/core/package.json +++ b/libs/core/package.json @@ -1,6 +1,6 @@ { "name": "@pine-ds/core", - "version": "3.15.2", + "version": "3.15.3-dev.0", "type": "module", "license": "MIT", "description": "Base components for Pine Design System", @@ -85,7 +85,7 @@ "@babel/preset-env": "^7.22.10", "@chromatic-com/storybook": "^4.1.3", "@mdx-js/rollup": "^3.1.1", - "@pine-ds/doc-components": "^3.15.2", + "@pine-ds/doc-components": "^3.15.3-dev.0", "@stencil-community/eslint-plugin": "^0.8.0", "@stencil/react-output-target": "^0.5.3", "@stencil/sass": "^3.2.0", diff --git a/libs/doc-components/package.json b/libs/doc-components/package.json index 0030e3bed..8f2d8a642 100644 --- a/libs/doc-components/package.json +++ b/libs/doc-components/package.json @@ -2,7 +2,7 @@ "name": "@pine-ds/doc-components", "description": "Pine documentation components", "author": "Kajabi Design System Services", - "version": "3.15.2", + "version": "3.15.3-dev.0", "type": "module", "main": "./dist/index.js", "module": "./dist/index.js", diff --git a/libs/react/package.json b/libs/react/package.json index 4c37611ba..30783a28c 100644 --- a/libs/react/package.json +++ b/libs/react/package.json @@ -1,6 +1,6 @@ { "name": "@pine-ds/react", - "version": "3.15.2", + "version": "3.15.3-dev.0", "license": "MIT", "description": "Pine Web Components React Wrapper", "author": "Kajabi Design System Services", @@ -38,7 +38,7 @@ }, "dependencies": { "@kajabi-ui/styles": "*", - "@pine-ds/core": "^3.15.2", + "@pine-ds/core": "^3.15.3-dev.0", "@pine-ds/icons": "*", "tslib": "*" }, diff --git a/package-lock.json b/package-lock.json index 485c1e41a..45010dde8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,7 +35,7 @@ }, "libs/core": { "name": "@pine-ds/core", - "version": "3.15.2", + "version": "3.15.3-dev.0", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -53,7 +53,7 @@ "@babel/preset-env": "^7.22.10", "@chromatic-com/storybook": "^4.1.3", "@mdx-js/rollup": "^3.1.1", - "@pine-ds/doc-components": "^3.15.2", + "@pine-ds/doc-components": "^3.15.3-dev.0", "@stencil-community/eslint-plugin": "^0.8.0", "@stencil/react-output-target": "^0.5.3", "@stencil/sass": "^3.2.0", @@ -333,7 +333,7 @@ }, "libs/doc-components": { "name": "@pine-ds/doc-components", - "version": "3.15.2", + "version": "3.15.3-dev.0", "dependencies": { "@kajabi-ui/styles": "*", "markdown-to-jsx": "^7.3.2", @@ -431,11 +431,11 @@ }, "libs/react": { "name": "@pine-ds/react", - "version": "3.15.2", + "version": "3.15.3-dev.0", "license": "MIT", "dependencies": { "@kajabi-ui/styles": "*", - "@pine-ds/core": "^3.15.2", + "@pine-ds/core": "^3.15.3-dev.0", "@pine-ds/icons": "*", "tslib": "*" }, From d75abec04243e3341733bcc3abb147554166e42d Mon Sep 17 00:00:00 2001 From: Quinton Jason Date: Tue, 3 Feb 2026 15:23:40 -0600 Subject: [PATCH 5/5] Revert "chore(release): release 3.15.3-dev.0" This reverts commit 93ded5e67190bd5ff4ac61a7aff21e066d539088. --- CHANGELOG.md | 10 ---------- libs/core/package.json | 4 ++-- libs/doc-components/package.json | 2 +- libs/react/package.json | 4 ++-- package-lock.json | 10 +++++----- 5 files changed, 10 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ba5adc2f..a931c0f7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,3 @@ -## 3.15.3-dev.0 (2026-02-03) - -### Bug Fixes 🐛 - -- **pds-multiselect:** add csrfHeaderName prop ([bb29f04c](https://github.com/Kajabi/pine/commit/bb29f04c)) - -### ❤️ Thank You - -- Quinton Jason - ## 3.15.2 (2026-02-02) ### Bug Fixes 🐛 diff --git a/libs/core/package.json b/libs/core/package.json index 1da063aa3..ba335e853 100644 --- a/libs/core/package.json +++ b/libs/core/package.json @@ -1,6 +1,6 @@ { "name": "@pine-ds/core", - "version": "3.15.3-dev.0", + "version": "3.15.2", "type": "module", "license": "MIT", "description": "Base components for Pine Design System", @@ -85,7 +85,7 @@ "@babel/preset-env": "^7.22.10", "@chromatic-com/storybook": "^4.1.3", "@mdx-js/rollup": "^3.1.1", - "@pine-ds/doc-components": "^3.15.3-dev.0", + "@pine-ds/doc-components": "^3.15.2", "@stencil-community/eslint-plugin": "^0.8.0", "@stencil/react-output-target": "^0.5.3", "@stencil/sass": "^3.2.0", diff --git a/libs/doc-components/package.json b/libs/doc-components/package.json index 8f2d8a642..0030e3bed 100644 --- a/libs/doc-components/package.json +++ b/libs/doc-components/package.json @@ -2,7 +2,7 @@ "name": "@pine-ds/doc-components", "description": "Pine documentation components", "author": "Kajabi Design System Services", - "version": "3.15.3-dev.0", + "version": "3.15.2", "type": "module", "main": "./dist/index.js", "module": "./dist/index.js", diff --git a/libs/react/package.json b/libs/react/package.json index 30783a28c..4c37611ba 100644 --- a/libs/react/package.json +++ b/libs/react/package.json @@ -1,6 +1,6 @@ { "name": "@pine-ds/react", - "version": "3.15.3-dev.0", + "version": "3.15.2", "license": "MIT", "description": "Pine Web Components React Wrapper", "author": "Kajabi Design System Services", @@ -38,7 +38,7 @@ }, "dependencies": { "@kajabi-ui/styles": "*", - "@pine-ds/core": "^3.15.3-dev.0", + "@pine-ds/core": "^3.15.2", "@pine-ds/icons": "*", "tslib": "*" }, diff --git a/package-lock.json b/package-lock.json index 45010dde8..485c1e41a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,7 +35,7 @@ }, "libs/core": { "name": "@pine-ds/core", - "version": "3.15.3-dev.0", + "version": "3.15.2", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -53,7 +53,7 @@ "@babel/preset-env": "^7.22.10", "@chromatic-com/storybook": "^4.1.3", "@mdx-js/rollup": "^3.1.1", - "@pine-ds/doc-components": "^3.15.3-dev.0", + "@pine-ds/doc-components": "^3.15.2", "@stencil-community/eslint-plugin": "^0.8.0", "@stencil/react-output-target": "^0.5.3", "@stencil/sass": "^3.2.0", @@ -333,7 +333,7 @@ }, "libs/doc-components": { "name": "@pine-ds/doc-components", - "version": "3.15.3-dev.0", + "version": "3.15.2", "dependencies": { "@kajabi-ui/styles": "*", "markdown-to-jsx": "^7.3.2", @@ -431,11 +431,11 @@ }, "libs/react": { "name": "@pine-ds/react", - "version": "3.15.3-dev.0", + "version": "3.15.2", "license": "MIT", "dependencies": { "@kajabi-ui/styles": "*", - "@pine-ds/core": "^3.15.3-dev.0", + "@pine-ds/core": "^3.15.2", "@pine-ds/icons": "*", "tslib": "*" },