diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0f6285f0e..ee0d00b63 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,63 @@
# Changelog
+## [4.0.7](https://github.com/primefaces/primevue/tree/4.0.7) (2024-09-11)
+
+[Full Changelog](https://github.com/primefaces/primevue/compare/4.0.6...4.0.7)
+
+**Fixed bugs:**
+
+- SelectButton pt name correction [\#6382](https://github.com/primefaces/primevue/issues/6382)
+- ToggleButton: aria-label and aria-labelledby not observed [\#6377](https://github.com/primefaces/primevue/issues/6377)
+- FileUpload: Fix type of FileUploadState.messages [\#6370](https://github.com/primefaces/primevue/issues/6370)
+- TreeTable: click and arrow key defect [\#6368](https://github.com/primefaces/primevue/issues/6368)
+- Dialog: no dragstart event to accompany dragend [\#6357](https://github.com/primefaces/primevue/issues/6357)
+- Dialog: dragging state is not reset when closed while dragging [\#6356](https://github.com/primefaces/primevue/issues/6356)
+- InputOtp: IntegerOnly mode accepts "space" [\#6353](https://github.com/primefaces/primevue/issues/6353)
+- InputOtp: Pasting adds an extra character [\#6351](https://github.com/primefaces/primevue/issues/6351)
+- DatePicker: Pick month does not work [\#6342](https://github.com/primefaces/primevue/issues/6342)
+- DataTable: Cannot set properties of null (setting 'tabIndex') [\#6323](https://github.com/primefaces/primevue/issues/6323)
+- DatePicker showOtherMonths wrong behaviour [\#6307](https://github.com/primefaces/primevue/issues/6307)
+- Click outside only when not modal [\#6284](https://github.com/primefaces/primevue/pull/6284)
+- Select: Chinese IME input will be stopped in filter input element [\#6279](https://github.com/primefaces/primevue/issues/6279)
+
+## [4.0.6](https://github.com/primefaces/primevue/tree/4.0.6) (2024-09-10)
+
+[Full Changelog](https://github.com/primefaces/primevue/compare/4.0.5...4.0.6)
+
+**Fixed bugs:**
+
+- animate-slidedown fails when a Tailwind prefix is used [\#6365](https://github.com/primefaces/primevue/issues/6365)
+- Tree: wrong pt and classname for InputText [\#6301](https://github.com/primefaces/primevue/issues/6301)
+- pt pcFilterIconContainer defects on form components [\#6286](https://github.com/primefaces/primevue/issues/6286)
+- File Upload: Basic Mode does not apply buttonProps [\#6255](https://github.com/primefaces/primevue/issues/6255)
+- Multiple Components: Augment vue using declare module 'vue' instead of declare module '@vue/runtime-core' (and declare module 'vue/types/vue') to avoid compilebreaks [\#6199](https://github.com/primefaces/primevue/issues/6199)
+
+## [4.0.5](https://github.com/primefaces/primevue/tree/4.0.5) (2024-08-23)
+
+[Full Changelog](https://github.com/primefaces/primevue/compare/4.0.4...4.0.5)
+
+**Fixed bugs:**
+
+- aria-hidden errors on browsers [\#6269](https://github.com/primefaces/primevue/issues/6269)
+- Accordion, Button, Step, Tab: Invalid prop warnings when component object passed to as prop [\#6266](https://github.com/primefaces/primevue/issues/6266)
+- Carousel: Index is undefined in PassThroughOptions [\#6264](https://github.com/primefaces/primevue/issues/6264)
+- Drawer: Nested drawer dissmis [\#6262](https://github.com/primefaces/primevue/issues/6262)
+- Accordion and Tabs value prop type definion extensions [\#6252](https://github.com/primefaces/primevue/issues/6252)
+- DatePicker: responsiveOptions doesn't work [\#6250](https://github.com/primefaces/primevue/issues/6250)
+- ScrollTop: ScrollTop button not displayed correctly when ripple effect is enabled [\#6249](https://github.com/primefaces/primevue/issues/6249)
+- Stepper: activateCallback has incorrect signature [\#6225](https://github.com/primefaces/primevue/issues/6225)
+- SpeedDial: Invalid aria-controls value being set in list items [\#6221](https://github.com/primefaces/primevue/issues/6221)
+- InputNumber: Buttons disappear when clicked if inside of an InputGroup [\#6212](https://github.com/primefaces/primevue/issues/6212)
+- IconField: 'iconfield' does not exist in type 'PrimeVuePTOptions' [\#6206](https://github.com/primefaces/primevue/issues/6206)
+- DatePicker: switching to year view when modelValue is populated [\#6203](https://github.com/primefaces/primevue/issues/6203)
+- Select: In case of Filter and AutoFocusFilter enabled focus is lost [\#6194](https://github.com/primefaces/primevue/issues/6194)
+- InputOtp - allow NumpadEnter event [\#6182](https://github.com/primefaces/primevue/issues/6182)
+- [MenuBar]: Slow performance [\#6164](https://github.com/primefaces/primevue/issues/6164)
+- Dialog: [V4] When it non-fixed, it will cause the appendTo target shrink or joggled. [\#6160](https://github.com/primefaces/primevue/issues/6160)
+- Menu section: PassThrough context.item has not right MenuItem entry [\#6055](https://github.com/primefaces/primevue/issues/6055)
+- FileUpload v4.0.0-beta.3: Subsequent file selections no longer possible in basic mode (regression from v4.0.0-beta.2) [\#5748](https://github.com/primefaces/primevue/issues/5748)
+- InputMask number repeat [\#3623](https://github.com/primefaces/primevue/issues/3623)
+
## [4.0.4](https://github.com/primefaces/primevue/tree/4.0.4) (2024-08-02)
[Full Changelog](https://github.com/primefaces/primevue/compare/4.0.3...4.0.4)
diff --git a/apps/showcase/assets/data/news.json b/apps/showcase/assets/data/news.json
index 3a861c750..a96d79d08 100644
--- a/apps/showcase/assets/data/news.json
+++ b/apps/showcase/assets/data/news.json
@@ -1,6 +1,6 @@
{
- "id": 65,
- "content": "Summer Sale: Up to 50% Off 🛍️",
- "linkText": "Visit Store",
- "linkHref": "https://primefaces.org/store"
+ "id": 67,
+ "content": "480 Vue Components with Tailwind 🚀",
+ "linkText": "Visit PrimeBlocks",
+ "linkHref": "https://primeblocks.org"
}
diff --git a/apps/showcase/assets/menu/menu.json b/apps/showcase/assets/menu/menu.json
index 247a22588..39e081d3e 100644
--- a/apps/showcase/assets/menu/menu.json
+++ b/apps/showcase/assets/menu/menu.json
@@ -527,7 +527,8 @@
{
"name": "PrimeBlocks",
"icon": "pi pi-server",
- "href": "https://blocks.primevue.org"
+ "href": "https://primeblocks.org",
+ "badge": "NEW"
},
{
"name": "Guides",
@@ -572,8 +573,7 @@
{
"name": "Contribution",
"to": "/contribution",
- "icon": "pi pi-users",
- "badge": "NEW"
+ "icon": "pi pi-users"
},
{
"name": "Discover",
diff --git a/apps/showcase/components/doc/DocPTViewer.vue b/apps/showcase/components/doc/DocPTViewer.vue
new file mode 100644
index 000000000..71ca2a132
--- /dev/null
+++ b/apps/showcase/components/doc/DocPTViewer.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+ {{ item.label }} element of {{ doc.key }} component
+
+
+
+
+
+
+
+
diff --git a/apps/showcase/components/doc/helpers/index.js b/apps/showcase/components/doc/helpers/index.js
index 72e23026e..7a58201e3 100644
--- a/apps/showcase/components/doc/helpers/index.js
+++ b/apps/showcase/components/doc/helpers/index.js
@@ -19,12 +19,14 @@ export const getPTOptions = (name) => {
objToReplace.type = prop.type;
}
- data.push({
- value: i + 1,
- label: prop.name,
- options: hasSubComp ? subOptions?.props : options?.props,
- description: prop.description
- });
+ if (!prop.deprecated) {
+ data.push({
+ value: i + 1,
+ label: prop.name,
+ options: hasSubComp ? subOptions?.props : options?.props,
+ description: prop.description
+ });
+ }
} else {
data.push({
value: i + 1,
diff --git a/apps/showcase/components/landing/BlockSection.vue b/apps/showcase/components/landing/BlockSection.vue
index 6afe715cb..943ef83a3 100644
--- a/apps/showcase/components/landing/BlockSection.vue
+++ b/apps/showcase/components/landing/BlockSection.vue
@@ -3,7 +3,7 @@
400+ ready to copy-paste UI blocks to build spectacular applications in no time.
-
+
Explore All
diff --git a/apps/showcase/doc/common/apidoc/index.json b/apps/showcase/doc/common/apidoc/index.json
index ee2cb7d77..7fa3aee09 100644
--- a/apps/showcase/doc/common/apidoc/index.json
+++ b/apps/showcase/doc/common/apidoc/index.json
@@ -1838,7 +1838,7 @@
"name": "root",
"optional": true,
"readonly": false,
- "type": "null | Document | Element",
+ "type": "null | Element | Document",
"default": "",
"description": "Specifies the `root` option of the IntersectionObserver API"
},
@@ -2625,7 +2625,7 @@
"name": "appendTo",
"optional": true,
"readonly": false,
- "type": "HintedString<\"body\" | \"self\"> | HTMLElement",
+ "type": "HTMLElement | HintedString<\"body\" | \"self\">",
"default": "body",
"description": "A valid query selector or an HTMLElement to specify where the overlay gets attached.\nSpecial keywords are 'body' for document body and 'self' for the element itself."
},
@@ -8247,7 +8247,7 @@
"name": "appendTo",
"optional": true,
"readonly": false,
- "type": "HintedString<\"body\" | \"self\"> | HTMLElement",
+ "type": "HTMLElement | HintedString<\"body\" | \"self\">",
"default": "body",
"description": "A valid query selector or an HTMLElement to specify where the overlay gets attached. Special keywords are 'body' for document body and 'self' for the element itself."
},
@@ -8943,7 +8943,7 @@
"name": "plugins",
"optional": true,
"readonly": false,
- "type": "any",
+ "type": "any[]",
"default": "",
"description": "Used to custom plugins of the chart."
},
@@ -10603,7 +10603,7 @@
"name": "appendTo",
"optional": true,
"readonly": false,
- "type": "HintedString<\"body\" | \"self\"> | HTMLElement",
+ "type": "HTMLElement | HintedString<\"body\" | \"self\">",
"default": "body",
"description": "A valid query selector or an HTMLElement to specify where the overlay gets attached. Special keywords are 'body' for document body and 'self' for the element itself."
},
@@ -11981,7 +11981,20 @@
}
],
"returnType": "VNode
[]",
- "description": "Custom body template."
+ "description": "Custom body template for DataTable."
+ },
+ {
+ "name": "node",
+ "parameters": [
+ {
+ "name": "scope",
+ "optional": false,
+ "type": "{\n \t data : any , // Row data. \n \t node : any , // Row node data. \n \t column : ColumnNode , // Column node. \n \t field : string , // Column field. \n \t index : number , // Row index. \n \t frozenRow : boolean , // Whether the row is frozen. \n \t editorInitCallback : (event : Event) ⇒ void , // Editor init callback function \n\t rowTogglerCallback : (event : Event) ⇒ void , // Row toggler callback unction \n}",
+ "description": "body slot's params."
+ }
+ ],
+ "returnType": "VNode[]",
+ "description": "Custom body template for TreeTable."
},
{
"name": "header",
@@ -15130,7 +15143,7 @@
"name": "appendTo",
"optional": true,
"readonly": false,
- "type": "HintedString<\"body\" | \"self\"> | HTMLElement",
+ "type": "HTMLElement | HintedString<\"body\" | \"self\">",
"default": "body",
"description": "A valid query selector or an HTMLElement to specify where the overlay gets attached."
},
@@ -16857,7 +16870,7 @@
"description": "Collection of active filters"
},
{
- "name": "columWidths",
+ "name": "columnWidths",
"optional": false,
"readonly": false,
"type": "string[]",
@@ -21145,7 +21158,7 @@
"name": "appendTo",
"optional": true,
"readonly": false,
- "type": "HintedString<\"body\" | \"self\"> | HTMLElement",
+ "type": "HTMLElement | HintedString<\"body\" | \"self\">",
"default": "body",
"description": "A valid query selector or an HTMLElement to specify where the overlay gets attached."
},
@@ -22698,7 +22711,7 @@
"name": "appendTo",
"optional": true,
"readonly": false,
- "type": "HintedString<\"body\" | \"self\"> | HTMLElement",
+ "type": "HTMLElement | HintedString<\"body\" | \"self\">",
"default": "body",
"description": "A valid query selector or an HTMLElement to specify where the dialog gets attached."
},
@@ -22911,6 +22924,19 @@
"returnType": "void",
"description": "Fired when a dialog gets unmaximized."
},
+ {
+ "name": "dragstart",
+ "parameters": [
+ {
+ "name": "event",
+ "optional": false,
+ "type": "Event",
+ "description": "Browser event."
+ }
+ ],
+ "returnType": "void",
+ "description": "Fired when a dialog drag begins."
+ },
{
"name": "dragend",
"parameters": [
@@ -26585,22 +26611,6 @@
"default": "",
"description": "Used to pass attributes to the empty's DOM element."
},
- {
- "name": "pcMessages",
- "optional": true,
- "readonly": false,
- "type": "any",
- "default": "",
- "description": "Used to pass attributes to the messages' DOM element."
- },
- {
- "name": "pcButton",
- "optional": true,
- "readonly": false,
- "type": "any",
- "default": "",
- "description": "Used to pass attributes to the basic mode's button's DOM element."
- },
{
"name": "hooks",
"optional": true,
@@ -26649,7 +26659,7 @@
"name": "messages",
"optional": false,
"readonly": false,
- "type": "any[]",
+ "type": "null | string[]",
"default": "",
"description": "Current messages."
},
@@ -29223,7 +29233,7 @@
}
},
"iconfield": {
- "description": "IconField wraps an input and an icon.\n\n[Live Demo](https://www.primevue.org/inputtext/)",
+ "description": "IconField wraps an input and an icon.\n\n[Live Demo](https://www.primevue.org/iconfield/)",
"components": {
"default": {
"description": "IconField is used to select a boolean value.",
@@ -37352,7 +37362,7 @@
"name": "appendTo",
"optional": true,
"readonly": false,
- "type": "HintedString<\"body\" | \"self\"> | HTMLElement",
+ "type": "HTMLElement | HintedString<\"body\" | \"self\">",
"default": "body",
"description": "A valid query selector or an HTMLElement to specify where the overlay gets attached."
},
@@ -40384,7 +40394,7 @@
"name": "appendTo",
"optional": true,
"readonly": false,
- "type": "HintedString<\"body\" | \"self\"> | HTMLElement",
+ "type": "HTMLElement | HintedString<\"body\" | \"self\">",
"default": "body",
"description": "A valid query selector or an HTMLElement to specify where the overlay gets attached. Special keywords are 'body' for document body and 'self' for the element itself."
},
@@ -45921,7 +45931,7 @@
"name": "appendTo",
"optional": true,
"readonly": false,
- "type": "HintedString<\"body\" | \"self\"> | HTMLElement",
+ "type": "HTMLElement | HintedString<\"body\" | \"self\">",
"default": "body",
"description": "A valid query selector or an HTMLElement to specify where the overlay gets attached."
},
@@ -47778,7 +47788,7 @@
"name": "appendTo",
"optional": true,
"readonly": false,
- "type": "HintedString<\"body\" | \"self\"> | HTMLElement",
+ "type": "HTMLElement | HintedString<\"body\" | \"self\">",
"default": "body",
"description": "A valid query selector or an HTMLElement to specify where the overlay gets attached."
},
@@ -51623,7 +51633,7 @@
"name": "appendTo",
"optional": true,
"readonly": false,
- "type": "HintedString<\"body\" | \"self\"> | HTMLElement",
+ "type": "HTMLElement | HintedString<\"body\" | \"self\">",
"default": "body",
"description": "A valid query selector or an HTMLElement to specify where the overlay gets attached."
},
@@ -52437,7 +52447,7 @@
"description": "Used to pass attributes to the root's DOM element."
},
{
- "name": "pcButton",
+ "name": "pcToggleButton",
"optional": true,
"readonly": false,
"type": "SelectButtonPassThroughOptionType",
@@ -54662,7 +54672,7 @@
"name": "appendTo",
"optional": true,
"readonly": false,
- "type": "HintedString<\"body\" | \"self\"> | HTMLElement",
+ "type": "HTMLElement | HintedString<\"body\" | \"self\">",
"default": "body",
"description": "A valid query selector or an HTMLElement to specify where the overlay gets attached.\nSpecial keywords are 'body' for document body and 'self' for the element itself."
},
@@ -57935,6 +57945,14 @@
"default": "",
"description": "Style class to add when leave animation is completed."
},
+ {
+ "name": "hiddenClass",
+ "optional": true,
+ "readonly": false,
+ "type": "string",
+ "default": "",
+ "description": "Special class name to hide an element, only used in slide animation."
+ },
{
"name": "hideOnOutsideClick",
"optional": true,
@@ -61844,7 +61862,7 @@
"name": "appendTo",
"optional": true,
"readonly": false,
- "type": "HintedString<\"body\" | \"self\"> | HTMLElement",
+ "type": "HTMLElement | HintedString<\"body\" | \"self\">",
"default": "body",
"description": "A valid query selector or an HTMLElement to specify where the overlay gets attached."
},
@@ -63681,14 +63699,6 @@
"default": "",
"description": "Establishes relationships between the component and label(s) where its value should be one or more element IDs."
},
- {
- "name": "ariaLabel",
- "optional": true,
- "readonly": false,
- "type": "string",
- "default": "",
- "description": "Establishes a string value that labels the component."
- },
{
"name": "dt",
"optional": true,
@@ -65244,7 +65254,7 @@
"description": "Used to pass attributes to the IconField component."
},
{
- "name": "pcFilter",
+ "name": "pcFilterInput",
"optional": true,
"readonly": false,
"type": "any",
@@ -66560,7 +66570,7 @@
"name": "appendTo",
"optional": true,
"readonly": false,
- "type": "HintedString<\"body\" | \"self\"> | HTMLElement",
+ "type": "HTMLElement | HintedString<\"body\" | \"self\">",
"default": "body",
"description": "A valid query selector or an HTMLElement to specify where the overlay gets attached."
},
diff --git a/apps/showcase/doc/datatable/pt/PTImage.vue b/apps/showcase/doc/datatable/pt/PTImage.vue
index 9ac50d6b4..6a98c28d5 100644
--- a/apps/showcase/doc/datatable/pt/PTImage.vue
+++ b/apps/showcase/doc/datatable/pt/PTImage.vue
@@ -1,8 +1,37 @@
-
- {{ $attrs.description }}
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/showcase/doc/dataview/BasicDoc.vue b/apps/showcase/doc/dataview/BasicDoc.vue
index 607c84386..cadfbde29 100644
--- a/apps/showcase/doc/dataview/BasicDoc.vue
+++ b/apps/showcase/doc/dataview/BasicDoc.vue
@@ -7,9 +7,9 @@
-
+
-
+
diff --git a/apps/showcase/doc/fileupload/CustomUploadDoc.vue b/apps/showcase/doc/fileupload/CustomUploadDoc.vue
index 6c79423ca..001ff8025 100644
--- a/apps/showcase/doc/fileupload/CustomUploadDoc.vue
+++ b/apps/showcase/doc/fileupload/CustomUploadDoc.vue
@@ -1,9 +1,10 @@
- Uploading implementation can be overridden by enabling customUpload property and defining a custom uploader handler event.
+ Uploading implementation can be overridden by enabling customUpload property. This sample, displays the image on the client side with a grayscale filter.
-
-
+
+
+
@@ -12,30 +13,37 @@
export default {
data() {
return {
+ src: null,
code: {
basic: `
-
+
+
`,
options: `
-
-
+
+
+
diff --git a/apps/showcase/doc/popover/DataTableDoc.vue b/apps/showcase/doc/popover/DataTableDoc.vue
index 515e651fb..9fc123fe8 100644
--- a/apps/showcase/doc/popover/DataTableDoc.vue
+++ b/apps/showcase/doc/popover/DataTableDoc.vue
@@ -1,34 +1,55 @@
- An example that displays a DataTable inside a popup to select an item.
+ Place the Popover outside of the data iteration components to avoid rendering it multiple times.
-
-
+
+
+
+
+
+
+ $ {{ slotProps.data.price }}
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
{{ selectedProduct.category }}
+
{{ selectedProduct.name }}
+
+
+
+ {{ selectedProduct.rating }}
+
+
+
+
+
+
+
+
+
-
- {{ selectedProduct.name }}
- {{ '$' + selectedProduct.price }}
-
- {{ selectedProduct.category }}
-
-
-
-
-
-
-
-
-
-
-
- $ {{ slotProps.data.price }}
-
-
@@ -43,67 +64,103 @@ export default {
selectedProduct: null,
code: {
basic: `
-
-
+
+
+
+
+
+ $ {{ slotProps.data.price }}
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
{{ selectedProduct.category }}
+
{{ selectedProduct.name }}
+
+
+
+ {{ selectedProduct.rating }}
+
+
+
+
+
+
+
+
+
-
- {{ selectedProduct.name }}
- {{ '$' + selectedProduct.price }}
-
- {{ selectedProduct.category }}
-
-
-
-
-
-
-
-
-
-
-
-
- $ {{ slotProps.data.price }}
-
-
-
`,
options: `
-
-
-
+
+
+
+
+
+
+ $ {{ slotProps.data.price }}
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
{{ selectedProduct.category }}
+
{{ selectedProduct.name }}
+
+
+
+ {{ selectedProduct.rating }}
+
+
+
+
+
+
+
+
+
-
- {{ selectedProduct.name }}
- {{ '$' + selectedProduct.price }}
-
- {{ selectedProduct.category }}
-
-
-
-
-
-
-
-
-
-
-
-
- $ {{ slotProps.data.price }}
-
-
-
@@ -119,17 +176,39 @@ export default {
};
},
mounted() {
- ProductService.getProductsSmall()
- .then((data) => (this.products = data))
- .then(() => (this.selectedProduct = this.products[0]));
+ ProductService.getProductsSmall().then((data) => (this.products = data));
},
methods: {
- toggle(event) {
- this.$refs.op.toggle(event);
- },
- onProductSelect(event) {
+ displayProduct(event, product) {
this.$refs.op.hide();
- this.$toast.add({ severity: 'info', summary: 'Product Selected', detail: event.data.name, life: 3000 });
+
+ if (this.selectedProduct?.id === product.id) {
+ this.selectedProduct = null;
+ } else {
+ this.selectedProduct = product;
+
+ this.$nextTick(() => {
+ this.$refs.op.show(event);
+ });
+ }
+ },
+ hidePopover() {
+ this.$refs.op.hide();
+ },
+ getSeverity(product) {
+ switch (product.inventoryStatus) {
+ case 'INSTOCK':
+ return 'success';
+
+ case 'LOWSTOCK':
+ return 'warn';
+
+ case 'OUTOFSTOCK':
+ return 'danger';
+
+ default:
+ return null;
+ }
}
}
};
@@ -137,62 +216,102 @@ export default {
`,
composition: `
-
-
-
+
+
+
+
+
+
+ $ {{ slotProps.data.price }}
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
{{ selectedProduct.category }}
+
{{ selectedProduct.name }}
+
+
+
+ {{ selectedProduct.rating }}
+
+
+
+
+
+
+
+
+
-
- {{ selectedProduct.name }}
- {{ '$' + selectedProduct.price }}
-
- {{ selectedProduct.category }}
-
-
-
-
-
-
-
-
-
-
-
-
- $ {{ slotProps.data.price }}
-
-
-
diff --git a/apps/showcase/doc/selectbutton/AccessibilityDoc.vue b/apps/showcase/doc/selectbutton/AccessibilityDoc.vue
index 35ad2cc66..17f59dad3 100644
--- a/apps/showcase/doc/selectbutton/AccessibilityDoc.vue
+++ b/apps/showcase/doc/selectbutton/AccessibilityDoc.vue
@@ -1,10 +1,7 @@
Screen Reader
-
- SelectButton component uses hidden native checkbox role for multiple selection and hidden radio role for single selection that is only visible to screen readers. Value to describe the component can be provided via
- aria-labelledby property.
-
+ SelectButton component uses ToggleButton internally and has group role. Value to describe the component can be provided via aria-labelledby property.
Keyboard Support
Keyboard interaction is derived from the native browser handling of checkboxs in a group.
@@ -19,25 +16,11 @@
tab
- Moves focus to the first selected option, if there is none then first option receives the focus.
+ Moves focus to the next the focusable element in the page tab sequence.
-
-
- right arrow
- up arrow
-
-
- Moves focus to the previous option.
-
-
-
-
- left arrow
- down arrow
-
-
- Moves focus to the next option.
+ shift + tab
+ Moves focus to the previous the focusable element in the page tab sequence.
space
diff --git a/apps/showcase/doc/styleclass/AnimationDoc.vue b/apps/showcase/doc/styleclass/AnimationDoc.vue
index 1779c9fbf..fc41d165e 100644
--- a/apps/showcase/doc/styleclass/AnimationDoc.vue
+++ b/apps/showcase/doc/styleclass/AnimationDoc.vue
@@ -4,14 +4,30 @@
Classes to apply during enter and leave animations are specified using the enterFromClass , enterActiveClass , enterToClass , leaveFromClass , leaveActiveClass ,leaveToClass properties. In addition in
case the target is an overlay, hideOnOutsideClick would be handy to hide the target if outside of the popup is clicked.
+ First example uses a custom fade animation, and second one uses animate-slide from tailwind-primeui plugin.
-
-
-
-
+
+
-
@@ -23,21 +39,55 @@ export default {
return {
code: {
basic: `
-
-
-
-
Content
+
`,
options: `
-
-
-
-
+
+
-
@@ -79,13 +129,28 @@ export default {
`,
composition: `
-
-
-
-
+
+
-
diff --git a/apps/showcase/doc/tabs/BasicDoc.vue b/apps/showcase/doc/tabs/BasicDoc.vue
index 38d298810..23e6e0eb8 100644
--- a/apps/showcase/doc/tabs/BasicDoc.vue
+++ b/apps/showcase/doc/tabs/BasicDoc.vue
@@ -1,6 +1,6 @@
- Tabs is defined using TabList , Tab , TabPanels and Tab components. Tab and TabPanel components are associated with their value properties
+ Tabs is defined using TabList , Tab , TabPanels and TabPanel components. Tab and TabPanel components are associated with their value properties
diff --git a/apps/showcase/doc/tabs/pt/PTImage.vue b/apps/showcase/doc/tabs/pt/PTImage.vue
index 9ac50d6b4..379cdffc4 100644
--- a/apps/showcase/doc/tabs/pt/PTImage.vue
+++ b/apps/showcase/doc/tabs/pt/PTImage.vue
@@ -1,8 +1,65 @@
-
- {{ $attrs.description }}
-
-
-
-
+
+
+
+
+ Header I
+ Header II
+ Header III
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
+ consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+
+
+
+
+ Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim
+ ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi.
+
+
+
+
+ At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa
+ qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus.
+
+
+
+
+
+
+
diff --git a/apps/showcase/doc/theming/styled/csslayer/SpecificityDoc.vue b/apps/showcase/doc/theming/styled/csslayer/SpecificityDoc.vue
index 43152ba13..16a58c474 100644
--- a/apps/showcase/doc/theming/styled/csslayer/SpecificityDoc.vue
+++ b/apps/showcase/doc/theming/styled/csslayer/SpecificityDoc.vue
@@ -4,11 +4,11 @@
The @layer is a standard CSS feature to define cascade layers for a customizable order of precedence. If you need to become more familiar with layers, visit the documentation at
MDN to begin with. In styled mode, when the cssLayer option is enabled at theme configuration, PrimeVue wraps the built-in style classes under
the primevue cascade layer to make the library styles easy to override. CSS in your app without a layer has the highest CSS specificity, so you'll be able to override styles regardless of the location or how strong a class is
- written. The cssLayer is disabled by default to avoid compatibility issues with 3rd party CSS libraries which requires a layer configuration for compatibility that is discussed in the next reset section.
+ written. The cssLayer is disabled by default to avoid compatibility issues with 3rd party CSS libraries which require a layer configuration for compatibility that is discussed in the next reset section.
For example, let's assume you need to remove the rounded borders of the ToggleSwitch component defined by the theme in use. In order to achieve this, .p-toggleswitch .p-toggleswitch-slider selector needs to be overriden. Without
- the layers, we'd have to write a stronger css or use !important however, with layers, this does not present an issue as your CSS can always override PrimeVue with a more straightforward class name such as my-switch-slider .
+ the layers, we'd have to write a stronger css or use !important , however, with layers, this does not present an issue as your CSS can always override PrimeVue with a more straightforward class name such as my-switch-slider .
Another advantage of this approach is that it does not force you to figure out the built-in class names of the components.
diff --git a/apps/showcase/doc/theming/styled/customization/ComponentDoc.vue b/apps/showcase/doc/theming/styled/customization/ComponentDoc.vue
index e3933913b..9d92d7c36 100644
--- a/apps/showcase/doc/theming/styled/customization/ComponentDoc.vue
+++ b/apps/showcase/doc/theming/styled/customization/ComponentDoc.vue
@@ -1,7 +1,7 @@
- The design tokens of a specific component is defined at components layer. Overriding components tokens is not the recommended approach if you are building our own style, building your own preset should be preferred instead. This
+ The design tokens of a specific component is defined at components layer. Overriding components tokens is not the recommended approach if you are building your own style, building your own preset should be preferred instead. This
configuration is global and applies to all card components, in case you need to customize a particular component on a page locally, view the Scoped CSS section for an example.
diff --git a/apps/showcase/doc/theming/styled/utils/PaletteDoc.vue b/apps/showcase/doc/theming/styled/utils/PaletteDoc.vue
index 678e53058..be35c6e42 100644
--- a/apps/showcase/doc/theming/styled/utils/PaletteDoc.vue
+++ b/apps/showcase/doc/theming/styled/utils/PaletteDoc.vue
@@ -1,6 +1,6 @@
- Returns shades and tints of a given color from 50 to 950 as an array.
+ Returns shades and tints of a given color from 50 to 950 as an object.
diff --git a/apps/showcase/doc/togglebutton/AccessibilityDoc.vue b/apps/showcase/doc/togglebutton/AccessibilityDoc.vue
index 275d36350..e98beb7a7 100644
--- a/apps/showcase/doc/togglebutton/AccessibilityDoc.vue
+++ b/apps/showcase/doc/togglebutton/AccessibilityDoc.vue
@@ -2,9 +2,9 @@
Screen Reader
- ToggleButton component uses a hidden native checkbox element as the switch element internally that is only visible to screen readers. Value to describe the component can be defined with aria-labelledby or aria-label props,
- it is highly suggested to use either of these props as the component changes the label displayed which will result in screen readers to read different labels when the component receives focus. To prevent this, always provide an aria label
- that does not change related to state.
+ ToggleButton component uses a native button element as the switch element internally that is only visible to screen readers. Value to describe the component can be defined with aria-labelledby or aria-label props, it is
+ highly suggested to use either of these props as the component changes the label displayed which will result in screen readers to read different labels when the component receives focus. To prevent this, always provide an aria label that
+ does not change related to state.
diff --git a/apps/showcase/doc/tree/selection/CheckboxDoc.vue b/apps/showcase/doc/tree/selection/CheckboxDoc.vue
index 2467abd00..abe31e97a 100644
--- a/apps/showcase/doc/tree/selection/CheckboxDoc.vue
+++ b/apps/showcase/doc/tree/selection/CheckboxDoc.vue
@@ -2,7 +2,7 @@
Selection of multiple nodes via checkboxes is enabled by configuring selectionMode as checkbox .
- In checkbox selection mode, value binding should be a key-value pair where key is the node key and value is an object that has checked and partialChecked properties to represent the checked state of a node obje to indicate
+ In checkbox selection mode, value binding should be a key-value pair where key is the node key and value is an object that has checked and partialChecked properties to represent the checked state of a node object to indicate
selection.
diff --git a/apps/showcase/doc/treeselect/CheckboxDoc.vue b/apps/showcase/doc/treeselect/CheckboxDoc.vue
index cc6582f61..425f963d1 100644
--- a/apps/showcase/doc/treeselect/CheckboxDoc.vue
+++ b/apps/showcase/doc/treeselect/CheckboxDoc.vue
@@ -2,7 +2,7 @@
Selection of multiple nodes via checkboxes is enabled by configuring selectionMode as checkbox .
- In checkbox selection mode, value binding should be a key-value pair where key is the node key and value is an object that has checked and partialChecked properties to represent the checked state of a node obje to indicate
+ In checkbox selection mode, value binding should be a key-value pair where key is the node key and value is an object that has checked and partialChecked properties to represent the checked state of a node object to indicate
selection.
diff --git a/apps/showcase/doc/vite/VideoDoc.vue b/apps/showcase/doc/vite/VideoDoc.vue
new file mode 100644
index 000000000..056d2d0d0
--- /dev/null
+++ b/apps/showcase/doc/vite/VideoDoc.vue
@@ -0,0 +1,8 @@
+
+
+ Watch the short video tutorial from Çağatay Çivici to setup PrimeVue in styled mode with Create-Vue .
+
+
+ VIDEO
+
+
diff --git a/apps/showcase/doc/vite/videos/CreateVueDoc.vue b/apps/showcase/doc/vite/videos/CreateVueDoc.vue
deleted file mode 100644
index cd2836e41..000000000
--- a/apps/showcase/doc/vite/videos/CreateVueDoc.vue
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
- Create-Vue
- is the recommended way to start a Vite-powered Vue project.
-
-
-
- VIDEO
-
-
diff --git a/apps/showcase/layouts/AppNews.vue b/apps/showcase/layouts/AppNews.vue
index f7b4aaea6..9ae19d3c2 100644
--- a/apps/showcase/layouts/AppNews.vue
+++ b/apps/showcase/layouts/AppNews.vue
@@ -4,7 +4,7 @@
diff --git a/apps/showcase/package.json b/apps/showcase/package.json
index f368d8b15..4af5db98b 100644
--- a/apps/showcase/package.json
+++ b/apps/showcase/package.json
@@ -1,6 +1,6 @@
{
"name": "showcase",
- "version": "4.0.4",
+ "version": "4.0.7",
"author": "PrimeTek Informatics",
"description": "",
"homepage": "https://primevue.org/",
diff --git a/apps/showcase/pages/configuration/index.vue b/apps/showcase/pages/configuration/index.vue
index 94bcb6412..6eb639695 100644
--- a/apps/showcase/pages/configuration/index.vue
+++ b/apps/showcase/pages/configuration/index.vue
@@ -7,7 +7,7 @@
Configuration
-
Application widge configuration for PrimeVue.
+
Application widget configuration for PrimeVue.
diff --git a/apps/showcase/pages/inputgroup/index.vue b/apps/showcase/pages/inputgroup/index.vue
index d35110aed..34ac5b733 100755
--- a/apps/showcase/pages/inputgroup/index.vue
+++ b/apps/showcase/pages/inputgroup/index.vue
@@ -46,7 +46,7 @@ export default {
},
{
id: 'checkbox',
- label: 'Check & Radio',
+ label: 'Checkbox & Radio',
component: CheckboxDoc
},
{
diff --git a/apps/showcase/pages/popover/index.vue b/apps/showcase/pages/popover/index.vue
index cc43c9a92..c103f0c97 100755
--- a/apps/showcase/pages/popover/index.vue
+++ b/apps/showcase/pages/popover/index.vue
@@ -16,6 +16,7 @@ import BasicDoc from '@/doc/popover/BasicDoc.vue';
import DataTableDoc from '@/doc/popover/DataTableDoc.vue';
import ImportDoc from '@/doc/popover/ImportDoc.vue';
import PTComponent from '@/doc/popover/pt/index.vue';
+import SelectDataDoc from '@/doc/popover/SelectDataDoc.vue';
import ThemingDoc from '@/doc/popover/theming/index.vue';
export default {
@@ -32,6 +33,11 @@ export default {
label: 'Basic',
component: BasicDoc
},
+ {
+ id: 'selectdata',
+ label: 'Select Data',
+ component: SelectDataDoc
+ },
{
id: 'datatable',
label: 'DataTable',
diff --git a/apps/showcase/pages/progressspinner/index.vue b/apps/showcase/pages/progressspinner/index.vue
index 18752bf76..b9f78afba 100755
--- a/apps/showcase/pages/progressspinner/index.vue
+++ b/apps/showcase/pages/progressspinner/index.vue
@@ -1,5 +1,13 @@
-
+