diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ + diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000000..ca204e42a6 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,273 @@ +{ + "plugins": ["@typescript-eslint", "jest-dom"], + "extends": ["next/core-web-vitals", "plugin:@typescript-eslint/recommended", "prettier"], + "rules": { + "@next/next/no-img-element": "off", + "react/display-name": "off", + "react/no-unescaped-entities": "off", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-empty-interface": "off", + "@typescript-eslint/no-unused-vars": "off", + "@typescript-eslint/no-explicit-any": "off", + "no-console": 2, + "padding-line-between-statements": [ + "error", + { "blankLine": "always", "prev": ["const", "let", "var"], "next": "*" }, + { "blankLine": "any", "prev": ["const", "let", "var"], "next": ["const", "let", "var"] }, + { "blankLine": "any", "prev": ["case", "default"], "next": "break" }, + { "blankLine": "any", "prev": "case", "next": "case" }, + { "blankLine": "always", "prev": "*", "next": "return" }, + { "blankLine": "always", "prev": "block", "next": "*" }, + { "blankLine": "always", "prev": "*", "next": "block" }, + { "blankLine": "always", "prev": "block-like", "next": "*" }, + { "blankLine": "always", "prev": "*", "next": "block-like" } + ] + } +} +// USE THE CONFIG BELOW DURING THE DEVELOPMENT +// { +// "env": { +// "browser": true, +// "node": true, +// "es6": true +// }, + +// "plugins": ["@typescript-eslint", "jest-dom"], +// "extends": ["next/core-web-vitals", "plugin:@typescript-eslint/recommended", "prettier"], + +// "ecmaFeatures": { +// "arrowFunctions": true, +// "binaryLiterals": true, +// "blockBindings": true, +// "classes": true, +// "defaultParams": true, +// "destructuring": true, +// "forOf": true, +// "generators": true, +// "modules": true, +// "objectLiteralComputedProperties": true, +// "objectLiteralDuplicateProperties": true, +// "objectLiteralShorthandMethods": true, +// "objectLiteralShorthandProperties": true, +// "octalLiterals": true, +// "regexUFlag": true, +// "regexYFlag": true, +// "spread": true, +// "superInFunctions": true, +// "templateStrings": true, +// "unicodeCodePointEscapes": true, +// "globalReturn": true, +// "jsx": true +// }, + +// "rules": { +// // +// //Possible Errors +// // +// // The following rules point out areas where you might have made mistakes. +// // +// "no-cond-assign": 2, // disallow assignment in conditional expressions +// "no-console": 1, // disallow use of console (off by default in the node environment) +// "no-constant-condition": 2, // disallow use of constant expressions in conditions +// "no-control-regex": 2, // disallow control characters in regular expressions +// "no-debugger": 2, // disallow use of debugger +// "no-dupe-args": 2, // disallow duplicate arguments in functions +// "no-dupe-keys": 2, // disallow duplicate keys when creating object literals +// "no-duplicate-case": 2, // disallow a duplicate case label. +// "no-empty": 2, // disallow empty statements +// "no-empty-class": 2, // disallow the use of empty character classes in regular expressions +// "no-ex-assign": 2, // disallow assigning to the exception in a catch block +// "no-extra-boolean-cast": 2, // disallow double-negation boolean casts in a boolean context +// "no-extra-parens": 0, // disallow unnecessary parentheses (off by default) +// "no-extra-semi": 2, // disallow unnecessary semicolons +// "no-func-assign": 2, // disallow overwriting functions written as function declarations +// "no-inner-declarations": 2, // disallow function or variable declarations in nested blocks +// "no-invalid-regexp": 2, // disallow invalid regular expression strings in the RegExp constructor +// "no-irregular-whitespace": 2, // disallow irregular whitespace outside of strings and comments +// "no-negated-in-lhs": 2, // disallow negation of the left operand of an in expression +// "no-obj-calls": 2, // disallow the use of object properties of the global object (Math and JSON) as functions +// "no-regex-spaces": 2, // disallow multiple spaces in a regular expression literal +// "no-reserved-keys": 2, // disallow reserved words being used as object literal keys (off by default) +// "no-sparse-arrays": 2, // disallow sparse arrays +// "no-unreachable": 2, // disallow unreachable statements after a return, throw, continue, or break statement +// "use-isnan": 2, // disallow comparisons with the value NaN +// "valid-jsdoc": 2, // Ensure JSDoc comments are valid (off by default) +// "valid-typeof": 2, // Ensure that the results of typeof are compared against a valid string + +// // +// // Best Practices +// // +// // These are rules designed to prevent you from making mistakes. +// // They either prescribe a better way of doing something or help you avoid footguns. +// // +// "block-scoped-var": 0, // treat var statements as if they were block scoped (off by default). 0: deep destructuring is not compatible https://github.com/eslint/eslint/issues/1863 +// "complexity": 0, // specify the maximum cyclomatic complexity allowed in a program (off by default) +// "consistent-return": 2, // require return statements to either always or never specify values +// "curly": 2, // specify curly brace conventions for all control statements +// "default-case": 2, // require default case in switch statements (off by default) +// "dot-notation": 2, // encourages use of dot notation whenever possible +// "eqeqeq": 2, // require the use of === and !== +// "guard-for-in": 2, // make sure for-in loops have an if statement (off by default) +// "no-alert": 2, // disallow the use of alert, confirm, and prompt +// "no-caller": 2, // disallow use of arguments.caller or arguments.callee +// "no-div-regex": 2, // disallow division operators explicitly at beginning of regular expression (off by default) +// "no-else-return": 2, // disallow else after a return in an if (off by default) +// "no-empty-label": 2, // disallow use of labels for anything other then loops and switches +// "no-eq-null": 2, // disallow comparisons to null without a type-checking operator (off by default) +// "no-eval": 2, // disallow use of eval() +// "no-extend-native": 2, // disallow adding to native types +// "no-extra-bind": 2, // disallow unnecessary function binding +// "no-fallthrough": 2, // disallow fallthrough of case statements +// "no-floating-decimal": 2, // disallow the use of leading or trailing decimal points in numeric literals (off by default) +// "no-implied-eval": 2, // disallow use of eval()-like methods +// "no-iterator": 2, // disallow usage of __iterator__ property +// "no-labels": 2, // disallow use of labeled statements +// "no-lone-blocks": 2, // disallow unnecessary nested blocks +// "no-loop-func": 2, // disallow creation of functions within loops +// "no-multi-spaces": 2, // disallow use of multiple spaces +// "no-multi-str": 2, // disallow use of multiline strings +// "no-native-reassign": 2, // disallow reassignments of native objects +// "no-new": 2, // disallow use of new operator when not part of the assignment or comparison +// "no-new-func": 2, // disallow use of new operator for Function object +// "no-new-wrappers": 2, // disallows creating new instances of String,Number, and Boolean +// "no-octal": 2, // disallow use of octal literals +// "no-octal-escape": 2, // disallow use of octal escape sequences in string literals, such as var foo = "Copyright \251"; +// "no-param-reassign": 2, // disallow reassignment of function parameters (off by default) +// "no-process-env": 2, // disallow use of process.env (off by default) +// "no-proto": 2, // disallow usage of __proto__ property +// "no-redeclare": 2, // disallow declaring the same variable more then once +// "no-return-assign": 2, // disallow use of assignment in return statement +// "no-script-url": 2, // disallow use of javascript: urls. +// "no-self-compare": 2, // disallow comparisons where both sides are exactly the same (off by default) +// "no-sequences": 2, // disallow use of comma operator +// "no-throw-literal": 2, // restrict what can be thrown as an exception (off by default) +// "no-void": 2, // disallow use of void operator (off by default) +// "no-warning-comments": [0, { "terms": ["todo", "fixme"], "location": "start" }], // disallow usage of configurable warning terms in comments": 2, // e.g. TODO or FIXME (off by default) +// "no-with": 2, // disallow use of the with statement +// "radix": 2, // require use of the second argument for parseInt() (off by default) +// "vars-on-top": 2, // requires to declare all vars on top of their containing scope (off by default) +// "wrap-iife": 2, // require immediate function invocation to be wrapped in parentheses (off by default) +// "yoda": 2, // require or disallow Yoda conditions + +// // +// // Strict Mode +// // +// // These rules relate to using strict mode. +// // +// "strict": 0, // controls location of Use Strict Directives. 0: required by `babel-eslint` + +// // +// // Variables +// // +// // These rules have to do with variable declarations. +// // +// "no-catch-shadow": 2, // disallow the catch clause parameter name being the same as a variable in the outer scope (off by default in the node environment) +// "no-delete-var": 2, // disallow deletion of variables +// "no-label-var": 2, // disallow labels that share a name with a variable +// "no-shadow": 2, // disallow declaration of variables already declared in the outer scope +// "no-shadow-restricted-names": 2, // disallow shadowing of names such as arguments +// "no-undef": 2, // disallow use of undeclared variables unless mentioned in a /*global */ block +// "no-undef-init": 2, // disallow use of undefined when initializing variables +// "no-undefined": 2, // disallow use of undefined variable (off by default) +// "no-unused-vars": 2, // disallow declaration of variables that are not used in the code +// "no-use-before-define": 2, // disallow use of variables before they are defined + +// // +// //Stylistic Issues +// // +// // These rules are purely matters of style and are quite subjective. +// // +// "indent": [1, 4], // this option sets a specific tab width for your code (off by default) +// "brace-style": 1, // enforce one true brace style (off by default) +// "camelcase": 1, // require camel case names +// "comma-spacing": [1, { "before": false, "after": true }], // enforce spacing before and after comma +// "comma-style": [1, "last"], // enforce one true comma style (off by default) +// "consistent-this": [1, "_this"], // enforces consistent naming when capturing the current execution context (off by default) +// "eol-last": 1, // enforce newline at the end of file, with no multiple empty lines +// "func-names": 0, // require function expressions to have a name (off by default) +// "func-style": 0, // enforces use of function declarations or expressions (off by default) +// "key-spacing": [1, { "beforeColon": false, "afterColon": true }], // enforces spacing between keys and values in object literal properties +// "max-nested-callbacks": [1, 3], // specify the maximum depth callbacks can be nested (off by default) +// "new-cap": [1, { "newIsCap": true, "capIsNew": false }], // require a capital letter for constructors +// "new-parens": 1, // disallow the omission of parentheses when invoking a constructor with no arguments +// "newline-after-var": 0, // allow/disallow an empty newline after var statement (off by default) +// "no-array-constructor": 1, // disallow use of the Array constructor +// "no-inline-comments": 1, // disallow comments inline after code (off by default) +// "no-lonely-if": 1, // disallow if as the only statement in an else block (off by default) +// "no-mixed-spaces-and-tabs": 1, // disallow mixed spaces and tabs for indentation +// "no-multiple-empty-lines": [1, { "max": 2 }], // disallow multiple empty lines (off by default) +// "no-new-object": 1, // disallow use of the Object constructor +// "no-spaced-func": 1, // disallow space between function identifier and application +// "no-trailing-spaces": 1, // disallow trailing whitespace at the end of lines +// "no-wrap-func": 1, // disallow wrapping of non-IIFE statements in parens +// "one-var": [1, "never"], // allow just one var statement per function (off by default) +// "operator-assignment": [1, "never"], // require assignment operator shorthand where possible or prohibit it entirely (off by default) +// "padded-blocks": [1, "never"], // enforce padding within blocks (off by default) +// "quote-props": [1, "as-needed"], // require quotes around object literal property names (off by default) +// "quotes": [1, "single"], // specify whether double or single quotes should be used +// "semi": [1, "always"], // require or disallow use of semicolons instead of ASI +// "semi-spacing": [1, { "before": false, "after": true }], // enforce spacing before and after semicolons +// "sort-vars": 0, // sort variables within the same declaration block (off by default) +// "space-after-keywords": [1, "always"], // require a space after certain keywords (off by default) +// "space-before-blocks": [1, "always"], // require or disallow space before blocks (off by default) +// "space-before-function-paren": [1, { "anonymous": "always", "named": "never" }], // require or disallow space before function opening parenthesis (off by default) +// "space-in-brackets": [1, "never"], // require or disallow spaces inside brackets (off by default) +// "space-in-parens": [1, "never"], // require or disallow spaces inside parentheses (off by default) +// "space-return-throw-case": [1, "always"], // require a space after return, throw, and case +// "space-unary-ops": [1, { "words": true, "nonwords": false }], // Require or disallow spaces before/after unary operators (words on by default, nonwords off by default) +// "spaced-line-comment": [1, "always"], // require or disallow a space immediately following the // in a line comment (off by default) +// "wrap-regex": 0, // require regex literals to be wrapped in parentheses (off by default) + +// // +// // ECMAScript 6 +// // +// // These rules are only relevant to ES6 environments and are off by default. +// // +// "no-var": 2, // require let or const instead of var (off by default) +// "generator-star-spacing": [2, "before"], // enforce the spacing around the * in generator functions (off by default) + +// // +// // Legacy +// // +// // The following rules are included for compatibility with JSHint and JSLint. +// // While the names of the rules may not match up with the JSHint/JSLint counterpart, +// // the functionality is the same. +// // +// "max-depth": [2, 3], // specify the maximum depth that blocks can be nested (off by default) +// "max-params": [2, 5], // limits the number of parameters that can be used in the function declaration. (off by default) +// "max-statements": 0, // specify the maximum number of statement allowed in a function (off by default) +// "no-bitwise": 0, // disallow use of bitwise operators (off by default) +// "no-plusplus": 2, // disallow use of unary operators, ++ and -- (off by default) + +// // +// // eslint-plugin-react +// // +// // React specific linting rules for ESLint +// // +// "react/display-name": 0, // Prevent missing displayName in a React component definition +// "react/jsx-quotes": [2, "double", "avoid-escape"], // Enforce quote style for JSX attributes +// "react/jsx-no-undef": 2, // Disallow undeclared variables in JSX +// "react/jsx-sort-props": 0, // Enforce props alphabetical sorting +// "react/jsx-uses-react": 2, // Prevent React to be incorrectly marked as unused +// "react/jsx-uses-vars": 2, // Prevent variables used in JSX to be incorrectly marked as unused +// "react/no-did-mount-set-state": 2, // Prevent usage of setState in componentDidMount +// "react/no-did-update-set-state": 2, // Prevent usage of setState in componentDidUpdate +// "react/no-multi-comp": 0, // Prevent multiple component definition per file +// "react/no-unknown-property": 2, // Prevent usage of unknown DOM property +// "react/react-in-jsx-scope": 2, // Prevent missing React when using JSX +// "react/self-closing-comp": 2, // Prevent extra closing tags for components without children +// "react/wrap-multilines": 2, // Prevent missing parentheses around multilines JSX +// "padding-line-between-statements": [ +// "error", +// { "blankLine": "always", "prev": ["const", "let", "var"], "next": "*" }, +// { "blankLine": "any", "prev": ["const", "let", "var"], "next": ["const", "let", "var"] }, +// { "blankLine": "any", "prev": ["case", "default"], "next": "break" }, +// { "blankLine": "any", "prev": "case", "next": "case" }, +// { "blankLine": "always", "prev": "*", "next": "return" }, +// { "blankLine": "always", "prev": "block", "next": "*" }, +// { "blankLine": "always", "prev": "*", "next": "block" }, +// { "blankLine": "always", "prev": "block-like", "next": "*" }, +// { "blankLine": "always", "prev": "*", "next": "block-like" } +// ] +// } +// } diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..94f480de94 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto eol=lf \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index ab36a17487..0000000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,40 +0,0 @@ -### There is no guarantee in receiving an immediate response in GitHub Issue Tracker, If you'd like to secure our response, you may consider *PrimeReact PRO Support* where support is provided within 4 business hours - -**I'm submitting a ...** (check one with "x") -``` -[ ] bug report -[ ] feature request -[ ] support request => Please do not submit support request here, instead see https://forum.primefaces.org/viewforum.php?f=57 -``` - -**Codesandbox Case (Bug Reports)** -Please fork the codesandbox below and create a case demonstrating your bug report. Issues without a codesandbox have much less possibility to be reviewed. - -https://codesandbox.io/s/qjx332qq4 - -**Current behavior** - - -**Expected behavior** - - -**Minimal reproduction of the problem with instructions** - - -**Please tell us about your environment:** - - -* **React version:** - - -* **PrimeReact version:** - - -* **Browser:** [all | Chrome XX | Firefox XX | IE XX | Safari XX | Mobile Chrome XX | Android X.X Web Browser | iOS XX Safari | iOS XX UIWebView | iOS XX WKWebView ] - - -* **Language:** [all | TypeScript X.X | ES6/7 | ES5] diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000000..bcd6b6626a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,61 @@ +name: Bug report +description: Create a report to help PrimeReact improve. +title: 'Replace_With_Component_Name: Brief_Bug_Description' +labels: ['Status: Needs Triage'] +body: + - type: markdown + attributes: + # yamllint disable rule:line-length + value: > + ### There is no guarantee in receiving an immediate response in GitHub Issue Tracker, If you'd like to secure our response, you may consider *PrimeReact PRO Support* where support is provided within 4 business hours + # yamllint enable rule:line-length + - type: textarea + id: description + attributes: + label: Describe the bug + description: A clear and concise description of what the bug is. + validations: + required: true + - type: input + id: reproducer + attributes: + label: Reproducer + placeholder: https://stackblitz.com/edit/vitejs-vite-pekean1c + description: | + Please fork [Stackblitz project](https://stackblitz.com/edit/vitejs-vite-pekean1c?file=src%2FApp.tsx) and create a case demonstrating your bug report. Issues **without** a CodeSandbox have much less possibility to be reviewed. + validations: + required: false + - type: textarea + id: system-info + attributes: + label: System Information + description: Output of `npx envinfo --system --npmPackages primereact,react,tailwindcss --binaries --browsers` + render: Shell + placeholder: > + System:... + Binaries:... + Browsers: ... + npmPackages: + primereact: 10.7.0 => 10.7.0 + react: 18.3.1 => 18.3.1 + validations: + required: true + - type: textarea + id: reproduce-steps + attributes: + label: Steps to reproduce the behavior + description: A clear and concise description of how to make the issue happen. + placeholder: > + 1. Go to '...' + 2. Click on '....' + 3. Scroll down to '....' + 4. See error + validations: + required: false + - type: textarea + id: expected-behavior + attributes: + label: Expected behavior + description: A clear and concise description of what you expected to happen. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000000..c0d83c5d78 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,7 @@ +contact_links: + - name: Feature request + url: https://github.com/orgs/primefaces/discussions/categories/primereact + about: Propose an enhancement at discussions. + - name: Support + url: https://primereact.org/support/ + about: Professional support for the open source innovation. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index da86c58a8c..2d51c7d228 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,6 +1,6 @@ -###Defect Fixes -When submitting a PR, please also create an issue documenting the error. +### Defect Fixes +When submitting a PR, please also **create an issue** documenting the error and [manually link to an issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue#manually-linking-a-pull-request-or-branch-to-an-issue-using-the-issue-sidebar) or mention it in the description using #. -###Feature Requests +### Feature Requests Due to company policy, we are unable to accept feature request PRs with significant changes as such cases has to be implemented by our team following our own processes. -Smaller scaled feature implementations such as adding a property to a component will be considered for merging. \ No newline at end of file +Smaller scaled feature implementations such as adding a property to a component will be considered for merging. diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..acc23b333e --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,14 @@ +version: 2 +updates: + - package-ecosystem: "npm" + directory: "/" + schedule: + interval: "monthly" + ignore: + - dependency-name: "react" + - dependency-name: "react-dom" + - dependency-name: "typedoc" + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "monthly" diff --git a/.github/workflows/comment_by_label.yml b/.github/workflows/comment_by_label.yml new file mode 100644 index 0000000000..518ae1f6aa --- /dev/null +++ b/.github/workflows/comment_by_label.yml @@ -0,0 +1,23 @@ +name: Comment By Label In Issues and PRs + +on: + issues: + types: [labeled] + +permissions: + contents: read + +jobs: + add-comment: + if: contains(github.event.label.name, 'Help Wanted') + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + steps: + - name: Add comment + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 + with: + issue-number: ${{ github.event.issue.number }} + body: | + This issue is available for anyone to work on. **Make sure to reference this issue in your pull request.** :sparkles: Thank you for your contribution! :sparkles: diff --git a/.github/workflows/generate_api_doc.yml b/.github/workflows/generate_api_doc.yml new file mode 100644 index 0000000000..035a707e4d --- /dev/null +++ b/.github/workflows/generate_api_doc.yml @@ -0,0 +1,42 @@ +name: Generate API DOC + +on: + push: + branches: [ master ] + paths: + - '**/**/*.d.ts' + - 'api-generator/build-apidoc.js' + +permissions: + contents: write + +jobs: + build: + if: github.repository == 'primefaces/primereact' && github.ref == 'refs/heads/master' + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [18.x] + + steps: + - uses: actions/checkout@v6 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v6 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + + - name: Install node packages + run: npm install + + - name: Generate api doc + run: npm run apidoc + + - name: Commit doc + run: | + git config user.name "GitHub Actions Bot" + git config user.email "<>" + git commit -a -m "Update API doc" + git push diff --git a/.github/workflows/issue-inactive-checker.yml b/.github/workflows/issue-inactive-checker.yml new file mode 100644 index 0000000000..c96f3d3067 --- /dev/null +++ b/.github/workflows/issue-inactive-checker.yml @@ -0,0 +1,34 @@ +name: Issue Inactive Checker + +on: + schedule: + - cron: "0 13 * * *" # Every Monday at 1PM UTC (9AM EST) + +permissions: + contents: read + +jobs: + issue-close-require: + permissions: + issues: write + pull-requests: write + runs-on: ubuntu-latest + steps: + - name: Cannot Replicate + uses: actions-cool/issues-helper@v3 + with: + actions: "close-issues" + labels: "Resolution: Cannot Replicate" + inactive-day: 20 + - name: Needs Reproducer + uses: actions-cool/issues-helper@v3 + with: + actions: "close-issues" + labels: "Status: Needs Reproducer" + inactive-day: 20 + - name: Duplicate + uses: actions-cool/issues-helper@v3 + with: + actions: "close-issues" + labels: "Resolution: Duplicate" + inactive-day: 20 diff --git a/.github/workflows/issue-labeled.yml b/.github/workflows/issue-labeled.yml new file mode 100644 index 0000000000..5b74ac2c0c --- /dev/null +++ b/.github/workflows/issue-labeled.yml @@ -0,0 +1,43 @@ +name: Issue Labeled + +on: + issues: + types: [labeled] + +permissions: + contents: read + +jobs: + issue-labeled: + permissions: + issues: write # for actions-cool/issues-helper to update issues + pull-requests: write # for actions-cool/issues-helper to update PRs + runs-on: ubuntu-latest + steps: + - name: Cannot Replicate + if: "${{ github.event.label.name == 'Resolution: Cannot Replicate'}}" + uses: actions-cool/issues-helper@v3 + with: + actions: 'create-comment' + token: ${{ secrets.GITHUB_TOKEN }} + issue-number: ${{ github.event.issue.number }} + body: | + We're unable to replicate your issue, if you are able to create a reproducer or add details please edit this issue. This issue will be closed if no activities in 20 days. + - name: Duplicate + if: "${{ github.event.label.name == 'Resolution: Duplicate'}}" + uses: actions-cool/issues-helper@v3 + with: + actions: 'create-comment' + token: ${{ secrets.GITHUB_TOKEN }} + issue-number: ${{ github.event.issue.number }} + body: | + This issue is a duplicate and has already been reported and possibly fixed. Please review other issues both open and closed for a similar issue to this one. + - name: Needs Reproducer + if: "${{ github.event.label.name == 'Status: Needs Reproducer'}}" + uses: actions-cool/issues-helper@v3 + with: + actions: 'create-comment' + token: ${{ secrets.GITHUB_TOKEN }} + issue-number: ${{ github.event.issue.number }} + body: | + Please fork the [Stackblitz project](https://stackblitz.com/edit/vitejs-vite-pekean1c?file=src%2FApp.tsx) and create a case demonstrating your bug report. This issue will be closed if no activities in 20 days. diff --git a/.github/workflows/label.yml b/.github/workflows/label.yml new file mode 100644 index 0000000000..1820731e68 --- /dev/null +++ b/.github/workflows/label.yml @@ -0,0 +1,23 @@ +name: Label To Issues and PRs + +on: + issues: + types: [opened,reopened] + pull_request: + types: [opened,reopened] + +permissions: + contents: read + +jobs: + label_issues: + runs-on: ubuntu-latest + permissions: + issues: write + steps: + - name: Label issues + uses: andymckay/labeler@1.0.4 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + add-labels: 'Status: Needs Triage' + remove-labels: 'Resolution: By Design,Resolution: Cannot Replicate,Resolution: Duplicate,Resolution: Help Wanted,Resolution: Invalid,Resolution: Needs Issue,Resolution: Needs More Information,Resolution: Needs Revision,Resolution: Wontfix' diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml new file mode 100644 index 0000000000..eea30f7d3f --- /dev/null +++ b/.github/workflows/nightly.yml @@ -0,0 +1,32 @@ +name: Daily Build + +on: + schedule: + - cron: '0 6 * * *' + +permissions: + contents: read + +jobs: + nightly: + if: github.repository == 'primefaces/primereact' && github.ref == 'refs/heads/master' + runs-on: ubuntu-latest + name: Node ${{ matrix.node-version }} + + strategy: + matrix: + node-version: [16.x, 18.x] + + steps: + - uses: actions/checkout@v6 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v6 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + + - name: Build + run: | + npm install + npm run build:lib diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml new file mode 100644 index 0000000000..faa6689116 --- /dev/null +++ b/.github/workflows/node.js.yml @@ -0,0 +1,56 @@ +name: NodeJS CI + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +permissions: + contents: read + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [20.x] + + steps: + - uses: actions/checkout@v6 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v6 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + + - name: Build + run: | + npm install + + - name: Code Format + if: ${{ success() }} + run: | + npm run format:check + + - name: Lint Check + if: ${{ success() }} + run: | + npm run lint + + - name: TypeScript Check + if: ${{ success() }} + run: | + npm run type:check + + - name: Security Check + if: ${{ success() }} + run: | + npm run security:check + + - name: Unit Tests Check + if: ${{ success() }} + run: | + npm run test:check diff --git a/.github/workflows/pr_verify_linked_issue.yml b/.github/workflows/pr_verify_linked_issue.yml new file mode 100644 index 0000000000..4745b4509c --- /dev/null +++ b/.github/workflows/pr_verify_linked_issue.yml @@ -0,0 +1,25 @@ +name: Verify Linked Issue In PRs + +on: + pull_request_target: + types: [edited, synchronize, opened, reopened] + check_run: + +permissions: + contents: read + +jobs: + verify_linked_issue: + runs-on: ubuntu-latest + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + permissions: + issues: write + pull-requests: write + steps: + - name: Verify Linked Issue + uses: hattan/verify-linked-issue-action@v1.1.5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + message: 'Thanks a lot for your contribution! But, PR does not seem to be linked to any issues. Please [manually link to an issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue#manually-linking-a-pull-request-or-branch-to-an-issue-using-the-issue-sidebar) or mention it in the description using #.' diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml new file mode 100644 index 0000000000..e5a69e23c6 --- /dev/null +++ b/.github/workflows/stale.yml @@ -0,0 +1,29 @@ +name: Stale Issues and PRs +on: + schedule: + - cron: '0 0 * * *' +permissions: + contents: read + +jobs: + stale: + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + steps: + - uses: actions/stale@v10 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + stale-issue-label: 'Resolution: Stale' + stale-pr-label: 'Resolution: Stale' + exempt-issue-labels: 'Core Team,PRO Support,good first issue,question,Resolution: Help Wanted,Resolution: Workaround,Status: Discussion,Status: In Progress,Status: Needs Triage,Status: Pending Review,Type: Enhancement,Type: New Feature' + exempt-pr-labels: 'Core Team,Resolution: Help Wanted,Resolution: Workaround,Status: Discussion,Status: In Progress,Status: Pending Review' + exempt-all-milestones: true + days-before-stale: 360 + days-before-close: 7 + close-issue-reason: 'not_planned' + stale-issue-message: 'This issue has been automatically marked as stale. **If this issue is still affecting you with the latest version, please leave any comment**, and we will keep it open. We are sorry that we have not been able to prioritize it yet. If you have any new additional information, please include it with your comment!' + close-issue-message: 'Closing this issue after a prolonged period of inactivity. If this issue is still present in the latest release, please create a new issue with up-to-date information. Thank you for your understanding!' + stale-pr-message: 'This pull request has been automatically marked as stale. **If this pull request is still relevant, please leave any comment**, and we will keep it open. We are sorry that we have not been able to prioritize reviewing it yet. Your contribution is very much appreciated.' + close-pr-message: 'Closing this pull request after a prolonged period of inactivity. If this issue is still present in the latest release, please ask for this pull request to be reopened. Thank you for your understanding!' diff --git a/.gitignore b/.gitignore index 9a59e731ce..d65a72f731 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,46 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies /node_modules -/public/resources/primereact.css -/public/resources/primereact.min.css -/public/resources/**/*.map -/public/resources/images/ -.DS_Store -/build +/.pnp +.pnp.js /vscode /.vscode /idea /.idea /.sass-cache -/resources -/components -/src/sass/App.css -/src/sass/App.css.map -package-lock.json \ No newline at end of file + +# testing +/coverage + +# next.js +/.next/ +/out/ +tsconfig.tsbuildinfo + +# production +/dist +/build + +# misc +.DS_Store +*.pem +*.code-workspace + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env.local +.env.development.local +.env.test.local +.env.production.local + +# vercel +.vercel + +# next version +/apps +/packages diff --git a/.npmignore b/.npmignore index c813fa8674..a78787661b 100644 --- a/.npmignore +++ b/.npmignore @@ -1,5 +1,6 @@ .sass-cache node_modules +/dist public src .gitignore @@ -10,4 +11,7 @@ yarn.lock .github exports vscode -.vscode \ No newline at end of file +.vscode +.editorconfig +package-lock.json +npm-shrinkwrap.json diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index 9773998bc1..0000000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -v6.0.0 diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000000..728fc9f8a7 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,9 @@ +# Ignore artifacts: +build +coverage +dist +out +public +styles +node_modules +.vscode diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000000..281eb9c283 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,10 @@ +{ + "useTabs": false, + "tabWidth": 4, + "trailingComma": "none", + "semi": true, + "singleQuote": true, + "jsxSingleQuote": false, + "printWidth": 250, + "bracketSameLine": false +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000000..b650dca594 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,7 @@ +{ + "recommendations": [ + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", + "sibiraj-s.vscode-scss-formatter" + ] +} diff --git a/.vscode/settings.team.json b/.vscode/settings.team.json new file mode 100644 index 0000000000..6e322b1adf --- /dev/null +++ b/.vscode/settings.team.json @@ -0,0 +1,27 @@ +{ + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true, + "source.organizeImports": true + }, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, + "[typescriptreact]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, + "[css]": { + "editor.defaultFormatter": "sibiraj-s.vscode-scss-formatter", + "editor.formatOnSave": true + }, + "[scss]": { + "editor.defaultFormatter": "sibiraj-s.vscode-scss-formatter", + "editor.formatOnSave": true + } +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 257b796589..dbbe608717 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,1347 +1,1081 @@ # Changelog -## [4.2.0](https://github.com/primefaces/primereact/tree/4.2.0) (2020-04-17) -[Full Changelog](https://github.com/primefaces/primereact/compare/4.1.2...4.2.0) - -**Implemented New Features and Enhancements:** -- New Component: InputNumber [\#1311](https://github.com/primefaces/primereact/issues/1311) -- Add filterLocale property to Tree [\#1338](https://github.com/primefaces/primereact/issues/1338) -- Add filterLocale property to TreeTable [\#1337](https://github.com/primefaces/primereact/issues/1337) -- Add filterLocale property to MultiSelect [\#1336](https://github.com/primefaces/primereact/issues/1336) -- Add filterLocale property to ListBox [\#1335](https://github.com/primefaces/primereact/issues/1335) -- Add filterLocale property to Dropdown [\#1334](https://github.com/primefaces/primereact/issues/1334) -- Add filterLocale property to DataTable [\#1333](https://github.com/primefaces/primereact/issues/1333) -- Add checkValidity method to MultiSelect [\#1332](https://github.com/primefaces/primereact/issues/1332) -- onFocus - onBlur for ToggleButton [\#1330](https://github.com/primefaces/primereact/issues/1330) -- Update sortIcons [\#1329](https://github.com/primefaces/primereact/issues/1329) -- Disabled prop for TriStateCheckbox [\#1325](https://github.com/primefaces/primereact/issues/1325) -- Refactor OverlayPanel outside click detection [\#1320](https://github.com/primefaces/primereact/issues/1320) -- Refactor MultiSelect outside click detection [\#1319](https://github.com/primefaces/primereact/issues/1319) -- Refactor Menu outside click detection [\#1318](https://github.com/primefaces/primereact/issues/1318) -- Refactor ColorPicker outside click detection [\#1317](https://github.com/primefaces/primereact/issues/1317) -- Refactor Dropdown outside click detection [\#1310](https://github.com/primefaces/primereact/issues/1310) -- Refactor AutoComplete outside click detection [\#1308](https://github.com/primefaces/primereact/issues/1308) -- MultiSelect/Dropdown expose input attributes for labeling and validation purposes [\#1306](https://github.com/primefaces/primereact/issues/1306) -- Autocomplete dropdown button close behavior enhancement [\#1305](https://github.com/primefaces/primereact/issues/1305) -- Improve timepicker style on Calendar [\#1294](https://github.com/primefaces/primereact/issues/1294) -- Add milliseconds support to Calendar [\#1293](https://github.com/primefaces/primereact/issues/1293) -- Not nullable `dataKey` in DropDown break `selectedOption` property [\#1286](https://github.com/primefaces/primereact/issues/1286) -- Separator for Chips [\#1285](https://github.com/primefaces/primereact/issues/1285) +## [10.9.7](https://github.com/primefaces/primereact/tree/10.9.7) (2025-08-15) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.9.6...10.9.7) + +**Enhancements:** + +- Add in Multiselect filterInputKeyDown to filterTemplate options for consistency with Dropdown [#8199](https://github.com/primefaces/primereact/pull/8199) + +**Fixed Bugs:** + +- Dropdown: show emptyMessage when Dropdown with VirtualScroller has no data [#8125](https://github.com/primefaces/primereact/pull/8125) +- fix(menubar): clicking submenu header inside dropdown [#8175](https://github.com/primefaces/primereact/pull/8175) +- Datatable: onRowSelect and onRowUnselect callbacks inconsistent when clicking checkbox in DataTable (v10.9.5) [#8096](https://github.com/primefaces/primereact/issues/8096) +- Missing Icons in API [#8095](https://github.com/primefaces/primereact/issues/8095) +- SplitButton: Null id and custom menu items id [#8075](https://github.com/primefaces/primereact/issues/8075) +- Data Table: Custom Fields documentation example is wrong [#8121](https://github.com/primefaces/primereact/issues/8121) +- Datatable ignores Column sortFunction on initial sort [#7405](https://github.com/primefaces/primereact/issues/7405) +- ToggleButton - Accessibility bug [#8021](https://github.com/primefaces/primereact/issues/8021) +- Dialog: When out of the viewport, dialog cannot be esaily dragged back [#8090](https://github.com/primefaces/primereact/issues/8090) +- MultiStateCheckbox: missing invalid and variant props in TypeScript interface [#8085](https://github.com/primefaces/primereact/issues/8085) +- DataTable: Wrong TypeScript definition for cell selection [#8115](https://github.com/primefaces/primereact/issues/8115) +- DataTable: Cell Editing and Dropdown Filter Interaction [#7158](https://github.com/primefaces/primereact/issues/7158) +- Dropdown: Item list immediately closes after opening [#8080](https://github.com/primefaces/primereact/issues/8080) +- Clear filter button not working when filters prop is not provided [#8138](https://github.com/primefaces/primereact/issues/8138) +- InputNumber: wrong internal value for decimal numbers using the spin [#8132](https://github.com/primefaces/primereact/issues/8132) +- DataTable changes data in another row when you changes something in a row [#8079](https://github.com/primefaces/primereact/issues/8079) +- DataTable: Memo props leak to DOM - React does not recognize the ... prop on DOM element. [#8120](https://github.com/primefaces/primereact/issues/8120) +- Button: When using a Button inside of a OrderList itemTemplate component, only outside of icon is clickable [#8145](https://github.com/primefaces/primereact/issues/8145) +- Carousel: Broken when running without React.StrictMode [#3985](https://github.com/primefaces/primereact/issues/3985) +- TreeSelect Filter Mode not Lenient [#8005](https://github.com/primefaces/primereact/issues/8005) +- TreeSelect: Wrong position openning upward and using filter [#8089](https://github.com/primefaces/primereact/issues/8089) +- DatePicker setting seconds when showTime is true and showSeconds is false [#8140](https://github.com/primefaces/primereact/issues/8140) +- DataTable: Multiple frozen columns - Headers freeze but data columns don't align properly [#8107](https://github.com/primefaces/primereact/issues/8107) +- TreeSelect: Collapse/Expand not working if filter is applied [#8197](https://github.com/primefaces/primereact/issues/8197) +- Calendar: incorrect value via arrorws and month picker when use callback onMonthChange [#8201](https://github.com/primefaces/primereact/issues/8201) +- DataTable: dissapearing values when clicking quickly [#8099](https://github.com/primefaces/primereact/issues/8099) +- MultiSelect: missing filterInputKeyDown handler in filterTemplate options (unlike Dropdown) [#8152](https://github.com/primefaces/primereact/issues/8145) +- Column Filter Accessibility issue in DataTable [#8219](https://github.com/primefaces/primereact/issues/8219) + +## [10.9.6](https://github.com/primefaces/primereact/tree/10.9.6) (2025-06-02) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.9.5...10.9.6) + +**Enhancements:** + +- CascadeSelect: Missing panelClassName and panelStyle props [#8000](https://github.com/primefaces/primereact/issues/8000) +- CascadeSelect: Missing showClear prop [#8006](https://github.com/primefaces/primereact/issues/8006) +- MultiStateCheckbox: Missing id prop [#7997](https://github.com/primefaces/primereact/issues/7997) +- TreeSelect is missing onNodeClick and onNodeDoubleClick callbacks [#6778](https://github.com/primefaces/primereact/issues/6778) +- MultiStateCheckbox: Missing support for invalid and variant props [#8019](https://github.com/primefaces/primereact/issues/8019) +- Add showCloseIcon props to Dialog [#8053](https://github.com/primefaces/primereact/issues/8053) + +**Fixed Bugs:** + +- Datatable: CellEdit and general issues with portal editors [#7405](https://github.com/primefaces/primereact/issues/7405) +- InputNumber: numpad decimal separator for locales that use comma as decimal separator [#7809](https://github.com/primefaces/primereact/issues/7809) +- Calendar: When text input is focused the date cannot be selected from the first click on the panel [#7992](https://github.com/primefaces/primereact/issues/7992) +- MultiSelect: keyboard down event does not pass to MultiSelectPanel component [#7756](https://github.com/primefaces/primereact/issues/7756) +- File Upload: selecting the same file twice removes the file [#7989](https://github.com/primefaces/primereact/issues/7989) +- DataTable: RowTogglerButton has no accessible name due to missing expandLabel and collapseLabel in locale config [#8023](https://github.com/primefaces/primereact/issues/8023) +- MultiStateCheckbox: Conflicting aria-checked usage on both custom container and native input [#8022](https://github.com/primefaces/primereact/issues/8022) +- FilterMatchMode: Missing enumeration case notIn [#8026](https://github.com/primefaces/primereact/issues/8026) +- MenuItem: template property causes p-focus on the first item in the list [#7979](https://github.com/primefaces/primereact/issues/7979) +- DataTable: Incorrect grouping of rows when using the Paginator [#8011](https://github.com/primefaces/primereact/issues/8011) +- TriStateCheckbox: Missing id prop [#8018](https://github.com/primefaces/primereact/issues/8018) +- AutoComplete: Bad type when using custom template definitions [#7984](https://github.com/primefaces/primereact/issues/7984) +- Calendar: Manual Input breaking with dd M yy date format [#7675](https://github.com/primefaces/primereact/issues/7675) +- Galleria: doesn't work correctly if value is set dynamically [#7450](https://github.com/primefaces/primereact/issues/7450) +- Dropdown: onClick is called twice [#7941](https://github.com/primefaces/primereact/issues/7941) +- File Upload: Shows Nan undefined text when trying to clear the uploaded file [#7949](https://github.com/primefaces/primereact/issues/7949) +- DataTable: CSV export includes empty trailing column [#7953](https://github.com/primefaces/primereact/issues/7953) +- PickList: Incorrect types in the documentation [#7938](https://github.com/primefaces/primereact/issues/7938) +- HELP ! DataTable : Column body component dropdown doesn't update options when the source changes in the parent [#7987](https://github.com/primefaces/primereact/issues/7987) +- InputNumber: PR #7868 (10.9.5) breaks existing code [#7977](https://github.com/primefaces/primereact/issues/7977) +- ListBox: Inconsistent casing in component interface: ListboxPassThroughOptions should be ListBoxPassThroughOptions [#8020](https://github.com/primefaces/primereact/issues/8020) +- File Upload: Remove icon only works with double click when using removeIcon prop [#8033](https://github.com/primefaces/primereact/issues/8033) +- DataTable: bugs when updating data [#7942](https://github.com/primefaces/primereact/issues/7942) +- Datatable: Expanding is erratic [#8031](https://github.com/primefaces/primereact/issues/8031) +- DataTable: Cancel edit row causes undefined error [#8043](https://github.com/primefaces/primereact/issues/8043) +- Calendar: invalid prevPropValue caused an error: Uncaught TypeError: prevPropValue.getTime is not a function [#8042](https://github.com/primefaces/primereact/issues/8042) +- Column body function not re-executed when state value used inside changes [#8055](https://github.com/primefaces/primereact/issues/8055) +- MultiSelect: A component is changing an uncontrolled input to be controlled. [#7896](https://github.com/primefaces/primereact/issues/7896) +- MultiSelect has non-unique key warning [#8049](https://github.com/primefaces/primereact/issues/8049) + +## [10.9.5](https://github.com/primefaces/primereact/tree/10.9.5) (2025-04-25) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.9.4...10.9.5) + +**Fixed Bugs:** + +- OrderList: Scroll Not Updating with Item Movement [#7229](https://github.com/primefaces/primereact/issues/7229) +- Dropdown component: onLazyLoad triggers on every open, and onFilter re-renders with empty search results, clearing typed input [#7337](https://github.com/primefaces/primereact/issues/7337) +- InputNumber: No possibility to prevent decimal values [#7455](https://github.com/primefaces/primereact/issues/7455) +- TreeSelect: Delayed character display when typing [#7805](https://github.com/primefaces/primereact/issues/7805) +- InputOtp: autoFocus prop on InputOtp doesn't do anything [#7806](https://github.com/primefaces/primereact/issues/7806) +- Dropdown: selecting the option when esc key pressed [#7828](https://github.com/primefaces/primereact/issues/7828) +- TriStateCheckbox: spurious empty string given as value [#7844](https://github.com/primefaces/primereact/issues/7844) +- Accessibility Issue: Readonly Components React to Keyboard Control [#7849](https://github.com/primefaces/primereact/issues/7849) +- InputMask: Value not displayed when set directly in state [#7851](https://github.com/primefaces/primereact/issues/7851) +- Mention: Component does not accept variant prop [#7864](https://github.com/primefaces/primereact/issues/7864) +- TreeSelect: filterDelay issue [#7867](https://github.com/primefaces/primereact/issues/7867) +- Dropdown - missing typescript definition for filterClearIcon pt options [#7887](https://github.com/primefaces/primereact/issues/7887) +- AutoComplete/Dropdown: in props panelFooterTemplate, the hide() method is not being called as expected [#7881](https://github.com/primefaces/primereact/issues/7881) +- Calendar (Accessibility issue): Component loses focus when closing popup using escape key [#7890](https://github.com/primefaces/primereact/issues/7890) +- CascadeSelect: Problem with loading prop in typescript [#7892](https://github.com/primefaces/primereact/issues/7892) +- Autocomplete: Can still remove values when readOnly is enabled [#7894](https://github.com/primefaces/primereact/issues/7894) +- OverlayPanel: invalid position when on the edge [#7901](https://github.com/primefaces/primereact/issues/7901) +- OverlayPanel: Position is not updated on scroll from wrapper element [#7903](https://github.com/primefaces/primereact/issues/7903) +- Chip: When I use a React component as the value in the template prop of the Chip component, the template component unmounts and remounts whenever the state updates [#7911](https://github.com/primefaces/primereact/issues/7911) +- Chip: Chip close icon click is not working properly in Menu component [#7912](https://github.com/primefaces/primereact/issues/7912) +- TriStateCheckbox: 'null' state is an empty string, not null [#7914](https://github.com/primefaces/primereact/issues/7914) +- MenuBar : remove aria-level attribute from list item [#7922](https://github.com/primefaces/primereact/issues/7922) +- Datatable: takes long time to response upon grid selection on 1000+ rows [#7926](https://github.com/primefaces/primereact/issues/7926) +- Breadcrumb: disabled item receives keyboard focus [#7929](https://github.com/primefaces/primereact/issues/7929) +- Menubar: Clicking on different Menubar component items doesn't close Menu itself [#7931](https://github.com/primefaces/primereact/issues/7931) + +## [10.9.2](https://github.com/primefaces/primereact/tree/10.9.2) (2025-01-24) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.9.1...10.9.2) + +**Fixed Bugs:** + +- className Prop Doesn't Apply to Button Element in ToggleButton [#7630](https://github.com/primefaces/primereact/issues/7630) +- checkboxElement in MultiSelectPanelHeaderTemplateEvent has wrong interface [#7622](https://github.com/primefaces/primereact/issues/7622) +- AutoComplete: Typo in the empty message pass through [#7618](https://github.com/primefaces/primereact/issues/7618) +- MultiSelect showClear Keyboard Trap [#7613](https://github.com/primefaces/primereact/issues/7613) +- Setting RowReorderIcon breaks drag styles [#7612](https://github.com/primefaces/primereact/issues/7612) +- Calendar KeyBoard Accessibility Issue When Showed Two Months And Pressed the ArrowRight [#7604](https://github.com/primefaces/primereact/issues/7604) +- Today Button not visible for maxDate [#7602](https://github.com/primefaces/primereact/issues/7602) +- Tree: Incorrect props and types in documentation [#7599](https://github.com/primefaces/primereact/issues/7599) +- Today Button is hidden for maxDate with value as new Date() [#7598](https://github.com/primefaces/primereact/issues/7598) +- MultiSelect: it recognised the group options as standalone groups because of the “group“ key appearance [#7595](https://github.com/primefaces/primereact/issues/7595) +- Calendar: year is not getting updated on Clear button [#7581](https://github.com/primefaces/primereact/issues/7581) +- Dropdown: The selected option is not unselected from the list on clear action [#7576](https://github.com/primefaces/primereact/issues/7576) +- ListBox: No item is displayed when virtualScrollerOptions is used [#7574](https://github.com/primefaces/primereact/issues/7574) +- Core: Allow hideOverlaysOnDocumentScrolling to also work in dialogs [#7566](https://github.com/primefaces/primereact/issues/7566) +- KeyFilter: Incorrect handling of dash and dot in numeric inputs [#7557](https://github.com/primefaces/primereact/issues/7557) +- Calendar: Improve type declaration using generic types with default parameters [#7555](https://github.com/primefaces/primereact/issues/7555) +- Calendar: onSelect is forcing date while typing [#7553](https://github.com/primefaces/primereact/issues/7553) +- Fix #7180 Screenreader improve hidden accessible [#7180](https://github.com/primefaces/primereact/issues/7180) +- Dropdown/MultiSelect: Add filterDelay property for debounce [#7547](https://github.com/primefaces/primereact/issues/7547) +- Datatable: Sort with multiselect - wrong selection [#7546](https://github.com/primefaces/primereact/issues/7546) +- DataTable: Frozen alignRight not working [#7545](https://github.com/primefaces/primereact/issues/7545) +- How to format the selected item in Autocomplete [#7522](https://github.com/primefaces/primereact/issues/7522) +- TreeTable using stripedRows: children rows are not striped correctly [#7513](https://github.com/primefaces/primereact/issues/7513) +- TreeTable: Wrong data format in the docs [#7504](https://github.com/primefaces/primereact/issues/7504) +- InputTextarea: autoResize not working when disabled [#7502](https://github.com/primefaces/primereact/issues/7502) + +## [10.9.1](https://github.com/primefaces/primereact/tree/10.9.1) (2025-01-02) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.9.0...10.9.1) + +**Fixed Bugs:** + +- All (with icons) - react is not defined [#7544](https://github.com/primefaces/primereact/issues/7544) + +## [10.9.0](https://github.com/primefaces/primereact/tree/10.9.0) (2025-01-02) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.8.5...10.9.0) + +**Fixed Bugs:** + +- Filter: Does not work with space [#7529](https://github.com/primefaces/primereact/issues/7529) +- Dropdown: Editable Dropdown search not working as expected. [#7527](https://github.com/primefaces/primereact/issues/7527) +- ConfirmDialog: refs issue for react 19 [#7523](https://github.com/primefaces/primereact/issues/7523) +- How to format the selected item in Autocomplete [#7522](https://github.com/primefaces/primereact/issues/7522) +- Theming docs: configurator icon in the text does not match the referenced toolbar icon [#7518](https://github.com/primefaces/primereact/issues/7518) +- The InputTextarea component with the autoResize property shrinks within the TabView when renderActiveOnly={false} is set. [#7517](https://github.com/primefaces/primereact/issues/7517) +- DataTable is not displayed within the TabView when renderActiveOnly={false} is set. [#7516](https://github.com/primefaces/primereact/issues/7516) +- Dropdown: Lack of the p-inputwrapper-filled class for the null value [#7515](https://github.com/primefaces/primereact/issues/7515) +- [Dialog component] Warning: Accessing element.ref was removed in React 19 [#7510](https://github.com/primefaces/primereact/issues/7510) +- Calendar: yearNavigator + view="month" doesn't work [#7496](https://github.com/primefaces/primereact/issues/7496) +- ConfirmDialog: onHide prop is triggered immediately [#7494](https://github.com/primefaces/primereact/issues/7494) +- TreeTable : Console warning when customizing the toggler [#7490](https://github.com/primefaces/primereact/issues/7490) +- ScrollPanel: Null Reference Error in iOS Safari/WKWebView [#7489](https://github.com/primefaces/primereact/issues/7489) +- Toast remove function removes all toasts with the same message when action is done on toast with pId = 0 [#7483](https://github.com/primefaces/primereact/issues/7483) +- DataTable: Drag Selection Issue with Grouped Rows [#7480](https://github.com/primefaces/primereact/issues/7480) +- Password: Warning message related to aria-hidden displayed when clicking the toggleMask icon [#7473](https://github.com/primefaces/primereact/issues/7473) +- TreeTable: Multiple filters set at once only keeps the last applied [#7469](https://github.com/primefaces/primereact/issues/7469) +- Datatable: Sort with multiselect - wrong selection [#7468](https://github.com/primefaces/primereact/issues/7468) +- Accordion: Incorrect imports in templatedoc [#7466](https://github.com/primefaces/primereact/issues/7466) +- DataTable HeaderCell: menu-type text filter does not accept spaces if the column is sortable [#7459](https://github.com/primefaces/primereact/issues/7459) +- Checkbox: onBlur does not forward event object [#7440](https://github.com/primefaces/primereact/issues/7440) +- TabView: Unable to select closable icon of tabs through keyboard [#7437](https://github.com/primefaces/primereact/issues/7437) +- Button: Global esc key listener with priority [1200, 0] already exists [#7436](https://github.com/primefaces/primereact/issues/7436) +- Dropdown: warning when using useOptionAsValue [#7409](https://github.com/primefaces/primereact/issues/7409) +- Issue with PrimeReact Dialog on Next.js 15 and React 19 [#7403](https://github.com/primefaces/primereact/issues/7403) +- TreeTable: selected rows are not highlighted [#7387](https://github.com/primefaces/primereact/issues/7387) +- Accessibility: Improve Screenreader support [#7180](https://github.com/primefaces/primereact/issues/7180) + +## [10.8.5](https://github.com/primefaces/primereact/tree/10.8.5) (2024-11-28) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.8.4...10.8.5) + +**Fixed Bugs:** + +- The dropdown options panel stays open on focus lost [#7313](https://github.com/primefaces/primereact/issues/7313) +- DataTable - Sort cannot be triggered via keyboard [#7451](https://github.com/primefaces/primereact/issues/7451) +- Calendars docs are inaccurate about aria-labels [#7452](https://github.com/primefaces/primereact/issues/7452) +- ToggleButton : nbsp; when label is empty [#7330](https://github.com/primefaces/primereact/issues/7330) +- DropdownItem: Error: "key" prop is being spread into JSX [#7423](https://github.com/primefaces/primereact/issues/7423) +- DataTable 10.8.4: Drag Selection is still broken [#7321](https://github.com/primefaces/primereact/issues/7321) +- PrimeReactProvider: cssTransition false does not disable animations globally [#7395](https://github.com/primefaces/primereact/issues/7395) +- Calendar component in DataTable PrimeReact 10.x: Date selection sets value to null, Clear button works as expected [#7389](https://github.com/primefaces/primereact/issues/7389) +- Fixed Typo in Sidebar gteMask to getMask [#7398](https://github.com/primefaces/primereact/issues/7398) +- Need event inside the onHide callback [#7393](https://github.com/primefaces/primereact/issues/7393) +- Row component does not receive className and style property [#7329](https://github.com/primefaces/primereact/issues/7329) +- MultiSelect: Unable to select remove icon of chips through keyboard [#7349](https://github.com/primefaces/primereact/issues/7349) +- MultiSelect: Cannot access the close Icon and clear the input using keyboard in Filled mode [#7377](https://github.com/primefaces/primereact/issues/7377) +- Mention: Auto resize feature is not working [#7367](https://github.com/primefaces/primereact/issues/7367) +- Dropdown: Allow null / "" / [] / {} again as option values [#7370](https://github.com/primefaces/primereact/issues/7370) +- Mention - autoResize [#6296](https://github.com/primefaces/primereact/issues/6296) +- Chip: unique "key" prop warning [#7368](https://github.com/primefaces/primereact/issues/7368) +- TreeTable: Unable to custom columns' filter [#5382](https://github.com/primefaces/primereact/issues/5382) +- Messages: aria-label not included in close button attributes [#7364](https://github.com/primefaces/primereact/issues/7364) +- TreeSelect errors on render in storybook due to treeRef.current being null [#7362](https://github.com/primefaces/primereact/issues/7362) +- Multiselect: All items at the same index in a group are marked focused [#6678](https://github.com/primefaces/primereact/issues/6678) +- InputMask: Classname p-filled not works fine [#7354](https://github.com/primefaces/primereact/issues/7354) +- Documentation for CSS Modules: Cascaded classes [#7347](https://github.com/primefaces/primereact/issues/7347) +- AutoComplete: selectedItemTemplate displays [Object object] [#6633](https://github.com/primefaces/primereact/issues/6633) +- MultiSelect: Inline is not working on tables filter anymore [#6838](https://github.com/primefaces/primereact/issues/6838) +- InputTextarea: Duplicated class in DOM using className [#7345](https://github.com/primefaces/primereact/issues/7345) +- MultiSelect: inline can't be used at first render [#7341](https://github.com/primefaces/primereact/issues/7341) +- AutoComplete: Selected item is not getting highlighted when visited again unlike Dropdown component [#7330](https://github.com/primefaces/primereact/issues/7330) +- Multiselect: Сhip options can be closed outside of overflow [#7125](https://github.com/primefaces/primereact/issues/7125) +- Dropdown: Arrows select not working when using optionValue [#7318](https://github.com/primefaces/primereact/issues/7318) +- InputNumber: Infinite Loop When Unmount Component [#7323](https://github.com/primefaces/primereact/issues/7323) + +## [10.8.4](https://github.com/primefaces/primereact/tree/10.8.4) (2024-09-09) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.8.3...10.8.4) + +**Fixed Bugs:** + +- TriStateCheckbox: Warning: value prop on input should not be null. Consider using an empty string to clear the component or undefined for uncontrolled components. [#7313](https://github.com/primefaces/primereact/issues/7313) +- DataTable: onSelectionChange getting fired on column element click also [#7309](https://github.com/primefaces/primereact/issues/7309) +- DOCS: Theme switcher don't show Material design indigo themes. Shows purple instead [#7304](https://github.com/primefaces/primereact/issues/7304) +- Dialog : use the locale property aria.close [#7301](https://github.com/primefaces/primereact/issues/7301) +- Steps component: Unable to control the active step using activeIndex prop [#7298](https://github.com/primefaces/primereact/issues/7298) +- Dropdown: OptionGroup using optionGroupLabel is blank [#7285](https://github.com/primefaces/primereact/issues/7285) +- InputText: props.invalid does not work correctly in Passthrough (Tailwind) [#7275](https://github.com/primefaces/primereact/issues/7275) +- TreeTable: alignHeader takes no effect [#7270](https://github.com/primefaces/primereact/issues/7270) +- TreeTable: size prop not working, even in official StackBlitz example [#7269](https://github.com/primefaces/primereact/issues/7269) +- Menu: separators cannot be hidden [#7261](https://github.com/primefaces/primereact/issues/7261) +- Tooltip event="both" does not work if element get focus state by clicking on it [#7260](https://github.com/primefaces/primereact/issues/7260) +- SplitButton: menu pass-through not working [#7259](https://github.com/primefaces/primereact/issues/7259) +- DataTable: Select all checkbox on header row not working properly when scrollable is true [#7258](https://github.com/primefaces/primereact/issues/7258) +- Sidebar: closeIconRef parameter error [#7255](https://github.com/primefaces/primereact/issues/7255) +- Calendar: selecting a new year is not being reflected when transitioning to the month view. [#7254](https://github.com/primefaces/primereact/issues/7254) +- Mention: Add show/hide to typescript and docs [#7242](https://github.com/primefaces/primereact/pull/7242) +- DataTable incorrectly indicates drop functionality for unrelated draggable elements [#7239](https://github.com/primefaces/primereact/issues/7239) +- Calendar: The yearNavigator does not update the displayed year after selecting a new year. [#7234](https://github.com/primefaces/primereact/issues/7234) + +## [10.8.3](https://github.com/primefaces/primereact/tree/10.8.3) (2024-09-16) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.8.2...10.8.3) + +**Fixed Bugs:** + +- Fix #6987: Dropdown filter freezes screen [#6987](https://github.com/primefaces/primereact/pull/6991) +- Fix #6997: MenuBar re-render on props.model changes [#6997](https://github.com/primefaces/primereact/pull/6999) +- Fix #6993: fix Editor bullet issue when using Quill 2.0.2 [#6993](https://github.com/primefaces/primereact/pull/7004) +- Fix #7002: Dropdown improve Android key handling [#7002](https://github.com/primefaces/primereact/pull/7003) +- Fix #6995: Key should be reference on element and not spread [#6995](https://github.com/primefaces/primereact/pull/7000) +- Fix #7005: Avoid droppoints within undroppable node, not around [#7005](https://github.com/primefaces/primereact/pull/7005) +- Fix #7006: typos in DataTable documentation [#7006](https://github.com/primefaces/primereact/pull/7006) +- Fix #7008: calendar not closing on escape key press [#7008](https://github.com/primefaces/primereact/pull/7008) +- Fix #7016: Revert CascadeSelect type for input [#7016](https://github.com/primefaces/primereact/pull/7019) +- Fix #7014: inserting mentions results in duplicated text [#7014](https://github.com/primefaces/primereact/pull/7017) +- Fix #7015: Calendar passthrough type definition and docs [#7015](https://github.com/primefaces/primereact/pull/7021) +- Fix #7016: CascadeSelect passthrough type definition and docs [#7016](https://github.com/primefaces/primereact/pull/7020) +- Fix #6996: keep the selected row in its position when it gets focused [#6996](https://github.com/primefaces/primereact/pull/7022) +- Fix #7023: Toast typescript def for content [#7023](https://github.com/primefaces/primereact/pull/7024) +- Fix #7027: remove v-model example from iconfield documentation [#7027](https://github.com/primefaces/primereact/pull/7027) +- Fix #7029: remove v-model example from iconfield documentation [#7029](https://github.com/primefaces/primereact/pull/7029) +- Fix #7030: missing commas in PrimeReact message examples [#7030](https://github.com/primefaces/primereact/pull/7030) +- Fix #7032: Passthrough options type and missing docs [#7032](https://github.com/primefaces/primereact/pull/7033) +- Fix #7035: Dropdown: Remove unused depreciated code [#7035](https://github.com/primefaces/primereact/pull/7036) +- Fix #7013: Fix RadioButton appearing without tailwind style [#7013](https://github.com/primefaces/primereact/pull/7047) +- Fix #7046: TreeTable typescript for PT row/column [#7046](https://github.com/primefaces/primereact/pull/7048) +- Fix #7050: HeaderCheckbox passthrough [#7050](https://github.com/primefaces/primereact/pull/7053) +- Fix #6998: add closest check condition to detect handle icon drag [#6998](https://github.com/primefaces/primereact/pull/7051) +- Fix #6868: Refactor location of tailwind styles [#6868](https://github.com/primefaces/primereact/pull/7057) +- Fix #7037: Dropdown: Cannot change icon when expanding or collapsing options [#7037](https://github.com/primefaces/primereact/pull/7038) +- Fix #7061: Typo in Tailwind secondary button style [#7061](https://github.com/primefaces/primereact/pull/7062) +- Fix #7040: Stepper: add header position [#7040](https://github.com/primefaces/primereact/pull/7040) +- Fix #7042: Add Tailwind styling for IconField [#7042](https://github.com/primefaces/primereact/pull/7066) +- Fix #6855: ConfirmDialog group missing from typescript [#6855](https://github.com/primefaces/primereact/pull/7068) +- Fix #7074: ConfirmDialog - RejectButton classes in unstyled mode are not applied [#7074](https://github.com/primefaces/primereact/pull/7075) +- Fix #7069: Correct passthrough (pt) implementation for Stepperpanel [#7069](https://github.com/primefaces/primereact/pull/7069) +- Fix #7078: Typo in tailwinddoc of splitter [#7078](https://github.com/primefaces/primereact/pull/7078) +- Fix #7079: allow zero value using nullish coalescing operator(Slider) [#7079](https://github.com/primefaces/primereact/pull/7079) +- Fix #7084: formatting [#7084](https://github.com/primefaces/primereact/pull/7084) +- Fix #7086: add build project in window os [#7086](https://github.com/primefaces/primereact/pull/7086) +- Fix #7098: chore(deps): bump chart.js from 4.4.3 to 4.4.4 [#7098](https://github.com/primefaces/primereact/pull/7098) +- Fix #7099: chore(deps-dev): bump @types/node from 20.14.2 to 22.5.2 [#7099](https://github.com/primefaces/primereact/pull/7099) +- Fix #7100: chore(deps-dev): bump @testing-library/jest-dom from 6.4.8 to 6.5.0 [#7100](https://github.com/primefaces/primereact/pull/7100) +- Fix #7101: Ensure steps can be programmatically styled [#7101](https://github.com/primefaces/primereact/pull/7101) +- Fix #7104: Don't mix controlled and uncontrolled filter [#7104](https://github.com/primefaces/primereact/pull/7104) +- Fix #7102: DataView fix listTemplate typescript def [#7102](https://github.com/primefaces/primereact/pull/7105) +- Fix #7113: Multiselect focus problem [#7113](https://github.com/primefaces/primereact/pull/7113) +- Fix #7073: Add missing focused context [#7073](https://github.com/primefaces/primereact/pull/7107) +- Fix #7109: SplitterPanel pass onClick through [#7109](https://github.com/primefaces/primereact/pull/7114) +- Fix #6784: Toast onRemove message [#6784](https://github.com/primefaces/primereact/pull/7108) +- Fix #7110: SpeedDial : Fix aria-controls values [#7110](https://github.com/primefaces/primereact/pull/7111) +- Fix #7118: Updating Chart accessibility documentation [#7118](https://github.com/primefaces/primereact/pull/7119) +- Fix #6093: Fix Tailwind styles in unstyled mode [#6093](https://github.com/primefaces/primereact/pull/7124) +- Fix #7039: Correct Event handling for Cut Command [#7039](https://github.com/primefaces/primereact/pull/7127) +- Fix #7120: Breadcrumb shows a trailing separator when there [#7120](https://github.com/primefaces/primereact/pull/7133) +- Fix #7128: document undocumented start and end options, add types & improve [#7128](https://github.com/primefaces/primereact/pull/7128) +- Fix #5644: Add missing tailwind styles [#5644](https://github.com/primefaces/primereact/pull/7123) +- Fix #7134: Refactor Dropdown component to support using option as value [#7134](https://github.com/primefaces/primereact/pull/7141) +- Fix #7137: MultiSelect template docs [#7137](https://github.com/primefaces/primereact/pull/7143) +- Fix #7136: Defines a new File type extended with custom objectURL property [#7136](https://github.com/primefaces/primereact/pull/7145) +- Fix #6857: Adjust top up by 1px when gridlines are active [#6857](https://github.com/primefaces/primereact/pull/7151) +- Fix #7149: make AdditionalProps argument in IconOptions type optional [#7149](https://github.com/primefaces/primereact/pull/7149) +- Fix #7126: update Tree TypeScript documentation [#7126](https://github.com/primefaces/primereact/pull/7160) +- Fix #7161: replace src value in DataTable typescript documentation [#7161](https://github.com/primefaces/primereact/pull/7162) +- Fix #7166: Datatable : fix ColumnFilter aria-controls [#7166](https://github.com/primefaces/primereact/pull/7167) +- Fix #7163: Refactor AutoComplete.js to fix the group selection [#7163](https://github.com/primefaces/primereact/pull/7164) +- Fix #7155: prevent onselect event when prev, next calendar button [#7155](https://github.com/primefaces/primereact/pull/7155) +- Fix #7165: Badge/Tag typescript add secondary and contrast [#7165](https://github.com/primefaces/primereact/pull/7168) +- Fix #7171: TabMenu - resolve rendering issue of stackblitz apps for Command and Template examples [#7171](https://github.com/primefaces/primereact/pull/7171) +- Fix #7174: Datatable frozen columns bug [#7174](https://github.com/primefaces/primereact/pull/7174) +- Fix #7175: Fixing accessibility issue of dropdown [#7175](https://github.com/primefaces/primereact/pull/7175) +- Fix #7178: Panel Menu Component highlights bug [#7178](https://github.com/primefaces/primereact/pull/7178) +- Fix #7139: InputOtp IntegerOnly mode accepts "space" [#7139](https://github.com/primefaces/primereact/pull/7139) +- Fix #7181: Tree missing drag drop functionality [#7181](https://github.com/primefaces/primereact/pull/7181) +- Fix #7183: FloatLabel proper SPAN attributes [#7183](https://github.com/primefaces/primereact/pull/7183) +- Fix #7189: Pressing buttons on touch devices will not focus InputText in turn Keyboard [#7189](https://github.com/primefaces/primereact/pull/7189) +- Fix #7190: ContextMenu import error [#7190](https://github.com/primefaces/primereact/pull/7191) +- Fix #7188: Provide readable input value based on selected option labels [#7188](https://github.com/primefaces/primereact/pull/7188) + +## [10.8.2](https://github.com/primefaces/primereact/tree/10.8.2) (2024-08-06) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.8.1...10.8.2) + +**Fixed Bugs:** + +- Fixes Font Issues +- Fix #6989: Datatable errors in console by @melloware [#6990](https://github.com/primefaces/primereact/pull/6990) +- Fixes to undroppable tree nodes by @rpiaggio [#6988](https://github.com/primefaces/primereact/pull/6988) + +## [10.8.1](https://github.com/primefaces/primereact/tree/10.8.1) (2024-08-05) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.8.0...10.8.1) + +**Fixed Bugs:** + +- Fixed typo VUE => React by @sja-cslab [#6947](https://github.com/primefaces/primereact/pull/6947) +- Editor doesn't show initial value in some cases by @avasuro [#6951](https://github.com/primefaces/primereact/pull/6951) +- Update Transitions for unstyled Accordion in tailwinddoc.js by @samy-mssi [#6954](https://github.com/primefaces/primereact/pull/6954) +- Autocomplete autoHighlight prop is inconsistent by @nitrogenous [#6958](https://github.com/primefaces/primereact/pull/6958) +- Inplace update doc for active and controlled mode by @melloware [#6959](https://github.com/primefaces/primereact/pull/6959) +- Added ((data: any) => string) to dataKey property definition by @sja-cslab [#6960](https://github.com/primefaces/primereact/pull/6960) +- InputOtp passthrough input correctly by @melloware [#6965](https://github.com/primefaces/primereact/pull/6965) +- Bump eslint-config-next from 14.2.4 to 14.2.5 by @dependabot [#6966](https://github.com/primefaces/primereact/pull/6966) +- Bump @docsearch/react from 3.6.0 to 3.6.1 by @dependabot [#6968](https://github.com/primefaces/primereact/pull/6968) +- Bump @stackblitz/sdk from 1.10.0 to 1.11.0 by @dependabot [#6969](https://github.com/primefaces/primereact/pull/6969) +- Bump @testing-library/jest-dom from 6.4.6 to 6.4.8 by @dependabot [#6970](https://github.com/primefaces/primereact/pull/6970) +- Fix calendar overlay requiring double click on date to select a value when mask is present by @frle10 [#6972](https://github.com/primefaces/primereact/pull/6972) +- Show how to preserve filter object when mixing column and row by @Et7f3 [#6974](https://github.com/primefaces/primereact/pull/6974) +- Fix failed to decode font by @KOliver94 [#6977](https://github.com/primefaces/primereact/pull/6977) +- Make sure header checkbox pt gets set properly in datatable by @peconomou929 [#6979](https://github.com/primefaces/primereact/pull/6979) +- DT HeaderCheckbox passthrough by @melloware [#6981](https://github.com/primefaces/primereact/pull/6981) +- Fix(InputNumber): Remove styled true option in useHandleStyle by @KumJungMin [#6980](https://github.com/primefaces/primereact/pull/6980) +- Stepper onChangeStep function not initially set by @meddvedev [#6982](https://github.com/primefaces/primereact/pull/6982) +- DataTable with Virtual Scroller and Multiselect; onSelection by @kl-nevermore [#6985](https://github.com/primefaces/primereact/pull/6985) +- Calendar does not display up-to-date value if date is manually entered by @avasuro [#6986](https://github.com/primefaces/primereact/pull/6986) + +## [10.8.0](https://github.com/primefaces/primereact/tree/10.8.0) (2024-07-29) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.7.0...10.8.0) + +**Fixed Bugs:** + +- Refactor Dropdown.js to improve optionLabel and optionValue retrieval by @Rekl0w [#6831](https://github.com/primefaces/primereact/pull/6831) +- Update ToastMessage severity options by @Rekl0w [#6832](https://github.com/primefaces/primereact/pull/6832) +- TreeTable onFilter type def by @melloware [#6837](https://github.com/primefaces/primereact/pull/6837) +- Add 'contrast' style option to ButtonProps by @Rekl0w [#6839](https://github.com/primefaces/primereact/pull/6839) +- Updating activeStep does not actually change the active step by @PuppetFoam [#6841](https://github.com/primefaces/primereact/pull/6841) +- TreeTableSelectionKeys type def by @melloware [#6847](https://github.com/primefaces/primereact/pull/6847) +- TreeTable Typescript for page event by @melloware [#6848](https://github.com/primefaces/primereact/pull/6848) +- Datatable loader unstyled non-boolean attribute warning by @meddvedev [#6849](https://github.com/primefaces/primereact/pull/6849) +- PanelMenu typedef for onOpen/onClose by @melloware [#6850](https://github.com/primefaces/primereact/pull/6850) +- Sort icons match PrimeVue by @melloware [#6853](https://github.com/primefaces/primereact/pull/6853) +- Fix panel style in DropdownBase.js by @Rekl0w [#6856](https://github.com/primefaces/primereact/pull/6856) +- Update z-index for submenu list in MenubarBase.js by @Rekl0w [#6869](https://github.com/primefaces/primereact/pull/6869) +- Re-rendering of Sidebar component by @jpranays [#6860](https://github.com/primefaces/primereact/pull/6860) +- Dropdown crashes when label is an empty string by @VytautasLozickas [#6871](https://github.com/primefaces/primereact/pull/6871) +- Return scalar values directly as a label for Dropdown by @VytautasLozickas [#6872](https://github.com/primefaces/primereact/pull/6872) +- Change the order of applying default values to props by @KumJungMin [#6879](https://github.com/primefaces/primereact/pull/6879) +- Hide clear button when options is empty in Dropdown by @KumJungMin [#6880](https://github.com/primefaces/primereact/pull/6880) +- Revert #6058 by @melloware [#6885](https://github.com/primefaces/primereact/pull/6885) +- Fix: Combine the className props in the Menu separator by @jijiseong [#6884](https://github.com/primefaces/primereact/pull/6884) +- TreeTable onResizeEnd incorrect column value by @melloware [#6886](https://github.com/primefaces/primereact/pull/6886) +- Update onDateSelect function to include isUpdateViewDate parameter by @Rekl0w [#6890](https://github.com/primefaces/primereact/pull/6890) +- Tree inputText's onChange in nodeTemplate does not respond to a space key by @akshayaqburst [#6891](https://github.com/primefaces/primereact/pull/6891) +- MultiSelect emptyMessage prop is not working by @ivanpajon [#6894](https://github.com/primefaces/primereact/pull/6894) +- MultiSelect internal value is never updated by @ivanpajon [#6896](https://github.com/primefaces/primereact/pull/6896) +- Related to PR #6896 by @ivanpajon [#6897](https://github.com/primefaces/primereact/pull/6897) +- FocusOnShow prop in Dialog component by @ivanpajon [#6899](https://github.com/primefaces/primereact/pull/6899) +- Custom passthrough options for bodyRow by @ivanpajon [#6902](https://github.com/primefaces/primereact/pull/6902) +- Missing rowGroupToggler and rowGroupTogglerIcon by @ivanpajon [#6904](https://github.com/primefaces/primereact/pull/6904) +- Missing props in MessagesPassThroughMethodOptions and MessagesProps by @ivanpajon [#6909](https://github.com/primefaces/primereact/pull/6909) +- Improve changeTheme logic and javadoc by @melloware [#6913](https://github.com/primefaces/primereact/pull/6913) +- Fix(Calendar): Reset the isOverlayClicked value after overlayVisibleState is set to false by @KumJungMin [#6921](https://github.com/primefaces/primereact/pull/6921) +- Fix(Calendar): Allow the end date to be the same as the start date using input by @KumJungMin [#6919](https://github.com/primefaces/primereact/pull/6919) +- Fix: Listbox crash in CI by @avasuro [#6925](https://github.com/primefaces/primereact/pull/6925) +- Autocomplete fix input passthrough TS by @melloware [#6926](https://github.com/primefaces/primereact/pull/6926) +- Unstyled prop forwarded to InputText by @melloware [#6930](https://github.com/primefaces/primereact/pull/6930) +- Removing chips in multiselect cause open/close multiselect by @meddvedev [#6933](https://github.com/primefaces/primereact/pull/6933) +- Radio Button Pass Through Options by @peconomou929 [#6935](https://github.com/primefaces/primereact/pull/6935) +- Editor get focus on init and on every value change by @avasuro [#6937](https://github.com/primefaces/primereact/pull/6937) +- Fix: Overlap icons in the dropdown filter component by @nitrogenous [#6865](https://github.com/primefaces/primereact/pull/6865) +- Fix input passthrough TS by @melloware [#6938](https://github.com/primefaces/primereact/pull/6938) +- Datatable fix row checkbox/radiobutton PT by @melloware [#6941](https://github.com/primefaces/primereact/pull/6941) +- Datatable reorderable rows in unstyled mode by @gcko [#6943](https://github.com/primefaces/primereact/pull/6943) + +## [10.7.0](https://github.com/primefaces/primereact/tree/10.7.0) (2024-07-03) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.6.6...10.7.0) + +**Fixed Bugs:** + +- Error in type definition [\#6670](https://github.com/primefaces/primereact/pull/6670) +- emptyMessage prop and default label in unstyled mode [\#6672](https://github.com/primefaces/primereact/pull/6672) +- Bump quill from 2.0.0 to 2.0.2 [\#6673](https://github.com/primefaces/primereact/pull/6673) +- Types in CalendarPassThroughOptions [\#6676](https://github.com/primefaces/primereact/pull/6676) +- Bump sass from 1.69.5 to 1.77.2 [\#6674](https://github.com/primefaces/primereact/pull/6674) +- Missing prop in SidebarPassThroughMethodOptions [\#6689](https://github.com/primefaces/primereact/pull/6689) +- Tooltip: Escape key not dismissing tooltip (WCAG 2.1 1.4.13) [\#6687](https://github.com/primefaces/primereact/pull/6687) +- onEditorCallback row data not being updated [\#6685](https://github.com/primefaces/primereact/pull/6685) +- colorpicker: Color picker popup not closing on escape button click in some specific scenarios [\#6694](https://github.com/primefaces/primereact/pull/6694) +- fix default editMode value [\#6692](https://github.com/primefaces/primereact/pull/6692) +- metergroup typos [\#6699](https://github.com/primefaces/primereact/pull/6699) +- TieredMenu remove aria-level [\#6705](https://github.com/primefaces/primereact/pull/6705) +- Datatable selection aria locale label [\#6707](https://github.com/primefaces/primereact/pull/6707) +- Dropdown: Select value with Enter when optionValue is set [\#6703](https://github.com/primefaces/primereact/pull/6703) +- DataTable: Tabulation is not working properly [\#6710](https://github.com/primefaces/primereact/pull/6710) +- escape key not working in dialog [\#6719](https://github.com/primefaces/primereact/pull/6719) +- InputNumber keydown bugfix [\#6728](https://github.com/primefaces/primereact/pull/6728) +- fix InputOtp keyDown [\#6731](https://github.com/primefaces/primereact/pull/6731) +- Datatable respect editMode to determine if editable [\#6736](https://github.com/primefaces/primereact/pull/6736) +- Calendar month navigator [\#6739](https://github.com/primefaces/primereact/pull/6739) +- Add content prop to Menubar component [\#6742](https://github.com/primefaces/primereact/pull/6742) +- Fix Calendar onDateSelect function [\#6748](https://github.com/primefaces/primereact/pull/6748) +- package.json security updates for braces [\#6750](https://github.com/primefaces/primereact/pull/6750) +- Bump @testing-library/jest-dom from 6.4.2 to 6.4.6 [\#6752](https://github.com/primefaces/primereact/pull/6752) +- Bump gulp from 4.0.2 to 5.0.0 [\#6713](https://github.com/primefaces/primereact/pull/6713) +- Fix TreeSelect filter for space key [\#6754](https://github.com/primefaces/primereact/pull/6754) +- React 19 support [\#6725](https://github.com/primefaces/primereact/pull/6725) +- incorrect default value for minFractionDigits when set to null [\#6762](https://github.com/primefaces/primereact/pull/6762) +- highlight range of month in datePicker [\#6759](https://github.com/primefaces/primereact/pull/6759) +- highlight range of year in datePicker [\#6760](https://github.com/primefaces/primereact/pull/6760) +- (Tooltip): not dynamically update align when position is mouse [\#6764](https://github.com/primefaces/primereact/pull/6764) +- Added checks for dragdropScope being defined before conversion [\#6767](https://github.com/primefaces/primereact/pull/6767) +- Rename previousButton to prevButton [\#6775](https://github.com/primefaces/primereact/pull/6775) +- (ColorPicker): apply s and b of previous hsb to hsbValue [\#6788](https://github.com/primefaces/primereact/pull/6788) +- apply year change in Calendar when input changed [\#6794](https://github.com/primefaces/primereact/pull/6794) +- check for visibleOptions existing before looking up the index [\#6797](https://github.com/primefaces/primereact/pull/6797) +- onMonthChange prop not being called when user increments / decrements month using arrow buttons [\#6799](https://github.com/primefaces/primereact/pull/6799) +- Fix a few typos in markdown files [\#6801](https://github.com/primefaces/primereact/pull/6801) +- Make sure editable dropdown opens when user types [\#6810](https://github.com/primefaces/primereact/pull/6810) +- DataTable column resize on touchscreens [\#6726](https://github.com/primefaces/primereact/pull/6726) +- Calendar's monthNavigatorTemplate Not Working [\#6818](https://github.com/primefaces/primereact/pull/6818) +- FocusTrap better handling of autoFocus property [\#6721](https://github.com/primefaces/primereact/pull/6721) +- Datatable radiobuttons and types [\#6698](https://github.com/primefaces/primereact/pull/6698) +- ListBox keyboard navigation like primevue [\#6570](https://github.com/primefaces/primereact/pull/6570) +- Checkbox: Component fail to render [\#6679](https://github.com/primefaces/primereact/pull/6679) + +## [10.6.6](https://github.com/primefaces/primereact/tree/10.6.6) (2024-05-24) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.6.5...10.6.6) + +**Fixed Bugs:** + +- Add ariaLabel method to Typescript [\#6582](https://github.com/primefaces/primereact/pull/6582) +- Locale fix [\#6586](https://github.com/primefaces/primereact/pull/6586) +- Row reorder icon image won't break drag 'ghost' [\#6581](https://github.com/primefaces/primereact/pull/6581) +- Add paste key [\#6577](https://github.com/primefaces/primereact/pull/6577) +- Check meta key for MacOS [\#6588](https://github.com/primefaces/primereact/pull/6588) +- InputOtp respect props.value change [\#6595](https://github.com/primefaces/primereact/pull/6595) +- Fix typo in Scale doc [\#6596](https://github.com/primefaces/primereact/pull/6596) +- Fix typo in PrimeFlex doc [\#6597](https://github.com/primefaces/primereact/pull/6597) +- Password fix tab ordering of toggle mask [\#6598](https://github.com/primefaces/primereact/pull/6598) +- Fix typo [\#6601](https://github.com/primefaces/primereact/pull/6601) +- Show headless sidebar in all window sizes [\#6605](https://github.com/primefaces/primereact/pull/6605) +- IconOptions typescript updated for FontAwesome [\#6579](https://github.com/primefaces/primereact/pull/6579) +- PanelMenu MenuItem Id Prop Not Passed [\#6607](https://github.com/primefaces/primereact/pull/6607) +- MeterGroup render items in percentage [\#6612](https://github.com/primefaces/primereact/pull/6612) +- Minus sign after all selection - InputNumber [\#6566](https://github.com/primefaces/primereact/pull/6566) +- Tabview Core Styles Moved to SASS Theme and Removed Inkbar for Lara [\#6616](https://github.com/primefaces/primereact/pull/6616) +- Chart update TypeScript to inherit DIV [\#6618](https://github.com/primefaces/primereact/pull/6618) +- Fix: Cannot npm link primereact on local project [\#6619](https://github.com/primefaces/primereact/pull/6619) +- Added new capabilities and properties to Column and Dialog [\#6611](https://github.com/primefaces/primereact/pull/6611) +- Dropdown fix checkIcon [\#6630](https://github.com/primefaces/primereact/pull/6630) +- Feat: Stateful TreeTable [\#6384](https://github.com/primefaces/primereact/pull/6384) +- InputOtp keyboard navigation [\#6638](https://github.com/primefaces/primereact/pull/6638) +- DataTable: Column: onCellEditComplete is fired twice [\#6641](https://github.com/primefaces/primereact/pull/6641) +- VirtualScroller improve useUpdate comparison [\#6643](https://github.com/primefaces/primereact/pull/6643) +- Fixed typo [\#6654](https://github.com/primefaces/primereact/pull/6654) +- BodyRow tab key handling [\#6658](https://github.com/primefaces/primereact/pull/6658) +- Multiselect use unique label key [\#6652](https://github.com/primefaces/primereact/pull/6652) +- Tooltip default position to 'right' if undefined [\#6651](https://github.com/primefaces/primereact/pull/6651) +- PageLinks use totalPages [\#6649](https://github.com/primefaces/primereact/pull/6649) +- Add missing components to primereact.all.js [\#6637](https://github.com/primefaces/primereact/pull/6637) +- autocomplete value selection fix [\#6664](https://github.com/primefaces/primereact/pull/6664) +- Galleria image in fullscreen mode not closing on escape button click [\#6645](https://github.com/primefaces/primereact/pull/6645) +- DragDrop Tree keyboard navigation [\#6646](https://github.com/primefaces/primereact/pull/6646) + +## [10.6.5](https://github.com/primefaces/primereact/tree/10.6.5) (2024-05-03) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.6.4...10.6.5) + +**Fixed Bugs:** + +- pt headerContent fix in [\#6529](https://github.com/primefaces/primereact/pull/6529) +- fix optionLabel in [\#6520](https://github.com/primefaces/primereact/pull/6520) +- remove unused codes in [\#6509](https://github.com/primefaces/primereact/pull/6509) +- remove unused code in [\#6511](https://github.com/primefaces/primereact/pull/6511) +- fix unexpected type coercion and removed unused code in [\#6513](https://github.com/primefaces/primereact/pull/6513) +- removed unused code in [\#6515](https://github.com/primefaces/primereact/pull/6515) +- removed unused codes in [\#6517](https://github.com/primefaces/primereact/pull/6517) +- Multiselect checkbox CSS class in [\#6532](https://github.com/primefaces/primereact/pull/6532) +- Datatable expose sorts and filters in ref in [\#6533](https://github.com/primefaces/primereact/pull/6533) +- MeterGroup correct CSS handle style in [\#6534](https://github.com/primefaces/primereact/pull/6534) +- Stepper fix TS docs to onChangeStep in [\#6546](https://github.com/primefaces/primereact/pull/6546) +- Button as link docs in [\#6547](https://github.com/primefaces/primereact/pull/6547) +- pt submenu fix in [\#6544](https://github.com/primefaces/primereact/pull/6544) +- AccordionTab PT error in [\#6549](https://github.com/primefaces/primereact/pull/6549) +- Remove setTokens in onPaste on InputOtp to avoid duplicate values in [\#6526](https://github.com/primefaces/primereact/pull/6526) +- dropdown filter fix in [\#6551](https://github.com/primefaces/primereact/pull/6551) +- fix updateViewDate event in [\#6559](https://github.com/primefaces/primereact/pull/6559) +- Missing PT Option for IconField in Password in [\#6560](https://github.com/primefaces/primereact/pull/6560) + +## [10.6.4](https://github.com/primefaces/primereact/tree/10.6.4) (2024-04-3O) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.6.3...10.6.4) + +**Enhancements:** + +- remove unused codes in [\#6504](https://github.com/primefaces/primereact/pull/6504) +- add menu context to menu in [\#6488](https://github.com/primefaces/primereact/pull/6488) +- OverlayPanel add isVisible method to external API in [\#6453](https://github.com/primefaces/primereact/pull/6453) + +**Fixed Bugs:** + +- unit tests in [\#6348](https://github.com/primefaces/primereact/pull/6348) +- fix Tailwind classes for inputswitch and checkbox as styling is broken in [\#6347](https://github.com/primefaces/primereact/pull/6347) +- Locale update to use ariaLabel method in [\#6313](https://github.com/primefaces/primereact/pull/6313) +- Sidebar doc fix in [\#6354](https://github.com/primefaces/primereact/pull/6354) +- InputOtp fix typescript case in [\#6361](https://github.com/primefaces/primereact/pull/6361) +- Stepper proper forwardRef in [\#6362](https://github.com/primefaces/primereact/pull/6362) +- Stepper demos in [\#6363](https://github.com/primefaces/primereact/pull/6363) +- Revert typedoc in [\#6368](https://github.com/primefaces/primereact/pull/6368) +- Bump chart.js from 4.4.1 to 4.4.2 in [\#6282](https://github.com/primefaces/primereact/pull/6282) +- Bump @testing-library/user-event from 14.5.1 to 14.5.2 in [\#6280](https://github.com/primefaces/primereact/pull/6280) +- Bump prettier from 3.1.0 to 3.2.5 in [\#6372](https://github.com/primefaces/primereact/pull/6372) +- Bump @types/react-transition-group from 4.4.9 to 4.4.10 in [\#6373](https://github.com/primefaces/primereact/pull/6373) +- Bump eslint-config-next from 14.1.0 to 14.1.4 in [\#6369](https://github.com/primefaces/primereact/pull/6369) +- InputOtp wrong import in [\#6383](https://github.com/primefaces/primereact/pull/6383) +- Add missing children prop in FloatLabel.d.ts in [\#6388](https://github.com/primefaces/primereact/pull/6388) +- MultiSelect - SelectionLimit issue in [\#6218](https://github.com/primefaces/primereact/pull/6218) +- fixed issue on selecting option by key event when using optionValue prop in [\#6374](https://github.com/primefaces/primereact/pull/6374) +- typescript definition for ButtonGroup in [\#6360](https://github.com/primefaces/primereact/pull/6360) +- Locale prevent prototype pollution in [\#6395](https://github.com/primefaces/primereact/pull/6395) +- Showcase examples use IconField in [\#6386](https://github.com/primefaces/primereact/pull/6386) +- Calendar inputClassName missing in [\#6398](https://github.com/primefaces/primereact/pull/6398) +- FileUpload: add missing type definition for cancelIcon in [\#6400](https://github.com/primefaces/primereact/pull/6400) +- DataTable custom filter example in [\#6401](https://github.com/primefaces/primereact/pull/6401) +- DataTable - onContextMenu does not return row data in [\#6403](https://github.com/primefaces/primereact/pull/6403) +- typescript definition for Stepper and StepperPanel in [\#6356](https://github.com/primefaces/primereact/pull/6356) +- AutoComplete: Fix the issue of passing an undefined key while rendering lists. in [\#6365](https://github.com/primefaces/primereact/pull/6365) +- Fix Tailwind theme for TriStateCheckbox in [\#6406](https://github.com/primefaces/primereact/pull/6406) +- Password removed invalid props from PT in [\#6409](https://github.com/primefaces/primereact/pull/6409) +- Password fix invalid/variant props in [\#6412](https://github.com/primefaces/primereact/pull/6412) +- Megamenu single array fix in [\#6416](https://github.com/primefaces/primereact/pull/6416) +- Added Fragment at doc in [\#6421](https://github.com/primefaces/primereact/pull/6421) +- Calendar updateViewDate fix in [\#6425](https://github.com/primefaces/primereact/pull/6425) +- InputOtp updateTokens fix in [\#6433](https://github.com/primefaces/primereact/pull/6433) +- InputOtp import fix in [\#6441](https://github.com/primefaces/primereact/pull/6441) +- FloatLabel prop fix in [\#6440](https://github.com/primefaces/primereact/pull/6440) +- Variable names fix in [\#6444](https://github.com/primefaces/primereact/pull/6444) +- TabView round scrollLeft like PrimeVue in [\#6449](https://github.com/primefaces/primereact/pull/6449) +- TreeTable: call customer sortFunction for column set as sortField in [\#6436](https://github.com/primefaces/primereact/pull/6436) +- Typescript boolean instead of false in [\#6378](https://github.com/primefaces/primereact/pull/6378) +- Toast close by id fix in [\#6457](https://github.com/primefaces/primereact/pull/6457) +- Dialog onHide prop call in [\#6458](https://github.com/primefaces/primereact/pull/6458) +- PrimeIcons v7 constants in [\#6465](https://github.com/primefaces/primereact/pull/6465) +- PrimeIcons v7 constants in [\#6466](https://github.com/primefaces/primereact/pull/6466) +- PrimeIcons v7 constants in [\#6467](https://github.com/primefaces/primereact/pull/6467) +- Ripple doc fix in [\#6470](https://github.com/primefaces/primereact/pull/6470) +- VirtualScroller/Ripple TS updates in [\#6472](https://github.com/primefaces/primereact/pull/6472) +- TreeSelect header fix in [\#6471](https://github.com/primefaces/primereact/pull/6471) +- StepperHeader add type button in [\#6463](https://github.com/primefaces/primereact/pull/6463) +- Chips respect removable function in [\#6428](https://github.com/primefaces/primereact/pull/6428) +- TreeSelect pass emptyMessage to Tree in [\#6411](https://github.com/primefaces/primereact/pull/6411) +- Passthrough accordiontab not tab in [\#6390](https://github.com/primefaces/primereact/pull/6390) +- ColumnFilter proper ID handling in [\#6367](https://github.com/primefaces/primereact/pull/6367) +- MeterGroup minor refactor similar to other components in [\#6355](https://github.com/primefaces/primereact/pull/6355) +- DataScroller pt doc img fix in [\#6480](https://github.com/primefaces/primereact/pull/6480) +- Checkbox onClick TS def in [\#6485](https://github.com/primefaces/primereact/pull/6485) +- Stepper add p-component to Stepper action in [\#6350](https://github.com/primefaces/primereact/pull/6350) +- date picker value entering in [\#6478](https://github.com/primefaces/primereact/pull/6478) +- KeyFilter handle AZERTY and dead keys in [\#6484](https://github.com/primefaces/primereact/pull/6484) +- fixed the issue with the home separator if home prop is null/undefined in [\#6375](https://github.com/primefaces/primereact/pull/6375) +- InputNumber allowing accent/dead characters in [\#6352](https://github.com/primefaces/primereact/pull/6352) +- Quill 2.0.0 support in [\#6429](https://github.com/primefaces/primereact/pull/6429) +- Dropdown navigation like PrimeVue in [\#6430](https://github.com/primefaces/primereact/pull/6430) +- Dropdown scroll into view on focus in [\#6452](https://github.com/primefaces/primereact/pull/6452) +- Menu align focus with PrimeVue in [\#6381](https://github.com/primefaces/primereact/pull/6381) +- Calendar updateViewDate fix in [\#6447](https://github.com/primefaces/primereact/pull/6447) +- Autocomplete Not able to delete a manually added chip in [\#6474](https://github.com/primefaces/primereact/pull/6474) +- primefaces #6234, TreeSelect: (accessiblility) cannot access and clear the selected input using using keyboard in [\#6235](https://github.com/primefaces/primereact/pull/6235) +- Stepper add get/set active step in [\#6486](https://github.com/primefaces/primereact/pull/6486) +- Update templatedoc.js with correct reference in [\#6495](https://github.com/primefaces/primereact/pull/6495) +- Dialog refactor using FocusTrap in [\#6435](https://github.com/primefaces/primereact/pull/6435) +- Listbox focused option index fix in [\#6500](https://github.com/primefaces/primereact/pull/6500) +- Splitter can work with multiple panels in [\#6490](https://github.com/primefaces/primereact/pull/6490) +- Password use IconField for toggle mask in [\#6493](https://github.com/primefaces/primereact/pull/6493) +- PanelMenu isItemActive Update in [\#6502](https://github.com/primefaces/primereact/pull/6502) +- Fix formatting in [\#6505](https://github.com/primefaces/primereact/pull/6505) + +## [10.6.3](https://github.com/primefaces/primereact/tree/10.6.3) (2024-04-09) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.6.2...10.6.3) + +**New Features:** + +- New component InputOtp [\#6327](https://github.com/primefaces/primereact/issues/6327) + +**Enhancements:** + +- Unable to select item in Autcomplete with keyboard [\#6308](https://github.com/primefaces/primereact/issues/6308) +- Core: p-hidden-accessible modernization [\#6163](https://github.com/primefaces/primereact/issues/6163) +- Multiselect: must hit TAB key twice to move focus to next dropdown element [\#6288](https://github.com/primefaces/primereact/issues/6288) **Fixed bugs:** -- Dropdown checkValidity fails [\#1331](https://github.com/primefaces/primereact/issues/1331) -- Calendar.showOtherMonths property not being used [\#1328](https://github.com/primefaces/primereact/issues/1328) -- Disable prop on ToggleButton not working [\#1321](https://github.com/primefaces/primereact/issues/1321) -- IE11: Autocomplete with dropdown and multiple selection requires doubleclick [\#1316](https://github.com/primefaces/primereact/issues/1316) -- InputMask displayed value does not change when value changes to undefined or null [\#1309](https://github.com/primefaces/primereact/issues/1309) -- multiSortMeta depends on single sort [\#1307](https://github.com/primefaces/primereact/issues/1307) -- Carousel - Button inside carousel-item is not clickable in mobile phones [\#1300](https://github.com/primefaces/primereact/issues/1300) -- AutoComplete: selectedItemTemplate ts binding claims to expect JSX.Element in return, but at runtime a string is expected [\#1297](https://github.com/primefaces/primereact/issues/1297) -- FileUpload in auto mode sends two post requests in IE11 [\#1282](https://github.com/primefaces/primereact/issues/1282) -- Today Button doesn't work on prefilled Calendar with timeonly [\#1281](https://github.com/primefaces/primereact/issues/1281) -- TreeTable goes to edit mode when expanded [\#1276](https://github.com/primefaces/primereact/issues/1276) -- Tree drag&drop not working if dragdropScope contains upper case letter [\#1182](https://github.com/primefaces/primereact/issues/1182) -## [4.1.2](https://github.com/primefaces/primereact/tree/4.1.2) (2020-03-20) +- Dropdown filter : Filter Field Resets to Empty String on Empty Filter Result when uing onFilterEvent to fetch options dynamically [\#6265](https://github.com/primefaces/primereact/issues/6265) +- Multiselect scroll position reset bug [\#6305](https://github.com/primefaces/primereact/issues/6305) +- InputNumber: does not work with czech and slovak keyboard layout [\#6237](https://github.com/primefaces/primereact/issues/6237) +- InputNumber: Cannot insert value on Android [\#6275](https://github.com/primefaces/primereact/issues/6275) +- InputNumber: cannot shift + num key [\#6257](https://github.com/primefaces/primereact/issues/6257) +- ButtonGroup: missing children prop [\#6333](https://github.com/primefaces/primereact/issues/6333) +- InputText: It doesn't take classNames when unstyled is true [\#6274](https://github.com/primefaces/primereact/issues/6274) +- Dropdown: Focus change when editable and filter enabled [\#6297](https://github.com/primefaces/primereact/issues/6297) +- DataTable: Drag Selection Highlight Doesn't Appear in 10.6.2 [\#6272](https://github.com/primefaces/primereact/issues/6272) +- Core: Merging PT props only respects lower-case props [\#6289](https://github.com/primefaces/primereact/issues/6289) +- Calendar: Incorrect year with numberOfMonths and yearNavigator [\#6285](https://github.com/primefaces/primereact/issues/6285) +- Core: Unstyled property does not inherit to children [\#6142](https://github.com/primefaces/primereact/issues/6142) +- Vite: Build issues [\#6276](https://github.com/primefaces/primereact/issues/6276) +- ButtonGroup: forwardRef render functions accept exactly two parameters [\#6263](https://github.com/primefaces/primereact/issues/6263) +- MeterGroup: Component is not exported from the library [\#6268](https://github.com/primefaces/primereact/issues/6268) +- Tree: row selection checkbox not getting checked [\#6216](https://github.com/primefaces/primereact/issues/6216) +- Multiple Components: classnames not being set in unstyled mode [\#6329](https://github.com/primefaces/primereact/issues/6329) +- ToggleButton: Checkboxes showing before button [\#6222](https://github.com/primefaces/primereact/issues/6222) -[Full Changelog](https://github.com/primefaces/primereact/compare/4.1.1...4.1.2) +## [10.6.2](https://github.com/primefaces/primereact/tree/10.6.2) (2024-03-29) -**Implemented New Features and Enhancements:** +[Full Changelog](https://github.com/primefaces/primereact/compare/10.6.1...10.6.2) -- DataView: lazy loading implementation [\#1264](https://github.com/primefaces/primereact/issues/1264) +## [10.6.1](https://github.com/primefaces/primereact/tree/10.6.1) (2024-03-29) -**Fixed bugs:** - -- Multiple Sort doesn't work as expected in the DataTable if a sortable column has sortField and field properties [\#1279](https://github.com/primefaces/primereact/issues/1279) -- Chips in disabled Autocomplete are not disabled [\#1278](https://github.com/primefaces/primereact/issues/1278) -- Calendar display not update when value change. [\#1277](https://github.com/primefaces/primereact/issues/1277) -- Calendar closes right away in Chrome when it has showTime={true} [\#1272](https://github.com/primefaces/primereact/issues/1272) -- Setting state in onFocus of Datatable Editors crashes app [\#1271](https://github.com/primefaces/primereact/issues/1271) -- Invalid Date in Calendar in IE11 crashes the app [\#1270](https://github.com/primefaces/primereact/issues/1270) -- Tab-Key doesn't work in Datatable with cell editing on IE11 and Edge [\#1269](https://github.com/primefaces/primereact/issues/1269) -- IE11: Autocomplete with dropdown requires doubleclick [\#1267](https://github.com/primefaces/primereact/issues/1267) -- OnComplete callback has wrong property params on InputMask.d.ts [\#1265](https://github.com/primefaces/primereact/issues/1265) -- Fix InputSwitch documentation for onLabel-offLabel [\#1263](https://github.com/primefaces/primereact/issues/1263) - -## [4.1.1](https://github.com/primefaces/primereact/tree/4.1.1) (2020-03-12) - -[Full Changelog](https://github.com/primefaces/primereact/compare/4.1.0...4.1.1) - -**Implemented New Features and Enhancements:** - -- Add onFocus-onBlur to Dropdown [\#1260](https://github.com/primefaces/primereact/issues/1260) -- InputMask OnComplete does not contain the new value [\#1255](https://github.com/primefaces/primereact/issues/1255) -- resetFilter function for Dropdown [\#1249](https://github.com/primefaces/primereact/issues/1249) -- Improve type definition for onChange of form components [\#1199](https://github.com/primefaces/primereact/issues/1199) - -**Fixed bugs:** - -- DataTable scrollHeight doesn't calculate correctly with frozen columns and header groups [\#1261](https://github.com/primefaces/primereact/issues/1261) -- Disabled TabPanel focussable with TAB-Key [\#1254](https://github.com/primefaces/primereact/issues/1254) -- Error on TreeTable docs about responsive [\#1253](https://github.com/primefaces/primereact/issues/1253) -- Select components don't correctly return value [\#1252](https://github.com/primefaces/primereact/issues/1252) -- currentPageReport should check for {last} boundary [\#1251](https://github.com/primefaces/primereact/issues/1251) -- onClose of GrowlMessage is also allowing onClick to fire. [\#1248](https://github.com/primefaces/primereact/issues/1248) -- loadingBody type is different to Documentation [\#1111](https://github.com/primefaces/primereact/issues/1111) - -## [4.1.0](https://github.com/primefaces/primereact/tree/4.1.0) (2020-03-10) - -[Full Changelog](https://github.com/primefaces/primereact/compare/4.0.0...4.1.0) - -**Implemented New Features and Enhancements:** - -- Add reorderable to Column [\#1246](https://github.com/primefaces/primereact/issues/1246) -- Implement filterBy and filterMatchMode for ListBox [\#1245](https://github.com/primefaces/primereact/issues/1245) -- Implement filterBy and filterMatchMode for MultiSelect [\#1244](https://github.com/primefaces/primereact/issues/1244) -- Add filterPlaceholder to MultiSelect [\#1242](https://github.com/primefaces/primereact/issues/1242) -- Deprecate icon of SelectItem API [\#1239](https://github.com/primefaces/primereact/issues/1239) -- Templating support to SelectButton [\#1238](https://github.com/primefaces/primereact/issues/1238) -- Document SelectItem [\#1237](https://github.com/primefaces/primereact/issues/1237) -- Change the type of emptyMessage property on DataTable [\#1236](https://github.com/primefaces/primereact/issues/1236) -- Deprecate Lightbox [\#1235](https://github.com/primefaces/primereact/issues/1235) -- Add optionValue to Select components [\#1230](https://github.com/primefaces/primereact/issues/1230) -- Placeholder colors are not same [\#1229](https://github.com/primefaces/primereact/issues/1229) -- Primitive values support in Select components [\#1228](https://github.com/primefaces/primereact/issues/1228) -- Add filterHeaderStyle and filterHeaderClassName to Column [\#1227](https://github.com/primefaces/primereact/issues/1227) -- Add rowHover to DataTable [\#1226](https://github.com/primefaces/primereact/issues/1226) -- New options for CurrentPageReport [\#1225](https://github.com/primefaces/primereact/issues/1225) -- New DataTable Customer Demo [\#1224](https://github.com/primefaces/primereact/issues/1224) -- New filtering modes for Table [\#1223](https://github.com/primefaces/primereact/issues/1223) -- Accents support in Table filtering [\#1222](https://github.com/primefaces/primereact/issues/1222) -- Add filterField to column [\#1221](https://github.com/primefaces/primereact/issues/1221) -- Move column filters to their own row [\#1220](https://github.com/primefaces/primereact/issues/1220) -- Time support for min date or max date in calendar component [\#1217](https://github.com/primefaces/primereact/issues/1217) -- Add filterPlaceholder to Listbox [\#1215](https://github.com/primefaces/primereact/issues/1215) -- Improve style of p-link component [\#1213](https://github.com/primefaces/primereact/issues/1213) -- Implement className in MultiSelect, Dropdown, SelectButton, ListBox options [\#1175](https://github.com/primefaces/primereact/issues/1175) -- Allow Dialogs already maximized [\#1170](https://github.com/primefaces/primereact/issues/1170) -- Implement filterBy and filterMatchMode for Dropdown [\#1149](https://github.com/primefaces/primereact/issues/1149) -- Change the type of the 'header' property on TabPanel [\#1079](https://github.com/primefaces/primereact/issues/1079) -- DataTable Columns: Conditional reorder [\#1032](https://github.com/primefaces/primereact/issues/1032) -- Datatable Columns: Conditional select [\#1031](https://github.com/primefaces/primereact/issues/1031) - -**Fixed bugs:** - -- Chips cover 100% although input is visually smaller [\#1241](https://github.com/primefaces/primereact/issues/1241) -- Datatable doesn't change page when the last element on a page is removed. [\#1233](https://github.com/primefaces/primereact/issues/1233) -- Filter does not work after adding a new node to the root node on Tree [\#1232](https://github.com/primefaces/primereact/issues/1232) -- Clear Button does not clear the input value on Calendar [\#1231](https://github.com/primefaces/primereact/issues/1231) -- Remove tabIndex from the headers of the non-sortable dataTable. [\#1219](https://github.com/primefaces/primereact/issues/1219) -- The virtualScroll height is always added to rows on DataTable [\#1218](https://github.com/primefaces/primereact/issues/1218) -- ContextMenu hide/onHide triggers even though already hidden [\#1189](https://github.com/primefaces/primereact/issues/1189) -- Tree does not support Font Awesome icons [\#1187](https://github.com/primefaces/primereact/issues/1187) -- Reset filter textbox of dropdown if options changes [\#1179](https://github.com/primefaces/primereact/issues/1179) -- Deadlock situation in range slider [\#1094](https://github.com/primefaces/primereact/issues/1094) - -## [4.0.0](https://github.com/primefaces/primereact/tree/4.0.0) (2020-02-27) - -[Full Changelog](https://github.com/primefaces/primereact/compare/3.4.0...4.0.0) - -**Implemented New Features and Enhancements:** - -- Add keepInvalid property to Calendar [\#1204](https://github.com/primefaces/primereact/issues/1204) -- Add position property to Dialog [\#1203](https://github.com/primefaces/primereact/issues/1203) -- Add FocusTrap support to Dialog [\#1202](https://github.com/primefaces/primereact/issues/1202) -- Add sortFunction support to DataTable with multiple column sorting [\#1201](https://github.com/primefaces/primereact/issues/1201) -- Remove min-width style from Dropdown [\#1196](https://github.com/primefaces/primereact/issues/1196) -- Add maskClassName property to Dialog [\#1194](https://github.com/primefaces/primereact/issues/1194) -- ReImplemented Steps styles [\#1191](https://github.com/primefaces/primereact/issues/1191) -- Leave animation for Dialog [\#1181](https://github.com/primefaces/primereact/issues/1181) -- Dialog header not visible [\#1174](https://github.com/primefaces/primereact/issues/1174) -- Dialog is not displayed correctly in mobile view [\#1165](https://github.com/primefaces/primereact/issues/1165) -- Add sort number feature to sortable columns on DataTable and TreeTable with multi sorting [\#1164](https://github.com/primefaces/primereact/issues/1164) -- Add onRemove callback to FileUpload [\#1152](https://github.com/primefaces/primereact/issues/1152) -- Add editing support to the input field on Calendar [\#1141](https://github.com/primefaces/primereact/issues/1141) -- New Component: Galleria [\#1105](https://github.com/primefaces/primereact/issues/1105) - -**Fixed bugs:** - -- Remove the legacy lifecycle method from Lightbox component [\#1200](https://github.com/primefaces/primereact/issues/1200) -- The disabled items can be focused in the Steps [\#1192](https://github.com/primefaces/primereact/issues/1192) -- Alignment problem on Growl message without details [\#1190](https://github.com/primefaces/primereact/issues/1190) -- Maximizable property is not working correctly on dialog [\#1169](https://github.com/primefaces/primereact/issues/1169) -- Dismissable mask behaves over dialog [\#1167](https://github.com/primefaces/primereact/issues/1167) -- Typedefinition for DataTable OnFilter is wrong. [\#1163](https://github.com/primefaces/primereact/issues/1163) - -## [3.4.0](https://github.com/primefaces/primereact/tree/3.4.0) (2020-01-17) - -[Full Changelog](https://github.com/primefaces/primereact/compare/3.3.3...3.4.0) - -**Implemented New Features and Enhancements:** - -- Calendar component keyboard support [\#1157](https://github.com/primefaces/primereact/issues/1157) -- Add expandableRowGroups property to DataTable [\#1148](https://github.com/primefaces/primereact/issues/1148) -- Add removableSort property to DataTable [\#1142](https://github.com/primefaces/primereact/issues/1142) -- Enhance Dialog Positioning [\#1138](https://github.com/primefaces/primereact/issues/1138) - -**Fixed bugs:** - -- Wrong property name on the propTypes definition of Dropdown [\#1158](https://github.com/primefaces/primereact/issues/1158) -- When the InputMask is focused, the mask disappears [\#1156](https://github.com/primefaces/primereact/issues/1156) -- When the buttons inside the components are clicked, they submit the form [\#1155](https://github.com/primefaces/primereact/issues/1155) -- The icon of the next button has wrong class name on Carousel [\#1154](https://github.com/primefaces/primereact/issues/1154) -- Some DataView lazy and loading types missing [\#1131](https://github.com/primefaces/primereact/issues/1131) -- TreeTable default filter value is not showing in the filter widget [\#1129](https://github.com/primefaces/primereact/issues/1129) -- InputTextarea does not render props like cols and rows [\#1127](https://github.com/primefaces/primereact/issues/1127) -- PanelMenu Icon does not show for entries without sub children [\#1121](https://github.com/primefaces/primereact/issues/1121) -- ContextMenu.d.ts has wrong property name [\#1118](https://github.com/primefaces/primereact/issues/1118) -- Dropdown cannot open the panel after double clicking an option [\#1053](https://github.com/primefaces/primereact/issues/1053) -- InputMask is not changing the mask at runtime. [\#1021](https://github.com/primefaces/primereact/issues/1021) - -## [3.3.3](https://github.com/primefaces/primereact/tree/3.3.3) (2019-11-29) - -[Full Changelog](https://github.com/primefaces/primereact/compare/3.3.2...3.3.3) - -**Implemented New Features and Enhancements:** - -- Add exportable property to Column [\#1103](https://github.com/primefaces/primereact/issues/1103) -- Add exportFunction property to DataTable [\#1102](https://github.com/primefaces/primereact/issues/1102) -- Add repeat functionality to timer buttons on Calendar [\#1101](https://github.com/primefaces/primereact/issues/1101) -- Add reset method to DataTable [\#1088](https://github.com/primefaces/primereact/issues/1088) -- onColReorder in Datatable parameter missing [\#1080](https://github.com/primefaces/primereact/issues/1080) -- Add disabled property to Tree [\#1078](https://github.com/primefaces/primereact/issues/1078) -- Add selectedItemsLabel property to MultiSelect [\#1075](https://github.com/primefaces/primereact/issues/1075) -- Add maxSelectedLabels property to MultiSelect [\#1074](https://github.com/primefaces/primereact/issues/1074) -- Passing of data-\* Attributes as Props [\#1073](https://github.com/primefaces/primereact/issues/1073) - -**Fixed bugs:** - -- DomHandler functions throw NPE on components [\#1104](https://github.com/primefaces/primereact/issues/1104) -- Growl messages from "bottom\*" is not displaying as expected [\#1095](https://github.com/primefaces/primereact/issues/1095) -- Properties of TreeNodes on TreeTable not Working [\#1085](https://github.com/primefaces/primereact/issues/1085) -- className property of Message component not working [\#1076](https://github.com/primefaces/primereact/issues/1076) -- Tree className property not working [\#1068](https://github.com/primefaces/primereact/issues/1068) -- Sidebar dismissable is only updating whenever the visible prop updates [\#1065](https://github.com/primefaces/primereact/issues/1065) -- selectDate\(\) set date to undefined when minDate is set and selected date is \<= minDate [\#1056](https://github.com/primefaces/primereact/issues/1056) -- Datatable multisort broken [\#617](https://github.com/primefaces/primereact/issues/617) - -## [3.3.2](https://github.com/primefaces/primereact/tree/3.3.2) (2019-10-22) - -[Full Changelog](https://github.com/primefaces/primereact/compare/3.3.1...3.3.2) - -**Fixed bugs:** - -- Table state is not working with columnResizeMode="expand" on DataTable [\#1061](https://github.com/primefaces/primereact/issues/1061) -- Calendar component throws NPE after updating the value [\#1060](https://github.com/primefaces/primereact/issues/1060) - -## [3.3.1](https://github.com/primefaces/primereact/tree/3.3.1) (2019-10-18) - -[Full Changelog](https://github.com/primefaces/primereact/compare/3.3.0...3.3.1) - -**Implemented New Features and Enhancements:** - -- Improve component styles on Luna, Nova and Rhea Themes [\#1052](https://github.com/primefaces/primereact/issues/1052) -- Improve Carousel styles [\#1051](https://github.com/primefaces/primereact/issues/1051) - -**Fixed bugs:** - -- Carousel is not working with 'primereact/carousel' shortcut [\#1049](https://github.com/primefaces/primereact/issues/1049) - -## [3.3.0](https://github.com/primefaces/primereact/tree/3.3.0) (2019-10-16) - -[Full Changelog](https://github.com/primefaces/primereact/compare/3.2.0...3.3.0) - -**Implemented New Features and Enhancements:** - -- Add closeOnEscape property to Sidebar [\#1046](https://github.com/primefaces/primereact/issues/1046) -- InputTextarea: Floating Label [\#1040](https://github.com/primefaces/primereact/issues/1040) -- Upgrade QuillJS 1.3.7 [\#1037](https://github.com/primefaces/primereact/issues/1037) -- Add filterInputAutoFocus property to Dropdown [\#1036](https://github.com/primefaces/primereact/issues/1036) -- New Component: Carousel [\#1030](https://github.com/primefaces/primereact/issues/1030) -- Add className support to SelectButtonItems [\#1019](https://github.com/primefaces/primereact/issues/1019) - -**Fixed bugs:** - -- AutoComplete mode multiple ignores maxlength property [\#1045](https://github.com/primefaces/primereact/issues/1045) -- The datatable is broken with scrollable and no columns settings [\#1044](https://github.com/primefaces/primereact/issues/1044) -- Calendar Overlay doesnt open with current date after value update [\#999](https://github.com/primefaces/primereact/issues/999) - -## [3.2.0](https://github.com/primefaces/primereact/tree/3.2.0) (2019-09-12) - -[Full Changelog](https://github.com/primefaces/primereact/compare/3.1.9...3.2.0) - -**Implemented New Features and Enhancements:** - -- Add type property to AutoComplete [\#1010](https://github.com/primefaces/primereact/issues/1010) -- Add customUpload property to FileUpload [\#1008](https://github.com/primefaces/primereact/issues/1008) -- Improve columns' editor option on editing mode [\#1007](https://github.com/primefaces/primereact/issues/1007) -- Add keyboard support to DataTable with Checkbox selection [\#1005](https://github.com/primefaces/primereact/issues/1005) -- Add row edit support to DataTable [\#809](https://github.com/primefaces/primereact/issues/809) - -**Fixed bugs:** - -- DataTable with global filter and header checkbox selection select all records [\#1012](https://github.com/primefaces/primereact/issues/1012) -- DataTable column headers not displaying in nested table [\#1009](https://github.com/primefaces/primereact/issues/1009) -- DataTable has null state under certain conditions [\#1003](https://github.com/primefaces/primereact/issues/1003) -- Value doesnt change on Input mask when unmask is enabled [\#998](https://github.com/primefaces/primereact/issues/998) - -## [3.1.9](https://github.com/primefaces/primereact/tree/3.1.9) (2019-08-28) - -[Full Changelog](https://github.com/primefaces/primereact/compare/3.1.8...3.1.9) - -**Implemented New Features and Enhancements:** - -- Datatable EditRow [\#935](https://github.com/primefaces/primereact/issues/935) -- Add className option to Tooltip [\#994](https://github.com/primefaces/primereact/issues/994) -- Add focusOnShow property to Dialog [\#988](https://github.com/primefaces/primereact/issues/988) -- Add displayValueTemplate property to ProgressBar [\#978](https://github.com/primefaces/primereact/issues/978) -- Add tabIndex prop to Spinner [\#976](https://github.com/primefaces/primereact/issues/976) -- Add tabIndex prop to RadioButton [\#975](https://github.com/primefaces/primereact/issues/975) - -**Fixed bugs:** - -- Wrong typings for the property of Spinner [\#1001](https://github.com/primefaces/primereact/issues/1001) -- Export hide\(\) for ContextMenu in type definition file [\#1000](https://github.com/primefaces/primereact/issues/1000) -- Style props doesnt update after re-rendering with Inputmask [\#996](https://github.com/primefaces/primereact/issues/996) -- Nested originalEvent in DataTable header RowCheckbox event [\#986](https://github.com/primefaces/primereact/issues/986) -- Typings missing in DataTable: resetColumnOrder [\#980](https://github.com/primefaces/primereact/issues/980) -- ProgressBar does not show value for 0% [\#973](https://github.com/primefaces/primereact/issues/973) -- Tooltips appear with old contents after being undefined [\#972](https://github.com/primefaces/primereact/issues/972) - -## [3.1.8](https://github.com/primefaces/primereact/tree/3.1.8) (2019-07-25) - -[Full Changelog](https://github.com/primefaces/primereact/compare/3.1.7...3.1.8) - -**Implemented New Features and Enhancements:** - -- Resizable columns support with column groups [\#518](https://github.com/primefaces/primereact/issues/518) -- Update to PrimeIcons 2.0.0 [\#970](https://github.com/primefaces/primereact/issues/970) -- Datatable rowGroup with rowSpan mode: row separator line style on group break [\#967](https://github.com/primefaces/primereact/issues/967) -- Growl detail should be placed in \ not \ [\#965](https://github.com/primefaces/primereact/issues/965) -- Add autoFocus attribute to Autocomplete [\#963](https://github.com/primefaces/primereact/issues/963) -- Add onTargetSelect and onSourceSelect props to Picklist [\#962](https://github.com/primefaces/primereact/issues/962) -- Add tabIndex prop to ToggleButton [\#957](https://github.com/primefaces/primereact/issues/957) -- Add required prop to RadioButton [\#953](https://github.com/primefaces/primereact/issues/953) -- Add required prop to Checkbox [\#952](https://github.com/primefaces/primereact/issues/952) -- Add shift key selection support to DataTable with multiple mode [\#934](https://github.com/primefaces/primereact/issues/934) - -**Fixed bugs:** - -- Calendar ButtonBar Clear button does not use clearButtonStyleClass prop [\#968](https://github.com/primefaces/primereact/issues/968) -- Datatable rowGroup with rowSpan mode and pagination fails on page break [\#961](https://github.com/primefaces/primereact/issues/961) -- DataTable fails to render if columns are mapped and has a static column [\#959](https://github.com/primefaces/primereact/issues/959) -- Month View shows a redundant week on the calendar [\#956](https://github.com/primefaces/primereact/issues/956) -- Simple DataScroller does not display items. [\#955](https://github.com/primefaces/primereact/issues/955) -- The DataTable will sort a column when shrinking it on resize [\#944](https://github.com/primefaces/primereact/issues/944) - -## [3.1.7](https://github.com/primefaces/primereact/tree/3.1.7) (2019-06-25) - -[Full Changelog](https://github.com/primefaces/primereact/compare/3.1.6...3.1.7) - -**Fixed bugs:** - -- Charts always redraw when they are updated [\#946](https://github.com/primefaces/primereact/issues/946) - -## [3.1.6](https://github.com/primefaces/primereact/tree/3.1.6) (2019-06-25) - -[Full Changelog](https://github.com/primefaces/primereact/compare/3.1.5...3.1.6) - -**Fixed bugs:** - -- The ChartJs API is not imported correctly [\#945](https://github.com/primefaces/primereact/issues/945) -- Inplace is not working with 'primereact/inplace' shortcut [\#943](https://github.com/primefaces/primereact/issues/943) - -## [3.1.5](https://github.com/primefaces/primereact/tree/3.1.5) (2019-06-24) - -[Full Changelog](https://github.com/primefaces/primereact/compare/3.1.4...3.1.5) - -**Implemented New Features and Enhancements:** - -- Add theme prop to Editor [\#938](https://github.com/primefaces/primereact/issues/938) -- Add "replace" method in Messages component [\#930](https://github.com/primefaces/primereact/issues/930) -- Add decimalSeparator and thousandSeparator props to Spinner [\#925](https://github.com/primefaces/primereact/issues/925) -- Add formatInput prop to Spinner [\#924](https://github.com/primefaces/primereact/issues/924) -- Add required, pattern and placeholder props to Spinner. [\#920](https://github.com/primefaces/primereact/issues/920) -- Add ariaCloseIconLabel prop to Dialog [\#916](https://github.com/primefaces/primereact/issues/916) - -**Fixed bugs:** - -- When components are placed placed inside a label element clicking on the component fires the click event twice [\#940](https://github.com/primefaces/primereact/issues/940) -- The hide method of Dropdown throws an exception on console [\#937](https://github.com/primefaces/primereact/issues/937) -- The "required" prop is not working on Dropdown [\#933](https://github.com/primefaces/primereact/issues/933) -- Tooltip in chips does not work properly [\#932](https://github.com/primefaces/primereact/issues/932) -- Empty array crashes Messages component [\#928](https://github.com/primefaces/primereact/issues/928) -- The 'showWeek' prop throws an error with TypedScript on Calendar [\#926](https://github.com/primefaces/primereact/issues/926) -- Close icon is still active on the disabled Chips [\#918](https://github.com/primefaces/primereact/issues/918) -- onRemove event does not exists on Growl component [\#914](https://github.com/primefaces/primereact/issues/914) -- Can't resolve 'chart.js/src/chart.js' [\#913](https://github.com/primefaces/primereact/issues/913) -- Second Sidebar reset blockScroll [\#910](https://github.com/primefaces/primereact/issues/910) -- ProgressSpinner not visible in IE11 [\#908](https://github.com/primefaces/primereact/issues/908) -- Wrong type for showWeek in Calendar.d.ts [\#907](https://github.com/primefaces/primereact/issues/907) - -## [3.1.4](https://github.com/primefaces/primereact/tree/3.1.4) (2019-05-30) - -[Full Changelog](https://github.com/primefaces/primereact/compare/3.1.3...3.1.4) - -**Implemented New Features and Enhancements:** - -- Add iconsTemplate to Dialog [\#905](https://github.com/primefaces/primereact/issues/905) -- Modules property for Editor [\#904](https://github.com/primefaces/primereact/issues/904) -- The ability to reset columnOrder in DataTable [\#899](https://github.com/primefaces/primereact/issues/899) -- onFocus and onBlur for Chips [\#897](https://github.com/primefaces/primereact/issues/897) -- Show week numbers for Calendar [\#894](https://github.com/primefaces/primereact/issues/894) -- CellEditor should have onSubmit and onCancel method. [\#891](https://github.com/primefaces/primereact/issues/891) -- Add expandIcon and collapseIcon props to Panel component [\#888](https://github.com/primefaces/primereact/issues/888) -- Support for disabling dropdown item\(s\). [\#874](https://github.com/primefaces/primereact/issues/874) -- Editable Dropdown should support maxLength [\#844](https://github.com/primefaces/primereact/issues/844) - -**Fixed bugs:** - -- Not able to set focus on Dropdown component [\#903](https://github.com/primefaces/primereact/issues/903) -- Calendar time parsing broken for showSeconds == false [\#901](https://github.com/primefaces/primereact/issues/901) -- DataTable sortFunction Typescript definition wrong [\#898](https://github.com/primefaces/primereact/issues/898) -- Data\*: alwaysShowPaginator prop not used [\#896](https://github.com/primefaces/primereact/issues/896) -- DataTable expanded rows collapse when modifying one property of a record [\#884](https://github.com/primefaces/primereact/issues/884) -- The scroll bar is not moving correctly on the DataTable with resizeMode="expand" [\#881](https://github.com/primefaces/primereact/issues/881) -- Dropdown showClear not always displayed [\#875](https://github.com/primefaces/primereact/issues/875) -- Unlogical editor navigation with shift+tab in DataTable [\#843](https://github.com/primefaces/primereact/issues/843) -- Cannot read property 'show' of undefined at FileUpload.validate [\#802](https://github.com/primefaces/primereact/issues/802) -- DataTable onValueChange callback one key press behind when using custom InputText filter [\#777](https://github.com/primefaces/primereact/issues/777) - -## [3.1.3](https://github.com/primefaces/primereact/tree/3.1.3) (2019-05-06) - -[Full Changelog](https://github.com/primefaces/primereact/compare/3.1.2...3.1.3) - -**Implemented New Features and Enhancements:** - -- Multiple target support to OverlayPanel [\#873](https://github.com/primefaces/primereact/issues/873) -- Improve outside click on OverlayPanel [\#872](https://github.com/primefaces/primereact/issues/872) -- Calendar panel is not aligned correctly on window resize [\#870](https://github.com/primefaces/primereact/issues/870) -- Improve outside click on Calendar [\#869](https://github.com/primefaces/primereact/issues/869) -- The min/max date support is added to Calendar for monthNavigation and yearNavigation [\#859](https://github.com/primefaces/primereact/issues/859) -- Add ariaLabel and ariaLabelledBy properties to DropDown [\#855](https://github.com/primefaces/primereact/issues/855) -- Add contentStyle and contentClassName props to Tree [\#842](https://github.com/primefaces/primereact/issues/842) - -**Fixed bugs:** - -- OverlayPanel's icon is in the wrong position after window is resized [\#871](https://github.com/primefaces/primereact/issues/871) -- Flipped OverlayPanel rendered behind browser [\#868](https://github.com/primefaces/primereact/issues/868) -- Missing method typings for OverlayPanel [\#865](https://github.com/primefaces/primereact/issues/865) -- Calendar used in DataTable is unable to switch months [\#860](https://github.com/primefaces/primereact/issues/860) -- Calendar view="month" does not allow typing [\#856](https://github.com/primefaces/primereact/issues/856) -- OnHide callback is not called when visibility property is changed [\#854](https://github.com/primefaces/primereact/issues/854) -- Add stateStorage property to DataTable.d.ts [\#851](https://github.com/primefaces/primereact/issues/851) -- The tableStyle and tableClassName props have no effect on Scrollable DataTable [\#849](https://github.com/primefaces/primereact/issues/849) -- Calendar is rendering behind the browser window. [\#840](https://github.com/primefaces/primereact/issues/840) -- onRowSelect called instead of onRowUnselect [\#835](https://github.com/primefaces/primereact/issues/835) -- Chart doesn't reload when new data is added to it [\#834](https://github.com/primefaces/primereact/issues/834) -- Datatable scrollHeight can't be changed [\#662](https://github.com/primefaces/primereact/issues/662) - -## [3.1.2](https://github.com/primefaces/primereact/tree/3.1.2) (2019-04-03) - -[Full Changelog](https://github.com/primefaces/primereact/compare/3.1.1...3.1.2) - -**Fixed bugs:** - -- DataTable selection with uncontrolled sorting broken [\#830](https://github.com/primefaces/primereact/issues/830) - -## [3.1.1](https://github.com/primefaces/primereact/tree/3.1.1) (2019-03-31) - -[Full Changelog](https://github.com/primefaces/primereact/compare/3.1.0...3.1.1) - -**Implemented New Features and Enhancements:** - -- Improve disabled header style on Accordion [\#828](https://github.com/primefaces/primereact/issues/828) -- Update to FullCalendar 4.0.1 [\#827](https://github.com/primefaces/primereact/issues/827) -- Remove autoWidth from Dropdown [\#826](https://github.com/primefaces/primereact/issues/826) -- Improve DataTable VirtualScrolling [\#825](https://github.com/primefaces/primereact/issues/825) -- Update dialog animations [\#823](https://github.com/primefaces/primereact/issues/823) -- Close datatable cell editor programmatically [\#822](https://github.com/primefaces/primereact/issues/822) -- DataTable row selection slow with sortable columns [\#813](https://github.com/primefaces/primereact/issues/813) -- Add onBlur and onFocus events to multiselect and chips [\#782](https://github.com/primefaces/primereact/issues/782) - -**Fixed bugs:** - -- On Accordion, the disabled head can be focused on [\#829](https://github.com/primefaces/primereact/issues/829) -- Datatable property 'stateKey' is missing in types file [\#817](https://github.com/primefaces/primereact/issues/817) -- Datatable row onClick typescript definition does not match the function or documentation [\#815](https://github.com/primefaces/primereact/issues/815) -- Overlays wrong position on initial/first render [\#814](https://github.com/primefaces/primereact/issues/814) -- Chart with latest chart.js does not build [\#812](https://github.com/primefaces/primereact/issues/812) -- FileUpload thows JS exception in Edge [\#808](https://github.com/primefaces/primereact/issues/808) -- SlideMenu empty after model change [\#807](https://github.com/primefaces/primereact/issues/807) -- Dropdown duplicated IDs [\#805](https://github.com/primefaces/primereact/issues/805) -- DataTable crashes with a "Cannot read property 'xxx' of undefined" for nested objects [\#791](https://github.com/primefaces/primereact/issues/791) -- Syntax error in optional typescript function interface [\#790](https://github.com/primefaces/primereact/issues/790) -- Using "maxlength" of Spinner causes errors [\#787](https://github.com/primefaces/primereact/issues/787) -- "propTypes" incorrectly named as "propsTypes" [\#784](https://github.com/primefaces/primereact/issues/784) -- Changes to prop does not render ProgressBar [\#783](https://github.com/primefaces/primereact/issues/783) -- Dropdown - TypeError: Cannot read property 'element' of null [\#781](https://github.com/primefaces/primereact/issues/781) -- propTypes error using new iconsTemplate [\#780](https://github.com/primefaces/primereact/issues/780) -- Datatable does not scroll horizontally when there is no data [\#635](https://github.com/primefaces/primereact/issues/635) - -## [3.1.0](https://github.com/primefaces/primereact/tree/3.1.0) (2019-02-19) - -[Full Changelog](https://github.com/primefaces/primereact/compare/3.0.0...3.1.0) - -**Implemented New Features and Enhancements:** - -- Filtering for Tree [\#769](https://github.com/primefaces/primereact/issues/769) -- onClose event for OverlayPanel [\#763](https://github.com/primefaces/primereact/issues/763) -- Arrow for OverlayPanel [\#762](https://github.com/primefaces/primereact/issues/762) -- Improve style of p-link component [\#760](https://github.com/primefaces/primereact/issues/760) -- TableState for DataTable [\#736](https://github.com/primefaces/primereact/issues/736) -- Filtering for TreeTable [\#380](https://github.com/primefaces/primereact/issues/380) - -**Fixed bugs:** - -- Datatable toggle issue after reordering [\#774](https://github.com/primefaces/primereact/issues/774) -- Inputtextarea autoresize invalid height issue after render [\#773](https://github.com/primefaces/primereact/issues/773) -- TreeTableBodyCell.js: Uncaught TypeError: Cannot read property 'removeAttribute' of null [\#772](https://github.com/primefaces/primereact/issues/772) -- Dropdown with dataKey attribute throws console errors. [\#768](https://github.com/primefaces/primereact/issues/768) -- Multiple selection in a table without data is selected by default [\#766](https://github.com/primefaces/primereact/issues/766) -- InputGroup border issue for using with other components [\#761](https://github.com/primefaces/primereact/issues/761) -- code debugger in production mode "component input calendar" [\#751](https://github.com/primefaces/primereact/issues/751) - -## [3.0.0](https://github.com/primefaces/primereact/tree/3.0.0) (2019-01-22) - -[Full Changelog](https://github.com/primefaces/primereact/compare/3.0.0-rc.1...3.0.0) - -**Implemented New Features and Enhancements:** - -- Customizable editorValidatorEvent for IncellEditing [\#746](https://github.com/primefaces/primereact/issues/746) - -**Fixed bugs:** - -- Spinner arrow keys not working [\#743](https://github.com/primefaces/primereact/issues/743) -- Toolbar of Editor Component with nova-dark theme does not render properly. [\#740](https://github.com/primefaces/primereact/issues/740) -- Paginator - Uncaught TypeError: this.getOptionLabel\(...\).toLowerCase is not a function [\#739](https://github.com/primefaces/primereact/issues/739) - -## [3.0.0-rc.1](https://github.com/primefaces/primereact/tree/3.0.0-rc.1) (2019-01-10) - -[Full Changelog](https://github.com/primefaces/primereact/compare/3.0.0-beta.1...3.0.0-rc.1) - -**Implemented New Features and Enhancements:** - -- Rename defaultLabel to placeholder in MultiSelect [\#733](https://github.com/primefaces/primereact/issues/733) -- Enhance accessibility for Checkbox with ARIA roles [\#729](https://github.com/primefaces/primereact/issues/729) -- Ability to use dataKey as the key in Dropdown [\#727](https://github.com/primefaces/primereact/issues/727) -- Focused editable Dropdown looks different than non-editable [\#725](https://github.com/primefaces/primereact/issues/725) -- Header and Footer templates for Calendar component [\#706](https://github.com/primefaces/primereact/issues/706) -- MultiSelect - Support a fixed defaultLabel [\#674](https://github.com/primefaces/primereact/issues/674) - -**Fixed bugs:** - -- InputSwitch focus visuals are missing [\#735](https://github.com/primefaces/primereact/issues/735) -- DataTable edit throws error on route change [\#734](https://github.com/primefaces/primereact/issues/734) -- Incorrect column sortable prop type definition [\#730](https://github.com/primefaces/primereact/issues/730) -- ScrollPanel: Cannot read property 'classList' of null [\#726](https://github.com/primefaces/primereact/issues/726) -- Editor component cannot refresh it's value when the state change [\#724](https://github.com/primefaces/primereact/issues/724) -- Editor active item is not highlighted in toolbar [\#722](https://github.com/primefaces/primereact/issues/722) -- InputMask doesn't update the value according to state [\#686](https://github.com/primefaces/primereact/issues/686) -- DataTable: hide column after reordering columns throws exception [\#668](https://github.com/primefaces/primereact/issues/668) -- Form validity is true, even though no Dropdown selection has been made. [\#665](https://github.com/primefaces/primereact/issues/665) - -## [3.0.0-beta.1](https://github.com/primefaces/primereact/tree/3.0.0-beta.1) (2018-12-24) - -[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.1...3.0.0-beta.1) - -**Implemented New Features and Enhancements:** - -- Reimplement Menubar [\#721](https://github.com/primefaces/primereact/issues/721) -- Reimplement TieredMenu [\#720](https://github.com/primefaces/primereact/issues/720) -- Keyboard Accessibility for Menu [\#719](https://github.com/primefaces/primereact/issues/719) -- Reimplement PanelMenu Animation with CSSTransition [\#718](https://github.com/primefaces/primereact/issues/718) -- Remove certain props from Dialog [\#717](https://github.com/primefaces/primereact/issues/717) -- Reimplement Dialog Positioning [\#715](https://github.com/primefaces/primereact/issues/715) -- Reimplement Accordion Animation with CSSTransition [\#714](https://github.com/primefaces/primereact/issues/714) -- Reimplement Fieldset Animation with CSSTransition [\#712](https://github.com/primefaces/primereact/issues/712) -- Enhance Dialog Animation [\#711](https://github.com/primefaces/primereact/issues/711) -- Reimplement Panel Animation with CSSTransition [\#710](https://github.com/primefaces/primereact/issues/710) -- Unify focus visuals in themes [\#709](https://github.com/primefaces/primereact/issues/709) -- Keyboard Accessibility for PanelMenu [\#703](https://github.com/primefaces/primereact/issues/703) -- Keyboard Accessibility for MegaMenu [\#702](https://github.com/primefaces/primereact/issues/702) -- Keyboard Accessibility for Menubar [\#701](https://github.com/primefaces/primereact/issues/701) -- Keyboard Accessibility for TieredMenu [\#700](https://github.com/primefaces/primereact/issues/700) -- Improve Lightbox [\#699](https://github.com/primefaces/primereact/issues/699) -- Keyboard Accessibility for Inplace [\#698](https://github.com/primefaces/primereact/issues/698) -- Keyboard accessibility for PickList [\#697](https://github.com/primefaces/primereact/issues/697) -- Keyboard Accessibility for OrderList [\#696](https://github.com/primefaces/primereact/issues/696) -- Keyboard Accessibility for InputSwitch [\#695](https://github.com/primefaces/primereact/issues/695) -- DataTable/TreeTable sort headers should be keyboard accessible [\#693](https://github.com/primefaces/primereact/issues/693) -- Sidebar close icon should receive focus on open [\#692](https://github.com/primefaces/primereact/issues/692) -- Keyboard Accessibility for MultiSelect [\#691](https://github.com/primefaces/primereact/issues/691) -- Improve Listbox Accessibility [\#690](https://github.com/primefaces/primereact/issues/690) -- Improve ToggleButton Accessibility [\#689](https://github.com/primefaces/primereact/issues/689) -- Improve SelectButton Accessibility [\#687](https://github.com/primefaces/primereact/issues/687) -- Keyboard navigation support for Showcsse [\#684](https://github.com/primefaces/primereact/issues/684) -- Replace anchors without href with buttons [\#683](https://github.com/primefaces/primereact/issues/683) -- Update to Babel 7 [\#682](https://github.com/primefaces/primereact/issues/682) -- Improve Radio/Checkbox Accessibility [\#681](https://github.com/primefaces/primereact/issues/681) - -**Fixed bugs:** - -- AutoComplete in multiple mode does not receive focus [\#713](https://github.com/primefaces/primereact/issues/713) -- OrderList droppoints are not highlighted [\#708](https://github.com/primefaces/primereact/issues/708) -- TreeTable Pagination Error [\#685](https://github.com/primefaces/primereact/issues/685) -- Problem TextArea component "Disabled" [\#679](https://github.com/primefaces/primereact/issues/679) -- Datatable horizontal scroll trigger onVirtualScroll [\#677](https://github.com/primefaces/primereact/issues/677) -- Spinner does not show the value 0 [\#675](https://github.com/primefaces/primereact/issues/675) -- KeyFilter uses static instance of the regex [\#672](https://github.com/primefaces/primereact/issues/672) -- slider.d.ts has wrong import syntax [\#671](https://github.com/primefaces/primereact/issues/671) - -## [2.0.1](https://github.com/primefaces/primereact/tree/2.0.1) (2018-12-06) - -[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0...2.0.1) - -**Fixed bugs:** - -- Align SplitButton Overlay with other overlays [\#667](https://github.com/primefaces/primereact/issues/667) -- Standalone paginator causes replace is undefined error [\#666](https://github.com/primefaces/primereact/issues/666) -- onRowCollapse doesn't work on expanded row [\#664](https://github.com/primefaces/primereact/issues/664) +[Full Changelog](https://github.com/primefaces/primereact/compare/10.6.0...10.6.1) -## [2.0.0](https://github.com/primefaces/primereact/tree/2.0.0) (2018-12-05) +## [10.6.0](https://github.com/primefaces/primereact/tree/10.6.0) (2024-03-29) -[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0-rc.1...2.0.0) +[Full Changelog](https://github.com/primefaces/primereact/compare/10.5.3...10.6.0) -**Implemented New Features and Enhancements:** +**New Features:** -- More paginator options to DataView [\#657](https://github.com/primefaces/primereact/issues/657) -- Filtered Dropdown does not close after pressing Enter [\#649](https://github.com/primefaces/primereact/issues/649) -- Ability to get filtered and/or sorted data in DataTable [\#643](https://github.com/primefaces/primereact/issues/643) -- Add modal prop to Sidebar [\#639](https://github.com/primefaces/primereact/issues/639) -- Add currentPageReportTemplate property to Paginator [\#636](https://github.com/primefaces/primereact/issues/636) -- ProgressBar avoidable re-renders [\#597](https://github.com/primefaces/primereact/issues/597) -- Feature request: Allow us to choose a different optionLabel to display selected items in MultiSelect [\#451](https://github.com/primefaces/primereact/issues/451) +- New Component - Stepper [\#6250](https://github.com/primefaces/primereact/issues/6250) +- New Component - ButtonGroup [\#6251](https://github.com/primefaces/primereact/issues/6251) +- New Component - FloatLabel [\#6190](https://github.com/primefaces/primereact/issues/6190) +- New Component - IconField | InputIcon [\#6229](https://github.com/primefaces/primereact/issues/6229) +- Datatable: "not-in" mode for filter function [\#6252](https://github.com/primefaces/primereact/issues/6252) -**Fixed bugs:** +**Enhancements:** -- Today cell is not highlighed in Calendar when selected [\#660](https://github.com/primefaces/primereact/issues/660) -- Header checkbox fails with filtering [\#659](https://github.com/primefaces/primereact/issues/659) -- Data Table resize: disable rightmost border [\#656](https://github.com/primefaces/primereact/issues/656) -- DataTable Column sortField is ignored [\#653](https://github.com/primefaces/primereact/issues/653) -- TreeTable: propagateSelectionUp Defect [\#650](https://github.com/primefaces/primereact/issues/650) -- cannot read property 'dayNamesShort' of undefined [\#647](https://github.com/primefaces/primereact/issues/647) -- this.props.onSelectionChange is not a function in DataTable [\#641](https://github.com/primefaces/primereact/issues/641) -- viewDate.getMonth\(\) is not a function [\#612](https://github.com/primefaces/primereact/issues/612) - -## [2.0.0-rc.1](https://github.com/primefaces/primereact/tree/2.0.0-rc.1) (2018-11-12) - -[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0-beta.9...2.0.0-rc.1) - -**Implemented New Features and Enhancements:** - -- Dialog default prop values [\#638](https://github.com/primefaces/primereact/issues/638) -- Reimplement InputTextarea Resize [\#629](https://github.com/primefaces/primereact/issues/629) -- Remove Schedule [\#628](https://github.com/primefaces/primereact/issues/628) -- Replace event.data with event.value at onSelectionChange of DataTable [\#626](https://github.com/primefaces/primereact/issues/626) -- Reimplement ContextMenu Selection of DataTable [\#625](https://github.com/primefaces/primereact/issues/625) -- Enter key should select a Tree node [\#624](https://github.com/primefaces/primereact/issues/624) -- Remove defaultExpanded from TreeNode [\#623](https://github.com/primefaces/primereact/issues/623) -- renderActiveOnly prop for Tabs [\#618](https://github.com/primefaces/primereact/issues/618) -- virtualRowHeight attribute in Table component [\#616](https://github.com/primefaces/primereact/issues/616) -- Remove defaultExpanded from TreeNode API [\#606](https://github.com/primefaces/primereact/issues/606) -- Keyboard Support for Table Row Selection [\#605](https://github.com/primefaces/primereact/issues/605) -- Select a tree node with enter key [\#604](https://github.com/primefaces/primereact/issues/604) -- Improve button focus visuals on Nova and Luna [\#602](https://github.com/primefaces/primereact/issues/602) +- Component structure enhancement - Tree TreeTable [\#6240](https://github.com/primefaces/primereact/issues/6240) +- MultistateCheckbox update [\#6249](https://github.com/primefaces/primereact/issues/6249) +- Enhancement focusOnHover Prop [\#6230](https://github.com/primefaces/primereact/issues/6230) +- TreeSelect: can't change default text "No results found" when not find data in filter TreeSelect [\#6173](https://github.com/primefaces/primereact/issues/6173) +- Listbox - focusOnHover prop [\#6171](https://github.com/primefaces/primereact/issues/6171) +- Upgrade PrimeIcons 7.0.0 [\#6255](https://github.com/primefaces/primereact/issues/6255) **Fixed bugs:** -- Dropdown throws error on hide [\#631](https://github.com/primefaces/primereact/issues/631) -- AccordionTab title with custom HTML gives error [\#615](https://github.com/primefaces/primereact/issues/615) -- Datatable autoLayout not working [\#599](https://github.com/primefaces/primereact/issues/599) -- Tooltips not updating [\#598](https://github.com/primefaces/primereact/issues/598) -- Dialog z-index [\#596](https://github.com/primefaces/primereact/issues/596) - -## [2.0.0-beta.9](https://github.com/primefaces/primereact/tree/2.0.0-beta.9) (2018-10-08) - -[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0-beta.8...2.0.0-beta.9) - -**Implemented New Features and Enhancements:** - -- Reimplement Slider [\#592](https://github.com/primefaces/primereact/issues/592) -- New Component: DeferredContent [\#591](https://github.com/primefaces/primereact/issues/591) +- Paginator: JumpToPageInput is broken by latest changes in Paginator [\#6226](https://github.com/primefaces/primereact/issues/6226) +- RadioButton: onChange is being triggered twice. [\#6223](https://github.com/primefaces/primereact/issues/6223) +- MultiSelect: selectionMessage not changing using locales [\#6220](https://github.com/primefaces/primereact/issues/6220) +- DataTable: NumpadEnter ignored during cell editing (and many other cases) [\#6023](https://github.com/primefaces/primereact/issues/6023) +- InputNumber: Does not allow copy/pasting [\#6192](https://github.com/primefaces/primereact/issues/6192) +- DataTable: RowClass conditional styling not working [\#6194](https://github.com/primefaces/primereact/issues/6194) +- Calendar: AM/PM does not work properly if minDate and maxDate validations are provided as prop [\#6151](https://github.com/primefaces/primereact/issues/6151) +- Calendar: When using timeonly and stepMinute prop together, minute is not showing correctly in the input field [\#5998](https://github.com/primefaces/primereact/issues/5998) +- DataTable 10.5.3: Drag to select doesn't work on any page past page 1 when paginated [\#6211](https://github.com/primefaces/primereact/issues/6211) +- Checkbox: Warning: specify either the checked prop, or the defaultChecked prop, but not both [\#6197](https://github.com/primefaces/primereact/issues/6197) +- Dropdown: missing hover style [\#6196](https://github.com/primefaces/primereact/issues/6196) +- TabView: Id doubles at root and nav elements [\#6201](https://github.com/primefaces/primereact/issues/6201) +- RadioButton, ToggleButton: Warning: Invalid DOM property readonly. Did you mean readOnly? [\#6186](https://github.com/primefaces/primereact/issues/6186) +- RadioButtoCheckBox wrong display [\#6181](https://github.com/primefaces/primereact/issues/6181) +- Checkbox: prop onClick changes the event type in 10.5.3 [\#6231](https://github.com/primefaces/primereact/issues/6231) +- TabView: TabPanel doesn't close if the 'closeIcon' prop is used [\#6165](https://github.com/primefaces/primereact/issues/6165) +- DataTable: Column Filter Typescript fix [\#6233](https://github.com/primefaces/primereact/issues/6233) +- ListBox: throw undefined error calling preventDefault() when running jest tests. [\#6184](https://github.com/primefaces/primereact/issues/6184) + +## [10.5.3](https://github.com/primefaces/primereact/tree/10.5.3) (2024-03-19) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.5.2...10.5.3) **Fixed bugs:** -- Add disabled property to Slider [\#593](https://github.com/primefaces/primereact/issues/593) -- Floating label for TextInput with number value fails [\#588](https://github.com/primefaces/primereact/issues/588) -- Sidebar component not working when visible by default [\#587](https://github.com/primefaces/primereact/issues/587) -- Presence of step prop will slow down reactivity of the Slider component [\#586](https://github.com/primefaces/primereact/issues/586) +- Messages Missing MergeProps [\#6179](https://github.com/primefaces/primereact/issues/6179) -## [2.0.0-beta.8](https://github.com/primefaces/primereact/tree/2.0.0-beta.8) (2018-09-24) +## [10.5.2](https://github.com/primefaces/primereact/tree/10.5.2) (2024-03-19) -[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0-beta.7...2.0.0-beta.8) +[Full Changelog](https://github.com/primefaces/primereact/compare/10.5.1...10.5.2) -**Implemented New Features and Enhancements:** +**New Features:** -- PrimeReact input events are not compatible with React forms libraries [\#537](https://github.com/primefaces/primereact/issues/537) -- Aria roles and attributes for Tree [\#580](https://github.com/primefaces/primereact/issues/580) -- New Luna Free Dark Theme Family [\#579](https://github.com/primefaces/primereact/issues/579) -- Keyboard navigation for Tree [\#578](https://github.com/primefaces/primereact/issues/578) -- Enhanced keyboard search for dropdown [\#577](https://github.com/primefaces/primereact/issues/577) +- Calendar: add 'hideOnRangeSelection' from PrimeVue [\#5970](https://github.com/primefaces/primereact/issues/5970) +- New MeterGroup Component [\#5977](https://github.com/primefaces/primereact/issues/5977) +- New invalid properties [\#6139](https://github.com/primefaces/primereact/issues/6139) -**Fixed bugs:** - -- DataTable sort issue with sortIcon [\#585](https://github.com/primefaces/primereact/issues/585) -- AutoComplete does not update input when value prop changes [\#576](https://github.com/primefaces/primereact/issues/576) -- Typos in Tree.d.ts [\#573](https://github.com/primefaces/primereact/issues/573) +**Enhancements:** -## [2.0.0-beta.7](https://github.com/primefaces/primereact/tree/2.0.0-beta.7) (2018-09-18) - -[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0-beta.6...2.0.0-beta.7) +- Primereact uses document.getElementById(undefined) for appending component styles [\#6079](https://github.com/primefaces/primereact/issues/6079) +- InputNumber: onChange and onValueChange events are not triggered when using keyboard shortcut for "cut" action [\#6047](https://github.com/primefaces/primereact/issues/6047) +- StyleClass: deprecate enterClassName/leaveClassName use enterFromClassName/leaveFromClassName [\#6105](https://github.com/primefaces/primereact/issues/6105) +- Contrast and Secondary Variants for Badge/Tag/Message/Toast [\#5985](https://github.com/primefaces/primereact/issues/5985) +- LastPageLink in Paginator: doesn't give "totalPages" in options [\#5978](https://github.com/primefaces/primereact/issues/5978) +- Toast: onRemove's message changes its data structure [\#5972](https://github.com/primefaces/primereact/issues/5972) +- Password: (accessiblility) cannot access toggle button using keyboard [\#6046](https://github.com/primefaces/primereact/issues/6046) +- DataTable_BodyCell: Duplicate key "aria-label" in object literal [\#6168](https://github.com/primefaces/primereact/issues/6168) +- Splitter: Accessibility updates [\#6039](https://github.com/primefaces/primereact/issues/6039) +- Tree : Accessibility issues [\#5426](https://github.com/primefaces/primereact/issues/5426) +- Primereact Dropdown accessibility. Value isn't being read by VoiceOver screen reader. [\#5836](https://github.com/primefaces/primereact/issues/5836) +- Multiselect: Accessibility issue aria-allowed-role - list-box role not allowed [\#5446](https://github.com/primefaces/primereact/issues/5446) +- ListBox: options not focusable using keyboard [\#3672](https://github.com/primefaces/primereact/issues/3672) +- Dropdown: NVDA failed to read correctly readonly [\#1413](https://github.com/primefaces/primereact/issues/1413) **Fixed bugs:** -- Uncontrolled input text does not support floating labels [\#572](https://github.com/primefaces/primereact/issues/572) -- VirtualScroll is broken [\#560](https://github.com/primefaces/primereact/issues/560) - -## [2.0.0-beta.6](https://github.com/primefaces/primereact/tree/2.0.0-beta.6) (2018-09-17) - -[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0-beta.5...2.0.0-beta.6) - -**Fixed bugs:** - -- Dialog mask has no index at initial display [\#571](https://github.com/primefaces/primereact/issues/571) -- New Tree component: duplicate key error when 2 TreeNodes has same label [\#570](https://github.com/primefaces/primereact/issues/570) - -## [2.0.0-beta.5](https://github.com/primefaces/primereact/tree/2.0.0-beta.5) (2018-09-11) - -[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0-beta.4...2.0.0-beta.5) +- MultiStateCheckbox: unstyled prop doesnt work properly [\#6061](https://github.com/primefaces/primereact/issues/6061) +- Dropdown: unselects option when loses focus [\#6035](https://github.com/primefaces/primereact/issues/6035) +- Image: Preview toolbar buttons only close the preview in unstyled NextJS 14 [\#6037](https://github.com/primefaces/primereact/issues/6037) +- Dropdown component fails to expand the dropdown box after adding the filter and editable properties. [\#6027](https://github.com/primefaces/primereact/issues/6027) +- Tree: Lazy loaded tree crashes when using keyboard navigation (right arrow) to expand [\#6049](https://github.com/primefaces/primereact/issues/6049) +- DomHandler.js: getComputedStyle getPropertyValue should be in hyphen case. [\#6055](https://github.com/primefaces/primereact/issues/6055) +- AutoComplete: Resetting value doesn't work [\#6044](https://github.com/primefaces/primereact/issues/6044) +- Chips: the component doesn't function properly on mobile devices [\#6086](https://github.com/primefaces/primereact/issues/6086) +- MultiSelect: selectedOption undefined on MultiSelectChangeEvent [\#6097](https://github.com/primefaces/primereact/issues/6097) +- Documentation: Problem with Dark Theme in Default column on Components API section [\#6125](https://github.com/primefaces/primereact/issues/6125) +- Datatable: Horizontal scroller with selection/checkbox resets to initial position on clicking row [\#3155](https://github.com/primefaces/primereact/issues/3155) +- Password: the feedback bar does not reset when I clear the field [\#6119](https://github.com/primefaces/primereact/issues/6119) +- Slider: Null event.value within the onSlideEnd [\#6101](https://github.com/primefaces/primereact/issues/6101) +- Typescript: update LocaleOptions interface [\#6050](https://github.com/primefaces/primereact/issues/6050) +- Accordion/PanelMenu: (Tailwind) animation issues [\#5540](https://github.com/primefaces/primereact/issues/5540) +- InputNumber onValueChange ignores Numpad Enter [\#6107](https://github.com/primefaces/primereact/issues/6107) +- Dialog: inconsistency between theming documentation and used classnames (from source code) [\#6024](https://github.com/primefaces/primereact/issues/6024) +- OrganizationChart: Documentation issue in Basic and Template sections. [\#6070](https://github.com/primefaces/primereact/issues/6070) +- TreeTable: Documentation issues [\#6078](https://github.com/primefaces/primereact/issues/6078) +- Sidebar: "Pass Through" documentation corrections [\#6068](https://github.com/primefaces/primereact/issues/6068) +- Speed Dial: TypeError: Cannot read properties of undefined (reading 'visible') [\#6156](https://github.com/primefaces/primereact/issues/6156) +- TextInput: className property is written two times into the class attribute in DOM [\#6160](https://github.com/primefaces/primereact/issues/6160) +- Typo error in the DataTable documentation [\#6147](https://github.com/primefaces/primereact/issues/6147) +- MultiSelect: loading prop in typescript shows error when called [\#6113](https://github.com/primefaces/primereact/issues/6113) +- Documentation: Duplicate useState in HeadlessSidebar Demo Full Code Example [\#6033](https://github.com/primefaces/primereact/issues/6033) +- Tailwind: content does not exist in MenuPassThroughOption [\#6063](https://github.com/primefaces/primereact/issues/6063) +- Tooltip component shows unstyled error [\#6080](https://github.com/primefaces/primereact/issues/6080) +- Calendar: TypeScript Definitions do not match with actual PT props [\#6094](https://github.com/primefaces/primereact/issues/6094) +- Tree_Drag and Drop: validateDropPoint function is throwing error [\#6048](https://github.com/primefaces/primereact/issues/6048) +- Tree: Custom icon assignation is not working [\#6116](https://github.com/primefaces/primereact/issues/6116) +- ConfirmDialog. Error message: "Warning: Invalid value for prop content on div tag. [\#6111](https://github.com/primefaces/primereact/issues/6111) +- Accordion: Wrong prop in TailwindDoc [\#6132](https://github.com/primefaces/primereact/issues/6132) +- AutoComplete: event type in onInput prop is FormEvent-HtmlSpanElement [\#6145](https://github.com/primefaces/primereact/issues/6145) +- Dropdown: editable prop requires optionLabel to be exactly "name" and options object to contain a "name" key [\#6076](https://github.com/primefaces/primereact/issues/6076) +- TreeTable: Accessibility navigation is triggered when editing a cell following 10.3.3 update [\#6018](https://github.com/primefaces/primereact/issues/6018) +- DataTable: Memory leak when data updated continuously [\#5927](https://github.com/primefaces/primereact/issues/5927) +- DataTable: Virtual Scroller position resets upon lazy loaded [\#6015](https://github.com/primefaces/primereact/issues/6015) +- Knobs: Wrong component shown in basic code example for React Hook Form [\#6013](https://github.com/primefaces/primereact/issues/6013) +- Showcase: Problem For DataTable in TS [\#6002](https://github.com/primefaces/primereact/issues/6002) +- useDisplayOrder: clears incorrect [\#6000](https://github.com/primefaces/primereact/issues/6000) +- DataTable: Virtual Scroll error in dev mode [\#6006](https://github.com/primefaces/primereact/issues/6006) +- Datatable + Virtual Scroller: Multiselect passes undefined to onSelectionChange [\#5870](https://github.com/primefaces/primereact/issues/5870) +- Dropdown: editable input get console error when optionValue is not 'name' [\#6004](https://github.com/primefaces/primereact/issues/6004) +- DataTable: rowClassName don't take prevalence over passthrough tailwind [\#5983](https://github.com/primefaces/primereact/issues/5983) +- TabMenu is not updating its style when using unstyled mode and controlled mode [\#5992](https://github.com/primefaces/primereact/issues/5992) +- SelectButton: Inappropriate UI [\#5841](https://github.com/primefaces/primereact/issues/5841) +- Calendar: using yearNavigator cause exception error [\#5973](https://github.com/primefaces/primereact/issues/5973) +- MenubarSub: Each child in a list should have a unique "key" prop. [\#5976](https://github.com/primefaces/primereact/issues/5976) +- Sidebar: Unable to write unit test: groupToDisplayedElements'group'.findLastIndex is not a function [\#5954](https://github.com/primefaces/primereact/issues/5954) +- BlockUI: setting blocked to false has no effect [\#5889](https://github.com/primefaces/primereact/issues/5889) +- Select button accepts children but doesnt render them [\#5888](https://github.com/primefaces/primereact/issues/5888) +- DataTableColReorderEvent.columns has a wrong type [\#5962](https://github.com/primefaces/primereact/issues/5962) + +## [10.5.1](https://github.com/primefaces/primereact/tree/10.5.1) (2024-02-14) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.5.0...10.5.1) + +**New Features:** + +- Icon: BlankIcon [\#5957](https://github.com/primefaces/primereact/issues/5957) + +**Enhancements:** + +- Tree: Missing emptyMessage prop [\#5950](https://github.com/primefaces/primereact/issues/5950) +- MultiSelect: no way to change MultiSelect chips appearence [\#5935](https://github.com/primefaces/primereact/issues/5935) **Fixed bugs:** -- Calendar warning with omission of onChange from InputText [\#569](https://github.com/primefaces/primereact/issues/569) +- metaKeySelection default type is changed as false [\#5956](https://github.com/primefaces/primereact/issues/5956) +- Hydration attribute mismatch on Icons [\#5955](https://github.com/primefaces/primereact/issues/5955) +- Dropdown component is triggering onChange when tabbing over [\#5942](https://github.com/primefaces/primereact/issues/5942) +- Menu component with routes rerenders all the components on every route [\#5941](https://github.com/primefaces/primereact/issues/5941) +- Remove CodeSandbox Demos [\#5946](https://github.com/primefaces/primereact/issues/5946) +- Multi-select / Dropdown will not lose focus [\#5929](https://github.com/primefaces/primereact/issues/5929) +- Add ID to menubar top level prevents focus [\#5930](https://github.com/primefaces/primereact/issues/5930) +- Splitter: local storage sync is not working [\#5916](https://github.com/primefaces/primereact/issues/5916) +- DataTable: onRowEditValidator rowData is old value not newly updated value [\#2424](https://github.com/primefaces/primereact/issues/2424) +- Tooltip Passthrough Options Not Styling [\#5932](https://github.com/primefaces/primereact/issues/5932) +- PanelMenu: "activeItems" is read-only [\#5928](https://github.com/primefaces/primereact/issues/5928) +- SplitButton appendTo="self" placement is wrong [\#5921](https://github.com/primefaces/primereact/issues/5921) +- MultiSelect: Enter | Space Overlay Closes [\#5914](https://github.com/primefaces/primereact/issues/5914) +- Calendar: Panel width too small with default Tailwind [\#5830](https://github.com/primefaces/primereact/issues/5830) +- Password: Hand/Pointer icon not displayed while hovering over the eye icon in password ToggleMask mode [\#5905](https://github.com/primefaces/primereact/issues/5905) -## [2.0.0-beta.4](https://github.com/primefaces/primereact/tree/2.0.0-beta.4) (2018-09-11) +## [10.5.0](https://github.com/primefaces/primereact/tree/10.5.0) (2024-02-06) -[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0-beta.3...2.0.0-beta.4) +[Full Changelog](https://github.com/primefaces/primereact/compare/10.4.0...10.5.0) -**Implemented New Features and Enhancements:** +**Enhancements:** -- Keyboard support for Dialog Icons [\#568](https://github.com/primefaces/primereact/issues/568) -- Pass column props to columnResizeEnd [\#564](https://github.com/primefaces/primereact/issues/564) -- New Tree Component [\#559](https://github.com/primefaces/primereact/issues/559) -- Integrate PrimeFlex Grid System [\#556](https://github.com/primefaces/primereact/issues/556) -- className parameter unsupported by Spinner component [\#548](https://github.com/primefaces/primereact/issues/548) +- TabView/TabPanel: Can't have TabPanels in a JSX fragment [\#5900](https://github.com/primefaces/primereact/issues/5900) +- Input Accessibility [\#5991](https://github.com/primefaces/primereact/issues/5991) **Fixed bugs:** -- Dialog resize fails [\#567](https://github.com/primefaces/primereact/issues/567) -- Dialog resizer css is broken [\#566](https://github.com/primefaces/primereact/issues/566) -- OverlayPanel has no shadow [\#558](https://github.com/primefaces/primereact/issues/558) -- Border radius missing in panel components [\#557](https://github.com/primefaces/primereact/issues/557) -- Spinner does not recognize outside changes for value prop [\#555](https://github.com/primefaces/primereact/issues/555) -- DataTable in IE: TypeError: Object expected [\#554](https://github.com/primefaces/primereact/issues/554) -- DataTable's onRowUnselect causes exception [\#552](https://github.com/primefaces/primereact/issues/552) -- Optimize functionality of filtered dropdowns [\#551](https://github.com/primefaces/primereact/issues/551) -- Dialog blockScroll is undocumented [\#550](https://github.com/primefaces/primereact/issues/550) -- Body text is selected during Dialog drag [\#549](https://github.com/primefaces/primereact/issues/549) -- ui-float-label does not work properly for AutoComplete [\#517](https://github.com/primefaces/primereact/issues/517) -- Float-label does not work properly for InputMask [\#516](https://github.com/primefaces/primereact/issues/516) - -## [2.0.0-beta.3](https://github.com/primefaces/primereact/tree/2.0.0-beta.3) (2018-08-26) - -[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0-beta.2...2.0.0-beta.3) +- Menu: No ripple effect [\#5901](https://github.com/primefaces/primereact/issues/5901) +- FilterMatchMode.CUSTOM & filterFunction broken + custom filter type errors [\#3325](https://github.com/primefaces/primereact/issues/3325) +- Calendar: Panel width too small with default Tailwind [\#5830](https://github.com/primefaces/primereact/issues/5830) +- Menu: separator style missing in default Tailwind [\#5890](https://github.com/primefaces/primereact/issues/5890) +- Paginator JumpToPageInput not working [\#5893](https://github.com/primefaces/primereact/issues/5893) +- Primereact Splitter resize [\#5892](https://github.com/primefaces/primereact/issues/5892) +- Password component hide/show button shouldnt be wrapped with [\#5880](https://github.com/primefaces/primereact/issues/5880) +- Menu: Unhandled Runtime Error with Nextjs and Tailwind passthrough [\#5885](https://github.com/primefaces/primereact/issues/5885) +- Dock: Sample code missing DockDemo.css [\#5882](https://github.com/primefaces/primereact/issues/5882) +- Prevent multiselect/dropdown box from closing on page scroll [\#5872](https://github.com/primefaces/primereact/issues/5872) +- Calendar : enabledDates is not evaluated with disabledDays [\#5863](https://github.com/primefaces/primereact/issues/5863) -## [2.0.0-beta.2](https://github.com/primefaces/primereact/tree/2.0.0-beta.2) (2018-08-25) +## [10.4.0](https://github.com/primefaces/primereact/tree/10.4.0) (2024-02-01) -[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0-beta.1...2.0.0-beta.2) +[Full Changelog](https://github.com/primefaces/primereact/compare/10.3.3...10.4.0) -**Implemented New Features and Enhancements:** +**Enhancements:** -- Reimplement Tooltip [\#547](https://github.com/primefaces/primereact/issues/547) -- Keyboard support for toggle button [\#545](https://github.com/primefaces/primereact/issues/545) -- Remove font-awesome from Demos [\#544](https://github.com/primefaces/primereact/issues/544) -- Remove DataGrid and DataList [\#543](https://github.com/primefaces/primereact/issues/543) -- New styling engine [\#539](https://github.com/primefaces/primereact/issues/539) -- Property appendTo in menus [\#535](https://github.com/primefaces/primereact/issues/535) -- Deprecate Free Themes in favor of Nova Free Theme Family [\#527](https://github.com/primefaces/primereact/issues/527) +- Splitter: missing/incorrect accessibility features [\#5849](https://github.com/primefaces/primereact/issues/5849) +- New Component | FocusTrap [\#5829](https://github.com/primefaces/primereact/issues/5829) +- Enhancement: DataTable accessibility [\#5839](https://github.com/primefaces/primereact/issues/5839) **Fixed bugs:** -- Tooltip does not remove event listeners [\#542](https://github.com/primefaces/primereact/issues/542) -- Accordion does not work with multiple controlled tabs [\#540](https://github.com/primefaces/primereact/issues/540) -- Menubar import is not working [\#531](https://github.com/primefaces/primereact/issues/531) -- ColumnGroup can't be imported [\#530](https://github.com/primefaces/primereact/issues/530) -- InputTextProps not type correctly [\#529](https://github.com/primefaces/primereact/issues/529) -- originalEvent in TabView has swapped typing/variable name in TabView.d.ts [\#528](https://github.com/primefaces/primereact/issues/528) -- Calendar manual input doesn't work with time [\#526](https://github.com/primefaces/primereact/issues/526) -- Breadcrumb component throws warning [\#522](https://github.com/primefaces/primereact/issues/522) - -## [2.0.0-beta.1](https://github.com/primefaces/primereact/tree/2.0.0-beta.1) (2018-07-19) - -[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0-alpha.1...2.0.0-beta.1) - -**Implemented New Features and Enhancements:** - -- Improve input overlay animations [\#514](https://github.com/primefaces/primereact/issues/514) -- Reimplement InputSwitch UI [\#513](https://github.com/primefaces/primereact/issues/513) -- Common Props for AutoComplete and Spinner [\#512](https://github.com/primefaces/primereact/issues/512) -- Reimplement Calendar [\#504](https://github.com/primefaces/primereact/issues/504) -- Update Schedule component to remove jQuery [\#476](https://github.com/primefaces/primereact/issues/476) +- Divider (Tailwind): className not used [\#5862](https://github.com/primefaces/primereact/issues/5862) +- Calendar : enabledDates is not evaluated with disabledDays [\#5863](https://github.com/primefaces/primereact/issues/5863) +- Tree : Need "no results found" message if no matches found in the filter [\#5813](https://github.com/primefaces/primereact/issues/5813) +- Showcase: TypeScript demos are failing in StackBlitz/CodeSandbox [\#5800](https://github.com/primefaces/primereact/issues/5800) +- Dropdown: items focused when pressing letters in contexts where they shouldn't [\#5855](https://github.com/primefaces/primereact/issues/5855) +- Unnecessary Javascript-Warning in Galleria onShow and onHide [\#5854](https://github.com/primefaces/primereact/issues/5854) +- Calendar blur not working [\#5850](https://github.com/primefaces/primereact/issues/5850) +- Dropdown: Missing property loading in DropdownProps Interface [\#5847](https://github.com/primefaces/primereact/issues/5847) +- Carousel: Visual bugs when loading carousel with responsiveCarouselOptions [\#5166](https://github.com/primefaces/primereact/issues/5166) +- Sidebar with content prop gives console warning [\#5834](https://github.com/primefaces/primereact/issues/5834) +- Menubar: Does not respect the MenuItem id property [\#5827](https://github.com/primefaces/primereact/issues/5827) +- Chips: Separator by new line doesn't work by pasting value [\#5824](https://github.com/primefaces/primereact/issues/5824) +- Editor: Editor missing unordered list in the header [\#5818](https://github.com/primefaces/primereact/issues/5818) +- Threshold not working useIntersectionObserver hook [\#5809](https://github.com/primefaces/primereact/issues/5809) +- Accordion (Tailwind): Cannot read properties of undefined (reading 'disabled') [\#5804](https://github.com/primefaces/primereact/issues/5804) +- Datatable Column Filter: Clear Button will not show if filter menu button is hidden [\#5802](https://github.com/primefaces/primereact/issues/5802) +- className is not passes to TieredMenu items [\#5868](https://github.com/primefaces/primereact/issues/5868) + +## [10.3.3](https://github.com/primefaces/primereact/tree/10.3.3) (2024-01-18) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.3.2...10.3.3) + +**Enhancements:** + +- Accessibility | Data Components (Part 1) [\#5675](https://github.com/primefaces/primereact/issues/5675) +- Accessibility | Input Components (Part 1) [\#5720](https://github.com/primefaces/primereact/issues/5720) +- Calendar: timeOnly Today button should be Now [\#5722](https://github.com/primefaces/primereact/issues/5722) +- Remove primeflex dependency from DataView [\#5798](https://github.com/primefaces/primereact/issues/5798) **Fixed bugs:** -- Slider shorthand import fails [\#511](https://github.com/primefaces/primereact/issues/511) -- Error importing Column component [\#509](https://github.com/primefaces/primereact/issues/509) -- Typescript definition for Column's editor property [\#505](https://github.com/primefaces/primereact/issues/505) -- Path to primereact/components/common/common.css not correct case [\#500](https://github.com/primefaces/primereact/issues/500) -- InputText class ui-state-filled fails [\#499](https://github.com/primefaces/primereact/issues/499) -- Calendar: popup translation not updating [\#478](https://github.com/primefaces/primereact/issues/478) -- InputSwitch doesn't update programmatically [\#461](https://github.com/primefaces/primereact/issues/461) -- preventDefault\(\) and stopPropagation\(\) appear to be missing from drag and drop of DataTable - Reorder and causes redirect to 'www.b.com' [\#460](https://github.com/primefaces/primereact/issues/460) - -## [2.0.0-alpha.1](https://github.com/primefaces/primereact/tree/2.0.0-alpha.1) (2018-07-06) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.6.2...2.0.0-alpha.1) - -**Implemented New Features and Enhancements:** - -- Review/Enhance all documentation [\#497](https://github.com/primefaces/primereact/issues/497) -- Review all type definition files [\#496](https://github.com/primefaces/primereact/issues/496) -- Reimplement Chips [\#494](https://github.com/primefaces/primereact/issues/494) -- Chips should not keep value in state [\#493](https://github.com/primefaces/primereact/issues/493) -- Controlled/Uncontrolled behavior support for DataTable Features [\#492](https://github.com/primefaces/primereact/issues/492) -- Reimplement DataTable Lazy Loading [\#491](https://github.com/primefaces/primereact/issues/491) -- onClick for Fieldset [\#487](https://github.com/primefaces/primereact/issues/487) -- Refactor Sidebar [\#486](https://github.com/primefaces/primereact/issues/486) -- Horizontal scroll support to ScrollPanel [\#485](https://github.com/primefaces/primereact/issues/485) -- Reimplement DataView [\#484](https://github.com/primefaces/primereact/issues/484) -- Add name prop to Chips [\#483](https://github.com/primefaces/primereact/issues/483) -- Controlled/Uncontrolled modes for Toggleable Fieldset [\#480](https://github.com/primefaces/primereact/issues/480) -- Controlled/Uncontrolled modes for Toggleable Panel [\#479](https://github.com/primefaces/primereact/issues/479) -- Controlled/Uncontrolled modes for TabView [\#475](https://github.com/primefaces/primereact/issues/475) -- Controlled/Uncontrolled modes for Accordion [\#474](https://github.com/primefaces/primereact/issues/474) -- New Component: Inplace [\#471](https://github.com/primefaces/primereact/issues/471) -- Shorter Imports [\#470](https://github.com/primefaces/primereact/issues/470) -- Rewrite SlideMenu [\#469](https://github.com/primefaces/primereact/issues/469) -- Rewrite PanelMenu [\#468](https://github.com/primefaces/primereact/issues/468) -- Rewrite MegaMenu [\#467](https://github.com/primefaces/primereact/issues/467) -- Rewrite ContextMenu [\#466](https://github.com/primefaces/primereact/issues/466) -- Rewrite MenuBar [\#465](https://github.com/primefaces/primereact/issues/465) -- Rewrite TieredMenu [\#464](https://github.com/primefaces/primereact/issues/464) -- Rewrite Breadcrumb [\#463](https://github.com/primefaces/primereact/issues/463) -- Rewrite Steps [\#462](https://github.com/primefaces/primereact/issues/462) -- Controlled/Uncontrolled modes for TabMenu [\#459](https://github.com/primefaces/primereact/issues/459) -- Rewrite Menu [\#458](https://github.com/primefaces/primereact/issues/458) -- Maximizable Dialog [\#453](https://github.com/primefaces/primereact/issues/453) -- Dialog should not derive visible state from props [\#452](https://github.com/primefaces/primereact/issues/452) -- Add a 'closable' or 'dismissable' property to Sidebar for 'click outside' control. [\#377](https://github.com/primefaces/primereact/issues/377) - -**Fixed bugs:** - -- InputMask can not read property 'bind' of undefined [\#490](https://github.com/primefaces/primereact/issues/490) -- Dropdown with autoFocus prop throws a JS error [\#489](https://github.com/primefaces/primereact/issues/489) -- InputMask fail when unmask is true [\#488](https://github.com/primefaces/primereact/issues/488) -- Toggleable Panel Icon Misaligned [\#481](https://github.com/primefaces/primereact/issues/481) -- Calendar dateFormat day name or month name gives error [\#455](https://github.com/primefaces/primereact/issues/455) -- wrong typings for itemTemplate property [\#454](https://github.com/primefaces/primereact/issues/454) -- optionLabel prop is missing in MultiSelect [\#450](https://github.com/primefaces/primereact/issues/450) -- Unable to change rows per page \(Paginator/DataTable\) [\#449](https://github.com/primefaces/primereact/issues/449) - -## [1.6.2](https://github.com/primefaces/primereact/tree/1.6.2) (2018-06-19) +- Menu items are not rendered when the page is opened with a router [\#5794](https://github.com/primefaces/primereact/issues/5794) -[Full Changelog](https://github.com/primefaces/primereact/compare/1.6.1...1.6.2) +## [10.3.2](https://github.com/primefaces/primereact/tree/10.3.2) (2024-01-17) -**Implemented New Features and Enhancements:** - -- Refactor Rating to remove usage of state [\#447](https://github.com/primefaces/primereact/issues/447) +[Full Changelog](https://github.com/primefaces/primereact/compare/10.3.1...10.3.2) **Fixed bugs:** -- Accordion onTabOpen-onTabClose does not trigger correctly [\#448](https://github.com/primefaces/primereact/issues/448) - -## [1.6.1](https://github.com/primefaces/primereact/tree/1.6.1) (2018-06-18) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.6.0...1.6.1) - -**Implemented New Features and Enhancements:** - -- Migrate to PrimeIcons [\#446](https://github.com/primefaces/primereact/issues/446) +- FileUpload component, file content for non-image file types [\#5786](https://github.com/primefaces/primereact/issues/5786) +- Mega Menu is not working on mobile devices [\#5788](https://github.com/primefaces/primereact/issues/5788) +- Megamenu demo pages should sync with primevue megamenu demos [\#5791](https://github.com/primefaces/primereact/issues/5791) +- Panel Menu opens empty item [\#5789](https://github.com/primefaces/primereact/issues/5789) +- Menubar demo classname typo [\#5790](https://github.com/primefaces/primereact/issues/5790) +- Float Label demo is broken in mobile mode [\#5781](https://github.com/primefaces/primereact/issues/5781) +- Megamenu demo pages should sync with primevue megamenu demos [\#5791](https://github.com/primefaces/primereact/issues/5791) +- PanelMenu:Items not displaying correctly [\#5777](https://github.com/primefaces/primereact/issues/5777) +- ConfirmDialog:confirmDialog method in unstyled mode, the pop-up window style not apply [\#5656](https://github.com/primefaces/primereact/issues/5656) +- Image: image zoomed out when opening second time [\#5771](https://github.com/primefaces/primereact/issues/5771) +- Global Escape Key Listener Already Exists Error When Opening Multiple Dialogs [\#5767](https://github.com/primefaces/primereact/issues/5767) +- Calendar: Month does not change when the onViewDateChange property is used [\#5754](https://github.com/primefaces/primereact/issues/5754) +- TieredMenu and Megamenu: not rendering content [\#5766](https://github.com/primefaces/primereact/issues/5766) +- InputMask: cannot test component with @testing-library/user-event >= 14.0.0 [\#5747](https://github.com/primefaces/primereact/issues/5747) +- Locale: Clarify configuration [\#5760](https://github.com/primefaces/primereact/issues/5760) +- Accordion: Error reading disabled [\#5757](https://github.com/primefaces/primereact/issues/5757) +- DataTable: cell editing can't be cancelled when invalid [\#5750](https://github.com/primefaces/primereact/issues/5750) +- Panel: Passthrough not working for header [\#5570](https://github.com/primefaces/primereact/issues/5570) +- Calendar input pt [\#5564](https://github.com/primefaces/primereact/issues/5564) +- ConfirmDialog pt prop style doesn't work with tailwind classes [\#5144](https://github.com/primefaces/primereact/issues/5144) +- InputNumber: format error after the decimal point when Locale set de-DE [\#5745](https://github.com/primefaces/primereact/issues/5745) +- TieredMenu: Reference error - create Submenu [\#5751](https://github.com/primefaces/primereact/issues/5751) +- PrimeReactPTOptions: typo for multi state checkbox [\#5752](https://github.com/primefaces/primereact/issues/5752) +- DataTable: Cannot update a component while rendering a different component warning [\#5556](https://github.com/primefaces/primereact/issues/5556) +- TreeTable: column align header is not working [\#5315](https://github.com/primefaces/primereact/issues/5315) +- TabView: the right scrollable is always true even if there is only one Tab [\#5743](https://github.com/primefaces/primereact/issues/5743) +- Menu: click on menu item with url does nothing [\#5785](https://github.com/primefaces/primereact/issues/5785) +- OrderList: Behavior when using spread syntax in onChange [\#4089](https://github.com/primefaces/primereact/issues/4089) +- PickList: Behavior when using spread syntax in onChange [\#5739](https://github.com/primefaces/primereact/issues/5739) +- InputNumber: Pos1/End places caret before/after prefix/postfix [\#5730](https://github.com/primefaces/primereact/issues/5730) +- Documentation (Sidebar): fullScreen not visible by default [\#5741](https://github.com/primefaces/primereact/issues/5741) +- DataTable: ResizeableColumns doesnt work with unstyled [\#5706](https://github.com/primefaces/primereact/issues/5706) +- Dropdown: After selecting an option, clearing the value using close icon should clear the filter input [\#5735](https://github.com/primefaces/primereact/issues/5735) +- InputNumber: 0 Decimal Entry Issue using Currency Mode [\#5728](https://github.com/primefaces/primereact/issues/5728) +- Calendar - Pasting a datetime value with AM in it results in PM time instead [\#5719](https://github.com/primefaces/primereact/issues/5719) +- Form Components: Convert class selector to data selector [\#5686](https://github.com/primefaces/primereact/issues/5686) +- TieredMenu appears broken? - "ReferenceError: item is not defined" even on your own demo page [\#5724](https://github.com/primefaces/primereact/issues/5724) + +## [10.3.1](https://github.com/primefaces/primereact/tree/10.3.1) (2024-01-10) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.3.0...10.3.1) **Fixed bugs:** -- DataTable props updating issue [\#443](https://github.com/primefaces/primereact/issues/443) -- OrganizationChart is not working with React 16.4+ [\#441](https://github.com/primefaces/primereact/issues/441) -- Sortable TreeTable is not working with React 16.4+ [\#440](https://github.com/primefaces/primereact/issues/440) -- Calendar Toggle AM/PM is broken [\#438](https://github.com/primefaces/primereact/issues/438) -- Keyboard navigation is not working on DataTable [\#425](https://github.com/primefaces/primereact/issues/425) - -## [1.6.0](https://github.com/primefaces/primereact/tree/1.6.0) (2018-06-07) +- Port missing fixes [\#5707](https://github.com/primefaces/primereact/issues/5707) +- Image: ReferenceError: rotate is not defined image.esm.js (948:0) [\#5704](https://github.com/primefaces/primereact/issues/5704) +- 'content' property now required for several components [\#5701](https://github.com/primefaces/primereact/issues/5701) +- MegaMenu: Menu Items not showing without StrictMode (production) only after a stateupdate [\#5699](https://github.com/primefaces/primereact/issues/5699) +- Confirm Dialog: Demo opening dialog 3 times [\#5697](https://github.com/primefaces/primereact/issues/5697) +- Primereact in the Shadow DOM has problems with the Dropdown component style [\#5246](https://github.com/primefaces/primereact/issues/5246) +- TypeScript: 10.3.0 Components complaining content is required [\#5692](https://github.com/primefaces/primereact/issues/5692) -[Full Changelog](https://github.com/primefaces/primereact/compare/1.6.0-rc.1...1.6.0) +## [10.3.0](https://github.com/primefaces/primereact/tree/10.3.0) (2024-01-05) -**Implemented New Features and Enhancements:** +[Full Changelog](https://github.com/primefaces/primereact/compare/10.2.1...10.3.0) -- Improve sort property on DataView [\#420](https://github.com/primefaces/primereact/issues/420) - -**Fixed bugs:** +**New Features:** -- slotChar issue on InputMask [\#439](https://github.com/primefaces/primereact/issues/439) -- Missing type definition for DropDownProps [\#436](https://github.com/primefaces/primereact/issues/436) -- Sidebar throws a JS exception on componentWillUnmount hook [\#435](https://github.com/primefaces/primereact/issues/435) -- Can't set csv export filename in DataTable.js using Internet Explorer, it returns undefined.csv [\#433](https://github.com/primefaces/primereact/issues/433) -- Missing optionsLabel property in interface ListBoxProps in ListBox.d.ts [\#431](https://github.com/primefaces/primereact/issues/431) -- Width & Height props of Charts are not working [\#430](https://github.com/primefaces/primereact/issues/430) -- After a sub node is selected on Tree, its parent node is closing [\#429](https://github.com/primefaces/primereact/issues/429) -- Rating not being enabled on change from disabled=true to disabled=false [\#428](https://github.com/primefaces/primereact/issues/428) -- The 'selection' property is not working on Tree [\#426](https://github.com/primefaces/primereact/issues/426) -- Datatable missing definitions [\#423](https://github.com/primefaces/primereact/issues/423) -- Improve sort property on DataTable [\#421](https://github.com/primefaces/primereact/issues/421) -- Remove old overlay events on GMap after map is updated [\#419](https://github.com/primefaces/primereact/issues/419) -- Growl types Failed to compile. [\#414](https://github.com/primefaces/primereact/issues/414) -- InputMask is not updated if value property is changed [\#413](https://github.com/primefaces/primereact/issues/413) -- ColorPicker is not updated if value property is changed [\#412](https://github.com/primefaces/primereact/issues/412) -- Editable Dropdown content does not reflect input value [\#408](https://github.com/primefaces/primereact/issues/408) +- ConfirmDialog/ConfirmPopup: Add defaultFocus option like PrimeVue [\#4051](https://github.com/primefaces/primereact/issues/4051) -## [1.6.0-rc.1](https://github.com/primefaces/primereact/tree/1.6.0-rc.1) (2018-06-04) +**Enhancements:** -[Full Changelog](https://github.com/primefaces/primereact/compare/1.5.3...1.6.0-rc.1) - -## [1.5.3](https://github.com/primefaces/primereact/tree/1.5.3) (2018-05-22) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.5.2...1.5.3) - -**Fixed bugs:** - -- onRowReorder missing from DataTable type definition [\#411](https://github.com/primefaces/primereact/issues/411) -- Duplicate identifier 'number': DataScroller.d.ts [\#410](https://github.com/primefaces/primereact/issues/410) - -## [1.5.2](https://github.com/primefaces/primereact/tree/1.5.2) (2018-05-11) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.5.1...1.5.2) - -**Implemented New Features and Enhancements:** - -- Add metaKeySelection property to PickList [\#404](https://github.com/primefaces/primereact/issues/404) -- Add sorting feature to TreeTable [\#400](https://github.com/primefaces/primereact/issues/400) -- New mode to keyfilter to validate whole value [\#391](https://github.com/primefaces/primereact/issues/391) - -**Fixed bugs:** - -- BodyCell className using headerClassName prop [\#407](https://github.com/primefaces/primereact/issues/407) -- Typings missing for colorPicker component [\#405](https://github.com/primefaces/primereact/issues/405) -- Radio Button default selection throws warnings [\#403](https://github.com/primefaces/primereact/issues/403) -- Container element has wrong width on Scrollable Datatable [\#402](https://github.com/primefaces/primereact/issues/402) -- Warning when using Checkbox [\#399](https://github.com/primefaces/primereact/issues/399) -- itemTemplate is declared as void [\#397](https://github.com/primefaces/primereact/issues/397) -- FileUpload does not accept multiple files dropped or selected [\#395](https://github.com/primefaces/primereact/issues/395) -- TabView activeIndex setting programmatically will not work the second time after manually choosing another tab [\#393](https://github.com/primefaces/primereact/issues/393) -- ReadOnly attribute is not passed to the checkbox input [\#392](https://github.com/primefaces/primereact/issues/392) -- onColReorder return columns: undefined [\#389](https://github.com/primefaces/primereact/issues/389) -- onClick event doesn't work on Messages component [\#387](https://github.com/primefaces/primereact/issues/387) -- Typings missing for messages component [\#386](https://github.com/primefaces/primereact/issues/386) -- InputMask runtime error [\#385](https://github.com/primefaces/primereact/issues/385) -- Slider component not always provide the originalEvent [\#384](https://github.com/primefaces/primereact/issues/384) -- Org chart does not update when value property changes [\#382](https://github.com/primefaces/primereact/issues/382) -- Bug in DataTable selection and Column [\#381](https://github.com/primefaces/primereact/issues/381) -- Calendar min date does not work after primereact@1.3.0 [\#379](https://github.com/primefaces/primereact/issues/379) - -## [1.5.1](https://github.com/primefaces/primereact/tree/1.5.1) (2018-04-10) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.5.0...1.5.1) - -**Fixed bugs:** - -- placeholder not working on Chips component [\#374](https://github.com/primefaces/primereact/issues/374) -- Tree doesn't update on external change [\#372](https://github.com/primefaces/primereact/issues/372) -- Slider component does not support real values/step [\#371](https://github.com/primefaces/primereact/issues/371) -- AutoResize for InputTextarea doesn't work without cols property [\#370](https://github.com/primefaces/primereact/issues/370) -- Bug: incorrect highlight of dates in range Calendar [\#367](https://github.com/primefaces/primereact/issues/367) -- TypeDefinitions for Message Control missing [\#366](https://github.com/primefaces/primereact/issues/366) -- Dropdown autowidth is not working when it used inside the TabView [\#362](https://github.com/primefaces/primereact/issues/362) -- Calendar as cell editor is not closed after selecting value [\#358](https://github.com/primefaces/primereact/issues/358) -- Cannot format selection for single-value AutoComplete field [\#353](https://github.com/primefaces/primereact/issues/353) -- Bug: Type definition for the Column component [\#350](https://github.com/primefaces/primereact/issues/350) -- DataTable export doesn't respect filters and sorting [\#349](https://github.com/primefaces/primereact/issues/349) -- sortFunction doesn't work for DataTable [\#348](https://github.com/primefaces/primereact/issues/348) - -## [1.5.0](https://github.com/primefaces/primereact/tree/1.5.0) (2018-03-15) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.4.1...1.5.0) - -**Implemented New Features and Enhancements:** - -- Clear icon to Dropdown [\#345](https://github.com/primefaces/primereact/issues/345) -- Add event onRowDoubleClick for DataTable [\#341](https://github.com/primefaces/primereact/issues/341) -- Add minX and minY to Dialog [\#339](https://github.com/primefaces/primereact/issues/339) -- DragDrop based reorder for Table [\#337](https://github.com/primefaces/primereact/issues/337) -- DataView Component [\#334](https://github.com/primefaces/primereact/issues/334) -- InputMask required [\#321](https://github.com/primefaces/primereact/issues/321) -- Improve dialog positioning with Dynamic content [\#320](https://github.com/primefaces/primereact/issues/320) -- Custom filter for Column of the DataTable [\#312](https://github.com/primefaces/primereact/issues/312) - -**Fixed bugs:** - -- Datatable column reorder may not always work correctly [\#338](https://github.com/primefaces/primereact/issues/338) -- Ultima theme 1.4.2: icon buttons are cutted [\#317](https://github.com/primefaces/primereact/issues/317) -- Autocomplete input label is undefined [\#347](https://github.com/primefaces/primereact/issues/347) -- DataTable TypeScript definition error [\#346](https://github.com/primefaces/primereact/issues/346) -- Default filters not rendered at DataTable [\#344](https://github.com/primefaces/primereact/issues/344) -- Dialog selects text during dragging or resizing [\#343](https://github.com/primefaces/primereact/issues/343) -- TabView activeIndex ignored [\#342](https://github.com/primefaces/primereact/issues/342) -- Dialog dragging may stuck [\#336](https://github.com/primefaces/primereact/issues/336) -- ToolTip crashes in IE 11 [\#332](https://github.com/primefaces/primereact/issues/332) -- Pagination dropdown resets for lazy loading dataTable [\#331](https://github.com/primefaces/primereact/issues/331) -- DataTable onLazyLoad not called for advanced filter options [\#330](https://github.com/primefaces/primereact/issues/330) -- Calendar : Enable/Highlight the date of adjacent month when selectOtherMonths is true [\#329](https://github.com/primefaces/primereact/issues/329) -- Resizable DataTable rowsCountSelector not visible [\#318](https://github.com/primefaces/primereact/issues/318) -- Dropdown list inside Dialog is only partially visible and creates scroll on dialog [\#316](https://github.com/primefaces/primereact/issues/316) -- Cannot enter Values into Spinner [\#314](https://github.com/primefaces/primereact/issues/314) - -## [1.4.1](https://github.com/primefaces/primereact/tree/1.4.1) (2018-02-14) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.4.0...1.4.1) - -**Implemented New Features and Enhancements:** - -- Filtering for OrderList [\#311](https://github.com/primefaces/primereact/issues/311) -- autoLayout mode for DataTable [\#310](https://github.com/primefaces/primereact/issues/310) -- Add baseZIndex to Dialog [\#309](https://github.com/primefaces/primereact/issues/309) -- Refactor OrderList [\#308](https://github.com/primefaces/primereact/issues/308) -- Disabled/readonly prop for Checkbox and RadioButton [\#302](https://github.com/primefaces/primereact/issues/302) -- Checkbox and Radio should mark checked/onChange props as required [\#287](https://github.com/primefaces/primereact/issues/287) -- DataTable pageLinkSize [\#276](https://github.com/primefaces/primereact/issues/276) - -**Fixed bugs:** - -- Dialog is displayed below topbar in showcase [\#284](https://github.com/primefaces/primereact/issues/284) -- ResizableColumns fail inside Dialog [\#281](https://github.com/primefaces/primereact/issues/281) -- File Upload Dialog opens only once if set to Auto [\#306](https://github.com/primefaces/primereact/issues/306) -- rowsPerPage missing from DataTable d.ts file [\#304](https://github.com/primefaces/primereact/issues/304) -- Dropdown does not show selected value when editable is true [\#301](https://github.com/primefaces/primereact/issues/301) -- Calendar d.ts marks all props as required [\#296](https://github.com/primefaces/primereact/issues/296) -- Dialog: closeOnEscape doesn't work [\#295](https://github.com/primefaces/primereact/issues/295) -- Calendar yearNavigator fails [\#294](https://github.com/primefaces/primereact/issues/294) -- Spinner shows weird Values [\#293](https://github.com/primefaces/primereact/issues/293) -- OrderList error [\#291](https://github.com/primefaces/primereact/issues/291) -- Duplicate identifier 'any': PickList.d.ts [\#290](https://github.com/primefaces/primereact/issues/290) -- In Lazy load mode selection highlight doesn't work properly [\#283](https://github.com/primefaces/primereact/issues/283) -- Type Definitions incomplete for FileUpload [\#277](https://github.com/primefaces/primereact/issues/277) -- Growl does not clear timeout on unmount [\#272](https://github.com/primefaces/primereact/issues/272) -- Calender select day in adjacent month [\#266](https://github.com/primefaces/primereact/issues/266) - -## [1.4.0](https://github.com/primefaces/primereact/tree/1.4.0) (2018-01-04) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.4.0-rc.2...1.4.0) - -**Implemented New Features and Enhancements:** - -- Improve DataTable.d.ts RowExpansion config [\#269](https://github.com/primefaces/primereact/issues/269) -- KeyFilter attribute [\#265](https://github.com/primefaces/primereact/issues/265) -- Card Component [\#264](https://github.com/primefaces/primereact/issues/264) -- Migrate to react-transition-group [\#259](https://github.com/primefaces/primereact/issues/259) -- Calendar should consider props.disabled in shouldComponentUpdate [\#258](https://github.com/primefaces/primereact/issues/258) +- Dialog: DialogProps missing footerClassName [\#5661](https://github.com/primefaces/primereact/issues/5661) +- DataTable: disable the rowEditor prop dynamically, as is done in rowExpansion [\#5640](https://github.com/primefaces/primereact/issues/5640) +- TreeSelect: TreeSelect component is not supporting tooltips and is an issue in multiple select mode. [\#5613](https://github.com/primefaces/primereact/issues/5613) +- Calendar:about disabled logic [\#5581](https://github.com/primefaces/primereact/issues/5581) +- TreeTable: Incorrect typing for sortable prop [\#5591](https://github.com/primefaces/primereact/issues/5591) +- InputNumber: Support roundingMode for the InputNumber [\#5528](https://github.com/primefaces/primereact/issues/5528) +- Chip: onRemove callback function doesn't return the removed value [\#5530](https://github.com/primefaces/primereact/issues/5530) +- confirmPopup: Remove deprecated code imports [\#5520](https://github.com/primefaces/primereact/issues/5520) +- confirmPopup: Remove deprecated code imports [\#5520](https://github.com/primefaces/primereact/issues/5520) +- Accessibility | Messages [\#5428](https://github.com/primefaces/primereact/issues/5428) +- Accessibility | Media Section [\#5422](https://github.com/primefaces/primereact/issues/5422) +- Headless Mode Update + - Dialog, ConfirmDialog, ConfirmPopup, Sidebar, Toast +- Showcase Updates **Fixed bugs:** -- Spinner does not accept decimal or thousand separator as input [\#270](https://github.com/primefaces/primereact/issues/270) -- Calendar does not rerender when we change "disabled" prop [\#263](https://github.com/primefaces/primereact/issues/263) -- Calendar may reset date on update [\#262](https://github.com/primefaces/primereact/issues/262) -- ExportCSV ignores headers in DataTable [\#261](https://github.com/primefaces/primereact/issues/261) -- Spinner binds invalid event [\#260](https://github.com/primefaces/primereact/issues/260) -- Autocomplete dropdown no longer working [\#254](https://github.com/primefaces/primereact/issues/254) - -## [1.4.0-rc.2](https://github.com/primefaces/primereact/tree/1.4.0-rc.2) (2018-01-04) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.4.0-rc.1...1.4.0-rc.2) - -## [1.4.0-rc.1](https://github.com/primefaces/primereact/tree/1.4.0-rc.1) (2018-01-04) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.3.1...1.4.0-rc.1) - -## [1.3.1](https://github.com/primefaces/primereact/tree/1.3.1) (2017-12-22) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.3.0...1.3.1) - -## [1.3.0](https://github.com/primefaces/primereact/tree/1.3.0) (2017-12-13) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.3.0-rc.1...1.3.0) - -**Implemented New Features and Enhancements:** - -- New Component: ScrollPanel [\#251](https://github.com/primefaces/primereact/issues/251) -- Keyboard accessibility for Panel components [\#250](https://github.com/primefaces/primereact/issues/250) -- Refactor FileUpload [\#247](https://github.com/primefaces/primereact/issues/247) - -**Fixed bugs:** - -- Missing dependency in primereact npm artifcat: 'react-addons-css-transition-group' [\#242](https://github.com/primefaces/primereact/issues/242) -- AutoComplete dosn't accept spaces [\#249](https://github.com/primefaces/primereact/issues/249) -- Calendar title month and year has no margin [\#248](https://github.com/primefaces/primereact/issues/248) -- Toggleable fieldset resets if parent is updated [\#246](https://github.com/primefaces/primereact/issues/246) -- Accordion resets if parent is updated [\#245](https://github.com/primefaces/primereact/issues/245) -- Toggleable panel resets if parent is updated [\#244](https://github.com/primefaces/primereact/issues/244) -- Growl.d.ts allow GrowlMessage.detail to be Element [\#241](https://github.com/primefaces/primereact/issues/241) -- Password's 'inputProps' missing in d.ts file [\#240](https://github.com/primefaces/primereact/issues/240) -- feedback={false} not working for Password [\#239](https://github.com/primefaces/primereact/issues/239) -- AutoCompleteProps: Missing data object in itemTemplate [\#237](https://github.com/primefaces/primereact/issues/237) -- Missing param name in d.ts-files [\#236](https://github.com/primefaces/primereact/issues/236) -- Spinner d.ts missing onChange [\#235](https://github.com/primefaces/primereact/issues/235) - -## [1.3.0-rc.1](https://github.com/primefaces/primereact/tree/1.3.0-rc.1) (2017-12-07) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.2.0...1.3.0-rc.1) - -**Implemented New Features and Enhancements:** - -- Add style/classname props to Radio and Checkbox [\#233](https://github.com/primefaces/primereact/issues/233) -- New properties to TriStateCheckbox [\#232](https://github.com/primefaces/primereact/issues/232) -- Keyboard Accessibility for TriStateCheckbox [\#230](https://github.com/primefaces/primereact/issues/230) -- Keyboard accessibility for Spinner [\#229](https://github.com/primefaces/primereact/issues/229) -- Refactor Spinner [\#228](https://github.com/primefaces/primereact/issues/228) -- Animation for FieldSet [\#223](https://github.com/primefaces/primereact/issues/223) -- Refactor Calendar [\#222](https://github.com/primefaces/primereact/issues/222) -- Resize support for Scrollable Table [\#219](https://github.com/primefaces/primereact/issues/219) -- Password does not pass all input parameters [\#216](https://github.com/primefaces/primereact/issues/216) -- Reimplement ColorPicker [\#214](https://github.com/primefaces/primereact/issues/214) -- Rewrite Button CSS [\#213](https://github.com/primefaces/primereact/issues/213) -- appendTo for MultiSelect [\#212](https://github.com/primefaces/primereact/issues/212) -- Use Portal API in Dropdown appendTo [\#211](https://github.com/primefaces/primereact/issues/211) -- Use Portal API in AutoComplete appendTo [\#210](https://github.com/primefaces/primereact/issues/210) -- Use Portal API in Overlay appendTo [\#209](https://github.com/primefaces/primereact/issues/209) -- Add inputId to Checkbox and Radio [\#208](https://github.com/primefaces/primereact/issues/208) -- Keyboard accessibility for Checkbox and RadioButton [\#207](https://github.com/primefaces/primereact/issues/207) -- Floating Labels for Inputs [\#205](https://github.com/primefaces/primereact/issues/205) -- Add appendTo to Dialog [\#204](https://github.com/primefaces/primereact/issues/204) -- Reimplement Messages [\#203](https://github.com/primefaces/primereact/issues/203) -- Reimplement Growl [\#202](https://github.com/primefaces/primereact/issues/202) -- Screen Reader and Keyboard Accessibility support for Fieldset [\#201](https://github.com/primefaces/primereact/issues/201) -- Screen Reader support for Panel [\#200](https://github.com/primefaces/primereact/issues/200) -- Screen Reader support for Dialog [\#199](https://github.com/primefaces/primereact/issues/199) -- Screen Reader support for TabView [\#198](https://github.com/primefaces/primereact/issues/198) -- Screen Reader and Keyboard Accessibility for Accordion [\#197](https://github.com/primefaces/primereact/issues/197) -- Loading status for AutoComplete [\#193](https://github.com/primefaces/primereact/issues/193) -- Custom content for paginator [\#189](https://github.com/primefaces/primereact/issues/189) -- Animation for Accordion [\#182](https://github.com/primefaces/primereact/issues/182) -- Unsortable option for DataTable columns [\#179](https://github.com/primefaces/primereact/issues/179) - -**Fixed bugs:** - -- Radio and Checkbox does pass props to super [\#231](https://github.com/primefaces/primereact/issues/231) -- Dropdown Filter blocks keyboard navigation of items [\#227](https://github.com/primefaces/primereact/issues/227) -- Dropdown keyboard navigation does not scroll items [\#226](https://github.com/primefaces/primereact/issues/226) -- InputTextarea ignores focus, blur, input and keyup [\#225](https://github.com/primefaces/primereact/issues/225) -- Browser textarea resize breaks autoResize of textarea [\#224](https://github.com/primefaces/primereact/issues/224) -- DataTable dataKey ignored [\#221](https://github.com/primefaces/primereact/issues/221) -- AutoComplete does not reflect model binding [\#220](https://github.com/primefaces/primereact/issues/220) -- Clicking table header throws exception [\#218](https://github.com/primefaces/primereact/issues/218) -- Resizing last column gives error on DataTable [\#217](https://github.com/primefaces/primereact/issues/217) -- OverlayPanel: appendTo="body" throws exception [\#206](https://github.com/primefaces/primereact/issues/206) -- Growl: messages appears again on any change state [\#196](https://github.com/primefaces/primereact/issues/196) -- InputText: ui-state-filled class is not added, if value chaged in parent component [\#195](https://github.com/primefaces/primereact/issues/195) -- AutoComplete Dropdown select not hiding [\#191](https://github.com/primefaces/primereact/issues/191) -- Menu components\(menu,menubar...\) reload problem [\#190](https://github.com/primefaces/primereact/issues/190) -- Datatable - not propagate prop filterMatchMode when lazyload is on [\#187](https://github.com/primefaces/primereact/issues/187) -- datatable- Not Adjusted columns with expander [\#186](https://github.com/primefaces/primereact/issues/186) -- DataTable: page is not reseted after global filtering [\#184](https://github.com/primefaces/primereact/issues/184) -- onNodeExpand and onNodeCollapse events are not working on Tree [\#183](https://github.com/primefaces/primereact/issues/183) -- Panel Header and Dropdown problem [\#175](https://github.com/primefaces/primereact/issues/175) - -## [1.2.0](https://github.com/primefaces/primereact/tree/1.2.0) (2017-11-01) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.1.0...1.2.0) - -**Implemented New Features and Enhancements:** - -- Improve typings of some components [\#172](https://github.com/primefaces/primereact/issues/172) -- Add rowsPerPageOptions to DataTable [\#171](https://github.com/primefaces/primereact/issues/171) -- Animation for Panel toggle [\#170](https://github.com/primefaces/primereact/issues/170) -- Disabled tabs for Accordion [\#169](https://github.com/primefaces/primereact/issues/169) -- New style properties for Accordion Tab [\#168](https://github.com/primefaces/primereact/issues/168) -- Disabled tabs in TabView [\#167](https://github.com/primefaces/primereact/issues/167) -- Add style properties to TabView and TabPanel [\#166](https://github.com/primefaces/primereact/issues/166) -- Disabled prop for TabPanel [\#164](https://github.com/primefaces/primereact/issues/164) -- Use Dropdown component for Paginator rowsPerPage select [\#163](https://github.com/primefaces/primereact/issues/163) -- Support any type of object as a select option [\#162](https://github.com/primefaces/primereact/issues/162) -- Undeterminate ProgressBar [\#160](https://github.com/primefaces/primereact/issues/160) -- New Message component [\#159](https://github.com/primefaces/primereact/issues/159) -- New ProgressSpinner Component [\#143](https://github.com/primefaces/primereact/issues/143) - -**Fixed bugs:** - -- DataTable: `onLazyLoad` does not support `sortMode="multiple"` [\#157](https://github.com/primefaces/primereact/issues/157) -- Password not trigger onChange event [\#177](https://github.com/primefaces/primereact/issues/177) -- Virtual Scrolling Flickers [\#173](https://github.com/primefaces/primereact/issues/173) -- Type definition missing from TabPanel [\#165](https://github.com/primefaces/primereact/issues/165) -- DataTable: Changing a filter does not trigger `onLazyLoad` for async tables [\#158](https://github.com/primefaces/primereact/issues/158) -- Growl throws error [\#149](https://github.com/primefaces/primereact/issues/149) -- MultiSelect: onClick: event.stopPropagation is not a function [\#147](https://github.com/primefaces/primereact/issues/147) -- utc parameter is not working when keying in the date [\#146](https://github.com/primefaces/primereact/issues/146) -- Click on input filter causes sort [\#133](https://github.com/primefaces/primereact/issues/133) - -## [1.1.0](https://github.com/primefaces/primereact/tree/1.1.0) (2017-10-18) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.1...1.1.0) - -**Implemented New Features and Enhancements:** - -- Sidebar component [\#122](https://github.com/primefaces/primereact/issues/122) -- Expose show\(\),hide\(\) and toggle\(\) in props of ContextMenu [\#113](https://github.com/primefaces/primereact/issues/113) -- Reimplement AutoComplete [\#141](https://github.com/primefaces/primereact/issues/141) -- Specific styles for header, body and footer [\#140](https://github.com/primefaces/primereact/issues/140) -- Sticky mode for Growl [\#139](https://github.com/primefaces/primereact/issues/139) -- Add onClick to Growl [\#138](https://github.com/primefaces/primereact/issues/138) -- rowClassName for DataTable [\#137](https://github.com/primefaces/primereact/issues/137) -- Typescript Support [\#131](https://github.com/primefaces/primereact/issues/131) -- New Component: GMap [\#130](https://github.com/primefaces/primereact/issues/130) -- Keyboard support for SelectButton [\#129](https://github.com/primefaces/primereact/issues/129) -- Reimplement SelectButton [\#128](https://github.com/primefaces/primereact/issues/128) -- license file [\#117](https://github.com/primefaces/primereact/issues/117) -- Frozen Columns support for Column Groups [\#107](https://github.com/primefaces/primereact/issues/107) -- Loading status for DataTable [\#94](https://github.com/primefaces/primereact/issues/94) -- Editable Cells for DataTable [\#80](https://github.com/primefaces/primereact/issues/80) -- Virtual Scrolling For DataTable [\#79](https://github.com/primefaces/primereact/issues/79) -- Percentage support for DataTable ScrollWidth and ScrollHeight [\#77](https://github.com/primefaces/primereact/issues/77) - -**Fixed bugs:** - -- Dropdown Menu in DataTable with resizableColumns [\#123](https://github.com/primefaces/primereact/issues/123) -- Sorting does not work when you are using Column Group feature [\#115](https://github.com/primefaces/primereact/issues/115) -- TimeOnly calendar fails [\#144](https://github.com/primefaces/primereact/issues/144) -- DataTable: OnLazyLoad repeatedly calling function / infinite loop [\#132](https://github.com/primefaces/primereact/issues/132) -- Dropdown menu sits behind grid [\#126](https://github.com/primefaces/primereact/issues/126) -- SelectButton cannot have initial State [\#121](https://github.com/primefaces/primereact/issues/121) -- Calendar minDate and maxDate property does not reload dynamically [\#119](https://github.com/primefaces/primereact/issues/119) -- Growl doesn't call onClear method [\#112](https://github.com/primefaces/primereact/issues/112) -- AutoComplete completeMethod triggered twice / delay does not work as expected [\#111](https://github.com/primefaces/primereact/issues/111) -- Calendar is not updated according when props.value is changed [\#110](https://github.com/primefaces/primereact/issues/110) - -## [1.0.1](https://github.com/primefaces/primereact/tree/1.0.1) (2017-09-21) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0...1.0.1) - -**Implemented New Features and Enhancements:** - -- appendTo for OverlayPanel [\#96](https://github.com/primefaces/primereact/issues/96) -- Update demo to Router v4 [\#93](https://github.com/primefaces/primereact/issues/93) -- Refactor InputText filled state implementation [\#91](https://github.com/primefaces/primereact/issues/91) -- Missing event for components [\#90](https://github.com/primefaces/primereact/issues/90) -- Customizable Paginator using Templating [\#88](https://github.com/primefaces/primereact/issues/88) -- Column Reordering for DataTable [\#81](https://github.com/primefaces/primereact/issues/81) - -**Fixed bugs:** - -- Wrong documentation for BreadCrumb component [\#100](https://github.com/primefaces/primereact/issues/100) -- Relative Position calculation is wrong [\#109](https://github.com/primefaces/primereact/issues/109) -- Dropdown options does not update when props is changed [\#108](https://github.com/primefaces/primereact/issues/108) -- Dynamic and Static Columns cause error [\#106](https://github.com/primefaces/primereact/issues/106) -- Broken css in Version 1.0 [\#105](https://github.com/primefaces/primereact/issues/105) -- Dropdown selected option not updated after value property changes [\#103](https://github.com/primefaces/primereact/issues/103) -- Chart is not updated when data changes [\#102](https://github.com/primefaces/primereact/issues/102) -- The value of AutoComplete is not reset after changing state [\#101](https://github.com/primefaces/primereact/issues/101) -- FileUpload does not allow multiple files [\#99](https://github.com/primefaces/primereact/issues/99) -- Dialog contentStyle doesn't work [\#92](https://github.com/primefaces/primereact/issues/92) -- InputText disabled behavior missing readonly functionality [\#89](https://github.com/primefaces/primereact/issues/89) - -## [1.0.0](https://github.com/primefaces/primereact/tree/1.0.0) (2017-09-10) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0-rc.3...1.0.0) - -**Implemented New Features and Enhancements:** - -- Reimplement Listbox [\#87](https://github.com/primefaces/primereact/issues/87) -- Reimplement PickList [\#86](https://github.com/primefaces/primereact/issues/86) -- Reimplement Rating [\#84](https://github.com/primefaces/primereact/issues/84) -- Reimplement Calendar [\#83](https://github.com/primefaces/primereact/issues/83) -- Disabled Dates for Calendar [\#82](https://github.com/primefaces/primereact/issues/82) - -## [1.0.0-rc.3](https://github.com/primefaces/primereact/tree/1.0.0-rc.3) (2017-09-09) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0-rc.2...1.0.0-rc.3) - -## [1.0.0-rc.2](https://github.com/primefaces/primereact/tree/1.0.0-rc.2) (2017-09-08) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0-rc.1...1.0.0-rc.2) - -## [1.0.0-rc.1](https://github.com/primefaces/primereact/tree/1.0.0-rc.1) (2017-08-31) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0-beta.6...1.0.0-rc.1) - -**Implemented New Features and Enhancements:** - -- Re implemented Dropdown component [\#76](https://github.com/primefaces/primereact/issues/76) -- Re-implemented Dialog Component [\#75](https://github.com/primefaces/primereact/issues/75) - -**Fixed bugs:** - -- PickList callbacks reference error [\#74](https://github.com/primefaces/primereact/issues/74) -- The state of user is not updated after closing dialog [\#72](https://github.com/primefaces/primereact/issues/72) -- The onClick event of Choose button is fired twice on FileUpload [\#71](https://github.com/primefaces/primereact/issues/71) - -## [1.0.0-beta.6](https://github.com/primefaces/primereact/tree/1.0.0-beta.6) (2017-08-21) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0-beta.5...1.0.0-beta.6) - -## [1.0.0-beta.5](https://github.com/primefaces/primereact/tree/1.0.0-beta.5) (2017-08-21) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0-beta.4...1.0.0-beta.5) - -**Implemented New Features and Enhancements:** - -- Add id attribute to all components [\#70](https://github.com/primefaces/primereact/issues/70) -- Inconsistent API to add CSS class with certain of your component [\#68](https://github.com/primefaces/primereact/issues/68) - -**Fixed bugs:** - -- InputText and InputTextarea components aren't re-rendered when props are updated [\#69](https://github.com/primefaces/primereact/issues/69) - -## [1.0.0-beta.4](https://github.com/primefaces/primereact/tree/1.0.0-beta.4) (2017-08-16) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0-beta.3...1.0.0-beta.4) - -**Implemented New Features and Enhancements:** - -- Text Editor [\#66](https://github.com/primefaces/primereact/issues/66) - -## [1.0.0-beta.3](https://github.com/primefaces/primereact/tree/1.0.0-beta.3) (2017-08-10) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0-beta.2...1.0.0-beta.3) - -## [1.0.0-beta.2](https://github.com/primefaces/primereact/tree/1.0.0-beta.2) (2017-08-10) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0-beta.1...1.0.0-beta.2) - -## [1.0.0-beta.1](https://github.com/primefaces/primereact/tree/1.0.0-beta.1) (2017-08-09) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0-alpha.2...1.0.0-beta.1) - -**Implemented New Features and Enhancements:** - -- DataTable Crud [\#63](https://github.com/primefaces/primereact/issues/63) -- MegaMenu component [\#62](https://github.com/primefaces/primereact/issues/62) -- Steps component [\#61](https://github.com/primefaces/primereact/issues/61) -- PanelMenu component [\#59](https://github.com/primefaces/primereact/issues/59) -- ContextMenu component [\#58](https://github.com/primefaces/primereact/issues/58) -- Menubar component [\#57](https://github.com/primefaces/primereact/issues/57) -- TieredMenu component [\#56](https://github.com/primefaces/primereact/issues/56) -- Breadcrumb component [\#54](https://github.com/primefaces/primereact/issues/54) -- Add tabmenu component [\#53](https://github.com/primefaces/primereact/issues/53) -- Add menu component [\#51](https://github.com/primefaces/primereact/issues/51) -- Add lightbox component [\#46](https://github.com/primefaces/primereact/issues/46) -- Add toolbar component [\#44](https://github.com/primefaces/primereact/issues/44) -- Add password component [\#43](https://github.com/primefaces/primereact/issues/43) -- Add keyboard support to dropdown [\#39](https://github.com/primefaces/primereact/issues/39) -- Implemented DataScroller component [\#37](https://github.com/primefaces/primereact/issues/37) -- Implemented Rating component [\#36](https://github.com/primefaces/primereact/issues/36) -- Implemented ColorPicker component [\#35](https://github.com/primefaces/primereact/issues/35) - -## [1.0.0-alpha.2](https://github.com/primefaces/primereact/tree/1.0.0-alpha.2) (2017-05-25) - -[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0-alpha.1...1.0.0-alpha.2) - -**Implemented New Features and Enhancements:** - -- TreeTable Component [\#34](https://github.com/primefaces/primereact/issues/34) -- Mobile Touch support to Slider Component [\#33](https://github.com/primefaces/primereact/issues/33) -- Implemented Captcha Component [\#32](https://github.com/primefaces/primereact/issues/32) -- Tree Component [\#31](https://github.com/primefaces/primereact/issues/31) - -**Fixed bugs:** - -- Accordion activeIndex doesn't work [\#30](https://github.com/primefaces/primereact/issues/30) -- Dropdown onChange invoked on same item selection [\#28](https://github.com/primefaces/primereact/issues/28) -- activeIndex property on TabView doesn't work [\#26](https://github.com/primefaces/primereact/issues/26) -- Dropdown is missing input focus [\#21](https://github.com/primefaces/primereact/issues/21) -- Spinner controls are not user friendly [\#20](https://github.com/primefaces/primereact/issues/20) -- MultiSelect Input focus is missing [\#19](https://github.com/primefaces/primereact/issues/19) -- Accordion Tab Caret icons are not toggleable [\#18](https://github.com/primefaces/primereact/issues/18) -- Radio button label toggle state is missing [\#14](https://github.com/primefaces/primereact/issues/14) -- Chips need input focus [\#13](https://github.com/primefaces/primereact/issues/13) -- Checkbox label toggle state is not working [\#12](https://github.com/primefaces/primereact/issues/12) -- Autocomplete Multiple feature missing input focus [\#10](https://github.com/primefaces/primereact/issues/10) - -## [1.0.0-alpha.1](https://github.com/primefaces/primereact/tree/1.0.0-alpha.1) (2017-03-28) - -[Full Changelog](https://github.com/primefaces/primereact/compare/2eb760f17382a3b3a47d70f6f6076e21f5c90cfb...1.0.0-alpha.1) - +- PrimeReactProvider: Error next14 app router [\#5127](https://github.com/primefaces/primereact/issues/5127) +- TabView: Doesn't render in NextJS 14 [\#5395](https://github.com/primefaces/primereact/issues/5395) +- Issue with fileUpload progressBarTemplate [\#5664](https://github.com/primefaces/primereact/issues/5664) +- Calendar: When enabledDates array is set, user will get stuck on month/year selection [\#5662](https://github.com/primefaces/primereact/issues/5662) +- DataTable: Subheader row group along with date sorting not working as intended [\#5651](https://github.com/primefaces/primereact/issues/5651) +- Ripple effect is not working on buttons inside the sidebar [\#5652](https://github.com/primefaces/primereact/issues/5652) +- Input Number: Value pasted by the user is not entered when suffix and decimals are used. [\#4802](https://github.com/primefaces/primereact/issues/4802) +- SideBar: aria-label disappear on close button [\#5637](https://github.com/primefaces/primereact/issues/5637) +- A maximizable dialog cannot be maximized properly after its position has been changed [\#5635](https://github.com/primefaces/primereact/issues/5635) +- InputNumber:format error when Locale set de-DE [\#5633](https://github.com/primefaces/primereact/issues/5633) +- TreeTable/Datatable: Calendar not showing correctly [\#5529](https://github.com/primefaces/primereact/issues/5529) +- Image preview zoom in bug [\#5627](https://github.com/primefaces/primereact/issues/5627) +- Otherprops not working for InputSwitch [\#5623](https://github.com/primefaces/primereact/issues/5623) +- InputNumber: (Germany) second step of currency can't changed [\#5589](https://github.com/primefaces/primereact/issues/5589) +- InputNumber: Incorrect duplication of fractional part of number [\#5607](https://github.com/primefaces/primereact/issues/5607) +- InputNumber: Cursor stuck when using minFractionDigits and comma as decimal separator [\#5548](https://github.com/primefaces/primereact/issues/5548) +- When RadioButton is selected, clicking on it does not trigger the onClick event. [\#5610](https://github.com/primefaces/primereact/issues/5610) +- TreeTable: missing import [\#5600](https://github.com/primefaces/primereact/issues/5600) +- TreeTable: Column "align" prop aligns the header rather than the content [\#5597](https://github.com/primefaces/primereact/issues/5597) +- Dialog: breakpoints are janky [\#5551](https://github.com/primefaces/primereact/issues/5551) +- TreeTable: sorting not triggered when clicking header with custom HTML [\#5584](https://github.com/primefaces/primereact/issues/5584) +- Calendar: After the currentview changed, the panel position is wrong [\#5577](https://github.com/primefaces/primereact/issues/5577) +- DataTable: appendTo on HTML element doesn't work [\#5266](https://github.com/primefaces/primereact/issues/5266) +- Calendar position error when appendTo: 'self' is set [\#5058](https://github.com/primefaces/primereact/issues/5058) +- select components: props appendTo Incorrect first time mount [\#5311](https://github.com/primefaces/primereact/issues/5311) +- MultiSelect: selectAllLabel property error inside React Router [\#5572](https://github.com/primefaces/primereact/issues/5572) +- Inplace: active prop not working [\#5561](https://github.com/primefaces/primereact/issues/5561) +- DataTable: Error when updating a cell [\#5556](https://github.com/primefaces/primereact/issues/5556) +- Calender: even with the viewDate prop the user can scroll past viewable dates [\#5558](https://github.com/primefaces/primereact/issues/5558) +- InputNumber: Text selection not working on input focus when using a suffix or prefix [\#5537](https://github.com/primefaces/primereact/issues/5537) +- TreeTable: Plenty of warnings in codesandbox demos [\#5542](https://github.com/primefaces/primereact/issues/5542) +- DataTable: Resize "fit" doesnt work with unstyled [\#5489](https://github.com/primefaces/primereact/issues/5489) +- Calendar: viewDate change does not update displayed year [\#4147](https://github.com/primefaces/primereact/issues/4147) +- Incorrect year display in Calendar after navigating to next year [\#5533](https://github.com/primefaces/primereact/issues/5533) +- Calendar: InputText does not immediately reflect locale changes [\#5535](https://github.com/primefaces/primereact/issues/5535) +- BlockUI lost focus [\#5523](https://github.com/primefaces/primereact/issues/5523) +- TreeTable: Header's columns not aligned with body's columns in scrollable mode [\#5487](https://github.com/primefaces/primereact/issues/5487) +- TreeTable: Rows are not aligned when frozen [\#5508](https://github.com/primefaces/primereact/issues/5508) +- useDebounce is wrong [\#5490](https://github.com/primefaces/primereact/issues/5490) +- Messages: No animations in v10 [\#5485](https://github.com/primefaces/primereact/issues/5485) +- ComponentBase: fkey used before declaration [\#5477](https://github.com/primefaces/primereact/issues/5477) +- Tabview: There is No style when use PrimeReact & Tailwind [\#5445](https://github.com/primefaces/primereact/issues/5445) +- Dialog: "esc" close dialogs in wrong order [\#5019](https://github.com/primefaces/primereact/issues/5019) +- CascadeSelect: activeOptionState not working as expected [\#5425](https://github.com/primefaces/primereact/issues/5425) +- Calendar: Size of picker panel when in month view [\#5435](https://github.com/primefaces/primereact/issues/5435) +- DataTable demo performance | Add DeferredDemo component [\#5688](https://github.com/primefaces/primereact/issues/5688) +- TreeSelect: panel hide after uncheck [\#5447](https://github.com/primefaces/primereact/issues/5447) +- InputText: className is added twice [\#5440](https://github.com/primefaces/primereact/issues/5440) +- TreeTable: Errors "React does not recognize the xxx prop on a DOM element" on rendering TreeTable component [\#5427](https://github.com/primefaces/primereact/issues/5427) +- CascadeSelect: onInputKeyDown error in unstyled model [\#5424](https://github.com/primefaces/primereact/issues/5424) +- Datatable: Cell editor ColumnEditorOptions param is broken [\#5233](https://github.com/primefaces/primereact/issues/5233) +- Dropdown: component interactable in disabled div [\#5414](https://github.com/primefaces/primereact/issues/5414) +- Dropdown: Tailwind optionDisabled with function not working [\#5676](https://github.com/primefaces/primereact/issues/5676) +- ConfirmDialog:confirmDialog method in unstyled mode, the pop-up window style not apply [\#5656](https://github.com/primefaces/primereact/issues/5656) +- ConfirmDialog: acceptButton's pt don't respect button [\#5653](https://github.com/primefaces/primereact/issues/5653) +- ToggleButton (Tailwind): Imported theming from documentation crashes button [\#5609](https://github.com/primefaces/primereact/issues/5609) +- Calendar (Tailwind): Calendar Input border rounded when showIcon is set [\#5590](https://github.com/primefaces/primereact/issues/5590) +- Calendar (Tailwind): Calendar missing styling [\#5579](https://github.com/primefaces/primereact/issues/5579) +- MultiSelect: PT filterInput not work [\#5568](https://github.com/primefaces/primereact/issues/5568) +- DataTable (Tailwind): frozen is undefined when data is empty array [\#5555](https://github.com/primefaces/primereact/issues/5555) +- TreeTable: need to be converted to data- lookups instead of className lookups [\#5553](https://github.com/primefaces/primereact/issues/5553) +- Accordion (Tailwind): Prop type error in console [\#5546](https://github.com/primefaces/primereact/issues/5546) +- OverlayPanel (Tailwind): showCloseIcon is at wrong position [\#5543](https://github.com/primefaces/primereact/issues/5543) +- DataTable: need to be converted to data- lookups instead of className lookups [\#5524](https://github.com/primefaces/primereact/issues/5524) +- Dropdown (Tailwind): Focus shadow not working [\#5512](https://github.com/primefaces/primereact/issues/5512) +- FileUpload: Missing basicButton theming in Tailwind [\#5515](https://github.com/primefaces/primereact/issues/5515) +- Button: Loading Spinner has no margin by default (Tailwind) [\#5509](https://github.com/primefaces/primereact/issues/5509) +- CascadeSelect: missing some values in pt [\#5479](https://github.com/primefaces/primereact/issues/5479) +- Picklist Tailwind is not responsive [\#5417](https://github.com/primefaces/primereact/issues/5417) +- Tailwind: Chips camelCase properties [\#5500](https://github.com/primefaces/primereact/issues/5500) +- Tailwind: Autocomplete camelCase [\#5499](https://github.com/primefaces/primereact/issues/5499) +- Tailwind: Multiselect issues and camelCase on properties [\#5493](https://github.com/primefaces/primereact/issues/5493) +- Tailwind: Listbox camelCase properties and Context property focused is missing [\#5492](https://github.com/primefaces/primereact/issues/5492) +- Tailwind: Calendar dropdownbutton [\#5471](https://github.com/primefaces/primereact/issues/5471) +- Tailwind: Button in Speedial does not have access to parent [\#5467](https://github.com/primefaces/primereact/issues/5467) +- Tailwind: InputNumber input is not a function [\#5464](https://github.com/primefaces/primereact/issues/5464) +- Tailwind: Tooltip missing context [\#5468](https://github.com/primefaces/primereact/issues/5468) +- Tailwind: Slider starthandler and endhandler, deprecated? [\#5466](https://github.com/primefaces/primereact/issues/5466) +- Tailwind: SidebarPassThroughOptions closeButtonIcon property missing [\#5465](https://github.com/primefaces/primereact/issues/5465) +- Tailwind: Dropdown itemGroup camelCase missing [\#5469](https://github.com/primefaces/primereact/issues/5469) +- Tailwind: ConfirmDialogPassThroughOptions does not a transition property [\#5463](https://github.com/primefaces/primereact/issues/5463) +- Tailwind: Card subtitle vs subTitle and similar issues [\#5461](https://github.com/primefaces/primereact/issues/5461) +- Tailwind: CascadeSelectPassThroughOptions is missing sublist [\#5462](https://github.com/primefaces/primereact/issues/5462) +- TabMenu: activeIndex not rerendering tabs with Tailwind [\#5457](https://github.com/primefaces/primereact/issues/5457) +- Tailwind: Rating readOnly property seems incorrect [\#5443](https://github.com/primefaces/primereact/issues/5443) +- Tailwind: modelValue property [\#5444](https://github.com/primefaces/primereact/issues/5444) +- RadioButton: data selector and Hook Form doc display error [\#5679](https://github.com/primefaces/primereact/issues/5679) +- ScrollPanel: test failed [\#5672](https://github.com/primefaces/primereact/issues/5672) +- Table: Sort icons are not showing correct amount directions [\#5617](https://github.com/primefaces/primereact/issues/5617) +- TreeTable: Wrong typing for emptyMessage [\#5588](https://github.com/primefaces/primereact/issues/5588) +- Button (Tailwind): Theming Documentation is missing attributes for button without label [\#5526](https://github.com/primefaces/primereact/issues/5526) +- Updating demo environments to Vite [\#5455](https://github.com/primefaces/primereact/issues/5455) +- Animated Text Highlight Problem [\#5480](https://github.com/primefaces/primereact/issues/5480) +- RowEdit: Programmatic Demo [\#5452](https://github.com/primefaces/primereact/issues/5452) +- Calendar: lag when navigating between months [\#5202](https://github.com/primefaces/primereact/issues/5202) +- Datatable: CRUD Filter but [\#5691](https://github.com/primefaces/primereact/pull/5691) diff --git a/CHANGELOG_ARCHIVE.md b/CHANGELOG_ARCHIVE.md new file mode 100644 index 0000000000..8012c9172f --- /dev/null +++ b/CHANGELOG_ARCHIVE.md @@ -0,0 +1,3641 @@ + +## [10.2.1](https://github.com/primefaces/primereact/tree/10.2.1) (2023-11-27) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.2.0...10.2.1) + +**Fixed bugs:** + +- Tree Table Header Bug [\#5412](https://github.com/primefaces/primereact/issues/5412) + +## [10.2.0](https://github.com/primefaces/primereact/tree/10.2.0) (2023-11-27) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.1.1...10.2.0) + +**Enhancements:** + +- MISC Section | Accessibility [\#5356](https://github.com/primefaces/primereact/issues/5356) +- Chip Removable Icon to have button role [\#4190](https://github.com/primefaces/primereact/issues/4190) +- TreeTable: selected rows are not highlighted [\#5370](https://github.com/primefaces/primereact/issues/5370) +- CascadeSelect: Popup does not close on escape key press [\#5360](https://github.com/primefaces/primereact/issues/5360) +- SplitButton: SplitButton popup not closing on escape button click [\#5365](https://github.com/primefaces/primereact/issues/5365) +- Speed Dial: Speed Dial Menu does not close on escape key press [\#5367](https://github.com/primefaces/primereact/issues/5367) +- PanelMenu: Menu items with no sub-items toggling border [\#5349](https://github.com/primefaces/primereact/issues/5349) + +**Fixed bugs:** + +- DataTable: Cell editing with Dropdown doesn't work [\#3079](https://github.com/primefaces/primereact/issues/3079) +- DataTable editor with 3rd party dropdown / overlay [\#2097](https://github.com/primefaces/primereact/issues/2097) +- Mention: Page Breaks when navigating to Mention component [\#5363](https://github.com/primefaces/primereact/issues/5363) +- TabView: Closes all tabs on click [\#5369](https://github.com/primefaces/primereact/issues/5369) +- DataTable: Cell edit support Dropdown [\#2666](https://github.com/primefaces/primereact/issues/2666) +- DataTable: editMode="cell" and Dropdown z-Index issue [\#5320](https://github.com/primefaces/primereact/issues/5320) +- AccordionTab: Invalid values for props $$typeof, type on div tag [\#5379](https://github.com/primefaces/primereact/issues/5379) +- Password: inputClassName doesn't work with Tailwind [\#5385](https://github.com/primefaces/primereact/issues/5385) +- TreeTable: Unable to hide a column with hidden prop [\#5384](https://github.com/primefaces/primereact/issues/5384) +- Calendar: monthNavigator={true} with numberOfMonths={>1} shows controls for the first month only [\#5390](https://github.com/primefaces/primereact/issues/5390) +- TreeTable: column align header is not working [\#5315](https://github.com/primefaces/primereact/issues/5315) +- Tree: Custom collapseIcon/expandIcon is not applied on children [\#5393](https://github.com/primefaces/primereact/issues/5393) +- Slider: Setting min boundary value component is breaking the component. [\#5398](https://github.com/primefaces/primereact/issues/5398) +- MultiSelect emptyMessage prop results in error [\#5340](https://github.com/primefaces/primereact/issues/5340) +- SplitButton: pt attribute doesn't behave as described in documentation [\#4883](https://github.com/primefaces/primereact/issues/4883) +- Tailwind: Button tailwind/index.js [\#5407](https://github.com/primefaces/primereact/issues/5407) +- DataTable: memory leak when data updated continuously [\#4656](https://github.com/primefaces/primereact/issues/4656) +- Removing style section from pages [\#5354](https://github.com/primefaces/primereact/issues/5354) +- Missing type definition in for hideOverlaysOnDocumentScrolling in APIOptions [\#5378](https://github.com/primefaces/primereact/issues/5378) +- Misc Demos Refactor [\#5357](https://github.com/primefaces/primereact/issues/5357) +- Tailwind: Documentation transition: TRANSITIONS.overlay [\#5387](https://github.com/primefaces/primereact/issues/5387) +- Mention: Component not rendering [\#5374](https://github.com/primefaces/primereact/issues/5374) +- Primereact Tooltip props children and content have different types [\#5376](https://github.com/primefaces/primereact/issues/5376) +- Slider: Setting min boundary value component is breaking the component. [\#5398](https://github.com/primefaces/primereact/issues/5398) + +## [10.1.1](https://github.com/primefaces/primereact/tree/10.1.1) (2023-11-21) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.1.0...10.1.1) + +**Fixed bugs:** + +- Calendar with touchUI prop always adds p-overflow-hidden to body in the mounted phase [\#5352](https://github.com/primefaces/primereact/issues/5352) +- DataTable: Moving selection up with keyboard not working [\#5347](https://github.com/primefaces/primereact/issues/5347) +- DataTable: fire onRowClickwhen unselect row [\#5342](https://github.com/primefaces/primereact/issues/5342) + +## [10.1.0](https://github.com/primefaces/primereact/tree/10.1.0) (2023-11-20) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.0.9...10.1.0) + +**Enhancements:** + +- MultiSelect: Add onRemove callback function, the same as in the Chip component [\#5247](https://github.com/primefaces/primereact/issues/5247) +- Dropdown: Allow control of dropdownIcon based on state [\#5308](https://github.com/primefaces/primereact/issues/5308) +- Password: Strength meter does not close on escape key press [\#5321](https://github.com/primefaces/primereact/issues/5321) +- MultiSelect: Add onRemove callback function, the same as in the Chip component [\#5329](https://github.com/primefaces/primereact/issues/5329) +- Lara theme enhancements [\#5343](https://github.com/primefaces/primereact/issues/5343) +- New Showcase Implementation [\#5258](https://github.com/primefaces/primereact/issues/5258) + +**Fixed bugs:** + +- Slider - Prop style did not match [\#5346](https://github.com/primefaces/primereact/issues/5346) +- Bootstrap: Example is broken [\#5310](https://github.com/primefaces/primereact/issues/5310) +- Datatable: Setting rowEditorInitIcon has no effect. [\#4430](https://github.com/primefaces/primereact/issues/4430) +- InputNumber: unable to input a decimal point [\#5338](https://github.com/primefaces/primereact/issues/5338) +- Missing icons [\#5333](https://github.com/primefaces/primereact/issues/5333) +- PrimeReactProvider: Panels closing on scroll even with hideOverlaysOnDocumentScrolling: false [\#5332](https://github.com/primefaces/primereact/issues/5332) +- HeroSection:import case sensitive [\#5328](https://github.com/primefaces/primereact/issues/5328) +- Tooltip: tooltip does not close when cpu throttled x6 [\#5312](https://github.com/primefaces/primereact/issues/5312) +- Tooltip: Stuck after hovering when used in complex page [\#3965](https://github.com/primefaces/primereact/issues/3965) +- select components: props appendTo Incorrect first time mount [\#5311](https://github.com/primefaces/primereact/issues/5311) +- InputMask: Pasting does not respect the cursor selection [\#5285](https://github.com/primefaces/primereact/issues/5285) +- Documentation: Ripple needs to be enable, docs says false [\#5316](https://github.com/primefaces/primereact/issues/5316) +- Tailwind: Dialog - mask: modal property is undefined [\#5296](https://github.com/primefaces/primereact/issues/5296) +- Tooltip with showOnDisabled prop breaks some input component style [\#5300](https://github.com/primefaces/primereact/issues/5300) +- Fix with showondisabled prop breaks some input component style [\#5301](https://github.com/primefaces/primereact/issues/5301) +- Code Display spacing [\#5303](https://github.com/primefaces/primereact/issues/5303) +- Tailwind: CSS fixes from PrimeVue [\#5294](https://github.com/primefaces/primereact/issues/5294) +- Tailwind: Under DataTable theming props.frozenRow but are not DataTableProps [\#5288](https://github.com/primefaces/primereact/issues/5288) +- InputText inherits size from HTMLInputElement and size is number [\#5283](https://github.com/primefaces/primereact/issues/5283) +- DataTable: Infinite loop onValueChange [\#5160](https://github.com/primefaces/primereact/issues/5160) +- DataTable: onValueChange fires if the selection if updated [\#5281](https://github.com/primefaces/primereact/issues/5281) +- InputNumer: PageSpeed Accessibility: ARIA IDs are unique [\#5270](https://github.com/primefaces/primereact/issues/5270) +- Added plain text [\#5278](https://github.com/primefaces/primereact/issues/5278) +- InputNumber: PageSpeed Accessibility - Buttons do not have an accessible name [\#5269](https://github.com/primefaces/primereact/issues/5269) +- Splitter: stateString is undefined [\#5276](https://github.com/primefaces/primereact/issues/5276) +- Tailwind Theming for Button uses a property plain but plain is not part of ButtonProps [\#5273](https://github.com/primefaces/primereact/issues/5273) +- Tailwind CSS issue [\#4987](https://github.com/primefaces/primereact/issues/4987) +- Component Styles: Remove use of !important now that @layer is used [\#5096](https://github.com/primefaces/primereact/issues/5096) +- Sidebar fullscreen unnecessary class assignments fix [\#5271](https://github.com/primefaces/primereact/issues/5271) +- Updating documentation under theming [\#5276](https://github.com/primefaces/primereact/issues/5276) +- SplitButton: Outlined SplitButton right border duplication on hover [\#5264](https://github.com/primefaces/primereact/issues/5264) +- PanelMenu: command of MenuItem without child cannot be triggered [\#5255](https://github.com/primefaces/primereact/issues/5255) +- TreeSelect: In unstyled mode, the selected and checked style not work [\#5254](https://github.com/primefaces/primereact/issues/5254) +- TabView: Dynamically created TabPanels and onTabClose closes more than one Tab [\#2842](https://github.com/primefaces/primereact/issues/2842) +- TreeTable: filter row ignored when frozen column enabled [\#5252](https://github.com/primefaces/primereact/issues/5252) +- MultiSelect: stopPropgation on multiSelect items [\#5250](https://github.com/primefaces/primereact/issues/5250) +- Add support for faster progressive and incremental builds [\#5231](https://github.com/primefaces/primereact/issues/5231) +- InputNumber: button event repeats infinitely if input is disabled [\#5245](https://github.com/primefaces/primereact/issues/5245) +- AutoComplete: Primitive value 0 does not display correctly [\#5241](https://github.com/primefaces/primereact/issues/5241) +- Calendar: Wrong docs in Pass Through [\#5243](https://github.com/primefaces/primereact/issues/5243) +- TabView: Dynamic Tabs not working [\#5229](https://github.com/primefaces/primereact/issues/5229) +- OverlayPanel: Toast is appearing when page is loaded [\#5235](https://github.com/primefaces/primereact/issues/5235) +- InputNumber: Enter leading 0 when using prefix/suffix [\#5234](https://github.com/primefaces/primereact/issues/5234) +- FileUpload: Uploaded file is cleared in advanced mode [\#5226](https://github.com/primefaces/primereact/issues/5226) +- Mention: Mentioning someone keeps the search text [\#5216](https://github.com/primefaces/primereact/issues/5216) +- ComponentBase: TypeError: Cannot read properties of undefined (reading 'unstyled') [\#5168](https://github.com/primefaces/primereact/issues/5168) +- TypeError: Cannot read properties of undefined (reading 'unstyled') [\#5203](https://github.com/primefaces/primereact/issues/5203) + +## [10.0.9](https://github.com/primefaces/primereact/tree/10.0.9) (2023-11-01) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.0.8...10.0.9) + +**Fixed bugs:** + +- useHandleStyle Broken: Styles not loading [\#5213](https://github.com/primefaces/primereact/issues/5213) + +## [10.0.8](https://github.com/primefaces/primereact/tree/10.0.8) (2023-11-01) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.0.7...10.0.8) + +**Fixed bugs:** + +- MultiSelect: Dropdown body detaches from dropdown head/button [\#5210](https://github.com/primefaces/primereact/issues/5210) +- "Command" docs are missing [\#5205](https://github.com/primefaces/primereact/issues/5205) +- Tailwind: Panelmenu: Some classes not being picked up during Styling [\#5206](https://github.com/primefaces/primereact/issues/5206) +- ComponentBase: TypeError: Cannot read properties of undefined (reading 'unstyled') [\#5168](https://github.com/primefaces/primereact/issues/5168) +- TypeError: Cannot read properties of undefined (reading 'unstyled') [\#5203](https://github.com/primefaces/primereact/issues/5203) +- Tailwind: MultiSelect: multiple conflicting classname keys [\#5200](https://github.com/primefaces/primereact/issues/5200) +- Tailwind: PanelMenu: Documentation Pointing to Incorrect TRANSITION [\#5198](https://github.com/primefaces/primereact/issues/5198) +- Datatable: Missing rowEditorSaveButton and rowEditorSaveIcon on ColumnPassThroughOptions [\#5196](https://github.com/primefaces/primereact/issues/5196) +- DataTable: Redefine column width after resizing a column manually [\#5123](https://github.com/primefaces/primereact/issues/5123) +- DataTable: When using InputTextarea as editor, pressing Ctrl + Enter or Shift + Enter results in a submission [\#5193](https://github.com/primefaces/primereact/issues/5193) +- InputNumber: Minus Sign not working for Currency INR [\#5185](https://github.com/primefaces/primereact/issues/5185) +- PanelMenu: Visual defect [\#5190](https://github.com/primefaces/primereact/issues/5190) +- Tailwind with Menubar end attribute does not align-right [\#5181](https://github.com/primefaces/primereact/issues/5181) +- DataTable with frozen columns and displayFilter 'row' doesn't freeze filter cell [\#5164](https://github.com/primefaces/primereact/issues/5164) +- Add missing pi-file-edit icon [\#5179](https://github.com/primefaces/primereact/issues/5179) +- OrderList: order of selection reversed when moving multiple items to top or bottom [\#5177](https://github.com/primefaces/primereact/issues/5177) +- 10.0.7: forwardRef Warning [\#5172](https://github.com/primefaces/primereact/issues/5172) +- id not passed to SplitterPanel [\#5169](https://github.com/primefaces/primereact/issues/5169) + +## [10.0.7](https://github.com/primefaces/primereact/tree/10.0.7) (2023-10-26) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.0.6...10.0.7) + +**Fixed bugs:** + +- SplitButton: Missing styles [\#5163](https://github.com/primefaces/primereact/issues/5163) + +## [10.0.6](https://github.com/primefaces/primereact/tree/10.0.6) (2023-10-26) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.0.5...10.0.6) + +**Fixed bugs:** + +- FileUpload: Adding pending text to localization in component [\#5161](https://github.com/primefaces/primereact/issues/5161) +- AvatarGroup -> Avatar Hover tooltip [\#4181](https://github.com/primefaces/primereact/issues/4181) +- MultiSelect: Clicking on "selectAll" checkbox closes options dropdown [\#5151](https://github.com/primefaces/primereact/issues/5151) +- AccordionTab cannot be used in custom wrapper [\#2052](https://github.com/primefaces/primereact/issues/2052) +- SpeedDial: className property not being applied to list items [\#5148](https://github.com/primefaces/primereact/issues/5148) +- MultiSelect: Clear button marks variable as undefined [\#5142](https://github.com/primefaces/primereact/issues/5142) +- Mispell of 'inteface' instead of 'interface' [\#5138](https://github.com/primefaces/primereact/issues/5138) +- Calendar with mask does not work as expected when editing input. [\#5137](https://github.com/primefaces/primereact/issues/5137) +- DataTable: passthrough styling is ignored [\#5131](https://github.com/primefaces/primereact/issues/5131) +- Column: Pass Through does not apply header classes correctly [\#5125](https://github.com/primefaces/primereact/issues/5125) +- InputNumber: Typescript type definition for 'incrementButtonIcon' and 'decrementButtonIcon' errorneous [\#5132](https://github.com/primefaces/primereact/issues/5132) +- Mention: Mentioning someone deletes the first word of the comment [\#5114](https://github.com/primefaces/primereact/issues/5114) + +**New Features:** + +- Password with ability to toggle mask via a method and a unmasked property [\#5135](https://github.com/primefaces/primereact/issues/5135) + +## [10.0.5](https://github.com/primefaces/primereact/tree/10.0.5) (2023-10-19) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.0.4...10.0.5) + +**Fixed bugs:** + +- Overlay animations are not working with Tailwind preset [\#5117](https://github.com/primefaces/primereact/issues/5117) + +## [10.0.4](https://github.com/primefaces/primereact/tree/10.0.4) (2023-10-19) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.0.3...10.0.4) + +**Implemented New Features and Enhancements:** + +- MultiSelect: Formatting selected items with spaces after the commas [\#5100](https://github.com/primefaces/primereact/issues/5100) +- Tree: onDrop should not attempt a copy of node values [\#5080](https://github.com/primefaces/primereact/issues/5080) + +**Fixed bugs:** + +- Tailwind preset animations are not working as expected [\#5110](https://github.com/primefaces/primereact/issues/5110) +- Slider (range): Warning: NaN is an invalid value for the left css style property. [\#5111](https://github.com/primefaces/primereact/issues/5111) +- Inplace Component Doc Image Responsive Issue [\#5103](https://github.com/primefaces/primereact/issues/5103) +- TreeSelect: Incorrect TypeScript types for filterTemplate options [\#5102](https://github.com/primefaces/primereact/issues/5102) +- TreeSelect: With selected value, close icon looks cluttered [\#5012](https://github.com/primefaces/primereact/issues/5012) +- TreeSelect: Clear Icon Misplacement [\#5020](https://github.com/primefaces/primereact/issues/5020) +- SelectButton: AllowEmpty not working [\#5094](https://github.com/primefaces/primereact/issues/5094) +- Toast/Messages: remove not working [\#5083](https://github.com/primefaces/primereact/issues/5083) +- Fieldset: Missing root className pass [\#5088](https://github.com/primefaces/primereact/issues/5088) +- Panel: Missing props.className passthrough [\#5087](https://github.com/primefaces/primereact/issues/5087) +- useDebounce: Missing type [\#5085](https://github.com/primefaces/primereact/issues/5085) +- Message: Icon shrinks as text in message grows larger [\#5078](https://github.com/primefaces/primereact/issues/5078) + +## [9.6.3](https://github.com/primefaces/primereact/tree/9.6.3) (2023-10-18) + +[Full Changelog](https://github.com/primefaces/primereact/compare/9.6.2...9.6.3) + +**Fixed bugs:** + +- DataTable: Invalid attribute warning when passing custom icon to rowReorderIcon [\#5109](https://github.com/primefaces/primereact/issues/5109) + +## [10.0.3](https://github.com/primefaces/primereact/tree/10.0.3) (2023-10-11) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.0.2...10.0.3) + +**Deprecated:** + +- SlideMenu: Deprecate from PrimeReact [\#5063](https://github.com/primefaces/primereact/issues/5063) +- Remove FullCalendar theme support [\#5062](https://github.com/primefaces/primereact/issues/5062) + +**Implemented New Features and Enhancements:** + +- Improve block/unblockScroll architecture [\#5077](https://github.com/primefaces/primereact/issues/5077) +- SelectButton: Add allowEmpty property [\#5073](https://github.com/primefaces/primereact/issues/5073) +- DataTable: Clicking the center mouse button on a row should open the row item in a new tab [\#5051](https://github.com/primefaces/primereact/issues/5051) +- Dropdown: Allow to pass "className" with a group as well [\#5047](https://github.com/primefaces/primereact/issues/5047) + +**Fixed bugs:** + +- Dock: Toast Component not working properly [\#5076](https://github.com/primefaces/primereact/issues/5076) +- DataTable bug when clicked in rowExpansion icon with selectionMode="single". [\#5074](https://github.com/primefaces/primereact/issues/5074) +- Editor layer defect [\#5065](https://github.com/primefaces/primereact/issues/5065) +- ContextMenu: Broken with nested items \(10.0\) [\#5064](https://github.com/primefaces/primereact/issues/5064) +- Menu: Menu with popup prop passed doesnot close on Escape keypress. [\#5044](https://github.com/primefaces/primereact/issues/5044) +- DataTable: Checkbox onChange stops propagation [\#5039](https://github.com/primefaces/primereact/issues/5039) +- Scroll Panel: Scroll Panel does not scroll with mouse [\#5038](https://github.com/primefaces/primereact/issues/5038) +- Context Menu In Datatable [\#5035](https://github.com/primefaces/primereact/issues/5035) +- MultiSelect: FilterTemplate prop not working, execution error [\#5028](https://github.com/primefaces/primereact/issues/5028) +- Calendar: When stepMinute is set, the time value does not "snap" on initial date change [\#5027](https://github.com/primefaces/primereact/issues/5027) +- UseStorage hook window listener does not parse JSON [\#5026](https://github.com/primefaces/primereact/issues/5026) +- Fixed lara blue state colors [\#5015](https://github.com/primefaces/primereact/issues/5015) +- Progress bar determinate type doesnt apply classNames passed through props [\#5003](https://github.com/primefaces/primereact/issues/5003) +- DataTable: Filter Menu Icon disappeared after sorting [\#4994](https://github.com/primefaces/primereact/issues/4994) +- Column: headerClassName [\#4993](https://github.com/primefaces/primereact/issues/4993) +- MultiSelect: Doesn't render items [\#4988](https://github.com/primefaces/primereact/issues/4988) +- InputMask does not fire onComplete method when a slotChar is present [\#3240](https://github.com/primefaces/primereact/issues/3240) + +## [10.0.2](https://github.com/primefaces/primereact/tree/10.0.2) (2023-09-29) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.0.1...10.0.2) + +**Fixed bugs:** + +- The .esm builds not working as expected. [\#4984](https://github.com/primefaces/primereact/issues/4984) +- Improve Tailwind import [\#4985](https://github.com/primefaces/primereact/issues/4985) + +## [10.0.1](https://github.com/primefaces/primereact/tree/10.0.1) (2023-09-28) + +[Full Changelog](https://github.com/primefaces/primereact/compare/10.0.0...10.0.1) + +**Fixed bugs:** + +- Base styles are not loading [\#4982](https://github.com/primefaces/primereact/issues/4982) + +## [10.0.0](https://github.com/primefaces/primereact/tree/10.0.0) (2023-09-28) + +[Full Changelog](https://github.com/primefaces/primereact/compare/9.6.2...10.0.0) + +**Breaking Changes:** + +- Theme updates: change `:focus` to `:focus-visible` [\#4972](https://github.com/primefaces/primereact/issues/4972) +- New @layer implementation [\#4959](https://github.com/primefaces/primereact/issues/4959) +- Core: Drop Internet Explorer Support [\#3238](https://github.com/primefaces/primereact/issues/3238) + +**Implemented New Features and Enhancements:** + +- Add / Update OG Image [\#4970](https://github.com/primefaces/primereact/issues/4970) +- SlideMenu: SlideMenu with `popup` prop passed doesnot close on Escape keypress. [\#4961](https://github.com/primefaces/primereact/issues/4961) +- Dialog: component scrollbar shift [\#4958](https://github.com/primefaces/primereact/issues/4958) +- ConfirmPopup: Escape key does not close the popup. [\#4952](https://github.com/primefaces/primereact/issues/4952) +- Multiselect: Display labels of selected items in filtered component [\#4944](https://github.com/primefaces/primereact/issues/4944) +- Update Lara theme font to Inter Var [\#4942](https://github.com/primefaces/primereact/issues/4942) +- Dialog: blockScroll + visible + fullscreen mode gives unexpected behavior if dialog is unmounted while visible [\#4940](https://github.com/primefaces/primereact/issues/4940) +- Add gtag manager [\#4900](https://github.com/primefaces/primereact/issues/4900) +- Dropdown: allow to set label's class name via the api [\#4877](https://github.com/primefaces/primereact/issues/4877) +- FileUpload: Localize pending and file sizes [\#4872](https://github.com/primefaces/primereact/issues/4872) +- Calendar: Missing `slotChar` prop [\#4866](https://github.com/primefaces/primereact/issues/4866) +- AutoComplete: required property doesn't exist [\#4858](https://github.com/primefaces/primereact/issues/4858) +- OverlayPanel: does not reposition itself when its content forces its size to change [\#4819](https://github.com/primefaces/primereact/issues/4819) +- TreeTable: There's not a way to get the data after a change [\#4816](https://github.com/primefaces/primereact/issues/4816) +- Autocomplete: selectionLimit ux enhancement [\#4784](https://github.com/primefaces/primereact/issues/4784) +- SSR: Support Server Component [\#4634](https://github.com/primefaces/primereact/issues/4634) +- Add `unstyled` mode for all components [\#4602](https://github.com/primefaces/primereact/issues/4602) + +**Fixed bugs:** + +- Messages: Icon shrinks as text in message grows larger [\#4977](https://github.com/primefaces/primereact/issues/4977) +- Image: Image Preview shows a browser scrollbar. [\#4963](https://github.com/primefaces/primereact/issues/4963) +- Tree Table: Footer is defined as a function but it doesn't work [\#4960](https://github.com/primefaces/primereact/issues/4960) +- MegaMenu: click not navigating to `url` [\#4956](https://github.com/primefaces/primereact/issues/4956) +- FileUpload: Input Triggered on Any Mouse Click [\#4948](https://github.com/primefaces/primereact/issues/4948) +- Dialog: When using blockScroll and the dialog is unmounted while being visible, scrolling continues to be blocked [\#4938](https://github.com/primefaces/primereact/issues/4938) +- Password: onKeyDown event is triggered twice. [\#4934](https://github.com/primefaces/primereact/issues/4934) +- Menu | MenuItem API id property is ignored [\#4932](https://github.com/primefaces/primereact/issues/4932) +- Ripple: Has no effect on touch enabled desktop screens [\#4909](https://github.com/primefaces/primereact/issues/4909) +- Slider error on mobile devices [\#4906](https://github.com/primefaces/primereact/issues/4906) +- Calendar: Multiple Month/Year selection mode not highlighting selected month [\#4892](https://github.com/primefaces/primereact/issues/4892) +- Build: missing `components/lib/common/Common.css` [\#4889](https://github.com/primefaces/primereact/issues/4889) +- InputMask: Autofocus crashes [\#4882](https://github.com/primefaces/primereact/issues/4882) +- InputNumber: Doesn't allow minus sign in currency mode [\#4875](https://github.com/primefaces/primereact/issues/4875) +- Toast: Toast Icon is too small when there is long text [\#4873](https://github.com/primefaces/primereact/issues/4873) +- DataTable: conditional row reorder shows "false" instead of hiding reorder icon [\#4854](https://github.com/primefaces/primereact/issues/4854) +- AutoComplete: can't remove item [\#4848](https://github.com/primefaces/primereact/issues/4848) +- DataTable filterDisplay="menu", Uncaught TypeError [\#4845](https://github.com/primefaces/primereact/issues/4845) +- Avatar: shape="circle" is not working [\#4839](https://github.com/primefaces/primereact/issues/4839) +- Password: tabIndex duplication [\#4836](https://github.com/primefaces/primereact/issues/4836) +- Calendar: Class ".p-inputwrapper-focus" is not removed when the input is unfocused [\#4834](https://github.com/primefaces/primereact/issues/4834) +- DataTable: editorCallback does not update a value if the field name of column has nested elements [\#4814](https://github.com/primefaces/primereact/issues/4814) +- Calendar: disabledDays do affect year to be also disabled [\#4803](https://github.com/primefaces/primereact/issues/4803) +- Context: setInputStyle\("filled"\) doesn't switch the style [\#4799](https://github.com/primefaces/primereact/issues/4799) +- Ripple: Ripple effect not working in some instances [\#4153](https://github.com/primefaces/primereact/issues/4153) +- Calendar: Changing Calendar input \(with mask\) clears the rest of the form's state [\#4030](https://github.com/primefaces/primereact/issues/4030) +- Datatable: onValueChange with Removable Sort [\#3133](https://github.com/primefaces/primereact/issues/3133) + +## [9.6.2](https://github.com/primefaces/primereact/tree/9.6.2) (2023-08-17) + +[Full Changelog](https://github.com/primefaces/primereact/compare/9.6.1...9.6.2) + +**Implemented New Features and Enhancements:** + +- DataTable: Type issue for Selection Mode [\#4777](https://github.com/primefaces/primereact/issues/4777) + +**Fixed bugs:** + +- Carousel: created style lifecycle issue [\#4779](https://github.com/primefaces/primereact/issues/4779) +- Dropdown: MenuItem not respecting style attribute [\#4766](https://github.com/primefaces/primereact/issues/4766) +- Slider: onSlideEnd behaviour has changed [\#4680](https://github.com/primefaces/primereact/issues/4680) +- Tooltip: autoHide={false} broken on version 9 [\#4604](https://github.com/primefaces/primereact/issues/4604) +- Calendar: Mask is not displayed [\#4579](https://github.com/primefaces/primereact/issues/4579) +- Calendar: The date cannot be selected from the first click in the opened popup [\#4568](https://github.com/primefaces/primereact/issues/4568) +- DataTable: Column resize is not working properly. [\#4471](https://github.com/primefaces/primereact/issues/4471) +- Carousel: Swipe functionality [\#3788](https://github.com/primefaces/primereact/issues/3788) + +## [9.6.1](https://github.com/primefaces/primereact/tree/9.6.1) (2023-08-01) + +[Full Changelog](https://github.com/primefaces/primereact/compare/9.6.0...9.6.1) + +**Fixed bugs:** + +- FileUpload: Uploading file issue in multiple= false [\#4665](https://github.com/primefaces/primereact/issues/4665) +- DataTable: Unexpected Behavior in Production Mode for ColumnResize [\#4655](https://github.com/primefaces/primereact/issues/4655) + +## [9.6.0](https://github.com/primefaces/primereact/tree/9.6.0) (2023-06-27) + +[Full Changelog](https://github.com/primefaces/primereact/compare/9.5.0...9.6.0) + +**Implemented New Features and Enhancements:** + +- TreeSelect: Support custom expand/collapse icons [\#4525](https://github.com/primefaces/primereact/issues/4525) +- FileUpload: Uploaded files ref methods [\#4516](https://github.com/primefaces/primereact/issues/4516) +- Carousel: Add start/stop autoplay to exposed methods [\#4513](https://github.com/primefaces/primereact/issues/4513) +- TreeTable: Row hover event [\#4502](https://github.com/primefaces/primereact/issues/4502) +- TreeTable: Add toggler template \(same as Tree component\) [\#4499](https://github.com/primefaces/primereact/issues/4499) +- Dropdown: VirtualScrollerRef access for scrollToIndex [\#4489](https://github.com/primefaces/primereact/issues/4489) +- New passthrough\(pt\) property implementation for Data Components [\#4432](https://github.com/primefaces/primereact/issues/4432) +- New passthrough\(pt\) property implementation for Form Components [\#4431](https://github.com/primefaces/primereact/issues/4431) +- InputNumber should support global locale [\#4291](https://github.com/primefaces/primereact/issues/4291) +- TreeSelect: `nodeTemplate` property [\#3678](https://github.com/primefaces/primereact/issues/3678) + +**Fixed bugs:** + +- FileUpload component does not pass file information in the onSelect event [\#4557](https://github.com/primefaces/primereact/issues/4557) +- Calendar: Mask prop does not work [\#4548](https://github.com/primefaces/primereact/issues/4548) +- ContextMenu: Global not working in Strict Mode [\#4543](https://github.com/primefaces/primereact/issues/4543) +- PickList: Error when Transferring Unselected Values in Pick List Functionality [\#4540](https://github.com/primefaces/primereact/issues/4540) +- MultiSelect \(group\) SelectAll checked when all items in first group are selected [\#4535](https://github.com/primefaces/primereact/issues/4535) +- FileUpload: input passthrough not working when mode="basic" [\#4533](https://github.com/primefaces/primereact/issues/4533) +- MultiSelect: Dropdown closes on deselect [\#4523](https://github.com/primefaces/primereact/issues/4523) +- Skeleton: children prop not rendering [\#4512](https://github.com/primefaces/primereact/issues/4512) +- ScrollTop: doesn't work [\#4505](https://github.com/primefaces/primereact/issues/4505) +- BreadCrumb: label home prop doesn't work [\#4504](https://github.com/primefaces/primereact/issues/4504) +- DataTable: Checkbox/Radio not respecting isDataSelectable [\#4492](https://github.com/primefaces/primereact/issues/4492) +- SplitButton: menu icon not visible in large size [\#4483](https://github.com/primefaces/primereact/issues/4483) +- Menubar: Cannot use useRef [\#4467](https://github.com/primefaces/primereact/issues/4467) +- TabView: On initial load, the page will scroll down to the Tab if it's below the scroll window [\#4462](https://github.com/primefaces/primereact/issues/4462) +- Calendar: showMinMaxRange property is broken in multiple ways [\#4456](https://github.com/primefaces/primereact/issues/4456) +- Calendar: Navigation broken when defining min and max values [\#4449](https://github.com/primefaces/primereact/issues/4449) + +## [9.5.0](https://github.com/primefaces/primereact/tree/9.5.0) (2023-05-24) + +[Full Changelog](https://github.com/primefaces/primereact/compare/9.4.0...9.5.0) + +**Implemented New Features and Enhancements:** + +- Add `hideOverlaysOnDocumentScrolling` option to PrimeReact config [\#4448](https://github.com/primefaces/primereact/issues/4448) +- Icons: clipPath improvements [\#4441](https://github.com/primefaces/primereact/issues/4441) +- AutoComplete: panelFooterTemplate prop [\#4426](https://github.com/primefaces/primereact/issues/4426) +- MultiSelect: No way to disable filter auto focus [\#4423](https://github.com/primefaces/primereact/issues/4423) +- New passthrough\(pt\) property implementation for Media Components [\#4393](https://github.com/primefaces/primereact/issues/4393) +- New passthrough\(pt\) property implementation for Chart & FileUpload & Message Components [\#4392](https://github.com/primefaces/primereact/issues/4392) +- New passthrough\(pt\) property implementation for Menu Components [\#4391](https://github.com/primefaces/primereact/issues/4391) +- Mention: suggestion panel to hide when scrolling away [\#4223](https://github.com/primefaces/primereact/issues/4223) +- Messages-Toast: Inconsistency [\#4077](https://github.com/primefaces/primereact/issues/4077) +- Menu: Add ability to right align [\#3753](https://github.com/primefaces/primereact/issues/3753) + +**Fixed bugs:** + +- Dropdown: Footer using incorrect style name [\#4446](https://github.com/primefaces/primereact/issues/4446) +- InputNumber: preventing ripple on buttons [\#4443](https://github.com/primefaces/primereact/issues/4443) +- Datatable: filterIcon and filterClearIcon not propagated [\#4439](https://github.com/primefaces/primereact/issues/4439) +- BreadCrumb: SVG location of the DOM [\#4438](https://github.com/primefaces/primereact/issues/4438) +- DataTable: Filter Clear icon is missing [\#4437](https://github.com/primefaces/primereact/issues/4437) +- Datatable: Setting rowEditorInitIcon has no effect. [\#4430](https://github.com/primefaces/primereact/issues/4430) +- MultiSelect clear icon not aligned correctly [\#4427](https://github.com/primefaces/primereact/issues/4427) +- TriStateCheckbox: "undefined" value render checkbox highlighted but without value [\#4422](https://github.com/primefaces/primereact/issues/4422) +- Checkbox: Toggling value by clicking the label broken [\#4402](https://github.com/primefaces/primereact/issues/4402) +- Image: Zoom out action disabled when fully zoomed in [\#4400](https://github.com/primefaces/primereact/issues/4400) +- ConfirmDialog: Missing dialog header [\#4397](https://github.com/primefaces/primereact/issues/4397) +- Autocomplete: multiple + forceSelection [\#4363](https://github.com/primefaces/primereact/issues/4363) +- DataTable: resizableColumns with stateStorage will not adjust saved column width after refresh. [\#4211](https://github.com/primefaces/primereact/issues/4211) +- Autocomplete clears selected values onBlur when forceSelection and multiple are true [\#4203](https://github.com/primefaces/primereact/issues/4203) +- Dropdown: rendering problem when used in a Dialog [\#2683](https://github.com/primefaces/primereact/issues/2683) + +## [9.4.0](https://github.com/primefaces/primereact/tree/9.4.0) (2023-05-12) + +[Full Changelog](https://github.com/primefaces/primereact/compare/9.3.1...9.4.0) + +**Implemented New Features and Enhancements:** + +- New passthrough\(pt\) property implementation for Button Components [\#4360](https://github.com/primefaces/primereact/issues/4360) +- New passthrough\(pt\) property implementation for Overlay Components [\#4359](https://github.com/primefaces/primereact/issues/4359) +- New passthrough\(pt\) property implementation for Misc Components [\#4352](https://github.com/primefaces/primereact/issues/4352) +- New passthrough\(pt\) property implementation for Panel Components [\#4293](https://github.com/primefaces/primereact/issues/4293) +- Events: Forward preventDefault, stopPropagation from original event [\#4375](https://github.com/primefaces/primereact/issues/4375) +- MultiSelect: expose selected value in onChange event [\#4366](https://github.com/primefaces/primereact/issues/4366) +- RadioButton/Checkbox: Add `onClick` event [\#4356](https://github.com/primefaces/primereact/issues/4356) +- Toast/Messages: Fix updates incorrectly updating older version of the state [\#4350](https://github.com/primefaces/primereact/issues/4350) +- DataTable: event.preventDefault\(\) not working in cell edit events [\#4339](https://github.com/primefaces/primereact/issues/4339) +- DataTable: `showHeaders={false}` option [\#4337](https://github.com/primefaces/primereact/issues/4337) +- DataTable: Custom icon prop for filter icon [\#4327](https://github.com/primefaces/primereact/issues/4327) +- Dialog: Maximized should not have rounded borders? [\#4310](https://github.com/primefaces/primereact/issues/4310) +- ColorPicker: Styling the Input [\#4267](https://github.com/primefaces/primereact/issues/4267) +- Panel: Footer Option [\#4200](https://github.com/primefaces/primereact/issues/4200) +- EmptyFilterMessage does not work on Dropdown with virtualscroll [\#4193](https://github.com/primefaces/primereact/issues/4193) +- Dropdown: Footer Template [\#4026](https://github.com/primefaces/primereact/issues/4026) +- Toast+Sidebar: Closing toast closes sidebar [\#3977](https://github.com/primefaces/primereact/issues/3977) +- Datatable : Export custom header export to CSV [\#3975](https://github.com/primefaces/primereact/issues/3975) +- DataTable - Impossible to implement Expandable Row Groups with Row Expansion [\#2213](https://github.com/primefaces/primereact/issues/2213) + +**Fixed bugs:** + +- Calendar: disabledDates prop not working for month [\#4370](https://github.com/primefaces/primereact/issues/4370) +- useSessionStorage Hook: initialization issue [\#4353](https://github.com/primefaces/primereact/issues/4353) +- InputText/InputTextArea: .p-filled class/isFilled bool not resetting after setValue\(""\) [\#4351](https://github.com/primefaces/primereact/issues/4351) +- Dropdown: When using groups and filter options, if optionGroupChildren is set to a different name other than items, filter stops working properly [\#4348](https://github.com/primefaces/primereact/issues/4348) +- DIalog: modal prop is not always respected [\#4334](https://github.com/primefaces/primereact/issues/4334) +- DataTable preventDefault NOT WORKING [\#4333](https://github.com/primefaces/primereact/issues/4333) +- Button: No margin/padding between button text and loading spinner [\#4320](https://github.com/primefaces/primereact/issues/4320) +- Dialog: body scroll is not restored when closing maximized Dialog [\#4313](https://github.com/primefaces/primereact/issues/4313) +- SpeedDial: `buttonTemplate` not working [\#4305](https://github.com/primefaces/primereact/issues/4305) +- Carousel: onPageChange and autoplayInterval does not work together [\#4301](https://github.com/primefaces/primereact/issues/4301) +- Image: Properties e.g. crossOrigin are only applied to the preview and not the full image [\#4300](https://github.com/primefaces/primereact/issues/4300) +- Calendar: time select updates the parent component state through props.value [\#4298](https://github.com/primefaces/primereact/issues/4298) +- FileUpload: console error [\#4294](https://github.com/primefaces/primereact/issues/4294) +- DataTable: sort icon will be resized if the column title is multiline. [\#4283](https://github.com/primefaces/primereact/issues/4283) +- ConfirmDialog: Event triggers multiple times if users spam Enter / Double click on button [\#4168](https://github.com/primefaces/primereact/issues/4168) +- Calendar: disabledDays prop also disable months [\#4015](https://github.com/primefaces/primereact/issues/4015) +- Galleria: Undefined imgSrc if `autoplay` with `circular={false}` [\#3973](https://github.com/primefaces/primereact/issues/3973) +- DataTable: Resizing headers in expand mode does not work correctly [\#3970](https://github.com/primefaces/primereact/issues/3970) +- Dialog: Performing "onMouseDown" inside the Dialog and "onMouseUp" outside of it closes the dialog when "dismissableMask" is true [\#3962](https://github.com/primefaces/primereact/issues/3962) +- TreeTable : Support Custom Templating in Header [\#3946](https://github.com/primefaces/primereact/issues/3946) +- DataTable: Resize column place is not correct [\#3795](https://github.com/primefaces/primereact/issues/3795) +- Tooltip: registering show/hide events twice on each target [\#3701](https://github.com/primefaces/primereact/issues/3701) + +## [9.3.1](https://github.com/primefaces/primereact/tree/9.3.1) (2023-04-26) + +[Full Changelog](https://github.com/primefaces/primereact/compare/9.3.0...9.3.1) + +**Implemented New Features and Enhancements:** + +- Messages: Cannot pass Id property [\#4281](https://github.com/primefaces/primereact/issues/4281) +- Image: missing `crossOrigin`, `referrerPolicy`, `loading` and `useMap` [\#4273](https://github.com/primefaces/primereact/issues/4273) +- Mention: autoResize wont resize back to starting height [\#4197](https://github.com/primefaces/primereact/issues/4197) +- DataTable: Cell edit support Dropdown. [\#2666](https://github.com/primefaces/primereact/issues/2666) + +**Fixed bugs:** + +- DataTable: Correct "Select All" behavior in checkbox selection mode [\#4284](https://github.com/primefaces/primereact/issues/4284) +- DataTable: multisortField - Cannot read properties of undefined \(reading 'field'\) [\#4269](https://github.com/primefaces/primereact/issues/4269) +- Image: No overload matches this call. [\#4268](https://github.com/primefaces/primereact/issues/4268) +- Uncaught reference error for icons. [\#4264](https://github.com/primefaces/primereact/issues/4264) +- Calendar: `numberOfMonths` \> 12 issue [\#4259](https://github.com/primefaces/primereact/issues/4259) +- DataTable: paginator with alwaysShowPaginator: false is displayed for empty table [\#4254](https://github.com/primefaces/primereact/issues/4254) +- PickList: source/target filterTemplate not working [\#4249](https://github.com/primefaces/primereact/issues/4249) +- DataTable: Data are not displayed when "Column" has no "field" attributes [\#4248](https://github.com/primefaces/primereact/issues/4248) +- Tooltip: Does not work if target is dynamic [\#4243](https://github.com/primefaces/primereact/issues/4243) +- TabView: Conditionally render TabPanel under TabView [\#4235](https://github.com/primefaces/primereact/issues/4235) +- Mention: wrong value when clicking on suggestion [\#4221](https://github.com/primefaces/primereact/issues/4221) +- Dropdown: with react-hook-form . Control prop doesn't exist [\#4215](https://github.com/primefaces/primereact/issues/4215) +- TieredMenu: Menu items in are assigned with id attribute with a value of \[object Object\] [\#4011](https://github.com/primefaces/primereact/issues/4011) + +## [9.3.0](https://github.com/primefaces/primereact/tree/9.3.0) (2023-04-19) + +[Full Changelog](https://github.com/primefaces/primereact/compare/9.2.3...9.3.0) + +**Implemented New Features and Enhancements:** + +- Improve icon implementation in core [\#4220](https://github.com/primefaces/primereact/issues/4220) +- Add icon templating support to components [\#4226](https://github.com/primefaces/primereact/issues/4226) +- Add new Icon components [\#4227](https://github.com/primefaces/primereact/issues/4227) + +## [9.2.3](https://github.com/primefaces/primereact/tree/9.2.3) (2023-04-11) + +[Full Changelog](https://github.com/primefaces/primereact/compare/9.2.2...9.2.3) + +**Fixed bugs:** + +- Type missing for PrimeReact.changeTheme [\#4240](https://github.com/primefaces/primereact/issues/4240) + +## [9.2.2](https://github.com/primefaces/primereact/tree/9.2.2) (2023-03-28) + +[Full Changelog](https://github.com/primefaces/primereact/compare/9.2.1...9.2.2) + +**Implemented New Features and Enhancements:** + +- Slider: Change positioning of handles in range mode [\#4184](https://github.com/primefaces/primereact/issues/4184) + +**Fixed bugs:** + +- OverlayEventOptions type inccorrect [\#4189](https://github.com/primefaces/primereact/issues/4189) +- Mention: selected result to replace the search query [\#4188](https://github.com/primefaces/primereact/issues/4188) +- Tree: Missing property `dropNode` in type signature of `TreeDragDropEvent` [\#4179](https://github.com/primefaces/primereact/issues/4179) +- CodeSandbox demos are broken [\#4172](https://github.com/primefaces/primereact/issues/4172) +- Sidebar: Unexpected component hide [\#4170](https://github.com/primefaces/primereact/issues/4170) +- Calendar: `view` typescript missing `year` [\#4163](https://github.com/primefaces/primereact/issues/4163) +- Ripple: first click on component has incorrect location [\#4160](https://github.com/primefaces/primereact/issues/4160) +- primereact.min.css Error at background:transparent URL\(\) with base64 image [\#4097](https://github.com/primefaces/primereact/issues/4097) +- ConfirmDialog: is not loading inside a Shadow DOM [\#4096](https://github.com/primefaces/primereact/issues/4096) + +## [9.2.1](https://github.com/primefaces/primereact/tree/9.2.1) (2023-03-15) + +[Full Changelog](https://github.com/primefaces/primereact/compare/9.2.0...9.2.1) + +**Implemented New Features and Enhancements:** + +- Timeline: subgroups [\#4154](https://github.com/primefaces/primereact/issues/4154) +- Add new style props to SplitButton component [\#4144](https://github.com/primefaces/primereact/issues/4144) +- Using the tooltip attribute inside the Shadow Dom crashes Primereact on hover [\#4143](https://github.com/primefaces/primereact/issues/4143) +- DataTable: responsiveLayout="stack" and scrollable not working together [\#3693](https://github.com/primefaces/primereact/issues/3693) + +**Fixed bugs:** + +- Showcase: multiple pages have a typo of the word 'archive' [\#4146](https://github.com/primefaces/primereact/issues/4146) +- MegaMenu: does not hide menuItem when visible = false [\#4140](https://github.com/primefaces/primereact/issues/4140) +- Multiselect: Errors on types and behaviour not as documented [\#4129](https://github.com/primefaces/primereact/issues/4129) +- DataTable with VirtualScroller: multi selection bug [\#4120](https://github.com/primefaces/primereact/issues/4120) +- InputText: Tooltip and float-label incompatibility when using showOnDisabled [\#4110](https://github.com/primefaces/primereact/issues/4110) +- useIntersectionObserver: Make the options parameter optional [\#4109](https://github.com/primefaces/primereact/issues/4109) +- Button: Severity 'help' missing in TypeScript definition [\#4108](https://github.com/primefaces/primereact/issues/4108) +- DataTable Virtual Scroller: Column Resize Not Working [\#4102](https://github.com/primefaces/primereact/issues/4102) +- Dataview: Callback Documentation Typo [\#4099](https://github.com/primefaces/primereact/issues/4099) +- Datatable: Duplicate events fire in `paginatorPosition=both` [\#4095](https://github.com/primefaces/primereact/issues/4095) +- Button: Size 'large' vs 'lg' [\#4093](https://github.com/primefaces/primereact/issues/4093) +- Theme: `vela-blue` TreeSelect inconsistent theming [\#3669](https://github.com/primefaces/primereact/issues/3669) + +## [9.2.0](https://github.com/primefaces/primereact/tree/9.2.0) (2023-02-21) + +[Full Changelog](https://github.com/primefaces/primereact/compare/9.1.1...9.2.0) + +**Breaking Changes:** + +- DataTable CSS and responsive structure improvements [\#4078](https://github.com/primefaces/primereact/issues/4078) + +**Implemented New Features and Enhancements:** + +- New Hook: useMatchMedia [\#4090](https://github.com/primefaces/primereact/issues/4090) +- Add breakpoint and scrollHeight props to ContextMenu, MegaMenu and TieredMenu components. [\#4082](https://github.com/primefaces/primereact/issues/4082) +- TreeTable CSS improvements [\#4081](https://github.com/primefaces/primereact/issues/4081) +- Add `when` option to useResizeListener hook [\#4080](https://github.com/primefaces/primereact/issues/4080) +- Add tabIndex, appendOnly and inline properties to VirtualScroller [\#4079](https://github.com/primefaces/primereact/issues/4079) + +**Fixed bugs:** + +- Toast: Flick issue on toast-message-exit-active class [\#4084](https://github.com/primefaces/primereact/issues/4084) +- Inplace is not working as expected [\#4070](https://github.com/primefaces/primereact/issues/4070) +- PrimeIcons: can't use pi-arrow-right-arrow-left [\#4062](https://github.com/primefaces/primereact/issues/4062) +- Calendar: Popup incorrect year in multiple month [\#4058](https://github.com/primefaces/primereact/issues/4058) +- Avatar: Wrong className is getting used when image is undefined [\#4049](https://github.com/primefaces/primereact/issues/4049) +- Inline Calendar inside DataTable filter error [\#4042](https://github.com/primefaces/primereact/issues/4042) +- Toast: Summary Overflow Bug [\#4023](https://github.com/primefaces/primereact/issues/4023) + +## [9.1.1](https://github.com/primefaces/primereact/tree/9.1.1) (2023-02-15) + +[Full Changelog](https://github.com/primefaces/primereact/compare/9.1.0...9.1.1) + +**Fixed bugs:** + +- primereact 9.1.0 it is not loaded using vite [\#4064](https://github.com/primefaces/primereact/issues/4064) + +## [9.1.0](https://github.com/primefaces/primereact/tree/9.1.0) (2023-02-15) + +[Full Changelog](https://github.com/primefaces/primereact/compare/9.0.0...9.1.0) + +**Implemented New Features and Enhancements:** + +- Improve responsive styling on Menubar [\#4060](https://github.com/primefaces/primereact/issues/4060) +- FileUpload: Advanced Section same as PrimeVue FileUpload section [\#4059](https://github.com/primefaces/primereact/issues/4059) +- Add breakpoint and scrollHeight properties to CascadeSelect [\#4052](https://github.com/primefaces/primereact/issues/4052) +- Add breakpoint property to PickList and OrderList [\#4050](https://github.com/primefaces/primereact/issues/4050) + +## [9.0.0](https://github.com/primefaces/primereact/tree/9.0.0) (2023-02-13) + +[Full Changelog](https://github.com/primefaces/primereact/compare/9.0.0-rc.1...9.0.0) + +**Implemented New Features and Enhancements:** + +- Add sideEffects: false to nested package.json files on components [\#4028](https://github.com/primefaces/primereact/issues/4028) +- Remove GMap and Captcha [\#4025](https://github.com/primefaces/primereact/issues/4025) +- Core: Deprecated defaultProps still used [\#3786](https://github.com/primefaces/primereact/issues/3786) + +**Fixed bugs:** + +- DataTable: Export Function Newline Separator [\#4001](https://github.com/primefaces/primereact/issues/4001) + +## [9.0.0-rc.1](https://github.com/primefaces/primereact/tree/9.0.0-rc.1) (2023-02-09) + +[Full Changelog](https://github.com/primefaces/primereact/compare/9.0.0-beta.1...9.0.0-rc.1) + +**Breaking Changes:** + +- Remove Maps [\#4038](https://github.com/primefaces/primereact/issues/4038) +- Remove Recaptcha [\#4037](https://github.com/primefaces/primereact/issues/4037) + +**Implemented New Features and Enhancements:** + +- New Hooks [\#4039](https://github.com/primefaces/primereact/issues/4039) + +## [9.0.0-beta.1](https://github.com/primefaces/primereact/tree/9.0.0-beta.1) (2023-01-26) + +[Full Changelog](https://github.com/primefaces/primereact/compare/8.7.3...9.0.0-beta.1) + +**Breaking Changes:** + +- TypeScript: Improve definitions on all components [\#2734](https://github.com/primefaces/primereact/issues/2734) + +**Implemented New Features and Enhancements:** + +- Autocomplete: disable issue [\#3953](https://github.com/primefaces/primereact/issues/3953) +- Dropdown button icon [\#3952](https://github.com/primefaces/primereact/issues/3952) +- Dropdown: support `onClick` event to intercept the event propagation [\#3935](https://github.com/primefaces/primereact/issues/3935) +- ReCaptcha: Allow for custom URL [\#3921](https://github.com/primefaces/primereact/issues/3921) +- Sidebar: `dismissible` not working immediately while sidebar is visible [\#3811](https://github.com/primefaces/primereact/issues/3811) +- Inputs: expose focus\(\) method on all input components [\#3806](https://github.com/primefaces/primereact/issues/3806) +- FileUpload: Control internal files state [\#3750](https://github.com/primefaces/primereact/issues/3750) +- Dropdown Item list responsive issue [\#2574](https://github.com/primefaces/primereact/issues/2574) +- DataTable/TreeTable: stricter generically typed API [\#2523](https://github.com/primefaces/primereact/issues/2523) +- TreeTable: accessibility improvements for keyboard navigation [\#2153](https://github.com/primefaces/primereact/issues/2153) +- DataTable features in PickList lists [\#1374](https://github.com/primefaces/primereact/issues/1374) + +**Fixed bugs:** + +- Calendar: Year incorrectly disabled in navigator view due to minDate [\#3967](https://github.com/primefaces/primereact/issues/3967) +- InputNumber : In Mobile mode value are getting trigger two times [\#3951](https://github.com/primefaces/primereact/issues/3951) +- DataTable: CellEdit Filtering and NOT_EQUALS [\#3928](https://github.com/primefaces/primereact/issues/3928) +- Dialog: breakpoints not working in \ [\#3922](https://github.com/primefaces/primereact/issues/3922) +- InputNumber: When using the InputNumber with the built in spinner buttons, "onValueChange" is called before "onChange". [\#3913](https://github.com/primefaces/primereact/issues/3913) +- Chips separator not working on mobile [\#3885](https://github.com/primefaces/primereact/issues/3885) +- DataTable: Global search won't reset when the field is empty on react 17 [\#3819](https://github.com/primefaces/primereact/issues/3819) +- DataTable: RowReorder fails in case of pagination on page other than first & last [\#3817](https://github.com/primefaces/primereact/issues/3817) +- DataTable: 'virtualScroll' + selection [\#3804](https://github.com/primefaces/primereact/issues/3804) +- DataTable: Error when 'virtualScrollerOptions.showLoader' + 'dataKey' are enabled [\#3803](https://github.com/primefaces/primereact/issues/3803) +- DataTable: Virtual Scroll with Loading template + frozen columns [\#3800](https://github.com/primefaces/primereact/issues/3800) +- TreeTable: Error in resize mode expand [\#3796](https://github.com/primefaces/primereact/issues/3796) +- File Upload: itemTemplate missing props [\#3792](https://github.com/primefaces/primereact/issues/3792) +- SelectButton: Submit with React Hook Form [\#3790](https://github.com/primefaces/primereact/issues/3790) +- Calendar: Inline display issue if more than one month [\#3789](https://github.com/primefaces/primereact/issues/3789) +- DataTable: Edit Programmatic all row cannot read properties of undefined \(reading 'data'\) [\#3783](https://github.com/primefaces/primereact/issues/3783) +- ConfirmPopup: Using Tag, when popup is dismissed it stops working forever [\#3779](https://github.com/primefaces/primereact/issues/3779) +- Calendar: Console warning using ParseDateTime [\#3777](https://github.com/primefaces/primereact/issues/3777) +- Calendar: StepMinute should initialize value [\#3770](https://github.com/primefaces/primereact/issues/3770) +- ToggleButton: Received `false` for a non-boolean attribute `tabIndex` [\#3768](https://github.com/primefaces/primereact/issues/3768) +- Hook: useOverlayListener incorrectly passing target [\#3766](https://github.com/primefaces/primereact/issues/3766) +- SplitButton: className in menu api does not work [\#3757](https://github.com/primefaces/primereact/issues/3757) +- Password: Eye icon problem in MS Edge and IE [\#3756](https://github.com/primefaces/primereact/issues/3756) +- Dialog: Unintended margins [\#3755](https://github.com/primefaces/primereact/issues/3755) +- DataTable: row reordering in lazy mode [\#3618](https://github.com/primefaces/primereact/issues/3618) +- AutoComplete: space between overlay panel and the component [\#3463](https://github.com/primefaces/primereact/issues/3463) +- InputStyle gets ignored within overlays bound to body [\#3428](https://github.com/primefaces/primereact/issues/3428) +- Datatable: Virtualscroll and frozenvalue \(frozen rows\) hide first rows [\#3361](https://github.com/primefaces/primereact/issues/3361) +- Dropdown: Incorrect flipFit detection when using filter [\#3203](https://github.com/primefaces/primereact/issues/3203) +- DataTable: Edit Programmatic all row cannot read properties of undefined \(reading 'data'\) [\#3013](https://github.com/primefaces/primereact/issues/3013) +- Menu: Popup menu positioning - appendTo [\#2980](https://github.com/primefaces/primereact/issues/2980) + +## [8.7.3](https://github.com/primefaces/primereact/tree/8.7.3) (2022-12-05) + +[Full Changelog](https://github.com/primefaces/primereact/compare/8.7.2...8.7.3) + +**Implemented New Features and Enhancements:** + +- MultiSelect vs Dropdown has different focus behaviour [\#3721](https://github.com/primefaces/primereact/issues/3721) +- Datatable: Get the values from the table when the filter is done [\#3720](https://github.com/primefaces/primereact/issues/3720) +- Carousel: Marquee animation [\#3710](https://github.com/primefaces/primereact/issues/3710) +- Datatable: onRowMouseEnter callback [\#3703](https://github.com/primefaces/primereact/issues/3703) +- DataTable: createResponsiveStyle not called on scrollable property change [\#3694](https://github.com/primefaces/primereact/issues/3694) +- TreeSelect: allow focus in React Hook Form [\#3685](https://github.com/primefaces/primereact/issues/3685) +- BlockUI: Add `style` and `className` to container [\#3683](https://github.com/primefaces/primereact/issues/3683) +- Image: imageStyle prop is of type string instead of React.CSSProperties [\#3668](https://github.com/primefaces/primereact/issues/3668) +- Datatable FilterDisplay as menu: Apply with 'Enter' [\#3655](https://github.com/primefaces/primereact/issues/3655) +- ColorPicker: Allow to set the panel's className [\#3654](https://github.com/primefaces/primereact/issues/3654) +- Listbox: Add emptyMessage like in Dropdown [\#3649](https://github.com/primefaces/primereact/issues/3649) +- Avatar: Fallback to label or icon variant when image loading fails [\#3647](https://github.com/primefaces/primereact/issues/3647) +- DataTable: RowGrouping Header Template allow control of colspan [\#3643](https://github.com/primefaces/primereact/issues/3643) +- TreeNode: Add `id` property [\#3616](https://github.com/primefaces/primereact/issues/3616) +- MultiSelect: not selecting correct value when "options" objects contain property "value" [\#3392](https://github.com/primefaces/primereact/issues/3392) +- MultiSelect: Add "overlayVisible" property [\#3302](https://github.com/primefaces/primereact/issues/3302) +- InputNumber just perform the onChange when blur [\#3003](https://github.com/primefaces/primereact/issues/3003) +- Tooltip: incorrectly positioned [\#2796](https://github.com/primefaces/primereact/issues/2796) +- MultiSelect: Enable more display options [\#2745](https://github.com/primefaces/primereact/issues/2745) +- Showcase: Save theme setting in localStorage [\#2671](https://github.com/primefaces/primereact/issues/2671) +- Tooltip: show at mouse position without following the mouse [\#2588](https://github.com/primefaces/primereact/issues/2588) +- Multiple groupField issue [\#2333](https://github.com/primefaces/primereact/issues/2333) +- ContextMenu: Submenu overflowing the page [\#2318](https://github.com/primefaces/primereact/issues/2318) +- DataTable onRowBlur and onRowMouseLeave events [\#1945](https://github.com/primefaces/primereact/issues/1945) +- DataTable grouping rows with similar names, more than one field at a time [\#1039](https://github.com/primefaces/primereact/issues/1039) +- Multi Row Grouping for DataTable [\#728](https://github.com/primefaces/primereact/issues/728) + +**Fixed bugs:** + +- Slider with range and max=10 - initial right slider position is 1000 [\#3738](https://github.com/primefaces/primereact/issues/3738) +- Chart initialized in unmounted component [\#3725](https://github.com/primefaces/primereact/issues/3725) +- Messages/Toast: The messages.current.show\(\[\]\) method causes the browser to crash [\#3716](https://github.com/primefaces/primereact/issues/3716) +- Core: PrimeReact.nullSortOrder not working correctly [\#3712](https://github.com/primefaces/primereact/issues/3712) +- Button: Tooltip remains displayed after button is disabled [\#3692](https://github.com/primefaces/primereact/issues/3692) +- TreeTable: cellClose throwing error [\#3689](https://github.com/primefaces/primereact/issues/3689) +- Tooltip: Vertical scrollbar appears when tooltip shows the first time [\#3687](https://github.com/primefaces/primereact/issues/3687) +- Dropdown: Expose focusInputRef for React Hook Form [\#3662](https://github.com/primefaces/primereact/issues/3662) +- AutoComplete: Reusing references for suggestions prop bug [\#3659](https://github.com/primefaces/primereact/issues/3659) +- Tristate and Multicheckbox: Unable to change disabled checkbox cursor [\#3641](https://github.com/primefaces/primereact/issues/3641) +- RadioButton: onChange event is called for each click [\#3636](https://github.com/primefaces/primereact/issues/3636) +- nmp run dev fails under Linux [\#3631](https://github.com/primefaces/primereact/issues/3631) +- DataTable: TypeError when adding and starting editing a new row [\#3476](https://github.com/primefaces/primereact/issues/3476) +- Dialog/Overlay: Flickering in Vite [\#3122](https://github.com/primefaces/primereact/issues/3122) +- InputNumber: Value typed by the user is not entered, when suffix used [\#3029](https://github.com/primefaces/primereact/issues/3029) +- TieredMenu: sub-items are not visible when there's not enough space at the bottom [\#2837](https://github.com/primefaces/primereact/issues/2837) +- InputNumber: input content can desync from value prop after blur [\#2527](https://github.com/primefaces/primereact/issues/2527) +- DataTable: ContextMenu showcase/theme doesn't highlight selection [\#2526](https://github.com/primefaces/primereact/issues/2526) +- OrderList: Drag & drop is not working [\#1883](https://github.com/primefaces/primereact/issues/1883) +- InputNumber: Arrow keys not working properly [\#1866](https://github.com/primefaces/primereact/issues/1866) +- DataTable: onValueChange not called when setting filter state programmatically [\#1396](https://github.com/primefaces/primereact/issues/1396) +- Cell editor with sort-filter fails [\#1257](https://github.com/primefaces/primereact/issues/1257) +- Cell Editor reapplies focus to invalid field [\#1247](https://github.com/primefaces/primereact/issues/1247) + +## [8.7.2](https://github.com/primefaces/primereact/tree/8.7.2) (2022-11-10) + +[Full Changelog](https://github.com/primefaces/primereact/compare/8.7.1...8.7.2) + +**Implemented New Features and Enhancements:** + +- Skeleton: Jest test [\#3603](https://github.com/primefaces/primereact/issues/3603) +- Avatar/AvatarGroup: Jest test [\#3601](https://github.com/primefaces/primereact/issues/3601) +- Tag: Jest test [\#3599](https://github.com/primefaces/primereact/issues/3599) +- InputNumber: Add maxLength Property [\#3595](https://github.com/primefaces/primereact/issues/3595) +- InputTextarea: Jest Tests [\#3582](https://github.com/primefaces/primereact/issues/3582) +- InputText: Jest tests [\#3580](https://github.com/primefaces/primereact/issues/3580) +- Divider: Add jest unit testing to the Divider component [\#3577](https://github.com/primefaces/primereact/issues/3577) +- InputTextArea: Add KeyFilter [\#3575](https://github.com/primefaces/primereact/issues/3575) +- InputText/InputTextArea: Typescript won't allow setting `value` [\#3573](https://github.com/primefaces/primereact/issues/3573) +- Tooltip: Add Jest testing [\#3569](https://github.com/primefaces/primereact/issues/3569) +- Badge: Add jest unit testing to the Badge component [\#3567](https://github.com/primefaces/primereact/issues/3567) +- Chip: Add test specifications [\#3557](https://github.com/primefaces/primereact/issues/3557) +- Column: exportField missing from TypeScript parameters [\#3540](https://github.com/primefaces/primereact/issues/3540) +- Autocomplete: add selectionLimit [\#2949](https://github.com/primefaces/primereact/issues/2949) + +**Fixed bugs:** + +- Ripple: Uncaught ReferenceError: isTouching is not defined [\#3593](https://github.com/primefaces/primereact/issues/3593) +- TieredMenu: Close menu on selection \(like PrimeVue\) [\#3590](https://github.com/primefaces/primereact/issues/3590) +- Calendar : `keepInvalid` no longer works [\#3559](https://github.com/primefaces/primereact/issues/3559) +- DataTable : column name with dot [\#3548](https://github.com/primefaces/primereact/issues/3548) +- Splitter: Error with only 1 panel [\#3546](https://github.com/primefaces/primereact/issues/3546) +- Calendar: Setting value in range mode [\#3545](https://github.com/primefaces/primereact/issues/3545) +- TreeTableHeader: Warning: Each child in a list should have a unique "key" prop. [\#3543](https://github.com/primefaces/primereact/issues/3543) +- Calendar: Changing a value removes the entire value [\#2927](https://github.com/primefaces/primereact/issues/2927) + +## [8.7.1](https://github.com/primefaces/primereact/tree/8.7.1) + +[Full Changelog](https://github.com/primefaces/primereact/compare/8.7.0...8.7.1) + +**Implemented New Features and Enhancements:** + +- Image: Update default properties [\#3536](https://github.com/primefaces/primereact/issues/3536) +- Button: Add test specifications [\#3533](https://github.com/primefaces/primereact/issues/3533) +- Remove index.d.ts from primereact library [\#3513](https://github.com/primefaces/primereact/issues/3513) +- Timeline: Add missing type of align as enum. [\#3509](https://github.com/primefaces/primereact/issues/3509) + +**Fixed bugs:** + +- Splitter: widths provided to SplitterPanel.size are not correctly applied [\#3534](https://github.com/primefaces/primereact/issues/3534) +- Datatable doesn't render boolean values. [\#3529](https://github.com/primefaces/primereact/issues/3529) +- Splitter: esm build throws TypeError due to improper use of const in a for loop [\#3527](https://github.com/primefaces/primereact/issues/3527) +- Ripple: ripple start point is not init in mobile env [\#3526](https://github.com/primefaces/primereact/issues/3526) +- Calendar: Inconsistent behaviour around viewDate and changed value. [\#3516](https://github.com/primefaces/primereact/issues/3516) +- Calendar: Value does not update on external change [\#3515](https://github.com/primefaces/primereact/issues/3515) +- tabIndex prop can be optional on Accordion [\#3512](https://github.com/primefaces/primereact/issues/3512) +- Toast: non-responsive toast [\#3498](https://github.com/primefaces/primereact/issues/3498) + +## [8.7.0](https://github.com/primefaces/primereact/tree/8.7.0) + +[Full Changelog](https://github.com/primefaces/primereact/compare/8.6.1...8.7.0) + +**Implemented New Features and Enhancements:** + +- Paginator: `PaginatorTemplateOptions` interface elements should be optional \(TypeScript\) [\#3503](https://github.com/primefaces/primereact/issues/3503) +- Tooltip: programmatic control show/hide [\#3500](https://github.com/primefaces/primereact/issues/3500) +- Button: Ripple animation missing on touch down [\#3497](https://github.com/primefaces/primereact/issues/3497) +- Calendar : Does not detection changes value in footer template [\#3484](https://github.com/primefaces/primereact/issues/3484) +- Splitter: Non optimal handling of splitter sizing [\#3483](https://github.com/primefaces/primereact/issues/3483) +- Core: Add Jest unit tests [\#3477](https://github.com/primefaces/primereact/issues/3477) +- Toast: Delete Toast by Id [\#3455](https://github.com/primefaces/primereact/issues/3455) +- Editor: respect maxLength property [\#3454](https://github.com/primefaces/primereact/issues/3454) +- Implement the new PRO Support Page [\#3449](https://github.com/primefaces/primereact/issues/3449) +- TypeScript: All `style` declarations should be `React.CSSProperties` [\#3440](https://github.com/primefaces/primereact/issues/3440) +- Progressbar: Dynamic ProgressBar [\#3433](https://github.com/primefaces/primereact/issues/3433) +- MultiSelect: Allow primitives in filter [\#3420](https://github.com/primefaces/primereact/issues/3420) +- SlideMenu: Pass information about levelState [\#3407](https://github.com/primefaces/primereact/issues/3407) +- SlideMenu: Issue with scrollbar [\#3398](https://github.com/primefaces/primereact/issues/3398) +- SlideMenu: Add navigateBack to ref [\#3397](https://github.com/primefaces/primereact/issues/3397) +- Image: Allow `zoomSrc` different than `src` [\#3390](https://github.com/primefaces/primereact/issues/3390) +- Autocomplete: show\(\) and hide\(\) missing in ref [\#3387](https://github.com/primefaces/primereact/issues/3387) +- DataTable: Expose restoreColumnWidths+ in ref [\#3384](https://github.com/primefaces/primereact/issues/3384) +- Calendar: Overwrite formatDateTime and parseDateTime functions [\#3381](https://github.com/primefaces/primereact/issues/3381) +- Data Attribute: Fix \#3321 [\#3378](https://github.com/primefaces/primereact/issues/3378) +- DataTable: crash during third party drag and drop handling [\#3376](https://github.com/primefaces/primereact/issues/3376) +- Filters: Allow filters on primitive arrays [\#3375](https://github.com/primefaces/primereact/issues/3375) +- Column: Add tooltip to header [\#3368](https://github.com/primefaces/primereact/issues/3368) +- Paginator: RowsPerPageDropdown fix ARIA label [\#3365](https://github.com/primefaces/primereact/issues/3365) +- Toast: Pin a specific message on User Click [\#3260](https://github.com/primefaces/primereact/issues/3260) +- Column: bodyClassName could accept a function with the corresponding DataTable value as a param, returning a string [\#3215](https://github.com/primefaces/primereact/issues/3215) +- DataTable: Custom expander according to the rowData [\#2918](https://github.com/primefaces/primereact/issues/2918) +- DataTable/TreeTable: global filter customization [\#1450](https://github.com/primefaces/primereact/issues/1450) +- Calendar using locale date format [\#993](https://github.com/primefaces/primereact/issues/993) +- Support custom date format function for the input element [\#852](https://github.com/primefaces/primereact/issues/852) + +**Fixed bugs:** + +- CONTRIBUTING: Fix forum URL [\#3492](https://github.com/primefaces/primereact/issues/3492) +- DataTable: in controlled pagination mode onPage always called initially with first=0 [\#3489](https://github.com/primefaces/primereact/issues/3489) +- Calendar: Year selection ignores maxDate [\#3488](https://github.com/primefaces/primereact/issues/3488) +- TabView: Missing onKeyDown in header template [\#3479](https://github.com/primefaces/primereact/issues/3479) +- Column: onCellEditComplete incorrect Typescript def [\#3469](https://github.com/primefaces/primereact/issues/3469) +- AutoComplete: Missing dropdownAriaLabel property [\#3467](https://github.com/primefaces/primereact/issues/3467) +- Mention: Some properties doesn't exist on type [\#3461](https://github.com/primefaces/primereact/issues/3461) +- Button: getElement is undefined [\#3453](https://github.com/primefaces/primereact/issues/3453) +- Dialog - Maximizable [\#3432](https://github.com/primefaces/primereact/issues/3432) +- DataTable: Filter is not matching using globalFilter attribute [\#3430](https://github.com/primefaces/primereact/issues/3430) +- InputNumber: Typing the minus sign at the start of the number does not work the first time [\#3426](https://github.com/primefaces/primereact/issues/3426) +- Autocomplete: readOnly not working when 'multiple' prop is set [\#3423](https://github.com/primefaces/primereact/issues/3423) +- Mention: Some properties doesn't exist on type [\#3419](https://github.com/primefaces/primereact/issues/3419) +- Splitter state is not saved in StrictMode [\#3413](https://github.com/primefaces/primereact/issues/3413) +- Dock: Showcase example broken [\#3393](https://github.com/primefaces/primereact/issues/3393) +- Datatable: onSelectionChange event returns wrong rowIndex with shiftKey selection [\#3388](https://github.com/primefaces/primereact/issues/3388) +- Button: bad rendering for button with icon and children [\#3382](https://github.com/primefaces/primereact/issues/3382) +- DataTable: custom filter icon is not updating [\#3373](https://github.com/primefaces/primereact/issues/3373) +- Gallaria: localeOption is not defined. Bug introduced in 8.6.0 [\#3370](https://github.com/primefaces/primereact/issues/3370) +- Toast: Close button decreases as size increases [\#3116](https://github.com/primefaces/primereact/issues/3116) +- Datatable: globalFilter option triggered with old value [\#2996](https://github.com/primefaces/primereact/issues/2996) +- DataScroller: "first" is always 0 on OnLazyLoad [\#2987](https://github.com/primefaces/primereact/issues/2987) +- AccordionTab: keyboard navigation not working when inside a Dialog [\#2864](https://github.com/primefaces/primereact/issues/2864) +- InputNumber: delete numbers with decimal mode - bug [\#2677](https://github.com/primefaces/primereact/issues/2677) + +## [8.6.1](https://github.com/primefaces/primereact/tree/8.6.1) (2022-09-25) + +[Full Changelog](https://github.com/primefaces/primereact/compare/8.6.0...8.6.1) + +**Fixed bugs:** + +- Material Theme breaks in some components [\#3364](https://github.com/primefaces/primereact/issues/3364) +- TreeTable filter behavior is not consistent between global and local filtering when using filterMatchMode `contains` [\#1288](https://github.com/primefaces/primereact/issues/1288) + +## [8.6.0](https://github.com/primefaces/primereact/tree/8.6.0) (2022-09-23) + +[Full Changelog](https://github.com/primefaces/primereact/compare/8.5.0...8.6.0) + +**Breaking Changes:** + +- Add data and multiSortMeta options to sortFunction on DataTable [\#3352](https://github.com/primefaces/primereact/issues/3352) +- FullCalendar: Remove [\#3344](https://github.com/primefaces/primereact/issues/3344) + +**Implemented New Features and Enhancements:** + +- PrimeIcons: Update to v6 [\#3347](https://github.com/primefaces/primereact/issues/3347) +- Knob/Rating/TriStateCheckbox: Ref Type Incompatibility [\#3334](https://github.com/primefaces/primereact/issues/3334) +- Datatable: Add Typescript SortOrder constants [\#3327](https://github.com/primefaces/primereact/issues/3327) +- InputNumber: missing data attribute [\#3321](https://github.com/primefaces/primereact/issues/3321) +- Dropdown: Support aria-describedby [\#3319](https://github.com/primefaces/primereact/issues/3319) +- TabView: Add 'beforeTabClose' event [\#3312](https://github.com/primefaces/primereact/issues/3312) +- Datatable: Remove Expanded 'td' element returned with 'tr' [\#3310](https://github.com/primefaces/primereact/issues/3310) +- ARIA: Standardize expand/collapse labels [\#3292](https://github.com/primefaces/primereact/issues/3292) +- Password: Add KeyFilter [\#3290](https://github.com/primefaces/primereact/issues/3290) +- TypeScript: Add index.d.ts to main libary [\#3288](https://github.com/primefaces/primereact/issues/3288) +- ARIA: Standardize close/clear button labels [\#3280](https://github.com/primefaces/primereact/issues/3280) +- Strange logging when linting [\#3277](https://github.com/primefaces/primereact/issues/3277) +- AutoComplete: Accessibility Improvement [\#3275](https://github.com/primefaces/primereact/issues/3275) +- Toast: Pause / resume timeout if hovered [\#3272](https://github.com/primefaces/primereact/issues/3272) +- Accordion: No id causes remounting of AccordionTabs. [\#3270](https://github.com/primefaces/primereact/issues/3270) +- DataTable: Aria-label issues [\#3263](https://github.com/primefaces/primereact/issues/3263) +- TabView: allow aria-label attribute for scrollable buttons [\#3259](https://github.com/primefaces/primereact/issues/3259) +- SpeedDial: allow aria-label attribute [\#3254](https://github.com/primefaces/primereact/issues/3254) +- AutoComplete: Add EmptyMessage property [\#3244](https://github.com/primefaces/primereact/issues/3244) +- Password: Add same color to label of password info [\#2913](https://github.com/primefaces/primereact/issues/2913) +- TreeTable/DataTable: Callback similar to onFilter for global search [\#2028](https://github.com/primefaces/primereact/issues/2028) +- Additional props for keyboard helpers \(input components with "hidden accessible" elements\) [\#1852](https://github.com/primefaces/primereact/issues/1852) +- DataTable RowCheckbox/RowRadioButton input lacks title, label or aria attributes [\#1178](https://github.com/primefaces/primereact/issues/1178) +- Allow aria-label and aria-labelledby attributes on all input components. [\#839](https://github.com/primefaces/primereact/issues/839) + +**Fixed bugs:** + +- SortFunction throws a exception on DataTable [\#3353](https://github.com/primefaces/primereact/issues/3353) +- DataTable: error occurs when the field corresponding to the column is an Map, and the editor is not specified [\#3332](https://github.com/primefaces/primereact/issues/3332) +- Dialog: Restore dialog size after maximize it close dialog keeping modal background active [\#3331](https://github.com/primefaces/primereact/issues/3331) +- Editor: Ref Type Incompatibility [\#3329](https://github.com/primefaces/primereact/issues/3329) +- Calendar: viewStateChanged minor bug [\#3315](https://github.com/primefaces/primereact/issues/3315) +- DataTable: Multiple sorting with Date field as first sort [\#3284](https://github.com/primefaces/primereact/issues/3284) +- Calendar \> When set two times value, calendar view is not updated [\#3258](https://github.com/primefaces/primereact/issues/3258) +- Dialog: Focus trap issue with multiple dialogs [\#3256](https://github.com/primefaces/primereact/issues/3256) +- InputTextarea: wrong ref type [\#3252](https://github.com/primefaces/primereact/issues/3252) +- Toast/Messages: Replace method is broken in 8.5.0 [\#3250](https://github.com/primefaces/primereact/issues/3250) +- ScrollPanel: Cannot scroll inside dialog [\#3171](https://github.com/primefaces/primereact/issues/3171) + +## [8.5.0](https://github.com/primefaces/primereact/tree/8.5.0) (2022-09-07) + +[Full Changelog](https://github.com/primefaces/primereact/compare/8.4.0...8.5.0) + +**Implemented New Features and Enhancements:** + +- Tooltip: Both 'focus' and 'hover' events cannot be set at the same time [\#3241](https://github.com/primefaces/primereact/issues/3241) +- Carousel : Add new showIndicators/showNavigators attributes [\#3232](https://github.com/primefaces/primereact/issues/3232) +- Checkbox/RadioButton: No support for selecting option with keyboard [\#3221](https://github.com/primefaces/primereact/issues/3221) +- Rating: Add icon templates [\#3219](https://github.com/primefaces/primereact/issues/3219) +- Message: Override Icon using icon attribute [\#3196](https://github.com/primefaces/primereact/issues/3196) +- Button: Add visible property to remove from DOM [\#3193](https://github.com/primefaces/primereact/issues/3193) +- Keyfilter: refactor to use event.key [\#3189](https://github.com/primefaces/primereact/issues/3189) +- Add prettier to standardize formatting [\#3188](https://github.com/primefaces/primereact/issues/3188) +- FileUpload: Access to files in the FileUpload Component [\#3174](https://github.com/primefaces/primereact/issues/3174) +- MenuModel property for visibility like in Vue [\#3169](https://github.com/primefaces/primereact/issues/3169) +- TreeSelect: Add collapseAll and expandAll methods [\#2964](https://github.com/primefaces/primereact/issues/2964) + +**Fixed bugs:** + +- Column: ColumnBodyRowEditorOptions type is missing "element" in type definition [\#3245](https://github.com/primefaces/primereact/issues/3245) +- ConfirmPopup: dismissable property not working [\#3233](https://github.com/primefaces/primereact/issues/3233) +- Split Button throws error when expanding the menu. [\#3228](https://github.com/primefaces/primereact/issues/3228) +- RadioButton/Checkbox: label no longer works to select item [\#3220](https://github.com/primefaces/primereact/issues/3220) +- Toast: Allow us to specify our own ids for each ToastMessage [\#3209](https://github.com/primefaces/primereact/issues/3209) +- ConfirmPopup: Сomponent is not hidden when using the hide function [\#3202](https://github.com/primefaces/primereact/issues/3202) +- ConfirmDialog and ConfirmPopup: onHide event bug [\#3197](https://github.com/primefaces/primereact/issues/3197) +- Calendar: monthpicker disabled using min/max [\#3192](https://github.com/primefaces/primereact/issues/3192) +- Menubar: hide menu if no items in model [\#3190](https://github.com/primefaces/primereact/issues/3190) +- Dialog: Responsive breakpoints no longer working [\#3184](https://github.com/primefaces/primereact/issues/3184) +- Animation of the floating label doesn't work in Chips [\#3181](https://github.com/primefaces/primereact/issues/3181) +- Dropdown: Unmounting focused dropdown throws TypeError [\#3179](https://github.com/primefaces/primereact/issues/3179) +- InputTextarea: wrong ref type [\#3172](https://github.com/primefaces/primereact/issues/3172) +- Dialog: blockScroll not working [\#3166](https://github.com/primefaces/primereact/issues/3166) +- Dialog: Flickering [\#3122](https://github.com/primefaces/primereact/issues/3122) +- AutoComplete: shows "\[object Object\]" if value object instance is not one of suggestions [\#1392](https://github.com/primefaces/primereact/issues/1392) +- Messages: Add content to TypeScript [\#3246](https://github.com/primefaces/primereact/issues/3246) +- FileUpload: Fix TypeScript FileUploadSelectParams [\#3235](https://github.com/primefaces/primereact/issues/3235) + +## [8.4.0](https://github.com/primefaces/primereact/tree/8.4.0) (2022-08-22) + +[Full Changelog](https://github.com/primefaces/primereact/compare/8.3.0...8.4.0) + +**Implemented New Features and Enhancements:** + +- FileUpload: Needed Event: onBeforeSelect [\#3134](https://github.com/primefaces/primereact/issues/3134) +- DataTable: Add setting to sort null records at the beginning when in ascending order like old versions of PrimeReact [\#3114](https://github.com/primefaces/primereact/issues/3114) + +**Fixed bugs:** + +- Dialog: blockScroll not working [\#3166](https://github.com/primefaces/primereact/issues/3166) +- InputNumber: getInput\(\) returns the wrong reference [\#3161](https://github.com/primefaces/primereact/issues/3161) +- Calendar: does not change "view" dynamicly [\#3153](https://github.com/primefaces/primereact/issues/3153) +- DataTable.restoreTableState does not restore column width [\#3150](https://github.com/primefaces/primereact/issues/3150) +- RadioButton/Checkbox: onChange event is called for each click [\#3148](https://github.com/primefaces/primereact/issues/3148) +- PickList - Selection Change properties throw errors [\#3147](https://github.com/primefaces/primereact/issues/3147) +- Calendar: Min/Max fixes ported from PrimeFaces [\#3125](https://github.com/primefaces/primereact/issues/3125) +- Calendar: TouchUI dismissal issues [\#3111](https://github.com/primefaces/primereact/issues/3111) +- InputNumber: Tab does not fire update events, meaning inputNumbers do not call callbacks in datatables [\#3109](https://github.com/primefaces/primereact/issues/3109) +- Tree: Custom filter broken due to overwritten props in useImperativeHandle hook. [\#3107](https://github.com/primefaces/primereact/issues/3107) +- Chips: keyfilter [\#3100](https://github.com/primefaces/primereact/issues/3100) +- Editor: Explicit import of quill.js dependency doesn't allow for single pages with inline scripting [\#3097](https://github.com/primefaces/primereact/issues/3097) +- Dropdown: Required attribute doesn't work [\#3092](https://github.com/primefaces/primereact/issues/3092) +- TreeSelect: props.panelFooterTemplate doesn't work [\#3088](https://github.com/primefaces/primereact/issues/3088) +- Tooltip: If the mouse hover ends before showDelay is reached, then the tooltip won't go away. [\#3083](https://github.com/primefaces/primereact/issues/3083) +- Mention, InputText, InputTextArea and Password do not maintain p-filled properly [\#3081](https://github.com/primefaces/primereact/issues/3081) +- StyleClass: Bug with "position: fixed" on chromium family only, firefox works OK [\#3080](https://github.com/primefaces/primereact/issues/3080) +- OverlayPanel: Dismissable is ignored [\#3070](https://github.com/primefaces/primereact/issues/3070) +- FileUpload: Ability to add file from variable [\#3044](https://github.com/primefaces/primereact/issues/3044) +- Editor: 'Maximum update depth exceeded' on pasting formatted text [\#2271](https://github.com/primefaces/primereact/issues/2271) +- Dropdown: Wrong event value on OnBlur [\#2224](https://github.com/primefaces/primereact/issues/2224) +- Dropdown: search functionality can't find item starting with "+" key [\#2202](https://github.com/primefaces/primereact/issues/2202) + +## [8.3.0](https://github.com/primefaces/primereact/tree/8.3.0) (2022-07-18) + +[Full Changelog](https://github.com/primefaces/primereact/compare/8.2.0...8.3.0) + +**Implemented New Features and Enhancements:** + +- Charts: Explicit import of chart.js dependency doesn't allow for single pages with inline scripting [\#3059](https://github.com/primefaces/primereact/issues/3059) +- FilterTemplate support for components [\#3039](https://github.com/primefaces/primereact/issues/3039) + +**Fixed bugs:** + +- maxDate & minDate are broken in month-picker on Calendar [\#3076](https://github.com/primefaces/primereact/issues/3076) +- Chips: UX issue [\#3072](https://github.com/primefaces/primereact/issues/3072) +- Tooltip: positioned incorrectly in React 18 [\#3065](https://github.com/primefaces/primereact/issues/3065) +- Calendar: decade selection can't be changed [\#3064](https://github.com/primefaces/primereact/issues/3064) +- ConfirmDialog: mismatch in new version [\#3063](https://github.com/primefaces/primereact/issues/3063) +- Calendar triggers onChange event twice when typing in React 18 Strict Mode [\#3062](https://github.com/primefaces/primereact/issues/3062) +- Tag/Badge: SeverityType incorrect [\#3056](https://github.com/primefaces/primereact/issues/3056) +- Checkbox/RadioButton: stops working in labels [\#3054](https://github.com/primefaces/primereact/issues/3054) +- DataTable: Checkbox Row Selection and VirtualScroller not working simultaneously [\#3053](https://github.com/primefaces/primereact/issues/3053) +- Datatable: Filter icon gets highlighted without even applying the filter [\#3051](https://github.com/primefaces/primereact/issues/3051) +- SplitButton: TypeScript Error "Cannot Find Name 'ButtonProps'" [\#3048](https://github.com/primefaces/primereact/issues/3048) +- DataTable: DataTable row reorder is not working [\#3046](https://github.com/primefaces/primereact/issues/3046) +- FileUpload: ref property does not show all the props [\#3045](https://github.com/primefaces/primereact/issues/3045) +- Dropdown: hard to identify error on non matching label [\#3038](https://github.com/primefaces/primereact/issues/3038) +- DataTable: custom filter icon is not updating [\#2976](https://github.com/primefaces/primereact/issues/2976) +- Components: Cannot access ref [\#2963](https://github.com/primefaces/primereact/issues/2963) +- InputNumber : Id not available in the OnChange [\#2908](https://github.com/primefaces/primereact/issues/2908) +- Hooks: useImperativeHandle is preventing the default behaviour of useRef hook [\#2893](https://github.com/primefaces/primereact/issues/2893) +- DataTable ignores sortFunction and sortField for initial sorting [\#2514](https://github.com/primefaces/primereact/issues/2514) + +## [8.2.0](https://github.com/primefaces/primereact/tree/8.2.0) (2022-07-06) + +[Full Changelog](https://github.com/primefaces/primereact/compare/8.1.1...8.2.0) + +**Implemented New Features and Enhancements:** + +- Improve virtualScroller implementation on components [\#3037](https://github.com/primefaces/primereact/issues/3037) +- Add autoSize, resizeDelay and loaderIconTemplate properties to VirtualScroller [\#3036](https://github.com/primefaces/primereact/issues/3036) +- Add filter feature to PickList [\#3035](https://github.com/primefaces/primereact/issues/3035) +- Autocomplete: Submit form when hitting enter on input field [\#3033](https://github.com/primefaces/primereact/issues/3033) +- Image: Add 'onError' property [\#3031](https://github.com/primefaces/primereact/issues/3031) +- DataTable: Incorrect order by ASC \(empty values are at the beginning\) [\#3023](https://github.com/primefaces/primereact/issues/3023) +- Placeholder for float label inputs [\#3020](https://github.com/primefaces/primereact/issues/3020) +- Datatable: Can not get table data for Column sortFunction and sortFunction calls only by click in header [\#3019](https://github.com/primefaces/primereact/issues/3019) +- Add color-scheme style to Themes [\#3010](https://github.com/primefaces/primereact/issues/3010) +- Datatable: Add reference to virtualScroller [\#3009](https://github.com/primefaces/primereact/issues/3009) +- Splitter: should support dynamic size prop [\#3006](https://github.com/primefaces/primereact/issues/3006) +- SplitButton: "loading" and "loadingIcon" [\#2995](https://github.com/primefaces/primereact/issues/2995) +- InputMask: Remove `inputRef` for just normal `ref` [\#2971](https://github.com/primefaces/primereact/issues/2971) +- Add id option to MenuItem API [\#2914](https://github.com/primefaces/primereact/issues/2914) +- Improve p-invalid class for InputSwitch [\#2909](https://github.com/primefaces/primereact/issues/2909) +- MegaMenu: Start and End templates like MenuBar [\#2808](https://github.com/primefaces/primereact/issues/2808) +- Chips: Add onKeyDown and KeyFilter [\#2797](https://github.com/primefaces/primereact/issues/2797) +- Calendar: shows future and/or past dates even when minDate and/or maxDate props are set [\#1661](https://github.com/primefaces/primereact/issues/1661) + +**Fixed bugs:** + +- Restrict Toast/Message SeverityType to the only four valid values [\#3021](https://github.com/primefaces/primereact/issues/3021) +- InputMask: Initial value not displayed when inside \ in React 18 [\#3016](https://github.com/primefaces/primereact/issues/3016) +- Tree: Can't switch between nodes with arrow up and arrow down keys if drag feature is enabled [\#3004](https://github.com/primefaces/primereact/issues/3004) +- Editor/Charts: not usable with parceljs [\#2999](https://github.com/primefaces/primereact/issues/2999) +- Badge: 0 as a value passed to a badge does not render properly [\#2997](https://github.com/primefaces/primereact/issues/2997) +- Dialog bottom has no border radius when footer does not exist [\#2990](https://github.com/primefaces/primereact/issues/2990) +- Dialog: Scrolling remains disabled for document even after dialog unmount [\#2981](https://github.com/primefaces/primereact/issues/2981) +- DataTable: Scrollable headers out of sync on column resize [\#2978](https://github.com/primefaces/primereact/issues/2978) +- MultiSelect treats a value of zero for maxSelectedLabels as null [\#2966](https://github.com/primefaces/primereact/issues/2966) +- Calendar: After selecting Today from ButtonBar, Year is not set to current year [\#2961](https://github.com/primefaces/primereact/issues/2961) +- Image: Preview mode do not hide buttons [\#2957](https://github.com/primefaces/primereact/issues/2957) +- ConfirmationDialog: throws TS error in prod build [\#2953](https://github.com/primefaces/primereact/issues/2953) +- Calendar: Selection Month DropDown Item at Index 1 for the first time, Selects Item at Index 2 [\#2948](https://github.com/primefaces/primereact/issues/2948) +- Global Tooltip is not working with data-pr-classname [\#2946](https://github.com/primefaces/primereact/issues/2946) +- DataTable with custom footer cell throws a JS exception [\#2943](https://github.com/primefaces/primereact/issues/2943) +- DataTable: RowReorder handle displayed when table is not set for reordering [\#2935](https://github.com/primefaces/primereact/issues/2935) +- When Toast component is closed, its zIndex does not clear. [\#2928](https://github.com/primefaces/primereact/issues/2928) +- Toast: Long text does not display correctly [\#2926](https://github.com/primefaces/primereact/issues/2926) +- Messages/Toast: fix/add replace\(newMessages\) method [\#2925](https://github.com/primefaces/primereact/issues/2925) +- Frozen columns and non-frozen columns can be reordered with each other in DataTable [\#2923](https://github.com/primefaces/primereact/issues/2923) +- FloatLabel: Incorrect position when using browser autofill [\#2921](https://github.com/primefaces/primereact/issues/2921) +- Avatar: Wrong priority [\#2919](https://github.com/primefaces/primereact/issues/2919) +- The default selected item does not appear in the view on VirtualScroller Listbox [\#2915](https://github.com/primefaces/primereact/issues/2915) +- Inplace: Initial state not reflected when active is provided as true [\#2904](https://github.com/primefaces/primereact/issues/2904) +- Tooltip: data-pr-position doesn't change where the tooltip goes [\#2878](https://github.com/primefaces/primereact/issues/2878) +- DataTable: Filter Menu not displayed when inside \ in React 18 [\#2777](https://github.com/primefaces/primereact/issues/2777) +- Calendar: Does not respect minDate in format 12h with timeOnly=true. [\#2607](https://github.com/primefaces/primereact/issues/2607) +- DataTable with scrollHeight="flex" and virtualScrollerOptions shows nothing [\#2531](https://github.com/primefaces/primereact/issues/2531) +- DataTable resize visual bugs [\#2433](https://github.com/primefaces/primereact/issues/2433) +- Calendar triggers onChange event twice when mask property is set [\#2018](https://github.com/primefaces/primereact/issues/2018) +- Checkbox/Radio: Do not scroll page on click [\#1879](https://github.com/primefaces/primereact/issues/1879) + +## [8.1.1](https://github.com/primefaces/primereact/tree/8.1.1) (2022-05-19) + +[Full Changelog](https://github.com/primefaces/primereact/compare/8.1.0...8.1.1) + +**Implemented New Features and Enhancements:** + +- Hooks: useStorage hook multi tab awareness [\#2887](https://github.com/primefaces/primereact/issues/2887) + +**Fixed bugs:** + +- The headerStyle and headerClassName are not applied to the Dialog [\#2905](https://github.com/primefaces/primereact/issues/2905) +- StyleClass is not working as expected on PrimeBlocks pages [\#2900](https://github.com/primefaces/primereact/issues/2900) +- Dropdown: Causes horizontal scroll to align with multiselect option panel when opening panel when an item is selected [\#2898](https://github.com/primefaces/primereact/issues/2898) +- Autocomplete: Virtual Scroller incompatible with arrow keys navigation [\#2894](https://github.com/primefaces/primereact/issues/2894) +- Autocomplete: Virtual Scroller incompatible with autoHighlight [\#2891](https://github.com/primefaces/primereact/issues/2891) +- TreeTable: resizeableColumns stopped working in 8.1 [\#2889](https://github.com/primefaces/primereact/issues/2889) +- TreeTableProps: type error in treetable.d.ts file [\#2881](https://github.com/primefaces/primereact/issues/2881) +- Calendar: footer is displayed above year and month picker panels [\#2880](https://github.com/primefaces/primereact/issues/2880) + +## [8.1.0](https://github.com/primefaces/primereact/tree/8.1.0) (2022-05-12) + +[Full Changelog](https://github.com/primefaces/primereact/compare/8.0.0...8.1.0) + +**Implemented New Features and Enhancements:** + +- Paginator: Accessible buttons [\#2827](https://github.com/primefaces/primereact/issues/2827) +- FileUpload: Validate files before adding on drop [\#2690](https://github.com/primefaces/primereact/issues/2690) +- PickList : Add itemTemplate for target and source lists [\#2606](https://github.com/primefaces/primereact/issues/2606) +- Breadcrumb: home icon is not acccessible [\#2226](https://github.com/primefaces/primereact/issues/2226) +- DataTable : Edit, save and cancel button do not have accessible names [\#2128](https://github.com/primefaces/primereact/issues/2128) +- SlideMenu: Performance enhancement [\#2060](https://github.com/primefaces/primereact/issues/2060) +- Dropdown: once focused to the field Enter key is not displaying list [\#1929](https://github.com/primefaces/primereact/issues/1929) +- DataTable: drop p-resizable-column for expander columns [\#1862](https://github.com/primefaces/primereact/issues/1862) +- FileUpload: Disable buttons while uploading [\#1525](https://github.com/primefaces/primereact/issues/1525) +- Carousel: Improve button accessibility [\#1432](https://github.com/primefaces/primereact/issues/1432) +- Column: resizable/reorderable for individual column level [\#1367](https://github.com/primefaces/primereact/issues/1367) + +**Fixed bugs:** + +- Datatable: reorderableColumns isn't working [\#2784](https://github.com/primefaces/primereact/issues/2784) +- InputSwitch: InputSwitchProps says incompatible type [\#2876](https://github.com/primefaces/primereact/issues/2876) +- StyleClass: may fail to enter the element [\#2873](https://github.com/primefaces/primereact/issues/2873) +- TreeTable: column parameter not passed to ColumnBodyOptions [\#2870](https://github.com/primefaces/primereact/issues/2870) +- \[v8\] Importing CSS omitted from bundle when using import syntax [\#2868](https://github.com/primefaces/primereact/issues/2868) +- Paginator: Wrong check triggers on example [\#2866](https://github.com/primefaces/primereact/issues/2866) +- Header elements in DataTable with virtualScroller are not in the correct position on the scroll. [\#2861](https://github.com/primefaces/primereact/issues/2861) +- MultiSelect: Does not properly filter with groups if not using children name "items" [\#2856](https://github.com/primefaces/primereact/issues/2856) +- MultiSelect: Causes horizontal scroll to align with multiselect option panel when opening panel when an item is selected [\#2855](https://github.com/primefaces/primereact/issues/2855) +- OverlayPanel: breakpoints property breaks app [\#2852](https://github.com/primefaces/primereact/issues/2852) +- InputNumber: Touch and hold button spin doesn't work on iOS browser [\#2849](https://github.com/primefaces/primereact/issues/2849) +- Calendar: Wrong month names in multiple months view [\#2845](https://github.com/primefaces/primereact/issues/2845) +- Calendar: wrong typing for onClick event of navigatorTemplate [\#2844](https://github.com/primefaces/primereact/issues/2844) +- InputNumber: On mobile, the focus on input makes using increment / decrement buttons difficult [\#2843](https://github.com/primefaces/primereact/issues/2843) +- FileUploader: Converts event.files into SyntheticBaseEvent when in advanced mode [\#2836](https://github.com/primefaces/primereact/issues/2836) +- Splitter: Changed behavior in 8.x, when more than two panels are are used [\#2830](https://github.com/primefaces/primereact/issues/2830) +- DataTable: Custom sort functions throw errors in single sort mode [\#2821](https://github.com/primefaces/primereact/issues/2821) +- ARIA: Lint Failures [\#2819](https://github.com/primefaces/primereact/issues/2819) +- Carousel: Display issues when loading less items that the allocated slots [\#2814](https://github.com/primefaces/primereact/issues/2814) +- PanelMenu: is closing and opening again when menu is reloaded [\#2804](https://github.com/primefaces/primereact/issues/2804) +- FileUpload when multiple false, can still add more than 1 file [\#2792](https://github.com/primefaces/primereact/issues/2792) +- FileUpload: removing the "multiple" tag drag and drop [\#2782](https://github.com/primefaces/primereact/issues/2782) +- Checkbox does not work as expected when pressing the space key [\#2781](https://github.com/primefaces/primereact/issues/2781) +- Calendar's navigator template onChange param not working [\#2646](https://github.com/primefaces/primereact/issues/2646) +- Drag & drop is not working on FileUploader when multiple is false [\#2624](https://github.com/primefaces/primereact/issues/2624) +- CascadeSelect shows nothing on selection if optionValue is given [\#2601](https://github.com/primefaces/primereact/issues/2601) + +## [8.0.1](https://github.com/primefaces/primereact/tree/8.0.1) (2022-04-26) + +[Full Changelog](https://github.com/primefaces/primereact/compare/8.0.0...8.0.1) + +**Fixed bugs:** + +- Datatable: reorderableColumns isn't working [\#2784](https://github.com/primefaces/primereact/issues/2784) + +## [8.0.0](https://github.com/primefaces/primereact/tree/8.0.0) + +[Full Changelog](https://github.com/primefaces/primereact/compare/8.0.0-rc.2...8.0.0) + +**Implemented New Features and Enhancements:** + +- Hooks: add useStorage hook [\#2773](https://github.com/primefaces/primereact/issues/2773) +- Chips onAdd should check Input before added to value list [\#2232](https://github.com/primefaces/primereact/issues/2232) + +**Fixed bugs:** + +- Carousel v8.0.0-rc.2 Data and Navigation Unusable [\#2769](https://github.com/primefaces/primereact/issues/2769) +- Calendar: onMonthChange is marked as required [\#2767](https://github.com/primefaces/primereact/issues/2767) +- TreeSelect onSelect/onNodeUnselect wrong types and not firing [\#2768](https://github.com/primefaces/primereact/issues/2768) + +## [8.0.0-rc.2](https://github.com/primefaces/primereact/tree/8.0.0-rc.2) (2022-04-18) + +[Full Changelog](https://github.com/primefaces/primereact/compare/8.0.0-rc.1...8.0.0-rc.2) + +**Implemented New Features and Enhancements:** + +- Calendar - Year and month picker enhancement [\#2748](https://github.com/primefaces/primereact/issues/2748) +- Add icon template to Menu components [\#2733](https://github.com/primefaces/primereact/issues/2733) +- Toast - Clear and then show doesn't clear existing messages [\#2668](https://github.com/primefaces/primereact/issues/2668) +- No default jsDelivr CDN file set [\#1426](https://github.com/primefaces/primereact/issues/1426) + +**Fixed bugs:** + +- TreeSelect - problem with scroll jumping [\#2752](https://github.com/primefaces/primereact/issues/2752) +- If the item's className option is null, Dropdown will throw a JS exception. [\#2749](https://github.com/primefaces/primereact/issues/2749) +- Dialog typescript error [\#2747](https://github.com/primefaces/primereact/issues/2747) +- Accordion Multiple Tabs Opened [\#2739](https://github.com/primefaces/primereact/issues/2739) +- Dropdown throws a JS exception related to searchIndex [\#2737](https://github.com/primefaces/primereact/issues/2737) +- Attribute 'children' is missing in primereact 8.0.0-rc.1 [\#2732](https://github.com/primefaces/primereact/issues/2732) +- InputNumber crash on onInputBlur [\#2729](https://github.com/primefaces/primereact/issues/2729) +- Cannot edit DataTable row with the pencil button when onRowEditChange is set [\#2726](https://github.com/primefaces/primereact/issues/2726) +- Custom component properties override remove `ref` [\#2721](https://github.com/primefaces/primereact/issues/2721) +- DataTable: if custom filter is used then clear/reset filter functionality is not working. [\#2715](https://github.com/primefaces/primereact/issues/2715) +- GMap onOverlayDragEnd event callback has access to outdated react states [\#2714](https://github.com/primefaces/primereact/issues/2714) +- DataTable custom filter function breaks table [\#2702](https://github.com/primefaces/primereact/issues/2702) +- InputMask: on Android does not fire onChange until focus lost [\#2686](https://github.com/primefaces/primereact/issues/2686) +- \[BUG\] InputText keyfilter [\#2214](https://github.com/primefaces/primereact/issues/2214) +- Galleria Advanced sandbox links are wrong [\#2204](https://github.com/primefaces/primereact/issues/2204) +- Toast component stale messages state issue, while quickly calling toastRef.show [\#1804](https://github.com/primefaces/primereact/issues/1804) + +## [8.0.0-rc.1](https://github.com/primefaces/primereact/tree/8.0.0-rc.1) (2022-04-04) + +[Full Changelog](https://github.com/primefaces/primereact/compare/7.2.1...8.0.0-rc.1) + +**Breaking Changes:** + +- Converted Class components to functional Hooks components [\#2704](https://github.com/primefaces/primereact/issues/2704) +- Improve confirmDialog and confirmPopup methods [\#2718](https://github.com/primefaces/primereact/issues/2718) + +**Implemented New Features and Enhancements:** + +- React 18 support [\#2360](https://github.com/primefaces/primereact/issues/2360) +- Pass other standard element attributes to all components [\#2716](https://github.com/primefaces/primereact/issues/2716) +- forwardRef is not implemented at Card and Panel [\#2709](https://github.com/primefaces/primereact/issues/2709) +- Add panelContainerStyle and panelContainerClassName properties to TabView [\#2706](https://github.com/primefaces/primereact/issues/2706) +- Add gutter property to DataView [\#2705](https://github.com/primefaces/primereact/issues/2705) +- Calendar: show/hide TypeScript declarations [\#2685](https://github.com/primefaces/primereact/issues/2685) +- AutoComplete: option to not focus input on dropdown click [\#2679](https://github.com/primefaces/primereact/issues/2679) +- Tooltip: onBeforeShow should be able to cancel showing [\#2653](https://github.com/primefaces/primereact/issues/2653) +- Pass other standard element attributes to form components [\#2620](https://github.com/primefaces/primereact/issues/2620) +- DataTable editingMeta is bound to row index, instead of row key [\#2609](https://github.com/primefaces/primereact/issues/2609) +- Add inputId property to Chips [\#2717](https://github.com/primefaces/primereact/issues/2717) + +**Fixed bugs:** + +- The texts inside the cells are not copied in the dataTable [\#2710](https://github.com/primefaces/primereact/issues/2710) +- Datatable re-order rows: can't reorder to last row when page is scrolled \(event.pageY \> 0\) [\#2703](https://github.com/primefaces/primereact/issues/2703) +- Toast component throws error on show [\#2696](https://github.com/primefaces/primereact/issues/2696) +- Tooltips crashing Chrome [\#2695](https://github.com/primefaces/primereact/issues/2695) +- Row component does not pass down `className` and `style` props [\#2693](https://github.com/primefaces/primereact/issues/2693) +- Issue with type definition of fileupload interface FileUploadRemoveParams [\#2681](https://github.com/primefaces/primereact/issues/2681) +- v7.2.1 introduces "ReferenceError: PrimeReact is not defined" on sorting a DataView [\#2663](https://github.com/primefaces/primereact/issues/2663) +- Tooltip autohide false not working on zIndexed parent [\#2658](https://github.com/primefaces/primereact/issues/2658) +- Sidebar: onHide - closing on peripheral actions [\#2652](https://github.com/primefaces/primereact/issues/2652) +- Typo in PrimeIcons Enum for ARROWS_H and ARROWS_V [\#2649](https://github.com/primefaces/primereact/issues/2649) +- rowEditValidator validates the original data rather than the new one [\#2618](https://github.com/primefaces/primereact/issues/2618) +- Tree component bug with functions onNodeClick and onNodeDoubleClick. Both of them not working [\#2599](https://github.com/primefaces/primereact/issues/2599) + +## [7.2.1](https://github.com/primefaces/primereact/tree/7.2.1) (2022-02-22) + +[Full Changelog](https://github.com/primefaces/primereact/compare/7.2.0...7.2.1) + +**Implemented New Features and Enhancements:** + +- Add p-button-\* class support to SplitButton [\#2647](https://github.com/primefaces/primereact/issues/2647) +- Change lara to use system font [\#2645](https://github.com/primefaces/primereact/issues/2645) +- Knob | replace surface letters with new surface variables [\#2643](https://github.com/primefaces/primereact/issues/2643) +- Bug: When calendar is closed by clicking cancel button, It should be focus out [\#2638](https://github.com/primefaces/primereact/issues/2638) +- Add possibility to reset scroll in DataTable [\#2636](https://github.com/primefaces/primereact/issues/2636) +- The SplitButton type declarations are missing the "show" and "hide" methods [\#2625](https://github.com/primefaces/primereact/issues/2625) +- Automated tests throw "TypeError: highlightItem.scrollIntoView is not a function" [\#2616](https://github.com/primefaces/primereact/issues/2616) +- DataTable sorting lacks collation support [\#2604](https://github.com/primefaces/primereact/issues/2604) + +**Fixed bugs:** + +- TreeSelect templateHeader doesn't work [\#2641](https://github.com/primefaces/primereact/issues/2641) +- dropIndex returns same index for different nodes in Tree component [\#2632](https://github.com/primefaces/primereact/issues/2632) +- InputNumber editor in Datatable doesn't accept only numbers as input values anymore [\#2631](https://github.com/primefaces/primereact/issues/2631) +- Bug on Dark Themes related with fixed columns [\#2630](https://github.com/primefaces/primereact/issues/2630) +- DataTable with paginator and selection [\#2612](https://github.com/primefaces/primereact/issues/2612) +- Datatable: Responsive broken in 7.2.0 [\#2594](https://github.com/primefaces/primereact/issues/2594) +- TabMenu with MenuItem template function does not work properly [\#2590](https://github.com/primefaces/primereact/issues/2590) + +## [7.2.0](https://github.com/primefaces/primereact/tree/7.2.0) (2022-01-19) + +[Full Changelog](https://github.com/primefaces/primereact/compare/7.1.0...7.2.0) + +**Implemented New Features and Enhancements:** + +- Add files and index options to itemTemplate on FileUpload [\#2584](https://github.com/primefaces/primereact/issues/2584) +- Add rowHover property to TreeTable [\#2582](https://github.com/primefaces/primereact/issues/2582) +- Improve resizable structure on DataTable [\#2581](https://github.com/primefaces/primereact/issues/2581) +- Add appendTo property to Toast [\#2578](https://github.com/primefaces/primereact/issues/2578) +- Add selectionAutoFocus property to DataTable [\#2575](https://github.com/primefaces/primereact/issues/2575) +- Add align and alignHeader property to Column [\#2572](https://github.com/primefaces/primereact/issues/2572) +- Keyboard click for TabView [\#2569](https://github.com/primefaces/primereact/issues/2569) +- Column property for cellClassName function [\#2553](https://github.com/primefaces/primereact/issues/2553) +- New Feature: 'downloadable' prop of 'Image' [\#2552](https://github.com/primefaces/primereact/issues/2552) +- Add exportField property to DataTable [\#2544](https://github.com/primefaces/primereact/issues/2544) +- Improve table row reorder highlight [\#2519](https://github.com/primefaces/primereact/issues/2519) +- ColorPicker | Add border for Dark Themes [\#2516](https://github.com/primefaces/primereact/issues/2516) +- Add isDataSelectable property to DataTable [\#1303](https://github.com/primefaces/primereact/issues/1303) + +**Fixed bugs:** + +- tailwind theme - wrong styles [\#2587](https://github.com/primefaces/primereact/issues/2587) +- Body cell is not assigned with the className property of Column [\#2576](https://github.com/primefaces/primereact/issues/2576) +- TabView programmatically set activeIndex is ignored in onTabClose function. [\#2573](https://github.com/primefaces/primereact/issues/2573) +- Calendar as editor inside DataTable in row edit mode [\#2561](https://github.com/primefaces/primereact/issues/2561) +- Dropdown with VirtualScroll not rendering items. [\#2560](https://github.com/primefaces/primereact/issues/2560) +- \ Minutes - increment and decrement operations do not work with stepMinute = 1 [\#2557](https://github.com/primefaces/primereact/issues/2557) +- TreeNode: TypeScript def missing expanded property [\#2548](https://github.com/primefaces/primereact/issues/2548) +- Row grouping breaking with pagination [\#2545](https://github.com/primefaces/primereact/issues/2545) +- Styling of TabMenu is broken for multi line headings [\#2540](https://github.com/primefaces/primereact/issues/2540) +- \[Bug\] Next.js - `document is not defined` when using Dialog and Sidebar component [\#2538](https://github.com/primefaces/primereact/issues/2538) +- `progress` is not a part of state but using in multiple places. [\#2537](https://github.com/primefaces/primereact/issues/2537) +- DataTable: ReferenceError: process is not defined regression in 7.1 [\#2536](https://github.com/primefaces/primereact/issues/2536) +- DataTable: When scrollable and virtual scroller are enabled, scroll to the right to display blank [\#2534](https://github.com/primefaces/primereact/issues/2534) +- DataTable, TreeTable | Checkbox and RadioButton Focus Missing on Material [\#2522](https://github.com/primefaces/primereact/issues/2522) +- DataTable | scrollable-sortable header hover on dark themes [\#2517](https://github.com/primefaces/primereact/issues/2517) +- DataTable with resizable property is not working as expected [\#2448](https://github.com/primefaces/primereact/issues/2448) + +## [7.1.0](https://github.com/primefaces/primereact/tree/7.1.0) (2021-12-13) + +[Full Changelog](https://github.com/primefaces/primereact/compare/7.0.1...7.1.0) + +**Breaking Changes:** + +- InputMask/AutoComplete: maxlength property [\#2408](https://github.com/primefaces/primereact/issues/2408) + +**Implemented New Features and Enhancements:** + +- Tree DragDrop inconsistent styling on drag hover [\#2501](https://github.com/primefaces/primereact/issues/2501) +- Typescript DataTables with filters don't import or compile correctly. [\#2467](https://github.com/primefaces/primereact/issues/2467) +- InputNumber Critical Issue [\#2465](https://github.com/primefaces/primereact/issues/2465) +- Improve lazy loading on DataTable [\#2457](https://github.com/primefaces/primereact/issues/2457) +- Add showSelectAll, selectAll and onSelectAll properties to DataTable [\#2455](https://github.com/primefaces/primereact/issues/2455) +- Add selectionPageOnly property to DataTable [\#2454](https://github.com/primefaces/primereact/issues/2454) +- Add style and className properties to TabPanel and AccordionPanel [\#2449](https://github.com/primefaces/primereact/issues/2449) +- Improve resize listeners for Overlay Components [\#2446](https://github.com/primefaces/primereact/issues/2446) +- AutoComplete Show Dropdown When Clicked [\#2445](https://github.com/primefaces/primereact/issues/2445) +- Panel's expandIcon and collapseIcon Properties Accept Only Strings, Not Elements [\#2437](https://github.com/primefaces/primereact/issues/2437) +- Add options to control CSSTransition in all overlay components [\#2426](https://github.com/primefaces/primereact/issues/2426) +- CSP: Violating Inline Style Policy [\#2423](https://github.com/primefaces/primereact/issues/2423) +- TabPanel onClose Event [\#2418](https://github.com/primefaces/primereact/issues/2418) +- Tooltip not displayed for disabled components [\#2221](https://github.com/primefaces/primereact/issues/2221) +- SplitButton does not carry through the classname [\#1939](https://github.com/primefaces/primereact/issues/1939) +- Add "p-button-outlined" class for SplitButton [\#1882](https://github.com/primefaces/primereact/issues/1882) +- Editor's header cannot be hidden no matter what [\#1567](https://github.com/primefaces/primereact/issues/1567) + +**Fixed bugs:** + +- There is typo in Image description [\#2512](https://github.com/primefaces/primereact/issues/2512) +- Type definition issue with utils import [\#2506](https://github.com/primefaces/primereact/issues/2506) +- Using the transition property on elements inside Carousel causes items become hidden [\#2499](https://github.com/primefaces/primereact/issues/2499) +- MultiSelect - breaking when options is empty array [\#2496](https://github.com/primefaces/primereact/issues/2496) +- ConfirmPopup crashes the app when using Next.js [\#2495](https://github.com/primefaces/primereact/issues/2495) +- DataTable issue related to restoreState with nextjs [\#2493](https://github.com/primefaces/primereact/issues/2493) +- Dropdown: Property selectedIndex being referenced from null current inputRef [\#2491](https://github.com/primefaces/primereact/issues/2491) +- \[DataTable\] Row expander customization isn't working [\#2487](https://github.com/primefaces/primereact/issues/2487) +- Docs for PrimeReact not working properly for v6 [\#2484](https://github.com/primefaces/primereact/issues/2484) +- DataTable error when filters become available dynamically [\#2478](https://github.com/primefaces/primereact/issues/2478) +- Tree selection types \(pt. 2\) [\#2473](https://github.com/primefaces/primereact/issues/2473) +- DOMException in DataTable after React fast refresh [\#2469](https://github.com/primefaces/primereact/issues/2469) +- ColumnFilterConstraintAddParams: constraint is mispelled [\#2463](https://github.com/primefaces/primereact/issues/2463) +- When scrollable and virtual Scroller are enabled at the same time, the scroll style is incorrect when the scrollHeight is changed [\#2456](https://github.com/primefaces/primereact/issues/2456) +- Menubar Component needs CSS styles for "text-decoration: none;" [\#2439](https://github.com/primefaces/primereact/issues/2439) +- DataTable virtualScroll index bug [\#2431](https://github.com/primefaces/primereact/issues/2431) +- Dropdown auto close in mobile when keyboard is open [\#2422](https://github.com/primefaces/primereact/issues/2422) +- InputNumber value type should include null [\#2417](https://github.com/primefaces/primereact/issues/2417) +- BlockUI: rapid blocking-unblocking leads to TypeError this.mask is null [\#2412](https://github.com/primefaces/primereact/issues/2412) +- Calendar timepicker stepMinute should show zero-based multiples of step [\#2301](https://github.com/primefaces/primereact/issues/2301) +- Issue in Grid sorting, null values not handled in sortMultiple function \(when sortMode=multiple\) [\#2157](https://github.com/primefaces/primereact/issues/2157) +- ColorPicker: wrong value type definitions when using rgb or hsb format, part 2 [\#2045](https://github.com/primefaces/primereact/issues/2045) + +## [7.0.1](https://github.com/primefaces/primereact/tree/7.0.1) (2021-10-15) + +[Full Changelog](https://github.com/primefaces/primereact/compare/7.0.0...7.0.1) + +**Implemented New Features and Enhancements:** + +- New Themes with dark modes: Lara-Blue and Lara-Teal [\#2435](https://github.com/primefaces/primereact/issues/2435) +- Remove default max-width style from Tooltip [\#2414](https://github.com/primefaces/primereact/issues/2414) + +**Fixed bugs:** + +- Button icon classes listed twice [\#2415](https://github.com/primefaces/primereact/issues/2415) +- MultiSelect with transitionOptions property throws an exception [\#2413](https://github.com/primefaces/primereact/issues/2413) +- Tooltip positioned incorrectly when target is an SVG [\#2406](https://github.com/primefaces/primereact/issues/2406) +- ConfirmDialogProps breaks the build on Typescript due to double semicolon [\#2429](https://github.com/primefaces/primereact/issues/2429) + +## [7.0.0](https://github.com/primefaces/primereact/tree/7.0.0) (2021-10-09) + +[Full Changelog](https://github.com/primefaces/primereact/compare/7.0.0-rc.2...7.0.0) + +**Breaking Changes:** + +- Change default value of maxSelectedLabels property on MultiSelect [\#2389](https://github.com/primefaces/primereact/issues/2389) + +**Implemented New Features and Enhancements:** + +- New Theme: Lara [\#2409](https://github.com/primefaces/primereact/issues/2409) +- Add maskStyle property to Dialog [\#2404](https://github.com/primefaces/primereact/issues/2404) +- Material | Use box-shadow for outlined Buttons [\#2401](https://github.com/primefaces/primereact/issues/2401) +- Material Focus Improvements [\#2400](https://github.com/primefaces/primereact/issues/2400) +- Update PrimeIcons to 5.0 [\#2399](https://github.com/primefaces/primereact/issues/2399) +- Improve custom icon support [\#2397](https://github.com/primefaces/primereact/issues/2397) +- Improve FileUpload drop mode [\#2385](https://github.com/primefaces/primereact/issues/2385) +- Add header, footer and magnification properties to Dock [\#2362](https://github.com/primefaces/primereact/issues/2362) +- \(Yarn PnP\) Add react-transition-group as optional peer dependency [\#2346](https://github.com/primefaces/primereact/issues/2346) +- Support locale for emptyMessage and emptyFilterMessage default value [\#2337](https://github.com/primefaces/primereact/issues/2337) +- Chips component: add 'readOnly' property [\#2334](https://github.com/primefaces/primereact/issues/2334) +- Message content hides icon [\#2321](https://github.com/primefaces/primereact/issues/2321) +- The Menu type declaration is missing the "show" and "hide" methods [\#2295](https://github.com/primefaces/primereact/issues/2295) +- Date gets deselected in Calendar with selection mode range [\#2279](https://github.com/primefaces/primereact/issues/2279) +- Add closeable property to TabPanel [\#2278](https://github.com/primefaces/primereact/issues/2278) +- Add removeIcon property to AutoComplete and MultiSelect components [\#2270](https://github.com/primefaces/primereact/issues/2270) +- Slider - onSlideEnd not called when clicking on Slider rail [\#2265](https://github.com/primefaces/primereact/issues/2265) +- Add iconPos property to Calendar [\#2239](https://github.com/primefaces/primereact/issues/2239) +- Improve Sidebar component [\#2233](https://github.com/primefaces/primereact/issues/2233) +- Extend exportFunction \(csv\) with the whole record [\#2209](https://github.com/primefaces/primereact/issues/2209) +- Multiple Selection Using Shift Key for TreeTable [\#1120](https://github.com/primefaces/primereact/issues/1120) + +**Fixed Bugs:** + +- Splitter component always adds p-splitter-panel-nested class [\#2396](https://github.com/primefaces/primereact/issues/2396) +- DataTable VirtualScroll alignment issue [\#2392](https://github.com/primefaces/primereact/issues/2392) +- TabView with scrollable throws an exception [\#2391](https://github.com/primefaces/primereact/issues/2391) +- Ripple is not working on Nextjs [\#2390](https://github.com/primefaces/primereact/issues/2390) +- FileUpload not be directly mutated component’s state [\#2387](https://github.com/primefaces/primereact/issues/2387) +- isSelectableTime checks value array instead of any value on Calendar [\#2386](https://github.com/primefaces/primereact/issues/2386) +- Clicking the Clear Filter Button Should Clear the Filter But Leave the Dropdown Open [\#2384](https://github.com/primefaces/primereact/issues/2384) +- DataTable filter mode is not working after filters are cleared [\#2383](https://github.com/primefaces/primereact/issues/2383) +- \[Editor\] quill Invalid Quill container null [\#2381](https://github.com/primefaces/primereact/issues/2381) +- Treeselect doesn't select the first node of the list [\#2372](https://github.com/primefaces/primereact/issues/2372) +- Virtual Scroller Does Not React Properly When Underlying Array Changes Size [\#2366](https://github.com/primefaces/primereact/issues/2366) +- Bug - FileUpload allows multiple even if "multiple" prop is not set [\#2363](https://github.com/primefaces/primereact/issues/2363) +- Floating label is not yet on top of the inputbox when prefilled by Chrome [\#2358](https://github.com/primefaces/primereact/issues/2358) +- Dropdown breaks in shadowRoot when getScrollableParent\(\) encounters document fragment [\#2352](https://github.com/primefaces/primereact/issues/2352) +- Dropdown: Primitive values [\#2349](https://github.com/primefaces/primereact/issues/2349) +- Add removable property to Chips [\#2345](https://github.com/primefaces/primereact/issues/2345) +- InputNumber doesn't submit a form [\#2344](https://github.com/primefaces/primereact/issues/2344) +- Multiselect adds items previously selected by clicking on the "select all" toggle \('Advanced with Templating and Filtering'\) [\#2341](https://github.com/primefaces/primereact/issues/2341) +- TabView does not support dynamic panel visibility [\#2339](https://github.com/primefaces/primereact/issues/2339) +- OverlayPanel - Uncaught TypeError: this is undefined [\#2338](https://github.com/primefaces/primereact/issues/2338) +- MultiSelect should also limit the number of displayed chips [\#2331](https://github.com/primefaces/primereact/issues/2331) +- Expander of ColumnProps has wrong in colums.td.d [\#2328](https://github.com/primefaces/primereact/issues/2328) +- Lazy loaded menu overflowing the page [\#2320](https://github.com/primefaces/primereact/issues/2320) +- InputSwitch inside Label doesn't toggle correctly. [\#2300](https://github.com/primefaces/primereact/issues/2300) +- When Multiselect inside of label tag, click on it is not showing dropdown panel [\#2299](https://github.com/primefaces/primereact/issues/2299) +- TreeSelect.value should be an array in multiselect mode [\#2276](https://github.com/primefaces/primereact/issues/2276) +- TS2769: No overload matches this call.   Overload 1 of 2, '\(props: InputTextProps | Readonly\\): InputText', gave the following error. [\#2274](https://github.com/primefaces/primereact/issues/2274) +- Auto z-index isn't generating correctly [\#2266](https://github.com/primefaces/primereact/issues/2266) +- Calendar prop \(tabIndex\) never passed into InputText element. [\#2260](https://github.com/primefaces/primereact/issues/2260) +- DataTable: regression in single mode Space and Enter keys are catched and are not usable into cells [\#2259](https://github.com/primefaces/primereact/issues/2259) +- Failed prop type: Invalid prop `appendTo` of type `string` supplied to `DropdownPanel`, expected `object`. [\#2258](https://github.com/primefaces/primereact/issues/2258) +- Calendar throws exception when have the onViewDateChange property [\#2254](https://github.com/primefaces/primereact/issues/2254) +- DataTable checked all rows does not honor ShowSelectionElement [\#2251](https://github.com/primefaces/primereact/issues/2251) +- PickList not working webpack 5.5 [\#2250](https://github.com/primefaces/primereact/issues/2250) +- Dialog: pressing escape in a nested dialog closes the parent dialog [\#2241](https://github.com/primefaces/primereact/issues/2241) +- \[Bug\]: ReadOnly InputNumber is editable [\#2238](https://github.com/primefaces/primereact/issues/2238) +- Tree DragDrop doesn't allow drag and drop between nodes [\#2177](https://github.com/primefaces/primereact/issues/2177) +- DataTable cell editor only validates on enter [\#1024](https://github.com/primefaces/primereact/issues/1024) + +## [7.0.0-rc.2](https://github.com/primefaces/primereact/tree/7.0.0-rc.2) (2021-11-01) + +[Full Changelog](https://github.com/primefaces/primereact/compare/7.0.0-rc.1...7.0.0-rc.2) + +**Fixed Bugs:** + +- Table columns not visible on Prod [\#2380](https://github.com/primefaces/primereact/issues/2380) + +## [7.0.0-rc.1](https://github.com/primefaces/primereact/tree/7.0.0-rc.1) (2021-11-01) + +[Full Changelog](https://github.com/primefaces/primereact/compare/6.6.0...7.0.0-rc.1) + +**Breaking Changes:** + +- Improve DataTable implementation [\#2368](https://github.com/primefaces/primereact/issues/2368) +- Remove FilterUtils class [\#2376](https://github.com/primefaces/primereact/issues/2376) +- Improve Column attributes for Data components [\#2374](https://github.com/primefaces/primereact/issues/2374) +- Improve VirtualScroller component [\#2373](https://github.com/primefaces/primereact/issues/2373) +- Implemented new VirtualScroll feature for DataTable [\#2371](https://github.com/primefaces/primereact/issues/2371) +- Implemented New Filter modes on DataTable [\#2370](https://github.com/primefaces/primereact/issues/2370) + +**Implemented New Features and Enhancements:** + +- Improve modal animation on Dialog [\#2378](https://github.com/primefaces/primereact/issues/2378) + +**Fixed Bugs:** + +- Calendar Panel closes on the panel's mouseup event [\#2369](https://github.com/primefaces/primereact/issues/2369) + +## [6.6.0](https://github.com/primefaces/primereact/tree/6.6.0) (2021-10-01) + +[Full Changelog](https://github.com/primefaces/primereact/compare/6.6.0-rc.1...6.6.0) + +**Implemented New Features and Enhancements:** + +- PrimeFlex 3 support for DataView [\#2332](https://github.com/primefaces/primereact/issues/2332) +- Improve scrollbar style on BreadCrumb and TabMenu [\#2330](https://github.com/primefaces/primereact/issues/2330) + +**Fixed Bugs:** + +- Image component is missing in primereact.all.js [\#2329](https://github.com/primefaces/primereact/issues/2329) + +## [6.6.0-rc.1](https://github.com/primefaces/primereact/tree/6.6.0-rc.1) (2021-09-27) + +[Full Changelog](https://github.com/primefaces/primereact/compare/6.5.1...6.6.0-rc.1) + +**Implemented New Features and Enhancements:** + +- Improve Galleria Thumbnail animation [\#2326](https://github.com/primefaces/primereact/issues/2326) +- Add trueValue-falseValue to Checkbox [\#2323](https://github.com/primefaces/primereact/issues/2323) +- Add trueValue-falseValue to InputSwitch [\#2317](https://github.com/primefaces/primereact/issues/2317) +- Modal layer enter-leave transition [\#2316](https://github.com/primefaces/primereact/issues/2316) +- Make Dock component mobile friendly [\#2312](https://github.com/primefaces/primereact/issues/2312) +- Set Paginator Page from InputNumber [\#2310](https://github.com/primefaces/primereact/issues/2310) +- Tooltip: word wrap [\#2307](https://github.com/primefaces/primereact/issues/2307) +- Tailwind Theme [\#2302](https://github.com/primefaces/primereact/issues/2302) +- Scrollable feature for TabView Component [\#2298](https://github.com/primefaces/primereact/issues/2298) +- New Component: Image [\#2297](https://github.com/primefaces/primereact/issues/2297) +- Add p-inputwrapper class to InputNumber [\#2289](https://github.com/primefaces/primereact/issues/2289) +- Add getFormatter method to InputNumber [\#2287](https://github.com/primefaces/primereact/issues/2287) +- Add allowEmpty property to InputNumber [\#2285](https://github.com/primefaces/primereact/issues/2285) +- InputNumber behaves odd when trying to insert fracitonal digits [\#2284](https://github.com/primefaces/primereact/issues/2284) +- InputNumber: cannot insert fractional digits when minFractionDigits=0 [\#2283](https://github.com/primefaces/primereact/issues/2283) + +**Fixed Bugs:** + +- CurrentPageReport displays wrong value [\#2314](https://github.com/primefaces/primereact/issues/2314) +- Filtered Dropdown unusable on Windows Tablet [\#2311](https://github.com/primefaces/primereact/issues/2311) +- Material themes Surface Border Issue [\#2309](https://github.com/primefaces/primereact/issues/2309) +- Dropdown scrolls top after reopened [\#2308](https://github.com/primefaces/primereact/issues/2308) +- Dropdown with filter bug selecting with arrow keys [\#2306](https://github.com/primefaces/primereact/issues/2306) +- Incorrect Sizing due to filter input width of dropdown [\#2305](https://github.com/primefaces/primereact/issues/2305) +- Overlay panel hide when clicking on a label inside of it [\#2304](https://github.com/primefaces/primereact/issues/2304) +- Thumbnails are not displayed correctly on Galleria if numVisible is greater than the length of value [\#2293](https://github.com/primefaces/primereact/issues/2293) +- InputNumber: issues with decimal separator for some locales, 0s are added to input [\#2292](https://github.com/primefaces/primereact/issues/2292) +- Negative sign in front of number is not possible for Finnish or Swedish locale [\#2291](https://github.com/primefaces/primereact/issues/2291) +- Input number caret issue with negatives [\#2290](https://github.com/primefaces/primereact/issues/2290) +- inputnumber : both prefix and currency Input error [\#2288](https://github.com/primefaces/primereact/issues/2288) +- InputNumber: setting "min" to anything greater than 0 implies "required" [\#2286](https://github.com/primefaces/primereact/issues/2286) +- InputNumber input event returns wrong value [\#2282](https://github.com/primefaces/primereact/issues/2282) +- Checkbox causes layout issues when used inside an overflow: auto div [\#2281](https://github.com/primefaces/primereact/issues/2281) +- Table Header Checkbox not working when lazy loading enabled [\#2253](https://github.com/primefaces/primereact/issues/2253) +- \[BUG\] 6.5.1 Toast - ContentClassName prop should be optional [\#2247](https://github.com/primefaces/primereact/issues/2247) +- InputNumber with min triggers onValueChange immediately if value is nully [\#2136](https://github.com/primefaces/primereact/issues/2136) + +## [6.5.1](https://github.com/primefaces/primereact/tree/6.5.1) (2021-08-18) + +[Full Changelog](https://github.com/primefaces/primereact/compare/6.5.0...6.5.1) + +**Implemented New Features and Enhancements:** + +- Add StyleClass Component [\#2242](https://github.com/primefaces/primereact/issues/2242) +- Inline style and style class for ToastMessage and its content [\#2236](https://github.com/primefaces/primereact/issues/2236) + +**Fixed Bugs:** + +- Ripple animation is not working on components [\#2240](https://github.com/primefaces/primereact/issues/2240) +- Dropdown keypress doesn't support Turkish characters [\#2217](https://github.com/primefaces/primereact/issues/2217) +- TreeSelect Typescript error [\#2211](https://github.com/primefaces/primereact/issues/2211) +- Typo in `Menu.d.ts` & `TieredMenu.d.ts` [\#2210](https://github.com/primefaces/primereact/issues/2210) +- DataScroller increases the first index value even when there are no rows [\#1902](https://github.com/primefaces/primereact/issues/1902) + +## [6.5.0](https://github.com/primefaces/primereact/tree/6.5.0) (2021-07-16) + +[Full Changelog](https://github.com/primefaces/primereact/compare/6.5.0-rc.2...6.5.0) + +**Implemented New Features and Enhancements:** + +- Add empty property to MultiStateCheckbox [\#2195](https://github.com/primefaces/primereact/issues/2195) +- Add filter parameter to the lazyLoad method of VirtualScroller on Dropdown, MultiSelect and Listbox [\#2192](https://github.com/primefaces/primereact/issues/2192) +- Add dataKey property to OrderList and PickList components [\#2187](https://github.com/primefaces/primereact/issues/2187) +- Add support for using plugins in the Chart component [\#2186](https://github.com/primefaces/primereact/issues/2186) +- New Component: Mention [\#2178](https://github.com/primefaces/primereact/issues/2178) +- Add icon property to Checkbox [\#2173](https://github.com/primefaces/primereact/issues/2173) +- Add onClick and onMaskClick events to Dialog [\#2163](https://github.com/primefaces/primereact/issues/2163) +- Rename OverlayEventBus to OverlayService [\#2162](https://github.com/primefaces/primereact/issues/2162) +- Add cellClassName property to DataTable [\#2160](https://github.com/primefaces/primereact/issues/2160) +- Add inputMode property to Calendar [\#2158](https://github.com/primefaces/primereact/issues/2158) +- New Component: Dock [\#2017](https://github.com/primefaces/primereact/issues/2017) +- New Component: SpeedDial [\#1975](https://github.com/primefaces/primereact/issues/1975) +- New Component: BlockUI [\#1268](https://github.com/primefaces/primereact/issues/1268) +- Add dataKey property to DataView [\#1115](https://github.com/primefaces/primereact/issues/1115) +- Add onNodeClick and onNodeDoubleClick events to Tree [\#1099](https://github.com/primefaces/primereact/issues/1099) +- Primereact should not act on the global style [\#1082](https://github.com/primefaces/primereact/issues/1082) +- New Component: Terminal [\#472](https://github.com/primefaces/primereact/issues/472) + +**Fixed Bugs:** + +- When the container is scrolled using the keyboard on VirtualScroller, this behavior does not continue when new elements are loaded. [\#2196](https://github.com/primefaces/primereact/issues/2196) +- \[bug\] Sidebar Close button ripple effect on opposite side rather than on the button [\#2185](https://github.com/primefaces/primereact/issues/2185) +- localeOption return type definition should be an any, not void [\#2181](https://github.com/primefaces/primereact/issues/2181) +- Changing month with monthNavigator issue on Inline Calendar [\#2174](https://github.com/primefaces/primereact/issues/2174) +- Dropdown filter closing issue [\#2171](https://github.com/primefaces/primereact/issues/2171) +- Calendar min max doesn't work with showTime show second [\#2130](https://github.com/primefaces/primereact/issues/2130) +- No whitespace when cell editing in DataTable [\#2124](https://github.com/primefaces/primereact/issues/2124) +- OnPage datatable call api twice [\#2030](https://github.com/primefaces/primereact/issues/2030) + +## [6.5.0-rc.2](https://github.com/primefaces/primereact/tree/6.5.0-rc.2) (2021-06-28) + +[Full Changelog](https://github.com/primefaces/primereact/compare/6.5.0-rc.1...6.5.0-rc.2) + +**Implemented New Features and Enhancements:** + +- Webpack moduleFederation throws warning for micro front end apps [\#2146](https://github.com/primefaces/primereact/issues/2146) +- Add onLoad property to Editor [\#2145](https://github.com/primefaces/primereact/issues/2145) +- Add progressBarTemplate property to FileUpload [\#2144](https://github.com/primefaces/primereact/issues/2144) +- Improve forwardRef structure on Button [\#2143](https://github.com/primefaces/primereact/issues/2143) +- Add emptyMessage property to DataScroller [\#2141](https://github.com/primefaces/primereact/issues/2141) +- Access to Quill object when using the Editor component [\#2122](https://github.com/primefaces/primereact/issues/2122) + +**Fixed Bugs:** + +- When clicking on the target element to open the confirmPopup, the browser's scroll moves [\#2142](https://github.com/primefaces/primereact/issues/2142) +- Colors vars are not working [\#2126](https://github.com/primefaces/primereact/issues/2126) +- Move cursor not showing if Dialog is not resizable [\#2064](https://github.com/primefaces/primereact/issues/2064) + +## [6.5.0-rc.1](https://github.com/primefaces/primereact/tree/6.5.0-rc1) + +[Full Changelog](https://github.com/primefaces/primereact/compare/6.4.1...6.5.0-rc1) + +**Implemented New Features and Enhancements:** + +- New PrimeReact Build [\#2135](https://github.com/primefaces/primereact/issues/2135) + +**Fixed Bugs:** + +- Tooltips closed on window resize after system keyboard appears on mobile devices [\#2140](https://github.com/primefaces/primereact/issues/2140) +- Overlay components are not aligned correctly [\#2139](https://github.com/primefaces/primereact/issues/2139) +- PickList crashes Application when using SourceSelection [\#2133](https://github.com/primefaces/primereact/issues/2133) +- Calendar yearNavigator not working [\#2131](https://github.com/primefaces/primereact/issues/2131) +- Building against primereact 6.4.1 generates TS1036 error against VirtualScroller.d.ts:38 [\#2123](https://github.com/primefaces/primereact/issues/2123) + +## [6.4.1](https://github.com/primefaces/primereact/tree/6.4.1) (2021-06-16) + +[Full Changelog](https://github.com/primefaces/primereact/compare/6.4.0...6.4.1) + +**Implemented New Features and Enhancements:** + +- Responsive TabMenu and Breadcrumb [\#2120](https://github.com/primefaces/primereact/issues/2120) +- Add visible and onVisibleChange properties to Calendar [\#2119](https://github.com/primefaces/primereact/issues/2119) +- Add monthNavigatorTemplate and yearNavigatorTemplate properties to Calendar [\#2116](https://github.com/primefaces/primereact/issues/2116) +- Toast center positioning enhancement [\#2108](https://github.com/primefaces/primereact/issues/2108) + +**Fixed Bugs:** + +- InputMask cannot read property 'length' of null [\#2113](https://github.com/primefaces/primereact/issues/2113) +- Dropdown search crashes when no match with VirtualScrollar [\#2112](https://github.com/primefaces/primereact/issues/2112) +- The panel of Calendar is not aligned inside editable DataTable [\#2111](https://github.com/primefaces/primereact/issues/2111) +- MultiSelect filtering broken in v6.4.0 [\#2110](https://github.com/primefaces/primereact/issues/2110) +- DataTable - Headers of Columns with exportable at false are exported [\#2107](https://github.com/primefaces/primereact/issues/2107) +- ColorPicker doesn't change its color \(react-hook-form\) [\#2071](https://github.com/primefaces/primereact/issues/2071) + +## [6.4.0](https://github.com/primefaces/primereact/tree/6.4.0) (2021-06-11) + +[Full Changelog](https://github.com/primefaces/primereact/compare/6.3.2...6.4.0) + +**Breaking Changes:** + +- Improve onFilterValueChange event on Tree [\#2037](https://github.com/primefaces/primereact/issues/2037) +- FullCalendar component is deprecated [\#2092](https://github.com/primefaces/primereact/issues/2092) +- Remove hidden select tag and required property from MultiSelect [\#2099](https://github.com/primefaces/primereact/issues/2099) +- Update to Chart.js 3.3.2 [\#1802](https://github.com/primefaces/primereact/issues/1802) + +**Implemented New Features and Enhancements:** + +- New Component: VirtualScroller [\#2063](https://github.com/primefaces/primereact/issues/2063) +- Add virtualScrollerOptions property to components [\#2075](https://github.com/primefaces/primereact/issues/2075) +- Improve resize feature of Dialog [\#2102](https://github.com/primefaces/primereact/issues/2102) +- Add showSelectAll, selectAll and onSelectAll properties to MultiSelect [\#2098](https://github.com/primefaces/primereact/issues/2098) +- Add inputId property to Password [\#2096](https://github.com/primefaces/primereact/issues/2096) +- Add onAllRowsSelect and onAllRowsUnselect callbacks to DataTable [\#2093](https://github.com/primefaces/primereact/issues/2093) +- TieredMenu sub-items are not visible when there's not enough space on the right side [\#2091](https://github.com/primefaces/primereact/issues/2091) +- Add 'toast' key to ZIndex option on PrimeReact api [\#2089](https://github.com/primefaces/primereact/issues/2089) +- Add autoZIndex option to PrimReact api [\#2088](https://github.com/primefaces/primereact/issues/2088) +- Add Vite support [\#2087](https://github.com/primefaces/primereact/issues/2087) +- Add p-sidebar-view and p-sidebar-content classes to Sidebar [\#2081](https://github.com/primefaces/primereact/issues/2081) +- Add unselectable property to SelectButton [\#2077](https://github.com/primefaces/primereact/issues/2077) +- Add dropdownIcon property to components [\#2074](https://github.com/primefaces/primereact/issues/2074) +- Add emptyMessage property to Dropdown [\#2062](https://github.com/primefaces/primereact/issues/2062) +- Add showGridlines and stripedRows props to DataTable [\#2054](https://github.com/primefaces/primereact/issues/2054) +- Rangepicker for Date and Time [\#2051](https://github.com/primefaces/primereact/issues/2051) +- Add onColumnResizerClick and onColumnResizerDoubleClick callbacks for column resizers on DataTable [\#2047](https://github.com/primefaces/primereact/issues/2047) +- Improve header element on Dialog [\#2044](https://github.com/primefaces/primereact/issues/2044) +- ScrollPanel pushes content to the left in order to show scrollbar [\#2039](https://github.com/primefaces/primereact/issues/2039) +- Add appendTo property to Sidebar [\#2038](https://github.com/primefaces/primereact/issues/2038) +- Add filterValue and onFilterValueChange properties to TreeSelect [\#2033](https://github.com/primefaces/primereact/issues/2033) +- Improve Tooltip alignment [\#1973](https://github.com/primefaces/primereact/issues/1973) + +**Fixed Bugs:** + +- The id property has no effect on Card [\#2105](https://github.com/primefaces/primereact/issues/2105) +- Items are not aligned on BreadCrumb [\#2104](https://github.com/primefaces/primereact/issues/2104) +- Drag and drop not working properly with frozen columns on TreeTable [\#2100](https://github.com/primefaces/primereact/issues/2100) +- \(Datatable\) EmptyMessage is not 'No records found' but null [\#2094](https://github.com/primefaces/primereact/issues/2094) +- Freezing Columns leads to wrong order on Column reorder of DataTable [\#2086](https://github.com/primefaces/primereact/issues/2086) +- Resizing of splitter panels doesn't work on touch devices [\#2083](https://github.com/primefaces/primereact/issues/2083) +- validateResize in splitter doesn't validate sizes if there are more than two panels [\#2082](https://github.com/primefaces/primereact/issues/2082) +- Tooltip: wrong arrow position and orientation for certain combinations of my, at, position [\#2073](https://github.com/primefaces/primereact/issues/2073) +- PageParams TypeScript interface improvement on DataTable, TreeTable and DataView [\#2070](https://github.com/primefaces/primereact/issues/2070) +- Splitter considers the height as the size of the container irrespective of the layout [\#2067](https://github.com/primefaces/primereact/issues/2067) +- DataView throws an exception when the last page is reached using Paginator [\#2066](https://github.com/primefaces/primereact/issues/2066) +- Calender Component Type Error [\#2057](https://github.com/primefaces/primereact/issues/2057) +- FileUpload - long filename [\#2055](https://github.com/primefaces/primereact/issues/2055) +- Slider doesn't work with decimal step value [\#2036](https://github.com/primefaces/primereact/issues/2036) +- PickList type definition is not in line with proptypes [\#2035](https://github.com/primefaces/primereact/issues/2035) +- Sidebar content overflows its container [\#2034](https://github.com/primefaces/primereact/issues/2034) +- options.clear\(\) NOT works in FileUpload [\#2026](https://github.com/primefaces/primereact/issues/2026) +- Edit and Sort combination support for DataTable [\#878](https://github.com/primefaces/primereact/issues/878) + +**Deprecated:** + +- FullCalendar component is deprecated [\#2092](https://github.com/primefaces/primereact/issues/2092) + +## [6.3.2](https://github.com/primefaces/primereact/tree/6.3.2) (2021-05-10) + +[Full Changelog](https://github.com/primefaces/primereact/compare/6.3.1...6.3.2) + +**Breaking Changes:** + +- Remove activeItem property from TabMenu [\#2015](https://github.com/primefaces/primereact/issues/2015) +- Replace 'data' params name with 'value' for onContextMenuSelectionChange on DataTable [\#2021](https://github.com/primefaces/primereact/issues/2021) +- Improve nodeTemplate property on Tree [\#2019](https://github.com/primefaces/primereact/issues/2019) + +**Implemented New Features and Enhancements:** + +- Add options parameter to uploadHandler callback on FileUpload [\#2024](https://github.com/primefaces/primereact/issues/2024) +- Improve footer template on ConfirmDialog and ConfirmPopup [\#2020](https://github.com/primefaces/primereact/issues/2020) +- Add activeIndex property to TabMenu [\#2014](https://github.com/primefaces/primereact/issues/2014) +- onBlur/onFocus's event argument should be typed as FocusEvent [\#2009](https://github.com/primefaces/primereact/issues/2009) +- Add togglerTemplate property to Tree [\#2005](https://github.com/primefaces/primereact/issues/2005) +- ColorPicker: wrong value type definitions when using rgb or hsb format [\#2004](https://github.com/primefaces/primereact/issues/2004) +- Expand the root of filtered nodes on Tree [\#2001](https://github.com/primefaces/primereact/issues/2001) +- Export classNames function from 'primereact/utils' package [\#1990](https://github.com/primefaces/primereact/issues/1990) +- Striped class is not applied to expanded rows on DataTable [\#1987](https://github.com/primefaces/primereact/issues/1987) +- Improve type definitions for IDEs [\#1986](https://github.com/primefaces/primereact/issues/1986) + +**Fixed Bugs:** + +- Multiselect item on 0 index is getting selected [\#2012](https://github.com/primefaces/primereact/issues/2012) +- MultiSelect is not working nested value option [\#2011](https://github.com/primefaces/primereact/issues/2011) +- DataTable checkbox-only selection:: behave as "single" mode. [\#2008](https://github.com/primefaces/primereact/issues/2008) +- ColorPicker: add missing input attributes, part 2: type definitions [\#2006](https://github.com/primefaces/primereact/issues/2006) +- ListBox fails on tap item in mobile [\#2000](https://github.com/primefaces/primereact/issues/2000) +- InputTextarea with auto resize isn't sized correctly when initially populated with a long string [\#1999](https://github.com/primefaces/primereact/issues/1999) +- The Toast component missed the 'top-center' and 'bottom-center' positions in the typings [\#1996](https://github.com/primefaces/primereact/issues/1996) +- TreeSelect onNodeExpand Event Never Fires [\#1995](https://github.com/primefaces/primereact/issues/1995) +- AccordionTab cannot be rendered conditionally [\#1992](https://github.com/primefaces/primereact/issues/1992) +- When a selected date is deselected, the inputfield is not updated. [\#1991](https://github.com/primefaces/primereact/issues/1991) +- Non-sortable columns call onSort callback in DataTable [\#1989](https://github.com/primefaces/primereact/issues/1989) +- Treetable break after toggle columns [\#1988](https://github.com/primefaces/primereact/issues/1988) +- Tooltip: Fixed tooltip doesnt work with elements inside Tooltip children \( autoHide = false \) [\#1985](https://github.com/primefaces/primereact/issues/1985) +- The emptyFilterMessage no longer working on Dropdown/MuliSelect components [\#1984](https://github.com/primefaces/primereact/issues/1984) +- InputNumber's onValueChange is called unconditionally when the onBlur event occurs. [\#1842](https://github.com/primefaces/primereact/issues/1842) +- Overlay Components not working for Mobile devices [\#1694](https://github.com/primefaces/primereact/issues/1694) + +## [6.3.1](https://github.com/primefaces/primereact/tree/6.3.1) (2021-04-25) + +[Full Changelog](https://github.com/primefaces/primereact/compare/6.3.0...6.3.1) + +**Implemented New Features and Enhancements:** + +- Improve filled control on InputText [\#1977](https://github.com/primefaces/primereact/issues/1977) + +**Fixed Bugs:** + +- DataTable - EventParams - wrong interface attribute [\#1983](https://github.com/primefaces/primereact/issues/1983) +- The optionDisabled property is wrongly typed [\#1982](https://github.com/primefaces/primereact/issues/1982) +- Galleria and Carousel is not working as expected [\#1981](https://github.com/primefaces/primereact/issues/1981) +- Typescript: Props aren't exported anymore [\#1979](https://github.com/primefaces/primereact/issues/1979) +- The panel always stays open with browser's autofill feature on Password [\#1978](https://github.com/primefaces/primereact/issues/1978) +- The rowData has wrong type on DataTable [\#1976](https://github.com/primefaces/primereact/issues/1976) + +## [6.3.0](https://github.com/primefaces/primereact/tree/6.3.0) (2021-04-22) + +[Full Changelog](https://github.com/primefaces/primereact/compare/6.2.1...6.3.0) + +**Breaking Changes:** + +- Improve type definitions on all components [\#1877](https://github.com/primefaces/primereact/issues/1877) + +**Implemented New Features and Enhancements:** + +- New Component: TreeSelect [\#1971](https://github.com/primefaces/primereact/issues/1971) +- New Component: MultiStateCheckbox [\#1812](https://github.com/primefaces/primereact/issues/1812) +- Add cellSelection property to DataTable [\#1942](https://github.com/primefaces/primereact/issues/1942) +- Add dragSelection property to DataTable [\#1932](https://github.com/primefaces/primereact/issues/1932) +- Improve selectionMode property on DataTable [\#1926](https://github.com/primefaces/primereact/issues/1926) +- Add zIndex option to PrimeReact api [\#1924](https://github.com/primefaces/primereact/issues/1924) +- Add appendTo option to PrimeReact api [\#1964](https://github.com/primefaces/primereact/issues/1964) +- Improve ref property on Form components [\#1920](https://github.com/primefaces/primereact/issues/1920) +- Add transitionOptions property to Components that use CSSTransition API [\#1917](https://github.com/primefaces/primereact/issues/1917) +- Add showHeader property to Tree [\#1970](https://github.com/primefaces/primereact/issues/1970) +- Add filterValue and onFilterValueChange property to Tree [\#1968](https://github.com/primefaces/primereact/issues/1968) +- Add header and footer to Tree [\#1967](https://github.com/primefaces/primereact/issues/1967) +- Constants for Message Severities [\#1962](https://github.com/primefaces/primereact/issues/1962) +- Reimplement EventBus [\#1961](https://github.com/primefaces/primereact/issues/1961) +- Add new params to filterFunction on Column [\#1956](https://github.com/primefaces/primereact/issues/1956) +- Add headerTemplate property to TabPanel on TabView [\#1955](https://github.com/primefaces/primereact/issues/1955) +- Add showOnFocus property to Dropdown [\#1954](https://github.com/primefaces/primereact/issues/1954) +- Add onShow and onHide callbacks to Overlay and Modal Components [\#1951](https://github.com/primefaces/primereact/issues/1951) +- Add 'self' value to appendTo property on Components [\#1949](https://github.com/primefaces/primereact/issues/1949) +- Add autoHide property to Tooltip [\#1946](https://github.com/primefaces/primereact/issues/1946) +- Improve Typing for ToolTips [\#1916](https://github.com/primefaces/primereact/issues/1916) +- InputNumber with required property doesn't behave the same as html \ element. [\#1912](https://github.com/primefaces/primereact/issues/1912) +- Add sortableDisabled property to Column [\#1911](https://github.com/primefaces/primereact/issues/1911) +- Add headerTemplate property to FileUplaod [\#1907](https://github.com/primefaces/primereact/issues/1907) +- Add headerClassName, headerStyle, contentClassName and contentStyle properties to FileUpload [\#1905](https://github.com/primefaces/primereact/issues/1905) +- Add itemTemplate property to FileUpload [\#1904](https://github.com/primefaces/primereact/issues/1904) +- Add chooseOptions, uploadOptions and cancelOptions properties to FileUpload [\#1903](https://github.com/primefaces/primereact/issues/1903) +- Close multiselect dropdown on button click of panelFooterTemplate / Add onShow & onHide event [\#1891](https://github.com/primefaces/primereact/issues/1891) +- Add loading property to Button [\#1876](https://github.com/primefaces/primereact/issues/1876) +- Can't use multiple file upload when mode is set to "basic" [\#1649](https://github.com/primefaces/primereact/issues/1649) +- Use of "\[key: string\]: any;" in type definitions circumvents type safety [\#1615](https://github.com/primefaces/primereact/issues/1615) +- OverlayPanel: incorrect type definitions for show/hide arguments [\#1356](https://github.com/primefaces/primereact/issues/1356) + +**Fixed Bugs:** + +- Striped class is not working as expected on DataTable with expanded rows [\#1972](https://github.com/primefaces/primereact/issues/1972) +- Touch event is not working on ColorPicker [\#1960](https://github.com/primefaces/primereact/issues/1960) +- The root menuitem does not support template option on PanelMenu [\#1953](https://github.com/primefaces/primereact/issues/1953) +- Dialog can't close when you press ESC key [\#1947](https://github.com/primefaces/primereact/issues/1947) +- MultiSelect Button disabled issue [\#1943](https://github.com/primefaces/primereact/issues/1943) +- Dialog minWidth and minHeight issue [\#1940](https://github.com/primefaces/primereact/issues/1940) +- Dropdown, MultiSelect, Listbox option that has disabled property is not disabled [\#1936](https://github.com/primefaces/primereact/issues/1936) +- MultiSelect, selecting disabled options [\#1934](https://github.com/primefaces/primereact/issues/1934) +- Uncaught Error: Cannot find module './images/color.png' [\#1931](https://github.com/primefaces/primereact/issues/1931) +- Randomly generated IDs in components throw a warning on SSR [\#1922](https://github.com/primefaces/primereact/issues/1922) +- Dropdown 'optionDisabled' is wrongly typed as boolean [\#1921](https://github.com/primefaces/primereact/issues/1921) +- "scrollHeight" for autocomplete doesn't work [\#1918](https://github.com/primefaces/primereact/issues/1918) +- DataTable and TreeTable Typing is wrong [\#1914](https://github.com/primefaces/primereact/issues/1914) +- Incorrect types for CascadeSelectProps and ConfirmDialogProps [\#1908](https://github.com/primefaces/primereact/issues/1908) +- Tooltip is not working with 'disabled' attribute of HTML element as expected. [\#1906](https://github.com/primefaces/primereact/issues/1906) +- Slider does not work with fractional step values [\#1901](https://github.com/primefaces/primereact/issues/1901) +- Animation "none" not working for Skeleton [\#1900](https://github.com/primefaces/primereact/issues/1900) +- PickList transfer buttons disable and items selection issue [\#1898](https://github.com/primefaces/primereact/issues/1898) +- Multiselect malfunction with 'optionValue' prop setted [\#1897](https://github.com/primefaces/primereact/issues/1897) +- SlideMenu menu model template has wrong classname [\#1894](https://github.com/primefaces/primereact/issues/1894) +- SlideMenu does not correctly accept className prop [\#1893](https://github.com/primefaces/primereact/issues/1893) +- A maximizable dialog cannot be maximized properly after its size or position has been changed [\#1888](https://github.com/primefaces/primereact/issues/1888) +- Password component doesn't visualize properly the value of the variable serving as it's value when it is programmatically changed [\#1885](https://github.com/primefaces/primereact/issues/1885) +- FullCalendar, Editor and Chart are not working with NEXT.js [\#1884](https://github.com/primefaces/primereact/issues/1884) +- editor automatically gains focus when intializing model with data [\#1851](https://github.com/primefaces/primereact/issues/1851) +- TreeTable does not account for changes in scrollHeight [\#1850](https://github.com/primefaces/primereact/issues/1850) +- Picklist reorder causes high level error. [\#1843](https://github.com/primefaces/primereact/issues/1843) +- Fieldset shows empty legend over its border [\#1433](https://github.com/primefaces/primereact/issues/1433) + +## [6.2.1](https://github.com/primefaces/primereact/tree/6.2.1) (2021-03-17) + +[Full Changelog](https://github.com/primefaces/primereact/compare/6.2.0...6.2.1) + +**Fixed Bugs:** + +- Overlay Components throw an exception with Next.js [\#1880](https://github.com/primefaces/primereact/issues/1880) + +## [6.2.0](https://github.com/primefaces/primereact/tree/6.2.0) (2021-03-16) + +[Full Changelog](https://github.com/primefaces/primereact/compare/6.1.0...6.2.0) + +**Implemented New Features and Enhancements:** + +- Add zIndex options to PrimeReact api [\#1878](https://github.com/primefaces/primereact/issues/1878) +- Set appendTo as body by default [\#1875](https://github.com/primefaces/primereact/issues/1875) +- Add option group support to Dropdown [\#1874](https://github.com/primefaces/primereact/issues/1874) +- Add option group support to MultiSelect [\#1873](https://github.com/primefaces/primereact/issues/1873) +- Add option group support to Listbox [\#1872](https://github.com/primefaces/primereact/issues/1872) +- Add option group support to Autocomplete [\#1871](https://github.com/primefaces/primereact/issues/1871) +- Improve close button style on Inplace [\#1861](https://github.com/primefaces/primereact/issues/1861) +- Improve type definition of completeMethod event on AutoComplete [\#1680](https://github.com/primefaces/primereact/issues/1680) + +**Fixed Bugs:** + +- Datatable rows per page doesn't work [\#1870](https://github.com/primefaces/primereact/issues/1870) +- Server side error because OverlayEventBus [\#1869](https://github.com/primefaces/primereact/issues/1869) +- Cell Editing doesn't work on child nodes in TreeTable [\#1865](https://github.com/primefaces/primereact/issues/1865) +- Ability to clear password \(set value of password to blank\) [\#1854](https://github.com/primefaces/primereact/issues/1854) + +## [6.1.0](https://github.com/primefaces/primereact/tree/6.1.0) (2021-03-09) + +[Full Changelog](https://github.com/primefaces/primereact/compare/6.0.2...6.1.0) + +**Implemented New Features and Enhancements:** + +- Color Palettes for Each Theme [\#1860](https://github.com/primefaces/primereact/issues/1860) +- Add touch support to ColorPicker [\#1857](https://github.com/primefaces/primereact/issues/1857) +- Add breakpoints property to Dialog, ConfirmDialog and OverlayPanel [\#1856](https://github.com/primefaces/primereact/issues/1856) +- Add selectionOnly options to CSV export on DataTable [\#1853](https://github.com/primefaces/primereact/issues/1853) +- Add multiple property to PanelMenu [\#1846](https://github.com/primefaces/primereact/issues/1846) +- Add expanded option to MenuModel [\#1845](https://github.com/primefaces/primereact/issues/1845) +- Add panelHeaderTemplate and panelFooterTemplate properties to MultiSelect [\#1841](https://github.com/primefaces/primereact/issues/1841) +- Add paginatorClassName to DataTable, TreeTable and DataView [\#1840](https://github.com/primefaces/primereact/issues/1840) +- Improve template option on Paginator [\#1839](https://github.com/primefaces/primereact/issues/1839) +- Improve the interaction of nested overlays [\#1832](https://github.com/primefaces/primereact/issues/1832) +- Add disabled option to Tooltip [\#1827](https://github.com/primefaces/primereact/issues/1827) +- Add onClick event to Avatar [\#1819](https://github.com/primefaces/primereact/issues/1819) +- Improve checkbox selection on DataTable [\#1817](https://github.com/primefaces/primereact/issues/1817) +- \[Multiselect\] Feature request: Configure Maximum allowed number of items selectable in Multiselect [\#1815](https://github.com/primefaces/primereact/issues/1815) +- data-pr-{options} on Global Tooltip doesn't work [\#1811](https://github.com/primefaces/primereact/issues/1811) +- Menubar and Toolbar, start/end wrong prop types, that don't accept JSX.Element type [\#1809](https://github.com/primefaces/primereact/issues/1809) +- Tooltip does not disappear when components are disabled [\#1806](https://github.com/primefaces/primereact/issues/1806) +- Add onClose callback to custom content on ToastMessage [\#1805](https://github.com/primefaces/primereact/issues/1805) +- Add draggable and resizable features to Dialog [\#1616](https://github.com/primefaces/primereact/issues/1616) +- DataTable/TreeTable: implement configurable filterDelay [\#1440](https://github.com/primefaces/primereact/issues/1440) +- Disabling a Menu Item doesnt add aria-disabled label [\#1434](https://github.com/primefaces/primereact/issues/1434) +- TreeTable/DataTable goes to edit mode when selected \(single click\) [\#1292](https://github.com/primefaces/primereact/issues/1292) +- Add removableSort property on TreeTable component [\#1275](https://github.com/primefaces/primereact/issues/1275) +- Change row navigation structure on DataTable with selection [\#1162](https://github.com/primefaces/primereact/issues/1162) +- Trigger row editing on datatable programmatically [\#1135](https://github.com/primefaces/primereact/issues/1135) +- Add showFilterClear proprty to Dropdown [\#1081](https://github.com/primefaces/primereact/issues/1081) +- Improve the parameters of onDragDrop callback on Tree [\#1020](https://github.com/primefaces/primereact/issues/1020) +- PanelMenu collapses on clicking the menu link instead of being in expanded state [\#1011](https://github.com/primefaces/primereact/issues/1011) +- Support for svg element in icon properties [\#971](https://github.com/primefaces/primereact/issues/971) +- Accessibility of the DataTable expander cell button [\#921](https://github.com/primefaces/primereact/issues/921) +- Accessibility issues in Tooltip and Dialog components [\#862](https://github.com/primefaces/primereact/issues/862) +- Add mask property to Calendar [\#765](https://github.com/primefaces/primereact/issues/765) +- Keyboard Accessibility for Slider [\#694](https://github.com/primefaces/primereact/issues/694) +- Add onBeforeEditorShow and onBeforeEditorHide callbacks to Column on DataTable with cell editing [\#589](https://github.com/primefaces/primereact/issues/589) +- Add headerTemplate property to Panel [\#1858](https://github.com/primefaces/primereact/issues/1858) + +**Fixed Bugs:** + +- DataTable is not working with defaultSortOrder={-1} [\#1855](https://github.com/primefaces/primereact/issues/1855) +- PanelMenu animation is not working as expected [\#1844](https://github.com/primefaces/primereact/issues/1844) +- CascadeSelect is not working with appendTo property [\#1833](https://github.com/primefaces/primereact/issues/1833) +- Editing DataTable and TreeTable are not working as expected on React/ReactDOM ^17.0.1 [\#1828](https://github.com/primefaces/primereact/issues/1828) +- MenuItem interface missing template property [\#1823](https://github.com/primefaces/primereact/issues/1823) +- When the 'rows' property changes, Pagination component does not update [\#1820](https://github.com/primefaces/primereact/issues/1820) +- InputText component reference returns Invalid prop forwardRef [\#1818](https://github.com/primefaces/primereact/issues/1818) +- PickList: Move Up \(Single\) and Move Down buttons are not working [\#1814](https://github.com/primefaces/primereact/issues/1814) +- DataTable - accessibility of sorting buttons [\#1813](https://github.com/primefaces/primereact/issues/1813) +- Dropdown menu is separate from the input field [\#1808](https://github.com/primefaces/primereact/issues/1808) +- DataTable csv export fails in chrome but is working in IE [\#1098](https://github.com/primefaces/primereact/issues/1098) +- The toggler icon of Tree/TreeTable is not displaying correctly in mobile mode [\#1859](https://github.com/primefaces/primereact/issues/1859) + +## [6.0.2](https://github.com/primefaces/primereact/tree/6.0.2) (2021-02-04) + +[Full Changelog](https://github.com/primefaces/primereact/compare/6.0.1...6.0.2) + +**Implemented New Features and Enhancements:** + +- Add autoHighlight property to AutoComplete [\#1801](https://github.com/primefaces/primereact/issues/1801) +- Add forceSelection to AutoComplete [\#1800](https://github.com/primefaces/primereact/issues/1800) +- Improve Password implementation [\#1799](https://github.com/primefaces/primereact/issues/1799) +- InplaceDisplay has no ariaLabel property [\#1796](https://github.com/primefaces/primereact/issues/1796) +- Add autoFocus property to InputNumber [\#1794](https://github.com/primefaces/primereact/issues/1794) +- Change the type of loader property on DataScroller [\#1791](https://github.com/primefaces/primereact/issues/1791) +- Improve PrimeReact components for React.StrictMode [\#1790](https://github.com/primefaces/primereact/issues/1790) +- Improve rowEditor buttons on DataTable with editMode="row" [\#1788](https://github.com/primefaces/primereact/issues/1788) + +**Fixed Bugs:** + +- AutoComplete in FireFox does not pass focus on Tab [\#1798](https://github.com/primefaces/primereact/issues/1798) +- Fullcalendar Week View Missing Vertical Lines [\#1797](https://github.com/primefaces/primereact/issues/1797) +- SplitterPanel is not exported in TypeScript [\#1795](https://github.com/primefaces/primereact/issues/1795) +- Navigator Calendar taking current year when yearRange property is less than current year [\#1793](https://github.com/primefaces/primereact/issues/1793) +- Datatable doesn't change page when the last element on a page is removed. [\#1792](https://github.com/primefaces/primereact/issues/1792) +- DataTable ContextMenu Third Reposition [\#1789](https://github.com/primefaces/primereact/issues/1789) +- TreeTable tabbing between editable cells not working [\#1617](https://github.com/primefaces/primereact/issues/1617) + +## [6.0.1](https://github.com/primefaces/primereact/tree/6.0.1) (2021-01-28) + +[Full Changelog](https://github.com/primefaces/primereact/compare/6.0.0...6.0.1) + +**Implemented New Features and Enhancements:** + +- Clearing Dropdown returns null instead of undefined [\#1784](https://github.com/primefaces/primereact/issues/1784) +- Improve template property on MenuModel API [\#1783](https://github.com/primefaces/primereact/issues/1783) +- Add CascadeSelect to FloatLabelDemo [\#1781](https://github.com/primefaces/primereact/issues/1781) +- Add imageAlt and onImageError to Avatar [\#1779](https://github.com/primefaces/primereact/issues/1779) +- Add imageAlt and onImageError property to Chip [\#1778](https://github.com/primefaces/primereact/issues/1778) +- Improve custom content option on Button [\#1777](https://github.com/primefaces/primereact/issues/1777) +- Add restoreTableState method to DataTable [\#1776](https://github.com/primefaces/primereact/issues/1776) +- If Tooltip's content is empty, the tooltip may not be rendered. [\#1770](https://github.com/primefaces/primereact/issues/1770) +- Controlled Knob does not react to value changes on props [\#1766](https://github.com/primefaces/primereact/issues/1766) +- Get filtered rows from global filter action [\#1763](https://github.com/primefaces/primereact/issues/1763) +- Feature Request: DataTable hide expander when there are no children rows [\#1762](https://github.com/primefaces/primereact/issues/1762) +- Change the type of content property in ToastMessage [\#1761](https://github.com/primefaces/primereact/issues/1761) +- Add p-component class to Calendar [\#1756](https://github.com/primefaces/primereact/issues/1756) +- Improve dynamic mask on InputMask [\#1718](https://github.com/primefaces/primereact/issues/1718) +- MultiSelect implement SelectItem disabled [\#1698](https://github.com/primefaces/primereact/issues/1698) +- Do not hide overlays on body scroll [\#1655](https://github.com/primefaces/primereact/issues/1655) +- Add template property support to MenuModel API in all menu components [\#1635](https://github.com/primefaces/primereact/issues/1635) + +**Fixed Bugs:** + +- Button link is invisible in material themes [\#1786](https://github.com/primefaces/primereact/issues/1786) +- Inline Calendar doesn't display correctly with time/button bar [\#1782](https://github.com/primefaces/primereact/issues/1782) +- Improve float label support in overlay selects [\#1780](https://github.com/primefaces/primereact/issues/1780) +- Avatar with image and shape="circle" doesn't have border-radius style [\#1773](https://github.com/primefaces/primereact/issues/1773) +- Primereact 6 doesn't work once compiled with Webpack [\#1771](https://github.com/primefaces/primereact/issues/1771) +- No typing for confirmPopup and confirmDialog [\#1765](https://github.com/primefaces/primereact/issues/1765) +- Cascade Select material theming is inconsistent [\#1757](https://github.com/primefaces/primereact/issues/1757) +- DataTable with editMode="cell" doesn't work as expected [\#1752](https://github.com/primefaces/primereact/issues/1752) +- Problem in entering negative value in INPUTNUMBER. [\#1746](https://github.com/primefaces/primereact/issues/1746) +- Calendar input does not update view when hourFormat changes [\#1711](https://github.com/primefaces/primereact/issues/1711) + +## [6.0.0](https://github.com/primefaces/primereact/tree/6.0.0) (2021-01-12) + +[Full Changelog](https://github.com/primefaces/primereact/compare/5.0.2...6.0.0) + +**Breaking Changes:** + +- Change the type of locale property on Calendar [\#1750](https://github.com/primefaces/primereact/issues/1750) +- Change the import of PrimeReact class [\#1751](https://github.com/primefaces/primereact/issues/1751) +- Rename 'readonly' property with 'readOnly' on all components [\#1738](https://github.com/primefaces/primereact/issues/1738) +- Remove onSourceSelect and onTargetSelect callbacks from PickList [\#1707](https://github.com/primefaces/primereact/issues/1707) +- Change the type of tabIndex property on all components [\#1566](https://github.com/primefaces/primereact/issues/1566) + +**Implemented New Features and Enhancements:** + +- Locale API [\#1749](https://github.com/primefaces/primereact/issues/1749) +- New Component: CascadeSelect [\#1736](https://github.com/primefaces/primereact/issues/1736) +- New Component: Chip [\#1734](https://github.com/primefaces/primereact/issues/1734) +- New Component: ScrollTop [\#1733](https://github.com/primefaces/primereact/issues/1733) +- New Component: ConfirmPopup [\#1731](https://github.com/primefaces/primereact/issues/1731) +- New Component: ConfirmDialog [\#1730](https://github.com/primefaces/primereact/issues/1730) +- New Component: Splitter [\#1729](https://github.com/primefaces/primereact/issues/1729) +- New Component: Knob [\#1727](https://github.com/primefaces/primereact/issues/1727) +- New Component: Divider [\#1726](https://github.com/primefaces/primereact/issues/1726) +- New Component: Skeleton [\#1725](https://github.com/primefaces/primereact/issues/1725) +- New Component: Tag [\#1723](https://github.com/primefaces/primereact/issues/1723) +- New Component: Badge [\#1719](https://github.com/primefaces/primereact/issues/1719) +- New Component: Avatar [\#1717](https://github.com/primefaces/primereact/issues/1717) +- Add icons property to Panel [\#1748](https://github.com/primefaces/primereact/issues/1748) +- Change the type of header property on Panel [\#1747](https://github.com/primefaces/primereact/issues/1747) +- Dialog dismissableMask didn't work if hide the close icon [\#1745](https://github.com/primefaces/primereact/issues/1745) +- Chips and AutoComplete\(multiple mode\) support multiline input mode [\#1740](https://github.com/primefaces/primereact/issues/1740) +- Improving the initial focus of the Dialog [\#1737](https://github.com/primefaces/primereact/issues/1737) +- Improve Dialog implementation for ConfirmDialog [\#1732](https://github.com/primefaces/primereact/issues/1732) +- Add tabIndex property to Checkbox [\#1716](https://github.com/primefaces/primereact/issues/1716) +- Add sourceSelection and targetSelection properties to PickList [\#1708](https://github.com/primefaces/primereact/issues/1708) +- Add filterValue and onFilterValueChange properties to ListBox [\#1706](https://github.com/primefaces/primereact/issues/1706) +- Add onKeyDown event to InputNumber [\#1695](https://github.com/primefaces/primereact/issues/1695) +- Constants for PrimeIcons [\#1625](https://github.com/primefaces/primereact/issues/1625) + +**Fixed Bugs:** + +- Chips throws a JS exception [\#1754](https://github.com/primefaces/primereact/issues/1754) +- Typo in tabIndex property name [\#1710](https://github.com/primefaces/primereact/issues/1710) +- DataTable with empty frozen column throws a JS exception [\#1703](https://github.com/primefaces/primereact/issues/1703) +- Prop type incorrect for Timeline [\#1700](https://github.com/primefaces/primereact/issues/1700) +- Datatable with stateStorage property saves filterheader as extra columnwidth [\#1697](https://github.com/primefaces/primereact/issues/1697) +- DataTable edit not work \(Input disappears immediately after clicking cell\) in react-dom@17.0.1 [\#1685](https://github.com/primefaces/primereact/issues/1685) + +## [5.0.2](https://github.com/primefaces/primereact/tree/5.0.2) (2020-11-30) + +[Full Changelog](https://github.com/primefaces/primereact/compare/5.0.1...5.0.2) + +**Breaking Changes:** + +- Change params of onEditorInit, onEditorSubmit, onEditorCancel and editorValidator callbacks on Column [\#1692](https://github.com/primefaces/primereact/issues/1692) + +**Implemented New Features and Enhancements:** + +- Remove PrimeFlex dependency from MegaMenu [\#1690](https://github.com/primefaces/primereact/issues/1690) +- Chips display for MultiSelect [\#1689](https://github.com/primefaces/primereact/issues/1689) +- Add the 'enter' key support to InputNumber [\#1688](https://github.com/primefaces/primereact/issues/1688) +- New Component: Timeline [\#1687](https://github.com/primefaces/primereact/issues/1687) +- Improve Password implementation [\#1684](https://github.com/primefaces/primereact/issues/1684) +- Improve Tooltip implementation [\#1683](https://github.com/primefaces/primereact/issues/1683) +- Add onFocus and onBlur events on InputMask [\#1677](https://github.com/primefaces/primereact/issues/1677) +- OverlayPanel - arrow always on the left side of the panel. [\#1671](https://github.com/primefaces/primereact/issues/1671) +- Change the types of header, footer, title, subTitle properties on Card [\#1658](https://github.com/primefaces/primereact/issues/1658) +- Add separator support to SplitButton [\#1656](https://github.com/primefaces/primereact/issues/1656) +- Do not hide overlays on body scroll [\#1655](https://github.com/primefaces/primereact/issues/1655) +- Remove 'classnames' dependency from PrimeReact components [\#1653](https://github.com/primefaces/primereact/issues/1653) +- Add showClear property to MultiSelect [\#1627](https://github.com/primefaces/primereact/issues/1627) +- Add mediumRegex and strongRegex property to Password [\#1623](https://github.com/primefaces/primereact/issues/1623) +- Add browser event param to editor callbacks on Datatable [\#1577](https://github.com/primefaces/primereact/issues/1577) + +**Fixed Bugs:** + +- DataView throws an exception when the last page is reached using Paginator [\#1691](https://github.com/primefaces/primereact/issues/1691) +- DataTable edit not work \(Input disappears immediately after clicking cell\) in react-dom@17.0.1 [\#1685](https://github.com/primefaces/primereact/issues/1685) +- Chips is not working when the initial value sets 'null' [\#1678](https://github.com/primefaces/primereact/issues/1678) +- Global tooltip documentation missing [\#1676](https://github.com/primefaces/primereact/issues/1676) +- Calendar value change does not update UI [\#1672](https://github.com/primefaces/primereact/issues/1672) +- Tooltip with `showDelay` appears despite cursor has already left the Input [\#1667](https://github.com/primefaces/primereact/issues/1667) +- When a partial selection is made among children of a node, the minus icon doesn't appear in the checkbox of that node. [\#1657](https://github.com/primefaces/primereact/issues/1657) +- Float label is not working on Chips [\#1654](https://github.com/primefaces/primereact/issues/1654) +- DataTable with lazy mode and multiple selection doesn't work as expected [\#1636](https://github.com/primefaces/primereact/issues/1636) +- pRipple working when disabled\(etc menuitem\) [\#1634](https://github.com/primefaces/primereact/issues/1634) +- DataTable Context Menu doesn't reposition [\#1574](https://github.com/primefaces/primereact/issues/1574) +- Multiple sort in TreeTable is not working when passing multisortmeta props [\#1442](https://github.com/primefaces/primereact/issues/1442) + +## [5.0.1](https://github.com/primefaces/primereact/tree/5.0.1) (2020-10-12) + +[Full Changelog](https://github.com/primefaces/primereact/compare/5.0.0...5.0.1) + +**Implemented New Features and Enhancements:** + +- Soho Theme [\#1632](https://github.com/primefaces/primereact/issues/1632) +- FluentUI Theme [\#1631](https://github.com/primefaces/primereact/issues/1631) +- Accordion border radius visual on PrimeOne themes [\#1629](https://github.com/primefaces/primereact/issues/1629) +- Galleria and Carousel highlight item visual improvement on PrimeOne Themes [\#1626](https://github.com/primefaces/primereact/issues/1626) +- Add dropdownAppendTo property to Paginator [\#1622](https://github.com/primefaces/primereact/issues/1622) +- Add paginatorDropdownAppendTo property to DataTable, TreeTable and DataView [\#1621](https://github.com/primefaces/primereact/issues/1621) +- Tooltip doesn't close in scrollable containers [\#1607](https://github.com/primefaces/primereact/issues/1607) + +**Fixed Bugs:** + +- Fullcalendar button styling issues [\#1633](https://github.com/primefaces/primereact/issues/1633) +- TriStateCheckbox X icon not visible on Material themes [\#1630](https://github.com/primefaces/primereact/issues/1630) +- TreeNode toggler is not readable on hover when highlighted on bootstrap theme [\#1628](https://github.com/primefaces/primereact/issues/1628) +- Dropdown items throws a JS exception [\#1624](https://github.com/primefaces/primereact/issues/1624) +- TypeScript applications cannot find the 'Tooltip' module [\#1618](https://github.com/primefaces/primereact/issues/1618) +- InputNumber with spinner mode throws a JS exception [\#1614](https://github.com/primefaces/primereact/issues/1614) +- inputNumber with numeric prefix is not working as expected [\#1613](https://github.com/primefaces/primereact/issues/1613) +- Problems when typing or pasting numbers into InputNumber [\#1612](https://github.com/primefaces/primereact/issues/1612) + +## [5.0.0](https://github.com/primefaces/primereact/tree/5.0.0) (2020-10-01) + +[Full Changelog](https://github.com/primefaces/primereact/compare/5.0.0-rc.2...5.0.0) + +**Implemented New Features and Enhancements:** + +- Lighter Highlight Color for PrimeOne Themes [\#1605](https://github.com/primefaces/primereact/issues/1605) +- Add template property support to MenuModel API [\#1597](https://github.com/primefaces/primereact/issues/1597) +- Add buttonTemplate property to SplitButton [\#1596](https://github.com/primefaces/primereact/issues/1596) +- Add headerTemplate property to AccordionTab on Accordion [\#1594](https://github.com/primefaces/primereact/issues/1594) +- Add expandIcon and collapseIcon properties to Accordion [\#1593](https://github.com/primefaces/primereact/issues/1593) +- Add id property to Password [\#1590](https://github.com/primefaces/primereact/issues/1590) +- Improvement in behavior of components that have overlay panels in scrollable containers [\#1589](https://github.com/primefaces/primereact/issues/1589) +- InputNumber feature - allow negative values [\#1585](https://github.com/primefaces/primereact/issues/1585) +- Add panelClassName and panelStyle properties for appendable overlays [\#1459](https://github.com/primefaces/primereact/issues/1459) +- TreeTable: expose the filter method for TypeScript [\#1435](https://github.com/primefaces/primereact/issues/1435) + +**Fixed Bugs:** + +- Alignment issue on Scrollable TreeTable [\#1599](https://github.com/primefaces/primereact/issues/1599) +- Alignment issue on Scrollable Datatable [\#1598](https://github.com/primefaces/primereact/issues/1598) +- Button shows " " text if the label property is empty [\#1595](https://github.com/primefaces/primereact/issues/1595) +- InputNumber cannot set value when format property is false [\#1582](https://github.com/primefaces/primereact/issues/1582) +- Carousel page prop not detecting changes to prop value. [\#1464](https://github.com/primefaces/primereact/issues/1464) +- Pagination \(currentPageReportTemplate\) is not showing correct page no for first [\#1453](https://github.com/primefaces/primereact/issues/1453) +- MultiSelect: error when selecting option with null value [\#1446](https://github.com/primefaces/primereact/issues/1446) +- MultiSelect: warning in console when using string array as options [\#1445](https://github.com/primefaces/primereact/issues/1445) + +## [5.0.0-rc.2](https://github.com/primefaces/primereact/tree/5.0.0-rc.2) (2020-09-10) + +[Full Changelog](https://github.com/primefaces/primereact/compare/5.0.0-rc.1...5.0.0-rc.2) + +**Implemented New Features and Enhancements:** + +- Add resetFilterOnHide property to MultiSelect [\#1565](https://github.com/primefaces/primereact/issues/1565) +- Add resetFilterOnHide property to Dropdown [\#1564](https://github.com/primefaces/primereact/issues/1564) +- Add keyboard support to MultiSelect [\#1563](https://github.com/primefaces/primereact/issues/1563) +- Improve SelectButton implementation [\#1561](https://github.com/primefaces/primereact/issues/1561) +- Add optionDisabled property to SelectButton [\#1560](https://github.com/primefaces/primereact/issues/1560) +- Add emptyFilterMessage property to MultiSelect [\#1556](https://github.com/primefaces/primereact/issues/1556) +- Add emptyFilterMessage property to Dropdown [\#1554](https://github.com/primefaces/primereact/issues/1554) +- Negative sign with InputNumber [\#1551](https://github.com/primefaces/primereact/issues/1551) +- InputNumber: pasting doesn't work correctly [\#1549](https://github.com/primefaces/primereact/issues/1549) +- InputGroup support for input components with wrappers [\#1548](https://github.com/primefaces/primereact/issues/1548) +- Update PrimeFlex documentation to 2.0.0 [\#1542](https://github.com/primefaces/primereact/issues/1542) +- Scrollable Table alignment improvement [\#1541](https://github.com/primefaces/primereact/issues/1541) +- DataTable onRowClick executes when multiple selection mode is enabled and user clicks on selection checkbox column cell [\#1534](https://github.com/primefaces/primereact/issues/1534) +- Add content property to Message component [\#1463](https://github.com/primefaces/primereact/issues/1463) +- Add color property to ProgressBar [\#1457](https://github.com/primefaces/primereact/issues/1457) +- NumberInput does not pass down validation attributes to input element. [\#1444](https://github.com/primefaces/primereact/issues/1444) + +**Fixed Bugs:** + +- The left and right arrow keys not working on input elements inside Tree [\#1559](https://github.com/primefaces/primereact/issues/1559) +- Items in PanelMenu are highlighted wrongly with Material dark themes [\#1557](https://github.com/primefaces/primereact/issues/1557) +- Calendar misplaced layout if more than one month is shown [\#1553](https://github.com/primefaces/primereact/issues/1553) +- inputNumber cannot set value bigger than 99.999 for an ES locale [\#1552](https://github.com/primefaces/primereact/issues/1552) +- inputNumber with numeric prefix is not working as expected [\#1550](https://github.com/primefaces/primereact/issues/1550) +- Item selection does not work on Dropdown with scrollable panel [\#1544](https://github.com/primefaces/primereact/issues/1544) +- Dialog with Long Content does not scroll in IE11 [\#1538](https://github.com/primefaces/primereact/issues/1538) +- Pill Text not centered [\#1532](https://github.com/primefaces/primereact/issues/1532) +- Ripple effect with typescript [\#1530](https://github.com/primefaces/primereact/issues/1530) +- Component TreeTable doesn't added props className [\#1473](https://github.com/primefaces/primereact/issues/1473) +- Dialog aria-labelledby references an unexisting id [\#1405](https://github.com/primefaces/primereact/issues/1405) + +## [5.0.0-rc.1](https://github.com/primefaces/primereact/tree/5.0.0-rc.1) (2020-08-20) + +[Full Changelog](https://github.com/primefaces/primereact/compare/4.2.2...5.0.0-rc.1) + +**Breaking Changes:** + +- Change the values of position property on Dialog [\#1516](https://github.com/primefaces/primereact/issues/1516) +- Rename iconsTemplate property to icons property on Dialog [\#1514](https://github.com/primefaces/primereact/issues/1514) +- Rename iconsTemplate property to icons property on Sidebar [\#1513](https://github.com/primefaces/primereact/issues/1513) +- Rename Growl component to Toast component [\#1512](https://github.com/primefaces/primereact/issues/1512) +- Change some property names on Galleria [\#1503](https://github.com/primefaces/primereact/issues/1503) +- Label Nova, Luna and Rhea as Legacy Themes [\#1501](https://github.com/primefaces/primereact/issues/1501) +- Change the values of position property on Growl [\#1497](https://github.com/primefaces/primereact/issues/1497) +- Remove responsive property from OrderList [\#1494](https://github.com/primefaces/primereact/issues/1494) +- Remove responsive property from PickList [\#1493](https://github.com/primefaces/primereact/issues/1493) +- Replace dotsContainerClassName with indicatorsContentClassName property on Carousel [\#1491](https://github.com/primefaces/primereact/issues/1491) +- Remove Spinner Component [\#1488](https://github.com/primefaces/primereact/issues/1488) +- Remove Lightbox component [\#1487](https://github.com/primefaces/primereact/issues/1487) +- Migrate to PrimeOne Design Architecture [\#1484](https://github.com/primefaces/primereact/issues/1484) +- Remove responsive attribute from DataTable [\#1250](https://github.com/primefaces/primereact/issues/1250) + +**Implemented New Features and Enhancements:** + +- Add emptyTemplate property to FileUpload [\#1508](https://github.com/primefaces/primereact/issues/1508) +- New Component: Ripple [\#1507](https://github.com/primefaces/primereact/issues/1507) +- Add index parameter to onRowEditInit and onRowSave callbacks on DataTable [\#1505](https://github.com/primefaces/primereact/issues/1505) +- Add onEditorInit callback for cell editing mode to Column [\#1504](https://github.com/primefaces/primereact/issues/1504) +- Add left and right properties to Toolbar [\#1502](https://github.com/primefaces/primereact/issues/1502) +- Material Theme [\#1500](https://github.com/primefaces/primereact/issues/1500) +- Bootstrap Theme [\#1499](https://github.com/primefaces/primereact/issues/1499) +- Add start and end properties to Menubar [\#1498](https://github.com/primefaces/primereact/issues/1498) +- Add valueTemplate property to Dropdown [\#1496](https://github.com/primefaces/primereact/issues/1496) +- Add iconPos property to ToggleButton [\#1495](https://github.com/primefaces/primereact/issues/1495) +- Add badge and badgeClassName properties to Button [\#1490](https://github.com/primefaces/primereact/issues/1490) +- Add Badge styles to core css [\#1489](https://github.com/primefaces/primereact/issues/1489) +- Improved Overlay Animations [\#1486](https://github.com/primefaces/primereact/issues/1486) +- PrimeOne Themes [\#1485](https://github.com/primefaces/primereact/issues/1485) +- Label Nova, Luna and Rhea as Legacy Themes [\#1483](https://github.com/primefaces/primereact/issues/1483) +- Add contentClassName property to Dialog [\#1455](https://github.com/primefaces/primereact/issues/1455) +- Add listClassName property to Listbox [\#1454](https://github.com/primefaces/primereact/issues/1454) +- Change onSlideEnd callback param on Slider [\#1437](https://github.com/primefaces/primereact/issues/1437) +- Improve Tooltip implementation [\#1436](https://github.com/primefaces/primereact/issues/1436) +- Add onValueChange property to InputNumber [\#1418](https://github.com/primefaces/primereact/issues/1418) +- It is impossible to type fractional digits on InputNumber [\#1380](https://github.com/primefaces/primereact/issues/1380) +- Remove browserslist, leave processing and transpilation to applications [\#1312](https://github.com/primefaces/primereact/issues/1312) +- Custom content support for Button [\#1258](https://github.com/primefaces/primereact/issues/1258) + +**Fixed Bugs:** + +- Global filter is not working with invalid values on TreeTable [\#1517](https://github.com/primefaces/primereact/issues/1517) +- Captcha throws a JS exception [\#1509](https://github.com/primefaces/primereact/issues/1509) +- Calendar with appendTo property isn't working as expected [\#1506](https://github.com/primefaces/primereact/issues/1506) +- Chart does not update when its options and type properties change [\#1492](https://github.com/primefaces/primereact/issues/1492) +- Dynamic options breaks InputNumber [\#1470](https://github.com/primefaces/primereact/issues/1470) +- DatePicker Milliseconds jumps from 000 to 199 [\#1456](https://github.com/primefaces/primereact/issues/1456) +- Typing for selectedItemTemplate in AutoComplete is wrong [\#1428](https://github.com/primefaces/primereact/issues/1428) +- Can't type - as first symbol into an Inputnumber [\#1427](https://github.com/primefaces/primereact/issues/1427) +- If the invalid value is entered to Calendar with keepInvalid property, the onChange event returns null [\#1422](https://github.com/primefaces/primereact/issues/1422) +- Calling clearTimeout is required before unmounting AutoComplete [\#1421](https://github.com/primefaces/primereact/issues/1421) +- Clear button is not closing Calendar [\#1416](https://github.com/primefaces/primereact/issues/1416) +- File selection does not work after validation fails [\#1415](https://github.com/primefaces/primereact/issues/1415) +- InputNumber prevents min key number [\#1412](https://github.com/primefaces/primereact/issues/1412) +- ListBox, Dropdown: Using non-unique key [\#1397](https://github.com/primefaces/primereact/issues/1397) + +## [4.2.2](https://github.com/primefaces/primereact/tree/4.2.2) (2020-06-09) + +[Full Changelog](https://github.com/primefaces/primereact/compare/4.2.1...4.2.2) + +**Implemented New Features and Enhancements:** + +- Add onStateSave and onStateRestore callbacks to DataTable with stateStorage [\#1389](https://github.com/primefaces/primereact/issues/1389) +- Change the type of iconsTemplate property on Dialog [\#1386](https://github.com/primefaces/primereact/issues/1386) +- Calendar uses : instead of . as seperator for milliseconds [\#1385](https://github.com/primefaces/primereact/issues/1385) +- Add custom mode to stateStorage [\#1382](https://github.com/primefaces/primereact/issues/1382) +- ColorPicker: add missing input attributes [\#1323](https://github.com/primefaces/primereact/issues/1323) +- Deprecate \*styleClass props in favor of \*className [\#1262](https://github.com/primefaces/primereact/issues/1262) + +**Fixed Bugs:** + +- Tree filter with onToggle method doesn't work as expected [\#1390](https://github.com/primefaces/primereact/issues/1390) +- Calendar navigator skips one month [\#1388](https://github.com/primefaces/primereact/issues/1388) +- Incorrect work page parameter in carousel [\#1387](https://github.com/primefaces/primereact/issues/1387) +- The className property of Column is not set to \ element [\#1384](https://github.com/primefaces/primereact/issues/1384) +- EmptyMessage property is not working with empty string on DataTable [\#1383](https://github.com/primefaces/primereact/issues/1383) +- When the month is changed in Calendar inside OverlayPanel, the panel automatically closes. [\#1381](https://github.com/primefaces/primereact/issues/1381) +- TreeTable column body prop function does not contain column argument [\#1366](https://github.com/primefaces/primereact/issues/1366) +- When the input filter element is clicked, the panel closes on DropDown [\#1360](https://github.com/primefaces/primereact/issues/1360) + +## [4.2.1](https://github.com/primefaces/primereact/tree/4.2.1) (2020-05-11) + +[Full Changelog](https://github.com/primefaces/primereact/compare/4.2.0...4.2.1) + +**Implemented New Features and Enhancements:** + +- Remove filter method from ObjectUtils [\#1343](https://github.com/primefaces/primereact/issues/1343) +- AutoComplete: selectedItemTemplate gets called for query [\#1296](https://github.com/primefaces/primereact/issues/1296) + +**Fixed Bugs:** + +- Editable Dropdown is not working as expected [\#1359](https://github.com/primefaces/primereact/issues/1359) +- Dropdown throws an exception on console after filtering and keyboard navigation [\#1358](https://github.com/primefaces/primereact/issues/1358) +- DataTable: filters are not rerendered when their state is changed [\#1352](https://github.com/primefaces/primereact/issues/1352) +- DataTable: wrong type definition for onFilter [\#1351](https://github.com/primefaces/primereact/issues/1351) +- Autofocus property doesn't work as expected on Textarea [\#1350](https://github.com/primefaces/primereact/issues/1350) +- Editor Component readOnly property name wrong [\#1346](https://github.com/primefaces/primereact/issues/1346) +- React multiselect defaultValue warning [\#1344](https://github.com/primefaces/primereact/issues/1344) +- InputMask displayed value does not change when value changes to undefined or null [\#1342](https://github.com/primefaces/primereact/issues/1342) +- Wrong import for FilterUtils [\#1339](https://github.com/primefaces/primereact/issues/1339) + +## [4.2.0](https://github.com/primefaces/primereact/tree/4.2.0) (2020-04-17) + +[Full Changelog](https://github.com/primefaces/primereact/compare/4.1.2...4.2.0) + +**Implemented New Features and Enhancements:** + +- New Component: InputNumber [\#1311](https://github.com/primefaces/primereact/issues/1311) +- Add filterLocale property to Tree [\#1338](https://github.com/primefaces/primereact/issues/1338) +- Add filterLocale property to TreeTable [\#1337](https://github.com/primefaces/primereact/issues/1337) +- Add filterLocale property to MultiSelect [\#1336](https://github.com/primefaces/primereact/issues/1336) +- Add filterLocale property to ListBox [\#1335](https://github.com/primefaces/primereact/issues/1335) +- Add filterLocale property to Dropdown [\#1334](https://github.com/primefaces/primereact/issues/1334) +- Add filterLocale property to DataTable [\#1333](https://github.com/primefaces/primereact/issues/1333) +- Add checkValidity method to MultiSelect [\#1332](https://github.com/primefaces/primereact/issues/1332) +- onFocus - onBlur for ToggleButton [\#1330](https://github.com/primefaces/primereact/issues/1330) +- Update sortIcons [\#1329](https://github.com/primefaces/primereact/issues/1329) +- Disabled prop for TriStateCheckbox [\#1325](https://github.com/primefaces/primereact/issues/1325) +- Refactor OverlayPanel outside click detection [\#1320](https://github.com/primefaces/primereact/issues/1320) +- Refactor MultiSelect outside click detection [\#1319](https://github.com/primefaces/primereact/issues/1319) +- Refactor Menu outside click detection [\#1318](https://github.com/primefaces/primereact/issues/1318) +- Refactor ColorPicker outside click detection [\#1317](https://github.com/primefaces/primereact/issues/1317) +- Refactor Dropdown outside click detection [\#1310](https://github.com/primefaces/primereact/issues/1310) +- Refactor AutoComplete outside click detection [\#1308](https://github.com/primefaces/primereact/issues/1308) +- MultiSelect/Dropdown expose input attributes for labeling and validation purposes [\#1306](https://github.com/primefaces/primereact/issues/1306) +- Autocomplete dropdown button close behavior enhancement [\#1305](https://github.com/primefaces/primereact/issues/1305) +- Improve timepicker style on Calendar [\#1294](https://github.com/primefaces/primereact/issues/1294) +- Add milliseconds support to Calendar [\#1293](https://github.com/primefaces/primereact/issues/1293) +- Not nullable `dataKey` in DropDown break `selectedOption` property [\#1286](https://github.com/primefaces/primereact/issues/1286) +- Separator for Chips [\#1285](https://github.com/primefaces/primereact/issues/1285) + +**Fixed Bugs:** + +- Dropdown checkValidity fails [\#1331](https://github.com/primefaces/primereact/issues/1331) +- Calendar.showOtherMonths property not being used [\#1328](https://github.com/primefaces/primereact/issues/1328) +- Disable prop on ToggleButton not working [\#1321](https://github.com/primefaces/primereact/issues/1321) +- IE11: Autocomplete with dropdown and multiple selection requires doubleclick [\#1316](https://github.com/primefaces/primereact/issues/1316) +- InputMask displayed value does not change when value changes to undefined or null [\#1309](https://github.com/primefaces/primereact/issues/1309) +- multiSortMeta depends on single sort [\#1307](https://github.com/primefaces/primereact/issues/1307) +- Carousel - Button inside carousel-item is not clickable in mobile phones [\#1300](https://github.com/primefaces/primereact/issues/1300) +- AutoComplete: selectedItemTemplate ts binding claims to expect JSX.Element in return, but at runtime a string is expected [\#1297](https://github.com/primefaces/primereact/issues/1297) +- FileUpload in auto mode sends two post requests in IE11 [\#1282](https://github.com/primefaces/primereact/issues/1282) +- Today Button doesn't work on prefilled Calendar with timeonly [\#1281](https://github.com/primefaces/primereact/issues/1281) +- TreeTable goes to edit mode when expanded [\#1276](https://github.com/primefaces/primereact/issues/1276) +- Tree drag&drop not working if dragdropScope contains upper case letter [\#1182](https://github.com/primefaces/primereact/issues/1182) + +## [4.1.2](https://github.com/primefaces/primereact/tree/4.1.2) (2020-03-20) + +[Full Changelog](https://github.com/primefaces/primereact/compare/4.1.1...4.1.2) + +**Implemented New Features and Enhancements:** + +- DataView: lazy loading implementation [\#1264](https://github.com/primefaces/primereact/issues/1264) + +**Fixed Bugs:** + +- Multiple Sort doesn't work as expected in the DataTable if a sortable column has sortField and field properties [\#1279](https://github.com/primefaces/primereact/issues/1279) +- Chips in disabled Autocomplete are not disabled [\#1278](https://github.com/primefaces/primereact/issues/1278) +- Calendar display not update when value change. [\#1277](https://github.com/primefaces/primereact/issues/1277) +- Calendar closes right away in Chrome when it has showTime={true} [\#1272](https://github.com/primefaces/primereact/issues/1272) +- Setting state in onFocus of Datatable Editors crashes app [\#1271](https://github.com/primefaces/primereact/issues/1271) +- Invalid Date in Calendar in IE11 crashes the app [\#1270](https://github.com/primefaces/primereact/issues/1270) +- Tab-Key doesn't work in Datatable with cell editing on IE11 and Edge [\#1269](https://github.com/primefaces/primereact/issues/1269) +- IE11: Autocomplete with dropdown requires doubleclick [\#1267](https://github.com/primefaces/primereact/issues/1267) +- OnComplete callback has wrong property params on InputMask.d.ts [\#1265](https://github.com/primefaces/primereact/issues/1265) +- Fix InputSwitch documentation for onLabel-offLabel [\#1263](https://github.com/primefaces/primereact/issues/1263) + +## [4.1.1](https://github.com/primefaces/primereact/tree/4.1.1) (2020-03-12) + +[Full Changelog](https://github.com/primefaces/primereact/compare/4.1.0...4.1.1) + +**Implemented New Features and Enhancements:** + +- Add onFocus-onBlur to Dropdown [\#1260](https://github.com/primefaces/primereact/issues/1260) +- InputMask OnComplete does not contain the new value [\#1255](https://github.com/primefaces/primereact/issues/1255) +- resetFilter function for Dropdown [\#1249](https://github.com/primefaces/primereact/issues/1249) +- Improve type definition for onChange of form components [\#1199](https://github.com/primefaces/primereact/issues/1199) + +**Fixed Bugs:** + +- DataTable scrollHeight doesn't calculate correctly with frozen columns and header groups [\#1261](https://github.com/primefaces/primereact/issues/1261) +- Disabled TabPanel focussable with TAB-Key [\#1254](https://github.com/primefaces/primereact/issues/1254) +- Error on TreeTable docs about responsive [\#1253](https://github.com/primefaces/primereact/issues/1253) +- Select components don't correctly return value [\#1252](https://github.com/primefaces/primereact/issues/1252) +- currentPageReport should check for {last} boundary [\#1251](https://github.com/primefaces/primereact/issues/1251) +- onClose of GrowlMessage is also allowing onClick to fire. [\#1248](https://github.com/primefaces/primereact/issues/1248) +- loadingBody type is different to Documentation [\#1111](https://github.com/primefaces/primereact/issues/1111) + +## [4.1.0](https://github.com/primefaces/primereact/tree/4.1.0) (2020-03-10) + +[Full Changelog](https://github.com/primefaces/primereact/compare/4.0.0...4.1.0) + +**Implemented New Features and Enhancements:** + +- Add reorderable to Column [\#1246](https://github.com/primefaces/primereact/issues/1246) +- Implement filterBy and filterMatchMode for ListBox [\#1245](https://github.com/primefaces/primereact/issues/1245) +- Implement filterBy and filterMatchMode for MultiSelect [\#1244](https://github.com/primefaces/primereact/issues/1244) +- Add filterPlaceholder to MultiSelect [\#1242](https://github.com/primefaces/primereact/issues/1242) +- Deprecate icon of SelectItem API [\#1239](https://github.com/primefaces/primereact/issues/1239) +- Templating support to SelectButton [\#1238](https://github.com/primefaces/primereact/issues/1238) +- Document SelectItem [\#1237](https://github.com/primefaces/primereact/issues/1237) +- Change the type of emptyMessage property on DataTable [\#1236](https://github.com/primefaces/primereact/issues/1236) +- Deprecate Lightbox [\#1235](https://github.com/primefaces/primereact/issues/1235) +- Add optionValue to Select components [\#1230](https://github.com/primefaces/primereact/issues/1230) +- Placeholder colors are not same [\#1229](https://github.com/primefaces/primereact/issues/1229) +- Primitive values support in Select components [\#1228](https://github.com/primefaces/primereact/issues/1228) +- Add filterHeaderStyle and filterHeaderClassName to Column [\#1227](https://github.com/primefaces/primereact/issues/1227) +- Add rowHover to DataTable [\#1226](https://github.com/primefaces/primereact/issues/1226) +- New options for CurrentPageReport [\#1225](https://github.com/primefaces/primereact/issues/1225) +- New DataTable Customer Demo [\#1224](https://github.com/primefaces/primereact/issues/1224) +- New filtering modes for Table [\#1223](https://github.com/primefaces/primereact/issues/1223) +- Accents support in Table filtering [\#1222](https://github.com/primefaces/primereact/issues/1222) +- Add filterField to column [\#1221](https://github.com/primefaces/primereact/issues/1221) +- Move column filters to their own row [\#1220](https://github.com/primefaces/primereact/issues/1220) +- Time support for min date or max date in calendar component [\#1217](https://github.com/primefaces/primereact/issues/1217) +- Add filterPlaceholder to Listbox [\#1215](https://github.com/primefaces/primereact/issues/1215) +- Improve style of p-link component [\#1213](https://github.com/primefaces/primereact/issues/1213) +- Implement className in MultiSelect, Dropdown, SelectButton, ListBox options [\#1175](https://github.com/primefaces/primereact/issues/1175) +- Allow Dialogs already maximized [\#1170](https://github.com/primefaces/primereact/issues/1170) +- Implement filterBy and filterMatchMode for Dropdown [\#1149](https://github.com/primefaces/primereact/issues/1149) +- Change the type of the 'header' property on TabPanel [\#1079](https://github.com/primefaces/primereact/issues/1079) +- DataTable Columns: Conditional reorder [\#1032](https://github.com/primefaces/primereact/issues/1032) +- Datatable Columns: Conditional select [\#1031](https://github.com/primefaces/primereact/issues/1031) + +**Fixed Bugs:** + +- Chips cover 100% although input is visually smaller [\#1241](https://github.com/primefaces/primereact/issues/1241) +- Datatable doesn't change page when the last element on a page is removed. [\#1233](https://github.com/primefaces/primereact/issues/1233) +- Filter does not work after adding a new node to the root node on Tree [\#1232](https://github.com/primefaces/primereact/issues/1232) +- Clear Button does not clear the input value on Calendar [\#1231](https://github.com/primefaces/primereact/issues/1231) +- Remove tabIndex from the headers of the non-sortable dataTable. [\#1219](https://github.com/primefaces/primereact/issues/1219) +- The virtualScroll height is always added to rows on DataTable [\#1218](https://github.com/primefaces/primereact/issues/1218) +- ContextMenu hide/onHide triggers even though already hidden [\#1189](https://github.com/primefaces/primereact/issues/1189) +- Tree does not support Font Awesome icons [\#1187](https://github.com/primefaces/primereact/issues/1187) +- Reset filter textbox of dropdown if options changes [\#1179](https://github.com/primefaces/primereact/issues/1179) +- Deadlock situation in range slider [\#1094](https://github.com/primefaces/primereact/issues/1094) + +## [4.0.0](https://github.com/primefaces/primereact/tree/4.0.0) (2020-02-27) + +[Full Changelog](https://github.com/primefaces/primereact/compare/3.4.0...4.0.0) + +**Implemented New Features and Enhancements:** + +- Add keepInvalid property to Calendar [\#1204](https://github.com/primefaces/primereact/issues/1204) +- Add position property to Dialog [\#1203](https://github.com/primefaces/primereact/issues/1203) +- Add FocusTrap support to Dialog [\#1202](https://github.com/primefaces/primereact/issues/1202) +- Add sortFunction support to DataTable with multiple column sorting [\#1201](https://github.com/primefaces/primereact/issues/1201) +- Remove min-width style from Dropdown [\#1196](https://github.com/primefaces/primereact/issues/1196) +- Add maskClassName property to Dialog [\#1194](https://github.com/primefaces/primereact/issues/1194) +- ReImplemented Steps styles [\#1191](https://github.com/primefaces/primereact/issues/1191) +- Leave animation for Dialog [\#1181](https://github.com/primefaces/primereact/issues/1181) +- Dialog header not visible [\#1174](https://github.com/primefaces/primereact/issues/1174) +- Dialog is not displayed correctly in mobile view [\#1165](https://github.com/primefaces/primereact/issues/1165) +- Add sort number feature to sortable columns on DataTable and TreeTable with multi sorting [\#1164](https://github.com/primefaces/primereact/issues/1164) +- Add onRemove callback to FileUpload [\#1152](https://github.com/primefaces/primereact/issues/1152) +- Add editing support to the input field on Calendar [\#1141](https://github.com/primefaces/primereact/issues/1141) +- New Component: Galleria [\#1105](https://github.com/primefaces/primereact/issues/1105) + +**Fixed Bugs:** + +- Remove the legacy lifecycle method from Lightbox component [\#1200](https://github.com/primefaces/primereact/issues/1200) +- The disabled items can be focused in the Steps [\#1192](https://github.com/primefaces/primereact/issues/1192) +- Alignment problem on Growl message without details [\#1190](https://github.com/primefaces/primereact/issues/1190) +- Maximizable property is not working correctly on dialog [\#1169](https://github.com/primefaces/primereact/issues/1169) +- Dismissable mask behaves over dialog [\#1167](https://github.com/primefaces/primereact/issues/1167) +- Typedefinition for DataTable OnFilter is wrong. [\#1163](https://github.com/primefaces/primereact/issues/1163) + +## [3.4.0](https://github.com/primefaces/primereact/tree/3.4.0) (2020-01-17) + +[Full Changelog](https://github.com/primefaces/primereact/compare/3.3.3...3.4.0) + +**Implemented New Features and Enhancements:** + +- Calendar component keyboard support [\#1157](https://github.com/primefaces/primereact/issues/1157) +- Add expandableRowGroups property to DataTable [\#1148](https://github.com/primefaces/primereact/issues/1148) +- Add removableSort property to DataTable [\#1142](https://github.com/primefaces/primereact/issues/1142) +- Enhance Dialog Positioning [\#1138](https://github.com/primefaces/primereact/issues/1138) + +**Fixed Bugs:** + +- Wrong property name on the propTypes definition of Dropdown [\#1158](https://github.com/primefaces/primereact/issues/1158) +- When the InputMask is focused, the mask disappears [\#1156](https://github.com/primefaces/primereact/issues/1156) +- When the buttons inside the components are clicked, they submit the form [\#1155](https://github.com/primefaces/primereact/issues/1155) +- The icon of the next button has wrong class name on Carousel [\#1154](https://github.com/primefaces/primereact/issues/1154) +- Some DataView lazy and loading types missing [\#1131](https://github.com/primefaces/primereact/issues/1131) +- TreeTable default filter value is not showing in the filter widget [\#1129](https://github.com/primefaces/primereact/issues/1129) +- InputTextarea does not render props like cols and rows [\#1127](https://github.com/primefaces/primereact/issues/1127) +- PanelMenu Icon does not show for entries without sub children [\#1121](https://github.com/primefaces/primereact/issues/1121) +- ContextMenu.d.ts has wrong property name [\#1118](https://github.com/primefaces/primereact/issues/1118) +- Dropdown cannot open the panel after double clicking an option [\#1053](https://github.com/primefaces/primereact/issues/1053) +- InputMask is not changing the mask at runtime. [\#1021](https://github.com/primefaces/primereact/issues/1021) + +## [3.3.3](https://github.com/primefaces/primereact/tree/3.3.3) (2019-11-29) + +[Full Changelog](https://github.com/primefaces/primereact/compare/3.3.2...3.3.3) + +**Implemented New Features and Enhancements:** + +- Add exportable property to Column [\#1103](https://github.com/primefaces/primereact/issues/1103) +- Add exportFunction property to DataTable [\#1102](https://github.com/primefaces/primereact/issues/1102) +- Add repeat functionality to timer buttons on Calendar [\#1101](https://github.com/primefaces/primereact/issues/1101) +- Add reset method to DataTable [\#1088](https://github.com/primefaces/primereact/issues/1088) +- onColReorder in Datatable parameter missing [\#1080](https://github.com/primefaces/primereact/issues/1080) +- Add disabled property to Tree [\#1078](https://github.com/primefaces/primereact/issues/1078) +- Add selectedItemsLabel property to MultiSelect [\#1075](https://github.com/primefaces/primereact/issues/1075) +- Add maxSelectedLabels property to MultiSelect [\#1074](https://github.com/primefaces/primereact/issues/1074) +- Passing of data-\* Attributes as Props [\#1073](https://github.com/primefaces/primereact/issues/1073) + +**Fixed Bugs:** + +- DomHandler functions throw NPE on components [\#1104](https://github.com/primefaces/primereact/issues/1104) +- Growl messages from "bottom\*" is not displaying as expected [\#1095](https://github.com/primefaces/primereact/issues/1095) +- Properties of TreeNodes on TreeTable not Working [\#1085](https://github.com/primefaces/primereact/issues/1085) +- className property of Message component not working [\#1076](https://github.com/primefaces/primereact/issues/1076) +- Tree className property not working [\#1068](https://github.com/primefaces/primereact/issues/1068) +- Sidebar dismissable is only updating whenever the visible prop updates [\#1065](https://github.com/primefaces/primereact/issues/1065) +- selectDate\(\) set date to undefined when minDate is set and selected date is \<= minDate [\#1056](https://github.com/primefaces/primereact/issues/1056) +- Datatable multisort broken [\#617](https://github.com/primefaces/primereact/issues/617) + +## [3.3.2](https://github.com/primefaces/primereact/tree/3.3.2) (2019-10-22) + +[Full Changelog](https://github.com/primefaces/primereact/compare/3.3.1...3.3.2) + +**Fixed Bugs:** + +- Table state is not working with columnResizeMode="expand" on DataTable [\#1061](https://github.com/primefaces/primereact/issues/1061) +- Calendar component throws NPE after updating the value [\#1060](https://github.com/primefaces/primereact/issues/1060) + +## [3.3.1](https://github.com/primefaces/primereact/tree/3.3.1) (2019-10-18) + +[Full Changelog](https://github.com/primefaces/primereact/compare/3.3.0...3.3.1) + +**Implemented New Features and Enhancements:** + +- Improve component styles on Luna, Nova and Rhea Themes [\#1052](https://github.com/primefaces/primereact/issues/1052) +- Improve Carousel styles [\#1051](https://github.com/primefaces/primereact/issues/1051) + +**Fixed Bugs:** + +- Carousel is not working with 'primereact/carousel' shortcut [\#1049](https://github.com/primefaces/primereact/issues/1049) + +## [3.3.0](https://github.com/primefaces/primereact/tree/3.3.0) (2019-10-16) + +[Full Changelog](https://github.com/primefaces/primereact/compare/3.2.0...3.3.0) + +**Implemented New Features and Enhancements:** + +- Add closeOnEscape property to Sidebar [\#1046](https://github.com/primefaces/primereact/issues/1046) +- InputTextarea: Floating Label [\#1040](https://github.com/primefaces/primereact/issues/1040) +- Upgrade QuillJS 1.3.7 [\#1037](https://github.com/primefaces/primereact/issues/1037) +- Add filterInputAutoFocus property to Dropdown [\#1036](https://github.com/primefaces/primereact/issues/1036) +- New Component: Carousel [\#1030](https://github.com/primefaces/primereact/issues/1030) +- Add className support to SelectButtonItems [\#1019](https://github.com/primefaces/primereact/issues/1019) + +**Fixed Bugs:** + +- AutoComplete mode multiple ignores maxlength property [\#1045](https://github.com/primefaces/primereact/issues/1045) +- The datatable is broken with scrollable and no columns settings [\#1044](https://github.com/primefaces/primereact/issues/1044) +- Calendar Overlay doesnt open with current date after value update [\#999](https://github.com/primefaces/primereact/issues/999) + +## [3.2.0](https://github.com/primefaces/primereact/tree/3.2.0) (2019-09-12) + +[Full Changelog](https://github.com/primefaces/primereact/compare/3.1.9...3.2.0) + +**Implemented New Features and Enhancements:** + +- Add type property to AutoComplete [\#1010](https://github.com/primefaces/primereact/issues/1010) +- Add customUpload property to FileUpload [\#1008](https://github.com/primefaces/primereact/issues/1008) +- Improve columns' editor option on editing mode [\#1007](https://github.com/primefaces/primereact/issues/1007) +- Add keyboard support to DataTable with Checkbox selection [\#1005](https://github.com/primefaces/primereact/issues/1005) +- Add row edit support to DataTable [\#809](https://github.com/primefaces/primereact/issues/809) + +**Fixed Bugs:** + +- DataTable with global filter and header checkbox selection select all records [\#1012](https://github.com/primefaces/primereact/issues/1012) +- DataTable column headers not displaying in nested table [\#1009](https://github.com/primefaces/primereact/issues/1009) +- DataTable has null state under certain conditions [\#1003](https://github.com/primefaces/primereact/issues/1003) +- Value doesnt change on Input mask when unmask is enabled [\#998](https://github.com/primefaces/primereact/issues/998) + +## [3.1.9](https://github.com/primefaces/primereact/tree/3.1.9) (2019-08-28) + +[Full Changelog](https://github.com/primefaces/primereact/compare/3.1.8...3.1.9) + +**Implemented New Features and Enhancements:** + +- Datatable EditRow [\#935](https://github.com/primefaces/primereact/issues/935) +- Add className option to Tooltip [\#994](https://github.com/primefaces/primereact/issues/994) +- Add focusOnShow property to Dialog [\#988](https://github.com/primefaces/primereact/issues/988) +- Add displayValueTemplate property to ProgressBar [\#978](https://github.com/primefaces/primereact/issues/978) +- Add tabIndex prop to Spinner [\#976](https://github.com/primefaces/primereact/issues/976) +- Add tabIndex prop to RadioButton [\#975](https://github.com/primefaces/primereact/issues/975) + +**Fixed Bugs:** + +- Wrong typings for the property of Spinner [\#1001](https://github.com/primefaces/primereact/issues/1001) +- Export hide\(\) for ContextMenu in type definition file [\#1000](https://github.com/primefaces/primereact/issues/1000) +- Style props doesnt update after re-rendering with Inputmask [\#996](https://github.com/primefaces/primereact/issues/996) +- Nested originalEvent in DataTable header RowCheckbox event [\#986](https://github.com/primefaces/primereact/issues/986) +- Typings missing in DataTable: resetColumnOrder [\#980](https://github.com/primefaces/primereact/issues/980) +- ProgressBar does not show value for 0% [\#973](https://github.com/primefaces/primereact/issues/973) +- Tooltips appear with old contents after being undefined [\#972](https://github.com/primefaces/primereact/issues/972) + +## [3.1.8](https://github.com/primefaces/primereact/tree/3.1.8) (2019-07-25) + +[Full Changelog](https://github.com/primefaces/primereact/compare/3.1.7...3.1.8) + +**Implemented New Features and Enhancements:** + +- Resizable columns support with column groups [\#518](https://github.com/primefaces/primereact/issues/518) +- Update to PrimeIcons 2.0.0 [\#970](https://github.com/primefaces/primereact/issues/970) +- Datatable rowGroup with rowSpan mode: row separator line style on group break [\#967](https://github.com/primefaces/primereact/issues/967) +- Growl detail should be placed in \ not \ [\#965](https://github.com/primefaces/primereact/issues/965) +- Add autoFocus attribute to Autocomplete [\#963](https://github.com/primefaces/primereact/issues/963) +- Add onTargetSelect and onSourceSelect props to Picklist [\#962](https://github.com/primefaces/primereact/issues/962) +- Add tabIndex prop to ToggleButton [\#957](https://github.com/primefaces/primereact/issues/957) +- Add required prop to RadioButton [\#953](https://github.com/primefaces/primereact/issues/953) +- Add required prop to Checkbox [\#952](https://github.com/primefaces/primereact/issues/952) +- Add shift key selection support to DataTable with multiple mode [\#934](https://github.com/primefaces/primereact/issues/934) + +**Fixed Bugs:** + +- Calendar ButtonBar Clear button does not use clearButtonStyleClass prop [\#968](https://github.com/primefaces/primereact/issues/968) +- Datatable rowGroup with rowSpan mode and pagination fails on page break [\#961](https://github.com/primefaces/primereact/issues/961) +- DataTable fails to render if columns are mapped and has a static column [\#959](https://github.com/primefaces/primereact/issues/959) +- Month View shows a redundant week on the calendar [\#956](https://github.com/primefaces/primereact/issues/956) +- Simple DataScroller does not display items. [\#955](https://github.com/primefaces/primereact/issues/955) +- The DataTable will sort a column when shrinking it on resize [\#944](https://github.com/primefaces/primereact/issues/944) + +## [3.1.7](https://github.com/primefaces/primereact/tree/3.1.7) (2019-06-25) + +[Full Changelog](https://github.com/primefaces/primereact/compare/3.1.6...3.1.7) + +**Fixed Bugs:** + +- Charts always redraw when they are updated [\#946](https://github.com/primefaces/primereact/issues/946) + +## [3.1.6](https://github.com/primefaces/primereact/tree/3.1.6) (2019-06-25) + +[Full Changelog](https://github.com/primefaces/primereact/compare/3.1.5...3.1.6) + +**Fixed Bugs:** + +- The ChartJs API is not imported correctly [\#945](https://github.com/primefaces/primereact/issues/945) +- Inplace is not working with 'primereact/inplace' shortcut [\#943](https://github.com/primefaces/primereact/issues/943) + +## [3.1.5](https://github.com/primefaces/primereact/tree/3.1.5) (2019-06-24) + +[Full Changelog](https://github.com/primefaces/primereact/compare/3.1.4...3.1.5) + +**Implemented New Features and Enhancements:** + +- Add theme prop to Editor [\#938](https://github.com/primefaces/primereact/issues/938) +- Add "replace" method in Messages component [\#930](https://github.com/primefaces/primereact/issues/930) +- Add decimalSeparator and thousandSeparator props to Spinner [\#925](https://github.com/primefaces/primereact/issues/925) +- Add formatInput prop to Spinner [\#924](https://github.com/primefaces/primereact/issues/924) +- Add required, pattern and placeholder props to Spinner. [\#920](https://github.com/primefaces/primereact/issues/920) +- Add ariaCloseIconLabel prop to Dialog [\#916](https://github.com/primefaces/primereact/issues/916) + +**Fixed Bugs:** + +- When components are placed placed inside a label element clicking on the component fires the click event twice [\#940](https://github.com/primefaces/primereact/issues/940) +- The hide method of Dropdown throws an exception on console [\#937](https://github.com/primefaces/primereact/issues/937) +- The "required" prop is not working on Dropdown [\#933](https://github.com/primefaces/primereact/issues/933) +- Tooltip in chips does not work properly [\#932](https://github.com/primefaces/primereact/issues/932) +- Empty array crashes Messages component [\#928](https://github.com/primefaces/primereact/issues/928) +- The 'showWeek' prop throws an error with TypedScript on Calendar [\#926](https://github.com/primefaces/primereact/issues/926) +- Close icon is still active on the disabled Chips [\#918](https://github.com/primefaces/primereact/issues/918) +- onRemove event does not exists on Growl component [\#914](https://github.com/primefaces/primereact/issues/914) +- Can't resolve 'chart.js/src/chart.js' [\#913](https://github.com/primefaces/primereact/issues/913) +- Second Sidebar reset blockScroll [\#910](https://github.com/primefaces/primereact/issues/910) +- ProgressSpinner not visible in IE11 [\#908](https://github.com/primefaces/primereact/issues/908) +- Wrong type for showWeek in Calendar.d.ts [\#907](https://github.com/primefaces/primereact/issues/907) + +## [3.1.4](https://github.com/primefaces/primereact/tree/3.1.4) (2019-05-30) + +[Full Changelog](https://github.com/primefaces/primereact/compare/3.1.3...3.1.4) + +**Implemented New Features and Enhancements:** + +- Add iconsTemplate to Dialog [\#905](https://github.com/primefaces/primereact/issues/905) +- Modules property for Editor [\#904](https://github.com/primefaces/primereact/issues/904) +- The ability to reset columnOrder in DataTable [\#899](https://github.com/primefaces/primereact/issues/899) +- onFocus and onBlur for Chips [\#897](https://github.com/primefaces/primereact/issues/897) +- Show week numbers for Calendar [\#894](https://github.com/primefaces/primereact/issues/894) +- CellEditor should have onSubmit and onCancel method. [\#891](https://github.com/primefaces/primereact/issues/891) +- Add expandIcon and collapseIcon props to Panel component [\#888](https://github.com/primefaces/primereact/issues/888) +- Support for disabling dropdown item\(s\). [\#874](https://github.com/primefaces/primereact/issues/874) +- Editable Dropdown should support maxLength [\#844](https://github.com/primefaces/primereact/issues/844) + +**Fixed Bugs:** + +- Not able to set focus on Dropdown component [\#903](https://github.com/primefaces/primereact/issues/903) +- Calendar time parsing broken for showSeconds == false [\#901](https://github.com/primefaces/primereact/issues/901) +- DataTable sortFunction Typescript definition wrong [\#898](https://github.com/primefaces/primereact/issues/898) +- Data\*: alwaysShowPaginator prop not used [\#896](https://github.com/primefaces/primereact/issues/896) +- DataTable expanded rows collapse when modifying one property of a record [\#884](https://github.com/primefaces/primereact/issues/884) +- The scroll bar is not moving correctly on the DataTable with resizeMode="expand" [\#881](https://github.com/primefaces/primereact/issues/881) +- Dropdown showClear not always displayed [\#875](https://github.com/primefaces/primereact/issues/875) +- Unlogical editor navigation with shift+tab in DataTable [\#843](https://github.com/primefaces/primereact/issues/843) +- Cannot read property 'show' of undefined at FileUpload.validate [\#802](https://github.com/primefaces/primereact/issues/802) +- DataTable onValueChange callback one key press behind when using custom InputText filter [\#777](https://github.com/primefaces/primereact/issues/777) + +## [3.1.3](https://github.com/primefaces/primereact/tree/3.1.3) (2019-05-06) + +[Full Changelog](https://github.com/primefaces/primereact/compare/3.1.2...3.1.3) + +**Implemented New Features and Enhancements:** + +- Multiple target support to OverlayPanel [\#873](https://github.com/primefaces/primereact/issues/873) +- Improve outside click on OverlayPanel [\#872](https://github.com/primefaces/primereact/issues/872) +- Calendar panel is not aligned correctly on window resize [\#870](https://github.com/primefaces/primereact/issues/870) +- Improve outside click on Calendar [\#869](https://github.com/primefaces/primereact/issues/869) +- The min/max date support is added to Calendar for monthNavigation and yearNavigation [\#859](https://github.com/primefaces/primereact/issues/859) +- Add ariaLabel and ariaLabelledBy properties to DropDown [\#855](https://github.com/primefaces/primereact/issues/855) +- Add contentStyle and contentClassName props to Tree [\#842](https://github.com/primefaces/primereact/issues/842) + +**Fixed Bugs:** + +- OverlayPanel's icon is in the wrong position after window is resized [\#871](https://github.com/primefaces/primereact/issues/871) +- Flipped OverlayPanel rendered behind browser [\#868](https://github.com/primefaces/primereact/issues/868) +- Missing method typings for OverlayPanel [\#865](https://github.com/primefaces/primereact/issues/865) +- Calendar used in DataTable is unable to switch months [\#860](https://github.com/primefaces/primereact/issues/860) +- Calendar view="month" does not allow typing [\#856](https://github.com/primefaces/primereact/issues/856) +- OnHide callback is not called when visibility property is changed [\#854](https://github.com/primefaces/primereact/issues/854) +- Add stateStorage property to DataTable.d.ts [\#851](https://github.com/primefaces/primereact/issues/851) +- The tableStyle and tableClassName props have no effect on Scrollable DataTable [\#849](https://github.com/primefaces/primereact/issues/849) +- Calendar is rendering behind the browser window. [\#840](https://github.com/primefaces/primereact/issues/840) +- onRowSelect called instead of onRowUnselect [\#835](https://github.com/primefaces/primereact/issues/835) +- Chart doesn't reload when new data is added to it [\#834](https://github.com/primefaces/primereact/issues/834) +- Datatable scrollHeight can't be changed [\#662](https://github.com/primefaces/primereact/issues/662) + +## [3.1.2](https://github.com/primefaces/primereact/tree/3.1.2) (2019-04-03) + +[Full Changelog](https://github.com/primefaces/primereact/compare/3.1.1...3.1.2) + +**Fixed Bugs:** + +- DataTable selection with uncontrolled sorting broken [\#830](https://github.com/primefaces/primereact/issues/830) + +## [3.1.1](https://github.com/primefaces/primereact/tree/3.1.1) (2019-03-31) + +[Full Changelog](https://github.com/primefaces/primereact/compare/3.1.0...3.1.1) + +**Implemented New Features and Enhancements:** + +- Improve disabled header style on Accordion [\#828](https://github.com/primefaces/primereact/issues/828) +- Update to FullCalendar 4.0.1 [\#827](https://github.com/primefaces/primereact/issues/827) +- Remove autoWidth from Dropdown [\#826](https://github.com/primefaces/primereact/issues/826) +- Improve DataTable VirtualScrolling [\#825](https://github.com/primefaces/primereact/issues/825) +- Update dialog animations [\#823](https://github.com/primefaces/primereact/issues/823) +- Close datatable cell editor programmatically [\#822](https://github.com/primefaces/primereact/issues/822) +- DataTable row selection slow with sortable columns [\#813](https://github.com/primefaces/primereact/issues/813) +- Add onBlur and onFocus events to multiselect and chips [\#782](https://github.com/primefaces/primereact/issues/782) + +**Fixed Bugs:** + +- On Accordion, the disabled head can be focused on [\#829](https://github.com/primefaces/primereact/issues/829) +- Datatable property 'stateKey' is missing in types file [\#817](https://github.com/primefaces/primereact/issues/817) +- Datatable row onClick typescript definition does not match the function or documentation [\#815](https://github.com/primefaces/primereact/issues/815) +- Overlays wrong position on initial/first render [\#814](https://github.com/primefaces/primereact/issues/814) +- Chart with latest chart.js does not build [\#812](https://github.com/primefaces/primereact/issues/812) +- FileUpload thows JS exception in Edge [\#808](https://github.com/primefaces/primereact/issues/808) +- SlideMenu empty after model change [\#807](https://github.com/primefaces/primereact/issues/807) +- Dropdown duplicated IDs [\#805](https://github.com/primefaces/primereact/issues/805) +- DataTable crashes with a "Cannot read property 'xxx' of undefined" for nested objects [\#791](https://github.com/primefaces/primereact/issues/791) +- Syntax error in optional typescript function interface [\#790](https://github.com/primefaces/primereact/issues/790) +- Using "maxlength" of Spinner causes errors [\#787](https://github.com/primefaces/primereact/issues/787) +- "propTypes" incorrectly named as "propsTypes" [\#784](https://github.com/primefaces/primereact/issues/784) +- Changes to prop does not render ProgressBar [\#783](https://github.com/primefaces/primereact/issues/783) +- Dropdown - TypeError: Cannot read property 'element' of null [\#781](https://github.com/primefaces/primereact/issues/781) +- propTypes error using new iconsTemplate [\#780](https://github.com/primefaces/primereact/issues/780) +- Datatable does not scroll horizontally when there is no data [\#635](https://github.com/primefaces/primereact/issues/635) + +## [3.1.0](https://github.com/primefaces/primereact/tree/3.1.0) (2019-02-19) + +[Full Changelog](https://github.com/primefaces/primereact/compare/3.0.0...3.1.0) + +**Implemented New Features and Enhancements:** + +- Filtering for Tree [\#769](https://github.com/primefaces/primereact/issues/769) +- onClose event for OverlayPanel [\#763](https://github.com/primefaces/primereact/issues/763) +- Arrow for OverlayPanel [\#762](https://github.com/primefaces/primereact/issues/762) +- Improve style of p-link component [\#760](https://github.com/primefaces/primereact/issues/760) +- TableState for DataTable [\#736](https://github.com/primefaces/primereact/issues/736) +- Filtering for TreeTable [\#380](https://github.com/primefaces/primereact/issues/380) + +**Fixed Bugs:** + +- Datatable toggle issue after reordering [\#774](https://github.com/primefaces/primereact/issues/774) +- Inputtextarea autoresize invalid height issue after render [\#773](https://github.com/primefaces/primereact/issues/773) +- TreeTableBodyCell.js: Uncaught TypeError: Cannot read property 'removeAttribute' of null [\#772](https://github.com/primefaces/primereact/issues/772) +- Dropdown with dataKey attribute throws console errors. [\#768](https://github.com/primefaces/primereact/issues/768) +- Multiple selection in a table without data is selected by default [\#766](https://github.com/primefaces/primereact/issues/766) +- InputGroup border issue for using with other components [\#761](https://github.com/primefaces/primereact/issues/761) +- code debugger in production mode "component input calendar" [\#751](https://github.com/primefaces/primereact/issues/751) + +## [3.0.0](https://github.com/primefaces/primereact/tree/3.0.0) (2019-01-22) + +[Full Changelog](https://github.com/primefaces/primereact/compare/3.0.0-rc.1...3.0.0) + +**Implemented New Features and Enhancements:** + +- Customizable editorValidatorEvent for IncellEditing [\#746](https://github.com/primefaces/primereact/issues/746) + +**Fixed Bugs:** + +- Spinner arrow keys not working [\#743](https://github.com/primefaces/primereact/issues/743) +- Toolbar of Editor Component with nova-dark theme does not render properly. [\#740](https://github.com/primefaces/primereact/issues/740) +- Paginator - Uncaught TypeError: this.getOptionLabel\(...\).toLowerCase is not a function [\#739](https://github.com/primefaces/primereact/issues/739) + +## [3.0.0-rc.1](https://github.com/primefaces/primereact/tree/3.0.0-rc.1) (2019-01-10) + +[Full Changelog](https://github.com/primefaces/primereact/compare/3.0.0-beta.1...3.0.0-rc.1) + +**Implemented New Features and Enhancements:** + +- Rename defaultLabel to placeholder in MultiSelect [\#733](https://github.com/primefaces/primereact/issues/733) +- Enhance accessibility for Checkbox with ARIA roles [\#729](https://github.com/primefaces/primereact/issues/729) +- Ability to use dataKey as the key in Dropdown [\#727](https://github.com/primefaces/primereact/issues/727) +- Focused editable Dropdown looks different than non-editable [\#725](https://github.com/primefaces/primereact/issues/725) +- Header and Footer templates for Calendar component [\#706](https://github.com/primefaces/primereact/issues/706) +- MultiSelect - Support a fixed defaultLabel [\#674](https://github.com/primefaces/primereact/issues/674) + +**Fixed Bugs:** + +- InputSwitch focus visuals are missing [\#735](https://github.com/primefaces/primereact/issues/735) +- DataTable edit throws error on route change [\#734](https://github.com/primefaces/primereact/issues/734) +- Incorrect column sortable prop type definition [\#730](https://github.com/primefaces/primereact/issues/730) +- ScrollPanel: Cannot read property 'classList' of null [\#726](https://github.com/primefaces/primereact/issues/726) +- Editor component cannot refresh it's value when the state change [\#724](https://github.com/primefaces/primereact/issues/724) +- Editor active item is not highlighted in toolbar [\#722](https://github.com/primefaces/primereact/issues/722) +- InputMask doesn't update the value according to state [\#686](https://github.com/primefaces/primereact/issues/686) +- DataTable: hide column after reordering columns throws exception [\#668](https://github.com/primefaces/primereact/issues/668) +- Form validity is true, even though no Dropdown selection has been made. [\#665](https://github.com/primefaces/primereact/issues/665) + +## [3.0.0-beta.1](https://github.com/primefaces/primereact/tree/3.0.0-beta.1) (2018-12-24) + +[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.1...3.0.0-beta.1) + +**Implemented New Features and Enhancements:** + +- Reimplement Menubar [\#721](https://github.com/primefaces/primereact/issues/721) +- Reimplement TieredMenu [\#720](https://github.com/primefaces/primereact/issues/720) +- Keyboard Accessibility for Menu [\#719](https://github.com/primefaces/primereact/issues/719) +- Reimplement PanelMenu Animation with CSSTransition [\#718](https://github.com/primefaces/primereact/issues/718) +- Remove certain props from Dialog [\#717](https://github.com/primefaces/primereact/issues/717) +- Reimplement Dialog Positioning [\#715](https://github.com/primefaces/primereact/issues/715) +- Reimplement Accordion Animation with CSSTransition [\#714](https://github.com/primefaces/primereact/issues/714) +- Reimplement Fieldset Animation with CSSTransition [\#712](https://github.com/primefaces/primereact/issues/712) +- Enhance Dialog Animation [\#711](https://github.com/primefaces/primereact/issues/711) +- Reimplement Panel Animation with CSSTransition [\#710](https://github.com/primefaces/primereact/issues/710) +- Unify focus visuals in themes [\#709](https://github.com/primefaces/primereact/issues/709) +- Keyboard Accessibility for PanelMenu [\#703](https://github.com/primefaces/primereact/issues/703) +- Keyboard Accessibility for MegaMenu [\#702](https://github.com/primefaces/primereact/issues/702) +- Keyboard Accessibility for Menubar [\#701](https://github.com/primefaces/primereact/issues/701) +- Keyboard Accessibility for TieredMenu [\#700](https://github.com/primefaces/primereact/issues/700) +- Improve Lightbox [\#699](https://github.com/primefaces/primereact/issues/699) +- Keyboard Accessibility for Inplace [\#698](https://github.com/primefaces/primereact/issues/698) +- Keyboard accessibility for PickList [\#697](https://github.com/primefaces/primereact/issues/697) +- Keyboard Accessibility for OrderList [\#696](https://github.com/primefaces/primereact/issues/696) +- Keyboard Accessibility for InputSwitch [\#695](https://github.com/primefaces/primereact/issues/695) +- DataTable/TreeTable sort headers should be keyboard accessible [\#693](https://github.com/primefaces/primereact/issues/693) +- Sidebar close icon should receive focus on open [\#692](https://github.com/primefaces/primereact/issues/692) +- Keyboard Accessibility for MultiSelect [\#691](https://github.com/primefaces/primereact/issues/691) +- Improve Listbox Accessibility [\#690](https://github.com/primefaces/primereact/issues/690) +- Improve ToggleButton Accessibility [\#689](https://github.com/primefaces/primereact/issues/689) +- Improve SelectButton Accessibility [\#687](https://github.com/primefaces/primereact/issues/687) +- Keyboard navigation support for Showcsse [\#684](https://github.com/primefaces/primereact/issues/684) +- Replace anchors without href with buttons [\#683](https://github.com/primefaces/primereact/issues/683) +- Update to Babel 7 [\#682](https://github.com/primefaces/primereact/issues/682) +- Improve Radio/Checkbox Accessibility [\#681](https://github.com/primefaces/primereact/issues/681) + +**Fixed Bugs:** + +- AutoComplete in multiple mode does not receive focus [\#713](https://github.com/primefaces/primereact/issues/713) +- OrderList droppoints are not highlighted [\#708](https://github.com/primefaces/primereact/issues/708) +- TreeTable Pagination Error [\#685](https://github.com/primefaces/primereact/issues/685) +- Problem TextArea component "Disabled" [\#679](https://github.com/primefaces/primereact/issues/679) +- Datatable horizontal scroll trigger onVirtualScroll [\#677](https://github.com/primefaces/primereact/issues/677) +- Spinner does not show the value 0 [\#675](https://github.com/primefaces/primereact/issues/675) +- KeyFilter uses static instance of the regex [\#672](https://github.com/primefaces/primereact/issues/672) +- slider.d.ts has wrong import syntax [\#671](https://github.com/primefaces/primereact/issues/671) + +## [2.0.1](https://github.com/primefaces/primereact/tree/2.0.1) (2018-12-06) + +[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0...2.0.1) + +**Fixed Bugs:** + +- Align SplitButton Overlay with other overlays [\#667](https://github.com/primefaces/primereact/issues/667) +- Standalone paginator causes replace is undefined error [\#666](https://github.com/primefaces/primereact/issues/666) +- onRowCollapse doesn't work on expanded row [\#664](https://github.com/primefaces/primereact/issues/664) + +## [2.0.0](https://github.com/primefaces/primereact/tree/2.0.0) (2018-12-05) + +[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0-rc.1...2.0.0) + +**Implemented New Features and Enhancements:** + +- More paginator options to DataView [\#657](https://github.com/primefaces/primereact/issues/657) +- Filtered Dropdown does not close after pressing Enter [\#649](https://github.com/primefaces/primereact/issues/649) +- Ability to get filtered and/or sorted data in DataTable [\#643](https://github.com/primefaces/primereact/issues/643) +- Add modal prop to Sidebar [\#639](https://github.com/primefaces/primereact/issues/639) +- Add currentPageReportTemplate property to Paginator [\#636](https://github.com/primefaces/primereact/issues/636) +- ProgressBar avoidable re-renders [\#597](https://github.com/primefaces/primereact/issues/597) +- Feature request: Allow us to choose a different optionLabel to display selected items in MultiSelect [\#451](https://github.com/primefaces/primereact/issues/451) + +**Fixed Bugs:** + +- Today cell is not highlighed in Calendar when selected [\#660](https://github.com/primefaces/primereact/issues/660) +- Header checkbox fails with filtering [\#659](https://github.com/primefaces/primereact/issues/659) +- Data Table resize: disable rightmost border [\#656](https://github.com/primefaces/primereact/issues/656) +- DataTable Column sortField is ignored [\#653](https://github.com/primefaces/primereact/issues/653) +- TreeTable: propagateSelectionUp Defect [\#650](https://github.com/primefaces/primereact/issues/650) +- cannot read property 'dayNamesShort' of undefined [\#647](https://github.com/primefaces/primereact/issues/647) +- this.props.onSelectionChange is not a function in DataTable [\#641](https://github.com/primefaces/primereact/issues/641) +- viewDate.getMonth\(\) is not a function [\#612](https://github.com/primefaces/primereact/issues/612) + +## [2.0.0-rc.1](https://github.com/primefaces/primereact/tree/2.0.0-rc.1) (2018-11-12) + +[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0-beta.9...2.0.0-rc.1) + +**Implemented New Features and Enhancements:** + +- Dialog default prop values [\#638](https://github.com/primefaces/primereact/issues/638) +- Reimplement InputTextarea Resize [\#629](https://github.com/primefaces/primereact/issues/629) +- Remove Schedule [\#628](https://github.com/primefaces/primereact/issues/628) +- Replace event.data with event.value at onSelectionChange of DataTable [\#626](https://github.com/primefaces/primereact/issues/626) +- Reimplement ContextMenu Selection of DataTable [\#625](https://github.com/primefaces/primereact/issues/625) +- Enter key should select a Tree node [\#624](https://github.com/primefaces/primereact/issues/624) +- Remove defaultExpanded from TreeNode [\#623](https://github.com/primefaces/primereact/issues/623) +- renderActiveOnly prop for Tabs [\#618](https://github.com/primefaces/primereact/issues/618) +- virtualRowHeight attribute in Table component [\#616](https://github.com/primefaces/primereact/issues/616) +- Remove defaultExpanded from TreeNode API [\#606](https://github.com/primefaces/primereact/issues/606) +- Keyboard Support for Table Row Selection [\#605](https://github.com/primefaces/primereact/issues/605) +- Select a tree node with enter key [\#604](https://github.com/primefaces/primereact/issues/604) +- Improve button focus visuals on Nova and Luna [\#602](https://github.com/primefaces/primereact/issues/602) + +**Fixed Bugs:** + +- Dropdown throws error on hide [\#631](https://github.com/primefaces/primereact/issues/631) +- AccordionTab title with custom HTML gives error [\#615](https://github.com/primefaces/primereact/issues/615) +- Datatable autoLayout not working [\#599](https://github.com/primefaces/primereact/issues/599) +- Tooltips not updating [\#598](https://github.com/primefaces/primereact/issues/598) +- Dialog z-index [\#596](https://github.com/primefaces/primereact/issues/596) + +## [2.0.0-beta.9](https://github.com/primefaces/primereact/tree/2.0.0-beta.9) (2018-10-08) + +[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0-beta.8...2.0.0-beta.9) + +**Implemented New Features and Enhancements:** + +- Reimplement Slider [\#592](https://github.com/primefaces/primereact/issues/592) +- New Component: DeferredContent [\#591](https://github.com/primefaces/primereact/issues/591) + +**Fixed Bugs:** + +- Add disabled property to Slider [\#593](https://github.com/primefaces/primereact/issues/593) +- Floating label for TextInput with number value fails [\#588](https://github.com/primefaces/primereact/issues/588) +- Sidebar component not working when visible by default [\#587](https://github.com/primefaces/primereact/issues/587) +- Presence of step prop will slow down reactivity of the Slider component [\#586](https://github.com/primefaces/primereact/issues/586) + +## [2.0.0-beta.8](https://github.com/primefaces/primereact/tree/2.0.0-beta.8) (2018-09-24) + +[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0-beta.7...2.0.0-beta.8) + +**Implemented New Features and Enhancements:** + +- PrimeReact input events are not compatible with React forms libraries [\#537](https://github.com/primefaces/primereact/issues/537) +- Aria roles and attributes for Tree [\#580](https://github.com/primefaces/primereact/issues/580) +- New Luna Free Dark Theme Family [\#579](https://github.com/primefaces/primereact/issues/579) +- Keyboard navigation for Tree [\#578](https://github.com/primefaces/primereact/issues/578) +- Enhanced keyboard search for dropdown [\#577](https://github.com/primefaces/primereact/issues/577) + +**Fixed Bugs:** + +- DataTable sort issue with sortIcon [\#585](https://github.com/primefaces/primereact/issues/585) +- AutoComplete does not update input when value prop changes [\#576](https://github.com/primefaces/primereact/issues/576) +- Typos in Tree.d.ts [\#573](https://github.com/primefaces/primereact/issues/573) + +## [2.0.0-beta.7](https://github.com/primefaces/primereact/tree/2.0.0-beta.7) (2018-09-18) + +[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0-beta.6...2.0.0-beta.7) + +**Fixed Bugs:** + +- Uncontrolled input text does not support floating labels [\#572](https://github.com/primefaces/primereact/issues/572) +- VirtualScroll is broken [\#560](https://github.com/primefaces/primereact/issues/560) + +## [2.0.0-beta.6](https://github.com/primefaces/primereact/tree/2.0.0-beta.6) (2018-09-17) + +[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0-beta.5...2.0.0-beta.6) + +**Fixed Bugs:** + +- Dialog mask has no index at initial display [\#571](https://github.com/primefaces/primereact/issues/571) +- New Tree component: duplicate key error when 2 TreeNodes has same label [\#570](https://github.com/primefaces/primereact/issues/570) + +## [2.0.0-beta.5](https://github.com/primefaces/primereact/tree/2.0.0-beta.5) (2018-09-11) + +[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0-beta.4...2.0.0-beta.5) + +**Fixed Bugs:** + +- Calendar warning with omission of onChange from InputText [\#569](https://github.com/primefaces/primereact/issues/569) + +## [2.0.0-beta.4](https://github.com/primefaces/primereact/tree/2.0.0-beta.4) (2018-09-11) + +[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0-beta.3...2.0.0-beta.4) + +**Implemented New Features and Enhancements:** + +- Keyboard support for Dialog Icons [\#568](https://github.com/primefaces/primereact/issues/568) +- Pass column props to columnResizeEnd [\#564](https://github.com/primefaces/primereact/issues/564) +- New Tree Component [\#559](https://github.com/primefaces/primereact/issues/559) +- Integrate PrimeFlex Grid System [\#556](https://github.com/primefaces/primereact/issues/556) +- className parameter unsupported by Spinner component [\#548](https://github.com/primefaces/primereact/issues/548) + +**Fixed Bugs:** + +- Dialog resize fails [\#567](https://github.com/primefaces/primereact/issues/567) +- Dialog resizer css is broken [\#566](https://github.com/primefaces/primereact/issues/566) +- OverlayPanel has no shadow [\#558](https://github.com/primefaces/primereact/issues/558) +- Border radius missing in panel components [\#557](https://github.com/primefaces/primereact/issues/557) +- Spinner does not recognize outside changes for value prop [\#555](https://github.com/primefaces/primereact/issues/555) +- DataTable in IE: TypeError: Object expected [\#554](https://github.com/primefaces/primereact/issues/554) +- DataTable's onRowUnselect causes exception [\#552](https://github.com/primefaces/primereact/issues/552) +- Optimize functionality of filtered dropdowns [\#551](https://github.com/primefaces/primereact/issues/551) +- Dialog blockScroll is undocumented [\#550](https://github.com/primefaces/primereact/issues/550) +- Body text is selected during Dialog drag [\#549](https://github.com/primefaces/primereact/issues/549) +- ui-float-label does not work properly for AutoComplete [\#517](https://github.com/primefaces/primereact/issues/517) +- Float-label does not work properly for InputMask [\#516](https://github.com/primefaces/primereact/issues/516) + +## [2.0.0-beta.3](https://github.com/primefaces/primereact/tree/2.0.0-beta.3) (2018-08-26) + +[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0-beta.2...2.0.0-beta.3) + +## [2.0.0-beta.2](https://github.com/primefaces/primereact/tree/2.0.0-beta.2) (2018-08-25) + +[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0-beta.1...2.0.0-beta.2) + +**Implemented New Features and Enhancements:** + +- Reimplement Tooltip [\#547](https://github.com/primefaces/primereact/issues/547) +- Keyboard support for toggle button [\#545](https://github.com/primefaces/primereact/issues/545) +- Remove font-awesome from Demos [\#544](https://github.com/primefaces/primereact/issues/544) +- Remove DataGrid and DataList [\#543](https://github.com/primefaces/primereact/issues/543) +- New styling engine [\#539](https://github.com/primefaces/primereact/issues/539) +- Property appendTo in menus [\#535](https://github.com/primefaces/primereact/issues/535) +- Deprecate Free Themes in favor of Nova Free Theme Family [\#527](https://github.com/primefaces/primereact/issues/527) + +**Fixed Bugs:** + +- Tooltip does not remove event listeners [\#542](https://github.com/primefaces/primereact/issues/542) +- Accordion does not work with multiple controlled tabs [\#540](https://github.com/primefaces/primereact/issues/540) +- Menubar import is not working [\#531](https://github.com/primefaces/primereact/issues/531) +- ColumnGroup can't be imported [\#530](https://github.com/primefaces/primereact/issues/530) +- InputTextProps not type correctly [\#529](https://github.com/primefaces/primereact/issues/529) +- originalEvent in TabView has swapped typing/variable name in TabView.d.ts [\#528](https://github.com/primefaces/primereact/issues/528) +- Calendar manual input doesn't work with time [\#526](https://github.com/primefaces/primereact/issues/526) +- Breadcrumb component throws warning [\#522](https://github.com/primefaces/primereact/issues/522) + +## [2.0.0-beta.1](https://github.com/primefaces/primereact/tree/2.0.0-beta.1) (2018-07-19) + +[Full Changelog](https://github.com/primefaces/primereact/compare/2.0.0-alpha.1...2.0.0-beta.1) + +**Implemented New Features and Enhancements:** + +- Improve input overlay animations [\#514](https://github.com/primefaces/primereact/issues/514) +- Reimplement InputSwitch UI [\#513](https://github.com/primefaces/primereact/issues/513) +- Common Props for AutoComplete and Spinner [\#512](https://github.com/primefaces/primereact/issues/512) +- Reimplement Calendar [\#504](https://github.com/primefaces/primereact/issues/504) +- Update Schedule component to remove jQuery [\#476](https://github.com/primefaces/primereact/issues/476) + +**Fixed Bugs:** + +- Slider shorthand import fails [\#511](https://github.com/primefaces/primereact/issues/511) +- Error importing Column component [\#509](https://github.com/primefaces/primereact/issues/509) +- Typescript definition for Column's editor property [\#505](https://github.com/primefaces/primereact/issues/505) +- Path to primereact/components/common/common.css not correct case [\#500](https://github.com/primefaces/primereact/issues/500) +- InputText class ui-state-filled fails [\#499](https://github.com/primefaces/primereact/issues/499) +- Calendar: popup translation not updating [\#478](https://github.com/primefaces/primereact/issues/478) +- InputSwitch doesn't update programmatically [\#461](https://github.com/primefaces/primereact/issues/461) +- preventDefault\(\) and stopPropagation\(\) appear to be missing from drag and drop of DataTable - Reorder and causes redirect to 'www.b.com' [\#460](https://github.com/primefaces/primereact/issues/460) + +## [2.0.0-alpha.1](https://github.com/primefaces/primereact/tree/2.0.0-alpha.1) (2018-07-06) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.6.2...2.0.0-alpha.1) + +**Implemented New Features and Enhancements:** + +- Review/Enhance all documentation [\#497](https://github.com/primefaces/primereact/issues/497) +- Review all type definition files [\#496](https://github.com/primefaces/primereact/issues/496) +- Reimplement Chips [\#494](https://github.com/primefaces/primereact/issues/494) +- Chips should not keep value in state [\#493](https://github.com/primefaces/primereact/issues/493) +- Controlled/Uncontrolled behavior support for DataTable Features [\#492](https://github.com/primefaces/primereact/issues/492) +- Reimplement DataTable Lazy Loading [\#491](https://github.com/primefaces/primereact/issues/491) +- onClick for Fieldset [\#487](https://github.com/primefaces/primereact/issues/487) +- Refactor Sidebar [\#486](https://github.com/primefaces/primereact/issues/486) +- Horizontal scroll support to ScrollPanel [\#485](https://github.com/primefaces/primereact/issues/485) +- Reimplement DataView [\#484](https://github.com/primefaces/primereact/issues/484) +- Add name prop to Chips [\#483](https://github.com/primefaces/primereact/issues/483) +- Controlled/Uncontrolled modes for Toggleable Fieldset [\#480](https://github.com/primefaces/primereact/issues/480) +- Controlled/Uncontrolled modes for Toggleable Panel [\#479](https://github.com/primefaces/primereact/issues/479) +- Controlled/Uncontrolled modes for TabView [\#475](https://github.com/primefaces/primereact/issues/475) +- Controlled/Uncontrolled modes for Accordion [\#474](https://github.com/primefaces/primereact/issues/474) +- New Component: Inplace [\#471](https://github.com/primefaces/primereact/issues/471) +- Shorter Imports [\#470](https://github.com/primefaces/primereact/issues/470) +- Rewrite SlideMenu [\#469](https://github.com/primefaces/primereact/issues/469) +- Rewrite PanelMenu [\#468](https://github.com/primefaces/primereact/issues/468) +- Rewrite MegaMenu [\#467](https://github.com/primefaces/primereact/issues/467) +- Rewrite ContextMenu [\#466](https://github.com/primefaces/primereact/issues/466) +- Rewrite MenuBar [\#465](https://github.com/primefaces/primereact/issues/465) +- Rewrite TieredMenu [\#464](https://github.com/primefaces/primereact/issues/464) +- Rewrite Breadcrumb [\#463](https://github.com/primefaces/primereact/issues/463) +- Rewrite Steps [\#462](https://github.com/primefaces/primereact/issues/462) +- Controlled/Uncontrolled modes for TabMenu [\#459](https://github.com/primefaces/primereact/issues/459) +- Rewrite Menu [\#458](https://github.com/primefaces/primereact/issues/458) +- Maximizable Dialog [\#453](https://github.com/primefaces/primereact/issues/453) +- Dialog should not derive visible state from props [\#452](https://github.com/primefaces/primereact/issues/452) +- Add a 'closable' or 'dismissable' property to Sidebar for 'click outside' control. [\#377](https://github.com/primefaces/primereact/issues/377) + +**Fixed Bugs:** + +- InputMask can not read property 'bind' of undefined [\#490](https://github.com/primefaces/primereact/issues/490) +- Dropdown with autoFocus prop throws a JS error [\#489](https://github.com/primefaces/primereact/issues/489) +- InputMask fail when unmask is true [\#488](https://github.com/primefaces/primereact/issues/488) +- Toggleable Panel Icon Misaligned [\#481](https://github.com/primefaces/primereact/issues/481) +- Calendar dateFormat day name or month name gives error [\#455](https://github.com/primefaces/primereact/issues/455) +- wrong typings for itemTemplate property [\#454](https://github.com/primefaces/primereact/issues/454) +- optionLabel prop is missing in MultiSelect [\#450](https://github.com/primefaces/primereact/issues/450) +- Unable to change rows per page \(Paginator/DataTable\) [\#449](https://github.com/primefaces/primereact/issues/449) + +## [1.6.2](https://github.com/primefaces/primereact/tree/1.6.2) (2018-06-19) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.6.1...1.6.2) + +**Implemented New Features and Enhancements:** + +- Refactor Rating to remove usage of state [\#447](https://github.com/primefaces/primereact/issues/447) + +**Fixed Bugs:** + +- Accordion onTabOpen-onTabClose does not trigger correctly [\#448](https://github.com/primefaces/primereact/issues/448) + +## [1.6.1](https://github.com/primefaces/primereact/tree/1.6.1) (2018-06-18) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.6.0...1.6.1) + +**Implemented New Features and Enhancements:** + +- Migrate to PrimeIcons [\#446](https://github.com/primefaces/primereact/issues/446) + +**Fixed Bugs:** + +- DataTable props updating issue [\#443](https://github.com/primefaces/primereact/issues/443) +- OrganizationChart is not working with React 16.4+ [\#441](https://github.com/primefaces/primereact/issues/441) +- Sortable TreeTable is not working with React 16.4+ [\#440](https://github.com/primefaces/primereact/issues/440) +- Calendar Toggle AM/PM is broken [\#438](https://github.com/primefaces/primereact/issues/438) +- Keyboard navigation is not working on DataTable [\#425](https://github.com/primefaces/primereact/issues/425) + +## [1.6.0](https://github.com/primefaces/primereact/tree/1.6.0) (2018-06-07) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.6.0-rc.1...1.6.0) + +**Implemented New Features and Enhancements:** + +- Improve sort property on DataView [\#420](https://github.com/primefaces/primereact/issues/420) + +**Fixed Bugs:** + +- slotChar issue on InputMask [\#439](https://github.com/primefaces/primereact/issues/439) +- Missing type definition for DropDownProps [\#436](https://github.com/primefaces/primereact/issues/436) +- Sidebar throws a JS exception on componentWillUnmount hook [\#435](https://github.com/primefaces/primereact/issues/435) +- Can't set csv export filename in DataTable.js using Internet Explorer, it returns undefined.csv [\#433](https://github.com/primefaces/primereact/issues/433) +- Missing optionsLabel property in interface ListBoxProps in ListBox.d.ts [\#431](https://github.com/primefaces/primereact/issues/431) +- Width & Height props of Charts are not working [\#430](https://github.com/primefaces/primereact/issues/430) +- After a sub node is selected on Tree, its parent node is closing [\#429](https://github.com/primefaces/primereact/issues/429) +- Rating not being enabled on change from disabled=true to disabled=false [\#428](https://github.com/primefaces/primereact/issues/428) +- The 'selection' property is not working on Tree [\#426](https://github.com/primefaces/primereact/issues/426) +- Datatable missing definitions [\#423](https://github.com/primefaces/primereact/issues/423) +- Improve sort property on DataTable [\#421](https://github.com/primefaces/primereact/issues/421) +- Remove old overlay events on GMap after map is updated [\#419](https://github.com/primefaces/primereact/issues/419) +- Growl types Failed to compile. [\#414](https://github.com/primefaces/primereact/issues/414) +- InputMask is not updated if value property is changed [\#413](https://github.com/primefaces/primereact/issues/413) +- ColorPicker is not updated if value property is changed [\#412](https://github.com/primefaces/primereact/issues/412) +- Editable Dropdown content does not reflect input value [\#408](https://github.com/primefaces/primereact/issues/408) + +## [1.6.0-rc.1](https://github.com/primefaces/primereact/tree/1.6.0-rc.1) (2018-06-04) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.5.3...1.6.0-rc.1) + +## [1.5.3](https://github.com/primefaces/primereact/tree/1.5.3) (2018-05-22) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.5.2...1.5.3) + +**Fixed Bugs:** + +- onRowReorder missing from DataTable type definition [\#411](https://github.com/primefaces/primereact/issues/411) +- Duplicate identifier 'number': DataScroller.d.ts [\#410](https://github.com/primefaces/primereact/issues/410) + +## [1.5.2](https://github.com/primefaces/primereact/tree/1.5.2) (2018-05-11) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.5.1...1.5.2) + +**Implemented New Features and Enhancements:** + +- Add metaKeySelection property to PickList [\#404](https://github.com/primefaces/primereact/issues/404) +- Add sorting feature to TreeTable [\#400](https://github.com/primefaces/primereact/issues/400) +- New mode to keyfilter to validate whole value [\#391](https://github.com/primefaces/primereact/issues/391) + +**Fixed Bugs:** + +- BodyCell className using headerClassName prop [\#407](https://github.com/primefaces/primereact/issues/407) +- Typings missing for colorPicker component [\#405](https://github.com/primefaces/primereact/issues/405) +- Radio Button default selection throws warnings [\#403](https://github.com/primefaces/primereact/issues/403) +- Container element has wrong width on Scrollable Datatable [\#402](https://github.com/primefaces/primereact/issues/402) +- Warning when using Checkbox [\#399](https://github.com/primefaces/primereact/issues/399) +- itemTemplate is declared as void [\#397](https://github.com/primefaces/primereact/issues/397) +- FileUpload does not accept multiple files dropped or selected [\#395](https://github.com/primefaces/primereact/issues/395) +- TabView activeIndex setting programmatically will not work the second time after manually choosing another tab [\#393](https://github.com/primefaces/primereact/issues/393) +- ReadOnly attribute is not passed to the checkbox input [\#392](https://github.com/primefaces/primereact/issues/392) +- onColReorder return columns: undefined [\#389](https://github.com/primefaces/primereact/issues/389) +- onClick event doesn't work on Messages component [\#387](https://github.com/primefaces/primereact/issues/387) +- Typings missing for messages component [\#386](https://github.com/primefaces/primereact/issues/386) +- InputMask runtime error [\#385](https://github.com/primefaces/primereact/issues/385) +- Slider component not always provide the originalEvent [\#384](https://github.com/primefaces/primereact/issues/384) +- Org chart does not update when value property changes [\#382](https://github.com/primefaces/primereact/issues/382) +- Bug in DataTable selection and Column [\#381](https://github.com/primefaces/primereact/issues/381) +- Calendar min date does not work after primereact@1.3.0 [\#379](https://github.com/primefaces/primereact/issues/379) + +## [1.5.1](https://github.com/primefaces/primereact/tree/1.5.1) (2018-04-10) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.5.0...1.5.1) + +**Fixed Bugs:** + +- placeholder not working on Chips component [\#374](https://github.com/primefaces/primereact/issues/374) +- Tree doesn't update on external change [\#372](https://github.com/primefaces/primereact/issues/372) +- Slider component does not support real values/step [\#371](https://github.com/primefaces/primereact/issues/371) +- AutoResize for InputTextarea doesn't work without cols property [\#370](https://github.com/primefaces/primereact/issues/370) +- Bug: incorrect highlight of dates in range Calendar [\#367](https://github.com/primefaces/primereact/issues/367) +- TypeDefinitions for Message Control missing [\#366](https://github.com/primefaces/primereact/issues/366) +- Dropdown autowidth is not working when it used inside the TabView [\#362](https://github.com/primefaces/primereact/issues/362) +- Calendar as cell editor is not closed after selecting value [\#358](https://github.com/primefaces/primereact/issues/358) +- Cannot format selection for single-value AutoComplete field [\#353](https://github.com/primefaces/primereact/issues/353) +- Bug: Type definition for the Column component [\#350](https://github.com/primefaces/primereact/issues/350) +- DataTable export doesn't respect filters and sorting [\#349](https://github.com/primefaces/primereact/issues/349) +- sortFunction doesn't work for DataTable [\#348](https://github.com/primefaces/primereact/issues/348) + +## [1.5.0](https://github.com/primefaces/primereact/tree/1.5.0) (2018-03-15) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.4.1...1.5.0) + +**Implemented New Features and Enhancements:** + +- Clear icon to Dropdown [\#345](https://github.com/primefaces/primereact/issues/345) +- Add event onRowDoubleClick for DataTable [\#341](https://github.com/primefaces/primereact/issues/341) +- Add minX and minY to Dialog [\#339](https://github.com/primefaces/primereact/issues/339) +- DragDrop based reorder for Table [\#337](https://github.com/primefaces/primereact/issues/337) +- DataView Component [\#334](https://github.com/primefaces/primereact/issues/334) +- InputMask required [\#321](https://github.com/primefaces/primereact/issues/321) +- Improve dialog positioning with Dynamic content [\#320](https://github.com/primefaces/primereact/issues/320) +- Custom filter for Column of the DataTable [\#312](https://github.com/primefaces/primereact/issues/312) + +**Fixed Bugs:** + +- Datatable column reorder may not always work correctly [\#338](https://github.com/primefaces/primereact/issues/338) +- Ultima theme 1.4.2: icon buttons are cutted [\#317](https://github.com/primefaces/primereact/issues/317) +- Autocomplete input label is undefined [\#347](https://github.com/primefaces/primereact/issues/347) +- DataTable TypeScript definition error [\#346](https://github.com/primefaces/primereact/issues/346) +- Default filters not rendered at DataTable [\#344](https://github.com/primefaces/primereact/issues/344) +- Dialog selects text during dragging or resizing [\#343](https://github.com/primefaces/primereact/issues/343) +- TabView activeIndex ignored [\#342](https://github.com/primefaces/primereact/issues/342) +- Dialog dragging may stuck [\#336](https://github.com/primefaces/primereact/issues/336) +- ToolTip crashes in IE 11 [\#332](https://github.com/primefaces/primereact/issues/332) +- Pagination dropdown resets for lazy loading dataTable [\#331](https://github.com/primefaces/primereact/issues/331) +- DataTable onLazyLoad not called for advanced filter options [\#330](https://github.com/primefaces/primereact/issues/330) +- Calendar : Enable/Highlight the date of adjacent month when selectOtherMonths is true [\#329](https://github.com/primefaces/primereact/issues/329) +- Resizable DataTable rowsCountSelector not visible [\#318](https://github.com/primefaces/primereact/issues/318) +- Dropdown list inside Dialog is only partially visible and creates scroll on dialog [\#316](https://github.com/primefaces/primereact/issues/316) +- Cannot enter Values into Spinner [\#314](https://github.com/primefaces/primereact/issues/314) + +## [1.4.1](https://github.com/primefaces/primereact/tree/1.4.1) (2018-02-14) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.4.0...1.4.1) + +**Implemented New Features and Enhancements:** + +- Filtering for OrderList [\#311](https://github.com/primefaces/primereact/issues/311) +- autoLayout mode for DataTable [\#310](https://github.com/primefaces/primereact/issues/310) +- Add baseZIndex to Dialog [\#309](https://github.com/primefaces/primereact/issues/309) +- Refactor OrderList [\#308](https://github.com/primefaces/primereact/issues/308) +- Disabled/readonly prop for Checkbox and RadioButton [\#302](https://github.com/primefaces/primereact/issues/302) +- Checkbox and Radio should mark checked/onChange props as required [\#287](https://github.com/primefaces/primereact/issues/287) +- DataTable pageLinkSize [\#276](https://github.com/primefaces/primereact/issues/276) + +**Fixed Bugs:** + +- Dialog is displayed below topbar in showcase [\#284](https://github.com/primefaces/primereact/issues/284) +- ResizableColumns fail inside Dialog [\#281](https://github.com/primefaces/primereact/issues/281) +- File Upload Dialog opens only once if set to Auto [\#306](https://github.com/primefaces/primereact/issues/306) +- rowsPerPage missing from DataTable d.ts file [\#304](https://github.com/primefaces/primereact/issues/304) +- Dropdown does not show selected value when editable is true [\#301](https://github.com/primefaces/primereact/issues/301) +- Calendar d.ts marks all props as required [\#296](https://github.com/primefaces/primereact/issues/296) +- Dialog: closeOnEscape doesn't work [\#295](https://github.com/primefaces/primereact/issues/295) +- Calendar yearNavigator fails [\#294](https://github.com/primefaces/primereact/issues/294) +- Spinner shows weird Values [\#293](https://github.com/primefaces/primereact/issues/293) +- OrderList error [\#291](https://github.com/primefaces/primereact/issues/291) +- Duplicate identifier 'any': PickList.d.ts [\#290](https://github.com/primefaces/primereact/issues/290) +- In Lazy load mode selection highlight doesn't work properly [\#283](https://github.com/primefaces/primereact/issues/283) +- Type Definitions incomplete for FileUpload [\#277](https://github.com/primefaces/primereact/issues/277) +- Growl does not clear timeout on unmount [\#272](https://github.com/primefaces/primereact/issues/272) +- Calender select day in adjacent month [\#266](https://github.com/primefaces/primereact/issues/266) + +## [1.4.0](https://github.com/primefaces/primereact/tree/1.4.0) (2018-01-04) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.4.0-rc.2...1.4.0) + +**Implemented New Features and Enhancements:** + +- Improve DataTable.d.ts RowExpansion config [\#269](https://github.com/primefaces/primereact/issues/269) +- KeyFilter attribute [\#265](https://github.com/primefaces/primereact/issues/265) +- Card Component [\#264](https://github.com/primefaces/primereact/issues/264) +- Migrate to react-transition-group [\#259](https://github.com/primefaces/primereact/issues/259) +- Calendar should consider props.disabled in shouldComponentUpdate [\#258](https://github.com/primefaces/primereact/issues/258) + +**Fixed Bugs:** + +- Spinner does not accept decimal or thousand separator as input [\#270](https://github.com/primefaces/primereact/issues/270) +- Calendar does not rerender when we change "disabled" prop [\#263](https://github.com/primefaces/primereact/issues/263) +- Calendar may reset date on update [\#262](https://github.com/primefaces/primereact/issues/262) +- ExportCSV ignores headers in DataTable [\#261](https://github.com/primefaces/primereact/issues/261) +- Spinner binds invalid event [\#260](https://github.com/primefaces/primereact/issues/260) +- Autocomplete dropdown no longer working [\#254](https://github.com/primefaces/primereact/issues/254) + +## [1.4.0-rc.2](https://github.com/primefaces/primereact/tree/1.4.0-rc.2) (2018-01-04) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.4.0-rc.1...1.4.0-rc.2) + +## [1.4.0-rc.1](https://github.com/primefaces/primereact/tree/1.4.0-rc.1) (2018-01-04) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.3.1...1.4.0-rc.1) + +## [1.3.1](https://github.com/primefaces/primereact/tree/1.3.1) (2017-12-22) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.3.0...1.3.1) + +## [1.3.0](https://github.com/primefaces/primereact/tree/1.3.0) (2017-12-13) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.3.0-rc.1...1.3.0) + +**Implemented New Features and Enhancements:** + +- New Component: ScrollPanel [\#251](https://github.com/primefaces/primereact/issues/251) +- Keyboard accessibility for Panel components [\#250](https://github.com/primefaces/primereact/issues/250) +- Refactor FileUpload [\#247](https://github.com/primefaces/primereact/issues/247) + +**Fixed Bugs:** + +- Missing dependency in primereact npm artifcat: 'react-addons-css-transition-group' [\#242](https://github.com/primefaces/primereact/issues/242) +- AutoComplete dosn't accept spaces [\#249](https://github.com/primefaces/primereact/issues/249) +- Calendar title month and year has no margin [\#248](https://github.com/primefaces/primereact/issues/248) +- Toggleable fieldset resets if parent is updated [\#246](https://github.com/primefaces/primereact/issues/246) +- Accordion resets if parent is updated [\#245](https://github.com/primefaces/primereact/issues/245) +- Toggleable panel resets if parent is updated [\#244](https://github.com/primefaces/primereact/issues/244) +- Growl.d.ts allow GrowlMessage.detail to be Element [\#241](https://github.com/primefaces/primereact/issues/241) +- Password's 'inputProps' missing in d.ts file [\#240](https://github.com/primefaces/primereact/issues/240) +- feedback={false} not working for Password [\#239](https://github.com/primefaces/primereact/issues/239) +- AutoCompleteProps: Missing data object in itemTemplate [\#237](https://github.com/primefaces/primereact/issues/237) +- Missing param name in d.ts-files [\#236](https://github.com/primefaces/primereact/issues/236) +- Spinner d.ts missing onChange [\#235](https://github.com/primefaces/primereact/issues/235) + +## [1.3.0-rc.1](https://github.com/primefaces/primereact/tree/1.3.0-rc.1) (2017-12-07) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.2.0...1.3.0-rc.1) + +**Implemented New Features and Enhancements:** + +- Add style/classname props to Radio and Checkbox [\#233](https://github.com/primefaces/primereact/issues/233) +- New properties to TriStateCheckbox [\#232](https://github.com/primefaces/primereact/issues/232) +- Keyboard Accessibility for TriStateCheckbox [\#230](https://github.com/primefaces/primereact/issues/230) +- Keyboard accessibility for Spinner [\#229](https://github.com/primefaces/primereact/issues/229) +- Refactor Spinner [\#228](https://github.com/primefaces/primereact/issues/228) +- Animation for FieldSet [\#223](https://github.com/primefaces/primereact/issues/223) +- Refactor Calendar [\#222](https://github.com/primefaces/primereact/issues/222) +- Resize support for Scrollable Table [\#219](https://github.com/primefaces/primereact/issues/219) +- Password does not pass all input parameters [\#216](https://github.com/primefaces/primereact/issues/216) +- Reimplement ColorPicker [\#214](https://github.com/primefaces/primereact/issues/214) +- Rewrite Button CSS [\#213](https://github.com/primefaces/primereact/issues/213) +- appendTo for MultiSelect [\#212](https://github.com/primefaces/primereact/issues/212) +- Use Portal API in Dropdown appendTo [\#211](https://github.com/primefaces/primereact/issues/211) +- Use Portal API in AutoComplete appendTo [\#210](https://github.com/primefaces/primereact/issues/210) +- Use Portal API in Overlay appendTo [\#209](https://github.com/primefaces/primereact/issues/209) +- Add inputId to Checkbox and Radio [\#208](https://github.com/primefaces/primereact/issues/208) +- Keyboard accessibility for Checkbox and RadioButton [\#207](https://github.com/primefaces/primereact/issues/207) +- Floating Labels for Inputs [\#205](https://github.com/primefaces/primereact/issues/205) +- Add appendTo to Dialog [\#204](https://github.com/primefaces/primereact/issues/204) +- Reimplement Messages [\#203](https://github.com/primefaces/primereact/issues/203) +- Reimplement Growl [\#202](https://github.com/primefaces/primereact/issues/202) +- Screen Reader and Keyboard Accessibility support for Fieldset [\#201](https://github.com/primefaces/primereact/issues/201) +- Screen Reader support for Panel [\#200](https://github.com/primefaces/primereact/issues/200) +- Screen Reader support for Dialog [\#199](https://github.com/primefaces/primereact/issues/199) +- Screen Reader support for TabView [\#198](https://github.com/primefaces/primereact/issues/198) +- Screen Reader and Keyboard Accessibility for Accordion [\#197](https://github.com/primefaces/primereact/issues/197) +- Loading status for AutoComplete [\#193](https://github.com/primefaces/primereact/issues/193) +- Custom content for paginator [\#189](https://github.com/primefaces/primereact/issues/189) +- Animation for Accordion [\#182](https://github.com/primefaces/primereact/issues/182) +- Unsortable option for DataTable columns [\#179](https://github.com/primefaces/primereact/issues/179) + +**Fixed Bugs:** + +- Radio and Checkbox does pass props to super [\#231](https://github.com/primefaces/primereact/issues/231) +- Dropdown Filter blocks keyboard navigation of items [\#227](https://github.com/primefaces/primereact/issues/227) +- Dropdown keyboard navigation does not scroll items [\#226](https://github.com/primefaces/primereact/issues/226) +- InputTextarea ignores focus, blur, input and keyup [\#225](https://github.com/primefaces/primereact/issues/225) +- Browser textarea resize breaks autoResize of textarea [\#224](https://github.com/primefaces/primereact/issues/224) +- DataTable dataKey ignored [\#221](https://github.com/primefaces/primereact/issues/221) +- AutoComplete does not reflect model binding [\#220](https://github.com/primefaces/primereact/issues/220) +- Clicking table header throws exception [\#218](https://github.com/primefaces/primereact/issues/218) +- Resizing last column gives error on DataTable [\#217](https://github.com/primefaces/primereact/issues/217) +- OverlayPanel: appendTo="body" throws exception [\#206](https://github.com/primefaces/primereact/issues/206) +- Growl: messages appears again on any change state [\#196](https://github.com/primefaces/primereact/issues/196) +- InputText: ui-state-filled class is not added, if value chaged in parent component [\#195](https://github.com/primefaces/primereact/issues/195) +- AutoComplete Dropdown select not hiding [\#191](https://github.com/primefaces/primereact/issues/191) +- Menu components\(menu,menubar...\) reload problem [\#190](https://github.com/primefaces/primereact/issues/190) +- Datatable - not propagate prop filterMatchMode when lazyload is on [\#187](https://github.com/primefaces/primereact/issues/187) +- datatable- Not Adjusted columns with expander [\#186](https://github.com/primefaces/primereact/issues/186) +- DataTable: page is not reseted after global filtering [\#184](https://github.com/primefaces/primereact/issues/184) +- onNodeExpand and onNodeCollapse events are not working on Tree [\#183](https://github.com/primefaces/primereact/issues/183) +- Panel Header and Dropdown problem [\#175](https://github.com/primefaces/primereact/issues/175) + +## [1.2.0](https://github.com/primefaces/primereact/tree/1.2.0) (2017-11-01) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.1.0...1.2.0) + +**Implemented New Features and Enhancements:** + +- Improve typings of some components [\#172](https://github.com/primefaces/primereact/issues/172) +- Add rowsPerPageOptions to DataTable [\#171](https://github.com/primefaces/primereact/issues/171) +- Animation for Panel toggle [\#170](https://github.com/primefaces/primereact/issues/170) +- Disabled tabs for Accordion [\#169](https://github.com/primefaces/primereact/issues/169) +- New style properties for Accordion Tab [\#168](https://github.com/primefaces/primereact/issues/168) +- Disabled tabs in TabView [\#167](https://github.com/primefaces/primereact/issues/167) +- Add style properties to TabView and TabPanel [\#166](https://github.com/primefaces/primereact/issues/166) +- Disabled prop for TabPanel [\#164](https://github.com/primefaces/primereact/issues/164) +- Use Dropdown component for Paginator rowsPerPage select [\#163](https://github.com/primefaces/primereact/issues/163) +- Support any type of object as a select option [\#162](https://github.com/primefaces/primereact/issues/162) +- Undeterminate ProgressBar [\#160](https://github.com/primefaces/primereact/issues/160) +- New Message component [\#159](https://github.com/primefaces/primereact/issues/159) +- New ProgressSpinner Component [\#143](https://github.com/primefaces/primereact/issues/143) + +**Fixed Bugs:** + +- DataTable: `onLazyLoad` does not support `sortMode="multiple"` [\#157](https://github.com/primefaces/primereact/issues/157) +- Password not trigger onChange event [\#177](https://github.com/primefaces/primereact/issues/177) +- Virtual Scrolling Flickers [\#173](https://github.com/primefaces/primereact/issues/173) +- Type definition missing from TabPanel [\#165](https://github.com/primefaces/primereact/issues/165) +- DataTable: Changing a filter does not trigger `onLazyLoad` for async tables [\#158](https://github.com/primefaces/primereact/issues/158) +- Growl throws error [\#149](https://github.com/primefaces/primereact/issues/149) +- MultiSelect: onClick: event.stopPropagation is not a function [\#147](https://github.com/primefaces/primereact/issues/147) +- utc parameter is not working when keying in the date [\#146](https://github.com/primefaces/primereact/issues/146) +- Click on input filter causes sort [\#133](https://github.com/primefaces/primereact/issues/133) + +## [1.1.0](https://github.com/primefaces/primereact/tree/1.1.0) (2017-10-18) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.1...1.1.0) + +**Implemented New Features and Enhancements:** + +- Sidebar component [\#122](https://github.com/primefaces/primereact/issues/122) +- Expose show\(\),hide\(\) and toggle\(\) in props of ContextMenu [\#113](https://github.com/primefaces/primereact/issues/113) +- Reimplement AutoComplete [\#141](https://github.com/primefaces/primereact/issues/141) +- Specific styles for header, body and footer [\#140](https://github.com/primefaces/primereact/issues/140) +- Sticky mode for Growl [\#139](https://github.com/primefaces/primereact/issues/139) +- Add onClick to Growl [\#138](https://github.com/primefaces/primereact/issues/138) +- rowClassName for DataTable [\#137](https://github.com/primefaces/primereact/issues/137) +- Typescript Support [\#131](https://github.com/primefaces/primereact/issues/131) +- New Component: GMap [\#130](https://github.com/primefaces/primereact/issues/130) +- Keyboard support for SelectButton [\#129](https://github.com/primefaces/primereact/issues/129) +- Reimplement SelectButton [\#128](https://github.com/primefaces/primereact/issues/128) +- license file [\#117](https://github.com/primefaces/primereact/issues/117) +- Frozen Columns support for Column Groups [\#107](https://github.com/primefaces/primereact/issues/107) +- Loading status for DataTable [\#94](https://github.com/primefaces/primereact/issues/94) +- Editable Cells for DataTable [\#80](https://github.com/primefaces/primereact/issues/80) +- Virtual Scrolling For DataTable [\#79](https://github.com/primefaces/primereact/issues/79) +- Percentage support for DataTable ScrollWidth and ScrollHeight [\#77](https://github.com/primefaces/primereact/issues/77) + +**Fixed Bugs:** + +- Dropdown Menu in DataTable with resizableColumns [\#123](https://github.com/primefaces/primereact/issues/123) +- Sorting does not work when you are using Column Group feature [\#115](https://github.com/primefaces/primereact/issues/115) +- TimeOnly calendar fails [\#144](https://github.com/primefaces/primereact/issues/144) +- DataTable: OnLazyLoad repeatedly calling function / infinite loop [\#132](https://github.com/primefaces/primereact/issues/132) +- Dropdown menu sits behind grid [\#126](https://github.com/primefaces/primereact/issues/126) +- SelectButton cannot have initial State [\#121](https://github.com/primefaces/primereact/issues/121) +- Calendar minDate and maxDate property does not reload dynamically [\#119](https://github.com/primefaces/primereact/issues/119) +- Growl doesn't call onClear method [\#112](https://github.com/primefaces/primereact/issues/112) +- AutoComplete completeMethod triggered twice / delay does not work as expected [\#111](https://github.com/primefaces/primereact/issues/111) +- Calendar is not updated according when props.value is changed [\#110](https://github.com/primefaces/primereact/issues/110) + +## [1.0.1](https://github.com/primefaces/primereact/tree/1.0.1) (2017-09-21) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0...1.0.1) + +**Implemented New Features and Enhancements:** + +- appendTo for OverlayPanel [\#96](https://github.com/primefaces/primereact/issues/96) +- Update demo to Router v4 [\#93](https://github.com/primefaces/primereact/issues/93) +- Refactor InputText filled state implementation [\#91](https://github.com/primefaces/primereact/issues/91) +- Missing event for components [\#90](https://github.com/primefaces/primereact/issues/90) +- Customizable Paginator using Templating [\#88](https://github.com/primefaces/primereact/issues/88) +- Column Reordering for DataTable [\#81](https://github.com/primefaces/primereact/issues/81) + +**Fixed Bugs:** + +- Wrong documentation for BreadCrumb component [\#100](https://github.com/primefaces/primereact/issues/100) +- Relative Position calculation is wrong [\#109](https://github.com/primefaces/primereact/issues/109) +- Dropdown options does not update when props is changed [\#108](https://github.com/primefaces/primereact/issues/108) +- Dynamic and Static Columns cause error [\#106](https://github.com/primefaces/primereact/issues/106) +- Broken css in Version 1.0 [\#105](https://github.com/primefaces/primereact/issues/105) +- Dropdown selected option not updated after value property changes [\#103](https://github.com/primefaces/primereact/issues/103) +- Chart is not updated when data changes [\#102](https://github.com/primefaces/primereact/issues/102) +- The value of AutoComplete is not reset after changing state [\#101](https://github.com/primefaces/primereact/issues/101) +- FileUpload does not allow multiple files [\#99](https://github.com/primefaces/primereact/issues/99) +- Dialog contentStyle doesn't work [\#92](https://github.com/primefaces/primereact/issues/92) +- InputText disabled behavior missing readonly functionality [\#89](https://github.com/primefaces/primereact/issues/89) + +## [1.0.0](https://github.com/primefaces/primereact/tree/1.0.0) (2017-09-10) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0-rc.3...1.0.0) + +**Implemented New Features and Enhancements:** + +- Reimplement Listbox [\#87](https://github.com/primefaces/primereact/issues/87) +- Reimplement PickList [\#86](https://github.com/primefaces/primereact/issues/86) +- Reimplement Rating [\#84](https://github.com/primefaces/primereact/issues/84) +- Reimplement Calendar [\#83](https://github.com/primefaces/primereact/issues/83) +- Disabled Dates for Calendar [\#82](https://github.com/primefaces/primereact/issues/82) + +## [1.0.0-rc.3](https://github.com/primefaces/primereact/tree/1.0.0-rc.3) (2017-09-09) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0-rc.2...1.0.0-rc.3) + +## [1.0.0-rc.2](https://github.com/primefaces/primereact/tree/1.0.0-rc.2) (2017-09-08) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0-rc.1...1.0.0-rc.2) + +## [1.0.0-rc.1](https://github.com/primefaces/primereact/tree/1.0.0-rc.1) (2017-08-31) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0-beta.6...1.0.0-rc.1) + +**Implemented New Features and Enhancements:** + +- Re implemented Dropdown component [\#76](https://github.com/primefaces/primereact/issues/76) +- Re-implemented Dialog Component [\#75](https://github.com/primefaces/primereact/issues/75) + +**Fixed Bugs:** + +- PickList callbacks reference error [\#74](https://github.com/primefaces/primereact/issues/74) +- The state of user is not updated after closing dialog [\#72](https://github.com/primefaces/primereact/issues/72) +- The onClick event of Choose button is fired twice on FileUpload [\#71](https://github.com/primefaces/primereact/issues/71) + +## [1.0.0-beta.6](https://github.com/primefaces/primereact/tree/1.0.0-beta.6) (2017-08-21) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0-beta.5...1.0.0-beta.6) + +## [1.0.0-beta.5](https://github.com/primefaces/primereact/tree/1.0.0-beta.5) (2017-08-21) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0-beta.4...1.0.0-beta.5) + +**Implemented New Features and Enhancements:** + +- Add id attribute to all components [\#70](https://github.com/primefaces/primereact/issues/70) +- Inconsistent API to add CSS class with certain of your component [\#68](https://github.com/primefaces/primereact/issues/68) + +**Fixed Bugs:** + +- InputText and InputTextarea components aren't re-rendered when props are updated [\#69](https://github.com/primefaces/primereact/issues/69) + +## [1.0.0-beta.4](https://github.com/primefaces/primereact/tree/1.0.0-beta.4) (2017-08-16) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0-beta.3...1.0.0-beta.4) + +**Implemented New Features and Enhancements:** + +- Text Editor [\#66](https://github.com/primefaces/primereact/issues/66) + +## [1.0.0-beta.3](https://github.com/primefaces/primereact/tree/1.0.0-beta.3) (2017-08-10) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0-beta.2...1.0.0-beta.3) + +## [1.0.0-beta.2](https://github.com/primefaces/primereact/tree/1.0.0-beta.2) (2017-08-10) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0-beta.1...1.0.0-beta.2) + +## [1.0.0-beta.1](https://github.com/primefaces/primereact/tree/1.0.0-beta.1) (2017-08-09) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0-alpha.2...1.0.0-beta.1) + +**Implemented New Features and Enhancements:** + +- DataTable Crud [\#63](https://github.com/primefaces/primereact/issues/63) +- MegaMenu component [\#62](https://github.com/primefaces/primereact/issues/62) +- Steps component [\#61](https://github.com/primefaces/primereact/issues/61) +- PanelMenu component [\#59](https://github.com/primefaces/primereact/issues/59) +- ContextMenu component [\#58](https://github.com/primefaces/primereact/issues/58) +- Menubar component [\#57](https://github.com/primefaces/primereact/issues/57) +- TieredMenu component [\#56](https://github.com/primefaces/primereact/issues/56) +- Breadcrumb component [\#54](https://github.com/primefaces/primereact/issues/54) +- Add tabmenu component [\#53](https://github.com/primefaces/primereact/issues/53) +- Add menu component [\#51](https://github.com/primefaces/primereact/issues/51) +- Add lightbox component [\#46](https://github.com/primefaces/primereact/issues/46) +- Add toolbar component [\#44](https://github.com/primefaces/primereact/issues/44) +- Add password component [\#43](https://github.com/primefaces/primereact/issues/43) +- Add keyboard support to dropdown [\#39](https://github.com/primefaces/primereact/issues/39) +- Implemented DataScroller component [\#37](https://github.com/primefaces/primereact/issues/37) +- Implemented Rating component [\#36](https://github.com/primefaces/primereact/issues/36) +- Implemented ColorPicker component [\#35](https://github.com/primefaces/primereact/issues/35) + +## [1.0.0-alpha.2](https://github.com/primefaces/primereact/tree/1.0.0-alpha.2) (2017-05-25) + +[Full Changelog](https://github.com/primefaces/primereact/compare/1.0.0-alpha.1...1.0.0-alpha.2) + +**Implemented New Features and Enhancements:** + +- TreeTable Component [\#34](https://github.com/primefaces/primereact/issues/34) +- Mobile Touch support to Slider Component [\#33](https://github.com/primefaces/primereact/issues/33) +- Implemented Captcha Component [\#32](https://github.com/primefaces/primereact/issues/32) +- Tree Component [\#31](https://github.com/primefaces/primereact/issues/31) + +**Fixed Bugs:** + +- Accordion activeIndex doesn't work [\#30](https://github.com/primefaces/primereact/issues/30) +- Dropdown onChange invoked on same item selection [\#28](https://github.com/primefaces/primereact/issues/28) +- activeIndex property on TabView doesn't work [\#26](https://github.com/primefaces/primereact/issues/26) +- Dropdown is missing input focus [\#21](https://github.com/primefaces/primereact/issues/21) +- Spinner controls are not user friendly [\#20](https://github.com/primefaces/primereact/issues/20) +- MultiSelect Input focus is missing [\#19](https://github.com/primefaces/primereact/issues/19) +- Accordion Tab Caret icons are not toggleable [\#18](https://github.com/primefaces/primereact/issues/18) +- Radio button label toggle state is missing [\#14](https://github.com/primefaces/primereact/issues/14) +- Chips need input focus [\#13](https://github.com/primefaces/primereact/issues/13) +- Checkbox label toggle state is not working [\#12](https://github.com/primefaces/primereact/issues/12) +- Autocomplete Multiple feature missing input focus [\#10](https://github.com/primefaces/primereact/issues/10) + +## [1.0.0-alpha.1](https://github.com/primefaces/primereact/tree/1.0.0-alpha.1) (2017-03-28) + +[Full Changelog](https://github.com/primefaces/primereact/compare/2eb760f17382a3b3a47d70f6f6076e21f5c90cfb...1.0.0-alpha.1) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000000..56699aa980 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,128 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or + advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email + address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +contact@primetek.com.tr. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at +https://www.contributor-covenant.org/translations. diff --git a/CODING_STANDARDS.md b/CODING_STANDARDS.md new file mode 100644 index 0000000000..64c8677441 --- /dev/null +++ b/CODING_STANDARDS.md @@ -0,0 +1,265 @@ +# Coding Standards + +## Declaration Rules + +### Using Explanatory Names for Variables + + // Bad + let x = 10; // What does "x" represent? + + // Good + let numberOfUsers = 10; // Clearly states what the variable represents + + // Bad + let y = true; // What does "y" represent? + + // Good + let isLoggedIn = true; // Clearly states the user's login status + +### Using Verbs for Boolean Variables + + // Bad + let loggedIn = false; + let userAccess = true; + + // Good + let isLoggedIn = false; + let canAccess = true; + let isActive = true; + let hasPermission = false; + +### Declarations on Top + + function exampleFunction() { + let x; // Declare variable at the top + let y; // Declare variable at the top + + // Function body + // Code that uses variables x and y + } + +### One Declaration per Line + + \\Bad + let x,y,z; + + \\Good + let x; + let y; + let z; + +### Initialize Variables + + let hasBorder = false; + let repeatedTimes = 0; + let images = []; + +### Declare Arrays with Const + + \\Bad + let images = ['img1', 'img2', 'img3']; + images = 3; \\Converted images to number + + \\Good + const images = ['img1', 'img2', 'img3']; + +### End Switch Case's with Defaults + + switch (new Date().getDay()) { + case 0: + day = "Sunday"; + break; + case 1: + day = "Monday"; + break; + default: + day = "Unknown"; + } + +### Avoid Number, String, and Boolean as Objects + +Always treat numbers, strings, or booleans as primitive values. Not as objects. +Declaring these types as objects, slows down execution speed, and produces nasty side effects: + + // Example + let x = "John"; + let y = new String("John"); + (x === y) // is false because x is a string and y is an object. + + // Bad + const num = new Number(10); + const str = new String("Hello"); + const bool = new Boolean(true); + + // Good + const num = 10; + const str = "Hello"; + const bool = true; + +## Spacing + +- Indentation with tabs. +- No whitespace at the end of line or on blank lines. +- Lines should usually be no longer than 80 characters, and should not exceed 120 (counting tabs as 4 spaces). +- No filler spaces in empty constructs (e.g., {}, [], fn()). +- There should be a new line at the end of each file. +- All function bodies are indented by one tab, even if the entire file is wrapped in a closure. + +## Ordering + +Ensuring that each function is defined before it is used is a good practice for code readability and maintainability. + + // Define functions before they are used + function validateUserData(userData) { + // Logic to validate user data + } + + function sanitizeUserData(userData) { + validateUserData() + } + + function saveUserData(userData) { + sanitizeUserData() + } + +### Imports order + +1. React import +2. Library imports (Alphabetical order) +3. Absolute imports from the project (Alphabetical order) +4. Relative imports (Alphabetical order) +5. Import \* as +6. Import \.\ + +### Array and Object Declarations + + // Preferred + var obj = { + ready: 9, + when: 4, + 'you are': 15, + }; + + var arr = [ + 9, + 4, + 15, + ]; + + // Acceptable for small objects and arrays + var obj = { ready: 9, when: 4, 'you are': 15 }; + var arr = [ 9, 4, 15 ]; + +## Semicolons + +Use them. Never rely on Automatic Semicolon Insertion (ASI). + +## Equality + +### Use === Comparison + + 0 == ""; // true + 1 == "1"; // true + 1 == true; // true + + 0 === ""; // false + 1 === "1"; // false + 1 === true; // false + +## React + +### Breakdown Components + +Breaking down components refers to decomposing complex systems or functionalities into smaller, more manageable parts or components. This practice helps improve code organization, readability, and maintainability. + + // Bad + function processUserData(userData) { + // Complex logic to process user data + } + + // Good + function validateUserData(userData) { + // Logic to validate user data + } + + function sanitizeUserData(userData) { + // Logic to sanitize user data + } + + function saveUserData(userData) { + // Logic to save user data + } + +### Use Functional Components + +Using functional components instead of class components whenever possible is wise because functional components are easier to read and write. Functional components are generally faster and more efficient than class components because they don't require a constructor or lifecycle methods. + + // Good: + const MyComponent = () => { + return ( +
+ {/* JSX */} +
+ ); + }; + +### Avoid Using Inline Styles + +Avoiding inline styles is a best practice in web development because it promotes separation of concerns, improves maintainability, and makes it easier to manage styles across an application. Instead of applying styles directly in HTML elements, it's recommended to use external stylesheets or CSS-in-JS solutions. + + // Bad: + const MyComponent = () => { + return ( +
+ {/* Content */} +
+ ); + }; + // Good: + import './MyComponent.css'; + + const MyComponent = () => { + return ( +
+ {/* Content */} +
+ ); + }; + +### Passing Objects Instead of Multiple Props + +Especially when there are more than **4 props**, can enhance code readability and maintainability. + + //Bad + const updateTodo = (id, name, completed, date, user) => { + //... + } + + // Good + const todoItem = { + id: 1, + name: "Morning Task", + completed: false, + date: new Date(), + user: "Optimus" + } + + const updateTodo = (todoItem) => { + //... + } + +### Avoid default export + +Using named exports provides better **clarity** when importing components, making the codebase more organized and easier to navigate. + +- Named imports work well with tree shaking. +- Refactoring becomes easier. +- Easier to identify and understand the dependencies of a module. + +## Utils + +### Avoid Using eval() + +The `eval()` function is used to run text as code. In almost all cases, it should not be necessary to use it. + +Because it allows arbitrary code to be run, it also represents a security problem. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000..95f67a0d50 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,228 @@ +Contributing to PrimeReact: Terms and Conditions +================================================ + +------------------------------------------------------------------------------ + +Do you want to contribute your work to PrimeReact? Well, then first and most important: **THANK YOU!** + + +Now, in order to accept your contribution, there are some terms you must expressly agree with, so please +read them carefully. They might look a bit cumbersome, but they are here just in order to protect +you, your contribution, and especially the project's future. + +**Important**: submitting any contributions to the PrimeReact project implies your **full acceptance of these terms**, +including the *"PrimeReact Individual Contributor License Agreement"* detailed at the end. + +Who can contribute? +------------------- + +Anyone, with the unique condition that he/she must be a **private individual**, acting in +his/her own name, and not being endorsed in their contributed work by any company or government. + +Note that this condition will not only refer to the ownership of the effort invested in contributing +to the project, but also to the fact that *no private or public company will be mentioned as a a part +of your contribution on the project's website or code*, including but not limited to web/email addresses +or package names. + + +What is the first step to be taken? +----------------------------------- + +First of all, **Discuss with the [project members](https://github.com/orgs/primefaces/discussions)** (a new thread should do) about +your ideas: new features, fixes, documentation... whatever you would like to contribute to the project. Let we +discuss the possibilities with you so that we make sure your contribution goes in the right direction and aligns +with the project's standards, intentions and roadmap. + + + +How will your relation with the PrimeReact project be? +----------------------------------------------------- + +Your contributions will have the form of GitHub *pull requests*. Note that contributors do not +have read+write (or *pull+push*) access to the project repositories, only project *members* do. + +Also, please understand that *not all pull requests will be accepted and merged into the project's +repositories*. Talking about your planned contributions with the project members before creating pull requests +will maximize the possibilities of your contributions being accepted. + +About the code you contribute +----------------------------- + +### General guidelines: + + - Obviously, **your code must both compile and work correctly**. Also, the addition of any new patches to the + codebase should not render it unstable in any way. + - All your code should be easy to read and understand by a human. + - There should be no compilation warnings at all. + - Checkstyle must pass without errors or warnings. Currently this is embedded into the maven build. + +### Detailed code quality standards: + + - All your code should compile and run in **Node 16.x or higher**. + - All comments, names of classes and variables, log messages, etc. must be **in English**. + + + +About the documentation/articles you contribute +----------------------------------------------- + +Note the following only applies to documentation/articles meant to be published at the PrimeReact website. + + - All documentation artifacts, including articles, must be written **in correct English**. + - Your name and email will be displayed as *"author"* of any documentation artifacts you create. + - Topic and text structure must be first discussed and agreed upon with the project members. + - Project members may edit and make small changes to your texts --of which you will be informed-- before + publishing them. + - Format and visual styles must adhere to the PrimeReact website standards, of which you will be informed + by the project members. + + + +Pay special attention to this +----------------------------- + +All PrimeReact software is distributed under the **MIT** open source license, and your contributions +will be licensed in the same way. + +If you work for a company which, by the way or place in which your code was written, by your contract terms +or by the laws in your country, could claim any rights (including but not limited to intellectual or industrial +property) over your contributed code, you will have to send the project members (either by email from your +authorised superiors or by signed fax), a statement indicating that your company agrees with the terms +explained in this page, and that it both authorises your contribution to PrimeReact and states that will +never claim any kind of rights over it. + + + +PrimeReact Individual Contributor License Agreement +-------------------------------------------------- + +This contributor agreement ("Agreement") documents the rights granted by contributors to the PrimeReact Project. + +This is a legally binding document, so please read it carefully before agreeing to it. The Agreement +may cover more than one software project managed by PrimeReact. + +### 1. Definitions + + * _"PrimeReact"_ means the "PrimeReact Project organization and members". + * _"You"_ means the individual who submits a Contribution to PrimeReact. + * _"Contribution"_ means any work of authorship that is submitted by you to PrimeReact in which you own + or assert ownership of the Copyright. + * _"Copyright"_ means all rights protecting works of authorship owned or controlled by you, + including copyright, moral and neighboring rights, as appropriate, for the full term of their + existence including any extensions by you. + * _"Material"_ means the work of authorship which is made available by PrimeReact to third parties. When + this Agreement covers more than one software project, the Material means the work of authorship + to which the Contribution was submitted. After you submit the Contribution, it may be included + in the Material. + * _"Submit"_ means any form of electronic, verbal, or written communication sent to PrimeReact or its + representatives, including but not limited to electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, PrimeReact for the purpose of discussing + and improving the Material, but excluding communication that is conspicuously marked or + otherwise designated in writing by you as _"Not a Contribution." + * _"Submission Date"_ means the date on which you submit a Contribution to PrimeReact. + * _"Effective Date"_ means the date you execute this agreement or the date You first submit a + Contribution to PrimeReact, whichever is earlier. + +### 2. Grant of Rights + +#### 2.1. Copyright License + + (a) You retain ownership of the copyright in your Contribution and have the same rights to use or + license the Contribution which you would have had without entering into the agreement. + (b) To the maximum extent permitted by the relevant law, you grant to PrimeReact a perpetual, worldwide, + non-exclusive, transferable, royalty-free, irrevocable license under the copyright covering the + Contribution, with the right to sublicense such rights through multiple tiers of sublicensees, to + reproduce, modify, display, perform and distribute the Contribution as part of the Material; provided + that this license is conditioned upon compliance with Section 2.3. + +#### 2.2 Patent License + +For patent claims including, without limitation, method, process, and apparatus claims which you +own, control or have the right to grant, now or in the future, you grant to PrimeReact a perpetual, worldwide, +non-exclusive, transferable, royalty-free, irrevocable patent license, with the right to sublicense these +rights to multiple tiers of sublicensees, to make, have made, use, sell, offer for sale, import and +otherwise transfer the Contribution and the Contribution in combination with the Material (and +portions of such combination). This license is granted only to the extent that the exercise of the +licensed rights infringes such patent claims; and provided that this license is conditioned upon +compliance with Section 2.3. + + +#### 2.3 Outbound License + +As a condition on the grant of rights in Sections 2.1 and 2.2, PrimeReact agrees to license the Contribution only +under the terms of the MIT License (including any right to adopt any future version of this license if +permitted). + + +#### 2.4 Moral Rights + +If moral rights apply to the Contribution, to the maximum extent permitted by law, you waive and agree not +to assert such moral rights against PrimeReact or its successors in interest, or any of our licensees, either +direct or indirect. + + +#### 2.5 PrimeReact Rights + +You acknowledge that PrimeReact is not obligated to use your Contribution as part of the +Material and may decide to include any Contributions PrimeReact considers appropriate. + +#### 2.6 Reservation of Rights + +Any rights not expressly assigned or licensed under this section are expressly reserved by you. + + + +### 3. Agreement + +You confirm that: + + (a) You have the legal authority to enter into this Agreement. + (b) You own the Copyright and patent claims covering the Contribution which are required to grant + the rights under Section 2. + (c) The grant of rights under Section 2 does not violate any grant of rights which you have made to + third parties, including your employer. If you are an employee, you have had your employer approve + this Agreement. If you are less than eighteen years old, please have your parents or guardian + sign the Agreement. + + + +### 4. Disclaimer + +EXCEPT FOR THE EXPRESS WARRANTIES IN SECTION 3, THE CONTRIBUTION IS PROVIDED "AS IS". MORE PARTICULARLY, +ALL EXPRESS OR IMPLIED WARRANTIES INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTY OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE EXPRESSLY DISCLAIMED BY YOU TO PrimeReact AND BY +PrimeReact TO YOU. TO THE EXTENT THAT ANY SUCH WARRANTIES CANNOT BE DISCLAIMED, SUCH WARRANTY IS LIMITED IN +DURATION TO THE MINIMUM PERIOD PERMITTED BY LAW. + + + +### 5. Consequential Damage Waiver + +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT WILL YOU OR PrimeReact BE LIABLE FOR ANY LOSS OF +PROFITS, LOSS OF ANTICIPATED SAVINGS, LOSS OF DATA, INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL AND EXEMPLARY +DAMAGES ARISING OUT OF THIS AGREEMENT REGARDLESS OF THE LEGAL OR EQUITABLE THEORY (CONTRACT, TORT OR OTHERWISE) +UPON WHICH THE CLAIM IS BASED. + + + +### 6. Miscellaneous + + 6.1 This Agreement will be governed by and construed in accordance with the laws of Spain excluding its + conflicts of law provisions. Under certain circumstances, the governing law in this section might be + superseded by the United Nations Convention on Contracts for the International Sale of Goods ("UN + Convention") and the parties intend to avoid the application of the UN Convention to this Agreement + and, thus, exclude the application of the UN Convention in its entirety to this Agreement. + 6.2 This Agreement sets out the entire agreement between you and PrimeReact for your Contributions to + PrimeReact and overrides all other agreements or understandings. + 6.3 If You or PrimeReact assign the rights or obligations received through this Agreement to a third party, + as a condition of the assignment, that third party must agree in writing to abide by all the rights and + obligations in the Agreement. + 6.4 The failure of either party to require performance by the other party of any provision of this + Agreement in one situation shall not affect the right of a party to require such performance at any time + in the future. A waiver of performance under a provision in one situation shall not be considered a + waiver of the performance of the provision in the future or a waiver of the provision in its entirety. + 6.5 If any provision of this Agreement is found void and unenforceable, such provision will be + replaced to the extent possible with a provision that comes closest to the meaning of the original + provision and which is enforceable. The terms and conditions set forth in this Agreement shall apply + notwithstanding any failure of essential purpose of this Agreement or any limited remedy to the + maximum extent possible under law. diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md new file mode 100644 index 0000000000..023c156575 --- /dev/null +++ b/DEVELOPMENT.md @@ -0,0 +1,94 @@ +## Local Development + +This document intends to establish a series of steps to take in order to set up a local environment for developing on the primereact components with live reload, quick builds, and incremental builds. + +## Instructions + +You must have a local copy of this repository somewhere on your machine. From that repository. Before starting, make sure that the version for your `primereact/package.json` is a [valid semantic version](https://docs.npmjs.com/about-semantic-versioning) and does not contain a suffix such as `-SNAPSHOT`. + +Once that is done, you will run: + +**Unix/MacOS:** + +```shell +~/primereact/ $ npm run dev:link +``` + +**Windows:** +dev:link:windows + +```shell +C:\primereact> npm run dev:link:windows +``` + +This will alter the bundler to only emit non-minified esm modules. The aliasing plugin has also been disabled for components. Once everything has been bundled (this can take a few minutes) you should keep this command running. It will allow for incremental builds as you develop in the `primereact/` directory. + +> Note: if you get "Error: JavaScript heap out of memory", it may help to set the following node variable: `export NODE_OPTIONS=--max-old-space-size=8192`. + +> Note: The build will be finished when the terminal displays: `[20xx-xx-xx 00:00:00] waiting for changes...`. + +This will create a local copy of the package that is used instead of the registry version. +Unlike `npm link`, `yalc` does not use symlinks, which avoids common module resolution issues. + +### Open a new terminal and navigate to the `primereact/dist/` directory + +Run yalc publish + +```shell +~/primereact/ $ cd dist +~/primereact/dist/ $ npx yalc publish +``` + +### Now change your directory to your local project you are developing on! + +```shell +~/primereact/dist/ $ cd ~/my-cool-project +~/my-cool-project/ $ +``` + +The goal now is to link your primereact dependency to the yalc package that we configured earlier: + +```shell +~/my-cool-project/ $ npx yalc add primereact +``` + +As long at the dependencies version that you symlinked satisfies the version that is specified in `my-cool-project/package.json` then the link should have worked. + +You can validate that by running: + +```shell +~/my-cool-project/ $ npx yalc check + +Yalc dependencies found: [ 'primereact' ] +``` + +After doing your changes in the `primereact/` directory, you can publish the changes to your local project by running: + +```shell +~/primereact/dist/ $ npx yalc push +``` + +## Live Development +If you want to push your changes automatically to your local project, you can use the following: + +```shell +~/primereact $ npm run dev:link -- -- --watch.onEnd="cd dist && npx yalc push" +``` +This command will watch for changes in the `primereact/` directory and automatically push updates to your local project whenever you save a file. (note the double -- before `watch.onEnd`) + +### Congratulations! + +You can now live develop in the `primereact/` directory and your changes should be represented in your `my-cool-project/` build. (Assuming you are running vite or another bundler for `my-cool-project`) + +### Cleanup + +Once done, you can clean up with: + +```shell +~/my-cool-project/ $ yalc remove primereact +~/my-cool-project/ $ rm -rf yalc.lock .yalc +~/my-cool-project/ $ npm install primereact@latest +``` + +> Note: `yalc` stores the published package in `~/.yalc/primereact` and uses file references in your project. +> This avoids typical pitfalls of `npm link`, such as duplicated React versions or broken module scopes. diff --git a/LICENSE.md b/LICENSE.md index 9020d76ba5..049848cd38 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2016-2019 PrimeTek +Copyright (c) 2016-2025 PrimeTek Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file +THE SOFTWARE. diff --git a/README.md b/README.md index cb69e494f9..88bbb8795c 100644 --- a/README.md +++ b/README.md @@ -1,70 +1,67 @@ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![npm version](https://badge.fury.io/js/primereact.svg)](https://badge.fury.io/js/primereact) +[![primereact](https://snyk.io/advisor/npm-package/primereact/badge.svg)](https://snyk.io/advisor/npm-package/primereact) +![NPM Downloads](https://img.shields.io/npm/dm/primereact?color=purple) +[![Actions CI](https://github.com/primefaces/primereact/workflows/NodeJS%20CI/badge.svg)](https://github.com/primefaces/primereact/actions/workflows/node.js.yml) +[![Discord Chat](https://img.shields.io/discord/557940238991753223.svg?color=7289da&label=chat&logo=discord)](https://discord.gg/gzKFYnpmCY) +[![Stackoverflow](https://img.shields.io/badge/StackOverflow-primereact-chocolate.svg)](https://stackoverflow.com/questions/tagged/primereact) +[![Prime Discussions](https://img.shields.io/github/discussions-search?query=org%3Aprimefaces&logo=github&label=Prime%20Discussions&link=https%3A%2F%2Fgithub.com%2Forgs%2Fprimefaces%2Fdiscussions)](https://github.com/orgs/primefaces/discussions) -[![PrimeReact Hero](https://www.primefaces.org/wp-content/uploads/2020/03/primereact-github-02032020-2.jpg "PrimeReact Hero")](https://www.primefaces.org/primereact) +[![PrimeReact Hero](https://www.primefaces.org/static/social/primereact-preview.jpg)](https://www.primereact.org) # PrimeReact -PrimeReact is a rich set of open source UI Components for React. - -[![PrimeReact Logo](https://www.primefaces.org/wp-content/uploads/2017/09/primereact-transparent-250.png "PrimeReact")](https://www.primefaces.org/primereact) - -See [PrimeReact homepage](https://www.primefaces.org/react) for live showcase and documentation. +PrimeReact is a rich set of open source UI Components for React. See [PrimeReact homepage](https://primereact.org/) for live showcase and documentation. ## Download -PrimeReact is available at npm, if you have an existing application run the following command to download it to your project. +PrimeReact is available at [npm](https://www.npmjs.com/package/primereact). ``` -npm install primereact --save -npm install primeicons --save -``` +# Using npm +npm install primereact -## Import +# Using yarn +yarn add primereact -```javascript -//import {ComponentName} from 'primereact/{componentname}'; -import {Dialog} from 'primereact/dialog'; -import {Accordion,AccordionTab} from 'primereact/accordion'; +# Using pnpm +pnpm add primereact ``` -## Dependencies +## Import -Majority of PrimeReact components (95%) are native and there are some exceptions having 3rd party dependencies such as Google Maps for GMap. +Each component can be imported individually so that you only bundle what you use. Import path is available in the documentation of the corresponding component. -In addition, components require PrimeIcons for icons, classNames package to manage style classes and react-transition-group for animations. +```javascript +//import { ComponentName } from 'primereact/{componentname}'; +import { Button } from 'primereact/button'; -```json -dependencies: { - "react": "^16.0.0", - "react-dom": "^16.0.0", - "react-transition-group": "^2.2.1", - "classnames": "^2.2.5", - "primeicons": "^2.0.0" +export default function MyComponent() { + return ( + +`} + + +

On the other hand, a fancy css based button using a div has no keyboard or screen reader support.

+ + {` +
console.log(e)}>Click
+`} +
+ +

+ tabIndex is required to make a div element accessible in addition to use a keydown to bring the keyboard support back. To avoid the overload and implementing functionality that is already provided by the browser, native form + controls should be preferred. +

+ + {` +
console.log(e)} onKeyDown={e => e.code === 'Space' && console.log(e) } tabIndex="0">Click
+`} +
+ +

+ Form components must be related to another element that describes what the form element is used for. This is usually achieved with the label element. +

+ + {` + + +`} + + + ); +} diff --git a/components/doc/accessibility/introductiondoc.js b/components/doc/accessibility/introductiondoc.js new file mode 100644 index 0000000000..b1e44448cf --- /dev/null +++ b/components/doc/accessibility/introductiondoc.js @@ -0,0 +1,56 @@ +import { DocSectionText } from '@/components/doc/common/docsectiontext'; + +export function IntroductionDoc(props) { + return ( + <> + +

+ Accessibility is a major concern of the Prime UI libraries and PrimeReact is no exception. PrimeTek teams have initiated a significant process to review and enhance the accessibility features of the components. This guide + documents the foundation of the general guidelines that PrimeReact will follow and each component documentation will have a separate Accessibility section that states the keyboard support, screen reader compatibility, the + implementation details along with tips to achieve WCAG compliancy. This work has been completed for PrimeVue and PrimeNG and currently being ported to PrimeReact to be finalized in Q4 2023. +

+

+ According to the World Health Organization, 15% of the world population has a disability to some degree. As a result, accessibility features in any context such as a ramp for wheelchair users or a multimedia with captions are + crucial to ensure content can be consumed by anyone. +

+

Types of disabilities are diverse so you need to know your audience well and how they interact with the content created. There four main categories;

+
+ +

Visual Impairments

+

+ Blindness, low-level vision or color blindness are the common types of visual impairments. Screen magnifiers and the color blind mode are usually built-in features of the browsers whereas for people who rely on screen readers, page + developers are required to make sure content is readable by the readers. Popular readers are{' '} + + NVDA + + ,{' '} + + JAWS + {' '} + and{' '} + + ChromeVox + + . +

+ +

Hearing Impairments

+

+ Deafness or hearing loss refers to the inability to hear sounds totally or partially. People with hearing impairments use assistive devices however it may not be enough when interacting with a web page. Common implementation is + providing textual alternatives, transcripts and captions for content with audio. +

+ +

Mobility Impairments

+

+ People with mobility impairments have disabilities related to movement due to loss of a limb, paralysis or other varying reasons. Assistive technologies like a head pointer is a device to interact with a screen whereas keyboard or a + trackpad remain as solutions for people who are not able to utilize a mouse. +

+ +

Cognitive Impairments

+

+ Cognitive impairments have a wider range that includes people with learning disabilities, depression and dyslexia. A well designed content also leads to better user experience for people without disabilities so designing for cognitive + impairments result in better design for any user. +

+ + ); +} diff --git a/components/doc/accessibility/semantichtmldoc.js b/components/doc/accessibility/semantichtmldoc.js new file mode 100644 index 0000000000..f29e950c9d --- /dev/null +++ b/components/doc/accessibility/semantichtmldoc.js @@ -0,0 +1,56 @@ +import { CodeHighlight } from '@/components/doc/common/codehighlight'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; + +export function SemanticHTMLDoc(props) { + return ( + <> + +

+ HTML offers various element to organize content on a web page that screen readers are aware of. Preferring Semantic HTML for good semantics provide out of the box support for reader which is not possible when regular div{' '} + elements with classes are used. Consider the following example that do not mean too much for readers. +

+
+ + + {` +
+
Header
+
+ +
+ +
+
+
+ +
+
+
+ +
+
+`} +
+ +

Same layout can be achieved using the semantic elements with screen reader support built-in.

+ + {` +
+

Header

+
+ + + +
+
+ + +
+ +
+
+`} +
+ + ); +} diff --git a/components/doc/accessibility/waiariadoc.js b/components/doc/accessibility/waiariadoc.js new file mode 100644 index 0000000000..58195e4f72 --- /dev/null +++ b/components/doc/accessibility/waiariadoc.js @@ -0,0 +1,81 @@ +import { CodeHighlight } from '@/components/doc/common/codehighlight'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { Checkbox } from '@/components/lib/checkbox/Checkbox'; +import { useState } from 'react'; + +export function WAIAriaDoc(props) { + const [checked, setChecked] = useState(false); + + return ( + <> + +

+ ARIA refers to "Accessible Rich Internet Applications" is a suite to fill the gap where semantic HTML is inadequate. These cases are mainly related to rich UI components/widgets. Although browser support for rich UI components + such as a datepicker or colorpicker has been improved over the past years many web developers still utilize UI components derived from standard HTML elements created by them or by other projects like PrimeReact. These types of + components must provide keyboard and screen reader support, the latter case is where the WAI-ARIA is utilized. +

+

+ ARIA consists of roles, properties and attributes. Roles define what the element is mainly used for e.g. checkbox, dialog, tablist whereas States and Properties define the metadata of the + element like aria-checked, aria-disabled. +

+ +

Consider the following case of a native checkbox. It has built-in keyboard and screen reader support.

+
+ + {` + +`} + + +

+ A fancy checkbox with css animations might look more appealing but accessibility might be lacking. Checkbox below may display a checked font icon with animations however it is not tabbable, cannot be checked with space key and cannot + be read by a reader. +

+ + {` +
+ {checked && } +
+`} +
+ +

+ One alternative is using ARIA roles for readers and use javascript for keyboard support. Notice the usage of aria-labelledby as a replacement of the label tag with htmlFor. +

+ + {` +Remember Me +
+ {checked && } +
+`} +
+ +

+ However the best practice is combining semantic HTML for accessibility while keeping the design for UX. This approach involves hiding a native checkbox for accessibility and using javascript events to update its state. Notice the + usage of p-hidden-accessible + that hides the elements from the user but not from the screen reader. +

+ + {` + +
+ + {checked && } +
+`} +
+ +

A working sample is the PrimeReact checkbox that is tabbable, keyboard accessible and is compliant with a screen reader. Instead of ARIA roles it relies on a hidden native checkbox.

+ +
+ + setChecked(e.checked)} /> +
+ + ); +} diff --git a/components/doc/accessibility/wcagdoc.js b/components/doc/accessibility/wcagdoc.js new file mode 100644 index 0000000000..696b871505 --- /dev/null +++ b/components/doc/accessibility/wcagdoc.js @@ -0,0 +1,26 @@ +import { DocSectionText } from '@/components/doc/common/docsectiontext'; + +export function WCAGDoc(props) { + return ( + <> + +

+ Correct page structure with the aid of assistive technologies are the core ingridients for an accessible web content. HTML is based on an accessible foundation, form controls can be used by keyboard by default and semantic HTML is + easier to be processed by a screen reader. +

+

+ + WCAG + {' '} + refers to Web Content Accessibility Guideline, a standard managed by the WAI (Web Accessibility Initiative) of W3C (World Wide Web Consortium). WCAG consists of recommendations for making the web content more + accessible. PrimeReact components aim high level of WCAG compliancy in the near future. +

+ +

+ Various countries around the globe have governmental policies regarding web accessibility as well. Most well known of these are Section 508 in the US and{' '} + Web Accessibility Directive of the European Union. +

+
+ + ); +} diff --git a/components/doc/accordion/accessibilitydoc.js b/components/doc/accordion/accessibilitydoc.js new file mode 100644 index 0000000000..1c4ef9fa77 --- /dev/null +++ b/components/doc/accordion/accessibilitydoc.js @@ -0,0 +1,78 @@ +import { DocSectionText } from '@/components/doc/common/docsectiontext'; + +export function AccessibilityDoc() { + return ( + +

Screen Reader

+

+ Accordion header elements have a button role and use aria-controls to define the id of the content section along with aria-expanded for the visibility state. The value to read a header element defaults to the + value of the header property and can be customized by defining an aria-label or aria-labelledby via the headerProps property. +

+

+ The content uses region role, defines an id that matches the aria-controls of the header and aria-labelledby referring to the id of the header. +

+ +

Header Keyboard Support

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the next the focusable element in the page tab sequence.
+ shift + tab + Moves focus to the previous the focusable element in the page tab sequence.
+ enter + Toggles the visibility of the content.
+ space + Toggles the visibility of the content.
+ down arrow + Moves focus to the next header.
+ up arrow + Moves focus to the previous header.
+ home + Moves focus to the first header.
+ end + Moves focus to the last header.
+
+
+ ); +} diff --git a/components/doc/accordion/basicdoc.js b/components/doc/accordion/basicdoc.js new file mode 100644 index 0000000000..fd1960aecd --- /dev/null +++ b/components/doc/accordion/basicdoc.js @@ -0,0 +1,144 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { Accordion, AccordionTab } from '@/components/lib/accordion/Accordion'; + +export function BasicDoc(props) { + const code = { + basic: ` + + +

+ 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. +

+
+
+ `, + javascript: ` +import React from 'react'; +import { Accordion, AccordionTab } from 'primereact/accordion'; + +export default function BasicDemo() { + return ( +
+ + +

+ 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. +

+
+
+
+ ) +} + `, + typescript: ` +import React from 'react'; +import { Accordion, AccordionTab } from 'primereact/accordion'; + +export default function BasicDemo() { + return ( +
+ + +

+ 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. +

+
+
+
+ ) +} + ` + }; + + return ( + <> + +

+ Accordion consists of one or more AccordionTab elements which are collapsed by default. Tab to expand initially can be defined with the activeIndex property. +

+
+
+ + +

+ 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/components/doc/accordion/controlleddoc.js b/components/doc/accordion/controlleddoc.js new file mode 100644 index 0000000000..0ffb23313c --- /dev/null +++ b/components/doc/accordion/controlleddoc.js @@ -0,0 +1,177 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { Accordion, AccordionTab } from '@/components/lib/accordion/Accordion'; +import { Button } from '@/components/lib/button/Button'; +import { useState } from 'react'; + +export function ControlledDoc(props) { + const [activeIndex, setActiveIndex] = useState(null); + + const code = { + basic: ` +
+
+ setActiveIndex(e.index)}> + +

+ 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. +

+
+
+ `, + javascript: ` +import React, { useState } from 'react'; +import { Accordion, AccordionTab } from 'primereact/accordion'; +import { Button } from 'primereact/button'; + +export default function ControlledDoc() { + const [activeIndex, setActiveIndex] = useState(); + + return ( +
+
+
+ setActiveIndex(e.index)}> + +

+ 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. +

+
+
+
+ ) +} + `, + typescript: ` +import React, { useState } from 'react'; +import { Accordion, AccordionTab } from 'primereact/accordion'; +import { Button } from 'primereact/button'; + +export default function ControlledDoc() { + const [activeIndex, setActiveIndex] = useState(); + + return ( +
+
+
+ setActiveIndex(e.index)}> + +

+ 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. +

+
+
+
+ ) +} + ` + }; + + return ( + <> + +

+ Accordion can be controlled programmatically using a binding to activeIndex along with onTabChange event to update the active index. +

+
+
+
+
+
+ setActiveIndex(e.index)}> + +

+ 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/components/doc/accordion/disableddoc.js b/components/doc/accordion/disableddoc.js new file mode 100644 index 0000000000..fe7bfb691c --- /dev/null +++ b/components/doc/accordion/disableddoc.js @@ -0,0 +1,148 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { Accordion, AccordionTab } from '@/components/lib/accordion/Accordion'; + +export function DisabledDoc(props) { + const code = { + basic: ` + + +

+ 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. +

+
+ +
+ `, + javascript: ` +import React from 'react'; +import { Accordion, AccordionTab } from 'primereact/accordion'; + +export default function DisabledDemo() { + return ( +
+ + +

+ 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. +

+
+ +
+
+ ) +} + `, + typescript: ` +import React from 'react'; +import { Accordion, AccordionTab } from 'primereact/accordion'; + +export default function DisabledDemo() { + return ( +
+ + +

+ 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. +

+
+ +
+
+ ) +} + ` + }; + + return ( + <> + +

+ Enabling disabled property of an AccordionTab prevents user interaction. +

+
+
+ + +

+ 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/components/doc/accordion/dynamicdoc.js b/components/doc/accordion/dynamicdoc.js new file mode 100644 index 0000000000..9845dc2b17 --- /dev/null +++ b/components/doc/accordion/dynamicdoc.js @@ -0,0 +1,123 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { Accordion, AccordionTab } from '@/components/lib/accordion/Accordion'; +import { useState } from 'react'; + +export function DynamicDoc(props) { + const [tabs] = useState([ + { + header: 'Title I', + children:

Content 1

+ }, + { + header: 'Title II', + children:

Content 2

+ }, + { + header: 'Title III', + children:

Content 3

+ } + ]); + + const createDynamicTabs = () => { + return tabs.map((tab, i) => { + return ( + + {tab.children} + + ); + }); + }; + + const code = { + basic: ` + {createDynamicTabs()} + `, + javascript: ` +import React, { useState } from 'react'; +import { Accordion, AccordionTab } from 'primereact/accordion'; + +export default function DynamicDemo() { + const [tabs] = useState([ + { + header: 'Title I', + children:

Content 1

+ }, + { + header: 'Title II', + children:

Content 2

+ }, + { + header: 'Title III', + children:

Content 3

+ } + ]); + + const createDynamicTabs = () => { + return tabs.map((tab, i) => { + return ( + + {tab.children} + + ); + }); + }; + + return ( +
+ {createDynamicTabs()} +
+ ) +} + `, + typescript: ` +import React, { useState } from 'react'; +import { Accordion, AccordionTab } from 'primereact/accordion'; + +export default function DynamicDemo() { + const [tabs] = useState([ + { + header: 'Title I', + children:

Content 1

+ }, + { + header: 'Title II', + children:

Content 2

+ }, + { + header: 'Title III', + children:

Content 3

+ } + ]); + + const createDynamicTabs = () => { + return tabs.map((tab, i) => { + return ( + + {tab.children} + + ); + }); + }; + + return ( +
+ {createDynamicTabs()} +
+ ) +} + ` + }; + + return ( + <> + +

Accordion tabs can be generated dynamically using code.

+
+
+ {createDynamicTabs()} +
+ + + ); +} diff --git a/components/doc/accordion/importdoc.js b/components/doc/accordion/importdoc.js new file mode 100644 index 0000000000..21bc954346 --- /dev/null +++ b/components/doc/accordion/importdoc.js @@ -0,0 +1,17 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; + +export function ImportDoc(props) { + const code = { + basic: ` +import { Accordion, AccordionTab } from 'primereact/accordion'; + ` + }; + + return ( + <> + + + + ); +} diff --git a/components/doc/accordion/multipledoc.js b/components/doc/accordion/multipledoc.js new file mode 100644 index 0000000000..62a04f55f9 --- /dev/null +++ b/components/doc/accordion/multipledoc.js @@ -0,0 +1,144 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { Accordion, AccordionTab } from '@/components/lib/accordion/Accordion'; + +export function MultipleDoc(props) { + const code = { + basic: ` + + +

+ 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. +

+
+
+ `, + javascript: ` +import React from 'react'; +import { Accordion, AccordionTab } from 'primereact/accordion'; + +export default function MultipleDemo() { + return ( +
+ + +

+ 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. +

+
+
+
+ ) +} + `, + typescript: ` +import React from 'react'; +import { Accordion, AccordionTab } from 'primereact/accordion'; + +export default function MultipleDemo() { + return ( +
+ + +

+ 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. +

+
+
+
+ ) +} + ` + }; + + return ( + <> + +

+ Only one tab at a time can be active by default, enabling multiple property changes this behavior to allow multiple tabs. In this case activeIndex needs to be an array. +

+
+
+ + +

+ 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/components/doc/accordion/pt/wireframe.js b/components/doc/accordion/pt/wireframe.js new file mode 100644 index 0000000000..3db17977a1 --- /dev/null +++ b/components/doc/accordion/pt/wireframe.js @@ -0,0 +1,12 @@ +import { DocSectionText } from '@/components/doc/common/docsectiontext'; + +export const Wireframe = (props) => { + return ( + <> + +
+ accordion +
+ + ); +}; diff --git a/components/doc/accordion/styledoc.js b/components/doc/accordion/styledoc.js new file mode 100644 index 0000000000..ea59f382ae --- /dev/null +++ b/components/doc/accordion/styledoc.js @@ -0,0 +1,38 @@ +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import Link from 'next/link'; + +export function StyleDoc() { + return ( + <> + +

+ Following is the list of structural style classes, for theming classes visit theming page. +

+
+
+ + + + + + + + + + + + + + + + + + + + + +
NameElement
p-accordionContainer element.
p-accordion-headerHeader of a tab.
p-accordion-contentContainer of a tab.
+
+ + ); +} diff --git a/components/doc/accordion/templatedoc.js b/components/doc/accordion/templatedoc.js new file mode 100644 index 0000000000..3fafc12938 --- /dev/null +++ b/components/doc/accordion/templatedoc.js @@ -0,0 +1,246 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { Accordion, AccordionTab } from '@/components/lib/accordion/Accordion'; +import { Avatar } from '@/components/lib/avatar/Avatar'; +import { Badge } from '@/components/lib/badge/Badge'; + +export function TemplateDoc(props) { + const code = { + basic: ` + + + + Amy Elsner + + + } + > +

+ 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. +

+
+ + + Onyama Limba + + + } + > +

+ 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. +

+
+ + + Ioni Bowcher + + + } + > +

+ 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. +

+
+
+ `, + javascript: ` +import React from 'react'; +import { Accordion, AccordionTab } from 'primereact/accordion'; +import { Avatar } from 'primereact/avatar'; +import { Badge } from 'primereact/badge'; + +export default function TemplateDemo() { + return ( +
+ + + + Amy Elsner + + + } + > +

+ 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. +

+
+ + + Onyama Limba + + + } + > +

+ 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. +

+
+ + + Ioni Bowcher + + + } + > +

+ 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. +

+
+
+
+ ) +} + `, + typescript: ` +import React from 'react'; +import { Accordion, AccordionTab } from 'primereact/accordion'; +import { Avatar } from 'primereact/avatar'; +import { Badge } from 'primereact/badge'; + +export default function TemplateDemo() { + return ( +
+ + + + Amy Elsner + + + } + > +

+ 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. +

+
+ + + Onyama Limba + + + } + > +

+ 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. +

+
+ + + Ioni Bowcher + + + } + > +

+ 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. +

+
+
+
+ ) +} + ` + }; + + return ( + <> + +

+ Title section of a tab is customized with the header property. +

+
+
+ + + + Amy Elsner + + + } + > +

+ 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. +

+
+ + + Onyama Limba + + + } + > +

+ 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. +

+
+ + + Ioni Bowcher + + + } + > +

+ 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/components/doc/accordion/theming/styleddoc.js b/components/doc/accordion/theming/styleddoc.js new file mode 100644 index 0000000000..c4312a2801 --- /dev/null +++ b/components/doc/accordion/theming/styleddoc.js @@ -0,0 +1,35 @@ +import { DocSectionText } from '@/components/doc/common/docsectiontext'; + +export function StyledDoc(props) { + return ( + <> + +

List of class names used in the styled mode.

+
+
+ + + + + + + + + + + + + + + + + + + + + +
NameElement
p-accordionContainer element.
p-accordion-headerHeader of a tab.
p-accordion-contentContainer of a tab.
+
+ + ); +} diff --git a/components/doc/accordion/theming/tailwinddoc.js b/components/doc/accordion/theming/tailwinddoc.js new file mode 100644 index 0000000000..306058dbf8 --- /dev/null +++ b/components/doc/accordion/theming/tailwinddoc.js @@ -0,0 +1,111 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import Link from 'next/link'; + +export function TailwindDoc(props) { + const code = { + basic: ` +const TRANSITIONS = { + toggleable: { + timeout: 500, + classNames: { + enter: 'max-h-0', + enterActive: + '!max-h-[1000px] overflow-hidden transition-[max-height] duration-500 ease-in', + exit: 'max-h-[1000px]', + exitActive: + '!max-h-0 overflow-hidden transition-[max-height] duration-500 ease-out', + } + } +}; + +const Tailwind = { + accordion: { + root: 'mb-1', + accordiontab: { + root: 'mb-1', + header: ({ props }) => ({ + className: classNames( + { 'select-none pointer-events-none cursor-default opacity-60': props?.disabled } // Condition + ) + }), + headerAction: ({ context }) => ({ + className: classNames( + 'flex items-center cursor-pointer relative no-underline select-none', // Alignments + 'p-5 transition duration-200 ease-in-out rounded-t-md font-bold transition-shadow duration-200', // Padding and transition + 'border border-gray-300 bg-gray-100 text-gray-600', // Borders and colors + 'dark:bg-gray-900 dark:border-blue-900/40 dark:text-white/80 dark:hover:bg-gray-800/80 dark:focus:shadow-[inset_0_0_0_0.2rem_rgba(147,197,253,0.5)]', // Dark mode + 'hover:border-gray-300 hover:bg-gray-200 hover:text-gray-800', // Hover + 'focus:outline-none focus:outline-offset-0 focus:shadow-[inset_0_0_0_0.2rem_rgba(191,219,254,1)]', // Focus + { 'rounded-br-md rounded-bl-md': !context.selected, 'rounded-br-0 rounded-bl-0 text-gray-800': context.selected } // Condition + ) + }), + headerIcon: 'inline-block mr-2', + headerTitle: 'leading-none', + content: { + className: classNames( + 'p-5 border border-gray-300 bg-white text-gray-700 border-t-0 rounded-tl-none rounded-tr-none rounded-br-lg rounded-bl-lg', + 'dark:bg-gray-900 dark:border-blue-900/40 dark:text-white/80' // Dark mode + ) + }, + transition: TRANSITIONS.toggleable + } + } +} + ` + }; + + const code2 = { + javascript: ` +import React from 'react'; +import { Accordion, AccordionTab } from 'primereact/accordion'; + +export default function UnstyledDemo() { + return ( +
+ + +

+ 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. +

+
+
+
+ ) +} + ` + }; + + return ( + <> + +

+ PrimeReact offers a built-in Tailwind theme to get you started quickly. The default values related to the component are displayed below. The component can easily be styled with your own design based on Tailwind utilities, see the{' '} + Tailwind Customization section for an example. +

+ +

A playground sample with the pre-built Tailwind theme.

+ +
+ + ); +} diff --git a/components/doc/autocomplete/accessibilitydoc.js b/components/doc/autocomplete/accessibilitydoc.js new file mode 100644 index 0000000000..3cebfe97c0 --- /dev/null +++ b/components/doc/autocomplete/accessibilitydoc.js @@ -0,0 +1,150 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; + +export function AccessibilityDoc() { + const code = { + basic: ` + + + +Email + + + + ` + }; + + return ( + +

Screen Reader

+

+ Value to describe the component can either be provided via label tag combined with inputId prop or using aria-labelledby, aria-label props. The input element has combobox role in addition to{' '} + aria-autocomplete, aria-haspopup and aria-expanded attributes. The relation between the input and the popup is created with aria-controls and aria-activedescendant attribute is used to instruct + screen reader which option to read during keyboard navigation within the popup list. +

+

+ In multiple mode, chip list uses listbox role with aria-orientation set to horizontal whereas each chip has the option role with aria-label set to the label of the chip. +

+

+ The popup list has an id that refers to the aria-controls attribute of the input element and uses listbox as the role. Each list item has option role and an id to match the aria-activedescendant of the + input element. +

+ + + +

Keyboard Support

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the input element when popup is not visible. If the popup is open and an item is highlighted then popup gets closed, item gets selected and focus moves to the next focusable element.
+ up arrow + Highlights the previous item if popup is visible.
+ down arrow + Highlights the next item if popup is visible.
+ enter + Selects the highlighted item and closes the popup if popup is visible.
+ home + Highlights the first item if popup is visible.
+ end + Highlights the last item if popup is visible.
+ escape + Hides the popup.
+
+ +

Chips Input Keyboard Support

+
+ + + + + + + + + + + + + + + + + +
KeyFunction
+ backspace + Deletes the previous chip if the input field is empty.
+ left arrow + Moves focus to the previous chip if available and input field is empty.
+
+ +

Chip Keyboard Support

+
+ + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ left arrow + Moves focus to the previous chip if available.
+ right arrow + Moves focus to the next chip, if there is none then input field receives the focus.
+ backspace + Deletes the chips and adds focus to the input field.
+
+
+ ); +} diff --git a/components/doc/autocomplete/basicdoc.js b/components/doc/autocomplete/basicdoc.js new file mode 100644 index 0000000000..90d641d862 --- /dev/null +++ b/components/doc/autocomplete/basicdoc.js @@ -0,0 +1,71 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { AutoComplete } from '@/components/lib/autocomplete/AutoComplete'; +import { useState } from 'react'; + +export function BasicDoc(props) { + const [value, setValue] = useState(''); + const [items, setItems] = useState([]); + + const search = (event) => { + setItems([...Array(10).keys()].map((item) => event.query + '-' + item)); + }; + + const code = { + basic: ` + setValue(e.value)} /> + `, + javascript: ` +import React, { useState } from "react"; +import { AutoComplete } from "primereact/autocomplete"; + +export default function BasicDemo() { + const [value, setValue] = useState(''); + const [items, setItems] = useState([]); + + const search = (event) => { + setItems([...Array(10).keys()].map(item => event.query + '-' + item)); + } + + return ( +
+ setValue(e.value)} /> +
+ ) +} + `, + typescript: ` +import React, { useState } from "react"; +import { AutoComplete, AutoCompleteCompleteEvent } from "primereact/autocomplete"; + +export default function BasicDemo() { + const [value, setValue] = useState(''); + const [items, setItems] = useState([]); + + const search = (event: AutoCompleteCompleteEvent) => { + setItems([...Array(10).keys()].map(item => event.query + '-' + item)); + } + + return ( +
+ setValue(e.value)} /> +
+ ) +} + ` + }; + + return ( + <> + +

+ AutoComplete is used as a controlled component with value and onChange properties. In addition, suggestions and a completeMethod are required to query the results. +

+
+
+ setValue(e.value)} /> +
+ + + ); +} diff --git a/components/doc/autocomplete/disableddoc.js b/components/doc/autocomplete/disableddoc.js new file mode 100644 index 0000000000..feba885b54 --- /dev/null +++ b/components/doc/autocomplete/disableddoc.js @@ -0,0 +1,49 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { AutoComplete } from '@/components/lib/autocomplete/AutoComplete'; + +export function DisabledDoc(props) { + const code = { + basic: ` + + `, + javascript: ` +import React from "react"; +import { AutoComplete } from "primereact/autocomplete"; + +export default function DisabledDemo() { + return ( +
+ +
+ ) +} + `, + typescript: ` +import React from "react"; +import { AutoComplete } from "primereact/autocomplete"; + +export default function DisabledDemo() { + return ( +
+ +
+ ) +} + ` + }; + + return ( + <> + +

+ When disabled is present, the element cannot be edited and focused. +

+
+
+ +
+ + + ); +} diff --git a/components/doc/autocomplete/dropdowndoc.js b/components/doc/autocomplete/dropdowndoc.js new file mode 100644 index 0000000000..fb8b1e023e --- /dev/null +++ b/components/doc/autocomplete/dropdowndoc.js @@ -0,0 +1,76 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { AutoComplete } from '@/components/lib/autocomplete/AutoComplete'; +import { useState } from 'react'; + +export function DropdownDoc(props) { + const [value, setValue] = useState(''); + const [items, setItems] = useState([]); + + const search = (event) => { + let _items = [...Array(10).keys()]; + + setItems(event.query ? [...Array(10).keys()].map((item) => event.query + '-' + item) : _items); + }; + + const code = { + basic: ` + setValue(e.value)} dropdown /> + `, + javascript: ` +import React, { useState } from "react"; +import { AutoComplete } from "primereact/autocomplete"; + +export default function DropdownDemo() { + const [value, setValue] = useState(''); + const [items, setItems] = useState([]); + + const search = (event) => { + let _items = [...Array(10).keys()]; + setItems(event.query ? [...Array(10).keys()].map(item => event.query + '-' + item) : _items); + } + + return ( +
+ setValue(e.value)} dropdown /> +
+ ) +} + `, + typescript: ` +import React, { useState } from "react"; +import { AutoComplete, AutoCompleteCompleteEvent } from "primereact/autocomplete"; + +export default function DropdownDemo() { + const [value, setValue] = useState(''); + const [items, setItems] = useState([]); + + const search = (event: AutoCompleteCompleteEvent) => { + let _items = [...Array(10).keys()]; + setItems(event.query ? [...Array(10).keys()].map(item => event.query + '-' + item) : _items); + } + + return ( +
+ setValue(e.value)} dropdown /> +
+ ) +} + ` + }; + + return ( + <> + +

+ Enabling dropdown property displays a button next to the input field where click behavior of the button is defined using dropdownMode property that takes blank or current as possible + values. blank is the default mode to send a query with an empty string whereas current setting sends a query with the current value of the input. +

+
+
+ setValue(e.value)} dropdown /> +
+ + + ); +} diff --git a/components/doc/autocomplete/filleddoc.js b/components/doc/autocomplete/filleddoc.js new file mode 100644 index 0000000000..6de79a0a22 --- /dev/null +++ b/components/doc/autocomplete/filleddoc.js @@ -0,0 +1,71 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { AutoComplete } from '@/components/lib/autocomplete/AutoComplete'; +import { useState } from 'react'; + +export function FilledDoc(props) { + const [value, setValue] = useState(''); + const [items, setItems] = useState([]); + + const search = (event) => { + setItems([...Array(10).keys()].map((item) => event.query + '-' + item)); + }; + + const code = { + basic: ` + setValue(e.value)} variant="filled" /> + `, + javascript: ` +import React, { useState } from "react"; +import { AutoComplete } from "primereact/autocomplete"; + +export default function FilledDemo() { + const [value, setValue] = useState(''); + const [items, setItems] = useState([]); + + const search = (event) => { + setItems([...Array(10).keys()].map(item => event.query + '-' + item)); + } + + return ( +
+ setValue(e.value)} variant="filled" /> +
+ ) +} + `, + typescript: ` +import React, { useState } from "react"; +import { AutoComplete, AutoCompleteCompleteEvent } from "primereact/autocomplete"; + +export default function FilledDemo() { + const [value, setValue] = useState(''); + const [items, setItems] = useState([]); + + const search = (event: AutoCompleteCompleteEvent) => { + setItems([...Array(10).keys()].map(item => event.query + '-' + item)); + } + + return ( +
+ setValue(e.value)} variant="filled" /> +
+ ) +} + ` + }; + + return ( + <> + +

+ Specify the variant property as filled to display the component with a higher visual emphasis than the default outlined style. +

+
+
+ setValue(e.value)} variant="filled" /> +
+ + + ); +} diff --git a/components/doc/autocomplete/floatlabeldoc.js b/components/doc/autocomplete/floatlabeldoc.js new file mode 100644 index 0000000000..3c767317e5 --- /dev/null +++ b/components/doc/autocomplete/floatlabeldoc.js @@ -0,0 +1,81 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { AutoComplete } from '@/components/lib/autocomplete/AutoComplete'; +import { useState } from 'react'; + +export function FloatLabelDoc(props) { + const [value, setValue] = useState(''); + const [items, setItems] = useState([]); + + const search = (event) => { + setItems([...Array(10).keys()].map((item) => event.query + '-' + item)); + }; + + const code = { + basic: ` + + setValue(e.value)} /> + + + `, + javascript: ` +import React, { useState } from "react"; +import { AutoComplete } from "primereact/autocomplete"; + +export default function FloatLabelDemo() { + const [value, setValue] = useState(''); + const [items, setItems] = useState([]); + + const search = (event) => { + setItems([...Array(10).keys()].map(item => event.query + '-' + item)); + } + + return ( +
+ + setValue(e.value)} /> + + +
+ ) +} + `, + typescript: ` +import React, { useState } from "react"; +import { AutoComplete, AutoCompleteCompleteEvent } from "primereact/autocomplete"; + +export default function FloatLabelDemo() { + const [value, setValue] = useState(''); + const [items, setItems] = useState([]); + + const search = (event: AutoCompleteCompleteEvent) => { + setItems([...Array(10).keys()].map(item => event.query + '-' + item)); + } + + return ( +
+ + setValue(e.value)} /> + + +
+ ) +} + ` + }; + + return ( + <> + +

A floating label appears on top of the input field when focused.

+
+
+ + setValue(e.value)} /> + + +
+ + + ); +} diff --git a/components/doc/autocomplete/forceselectiondoc.js b/components/doc/autocomplete/forceselectiondoc.js new file mode 100644 index 0000000000..4780b4b67a --- /dev/null +++ b/components/doc/autocomplete/forceselectiondoc.js @@ -0,0 +1,72 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { AutoComplete } from '@/components/lib/autocomplete/AutoComplete'; +import { useState } from 'react'; + +export function ForceSelectionDoc(props) { + const [value, setValue] = useState(''); + const [items, setItems] = useState([]); + + const search = (event) => { + setItems([...Array(10).keys()].map((item) => event.query + '-' + item)); + }; + + const code = { + basic: ` + setValue(e.value)} forceSelection /> + `, + javascript: ` +import React, { useState } from "react"; +import { AutoComplete } from "primereact/autocomplete"; + +export default function ForceSelectionDemo() { + const [value, setValue] = useState(''); + const [items, setItems] = useState([]); + + const search = (event) => { + setItems([...Array(10).keys()].map(item => event.query + '-' + item)); + } + + return ( +
+ setValue(e.value)} forceSelection /> +
+ ) +} + `, + typescript: ` +import React, { useState } from "react"; +import { AutoComplete, AutoCompleteCompleteEvent } from "primereact/autocomplete"; + +export default function ForceSelectionDemo() { + const [value, setValue] = useState(''); + const [items, setItems] = useState([]); + + const search = (event: AutoCompleteCompleteEvent) => { + setItems([...Array(10).keys()].map(item => event.query + '-' + item)); + } + + return ( +
+ setValue(e.value)} forceSelection /> +
+ ) +} + ` + }; + + return ( + <> + +

+ ForceSelection mode validates the manual input to check whether it also exists in the suggestions list, if not the input value is cleared to make sure the value passed to the model is always one of the suggestions. Simply enable{' '} + forceSelection to enforce that input is always from the suggestion list. +

+
+
+ setValue(e.value)} forceSelection /> +
+ + + ); +} diff --git a/components/doc/autocomplete/groupdoc.js b/components/doc/autocomplete/groupdoc.js new file mode 100644 index 0000000000..33e76cbb9f --- /dev/null +++ b/components/doc/autocomplete/groupdoc.js @@ -0,0 +1,276 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { AutoComplete } from '@/components/lib/autocomplete/AutoComplete'; +import { useState } from 'react'; + +export function GroupDoc(props) { + const [selectedCity, setSelectedCity] = useState(null); + const [filteredCities, setFilteredCities] = useState(null); + const groupedCities = [ + { + label: 'Germany', + code: 'DE', + items: [ + { label: 'Berlin', value: 'Berlin' }, + { label: 'Frankfurt', value: 'Frankfurt' }, + { label: 'Hamburg', value: 'Hamburg' }, + { label: 'Munich', value: 'Munich' } + ] + }, + { + label: 'USA', + code: 'US', + items: [ + { label: 'Chicago', value: 'Chicago' }, + { label: 'Los Angeles', value: 'Los Angeles' }, + { label: 'New York', value: 'New York' }, + { label: 'San Francisco', value: 'San Francisco' } + ] + }, + { + label: 'Japan', + code: 'JP', + items: [ + { label: 'Kyoto', value: 'Kyoto' }, + { label: 'Osaka', value: 'Osaka' }, + { label: 'Tokyo', value: 'Tokyo' }, + { label: 'Yokohama', value: 'Yokohama' } + ] + } + ]; + + const groupedItemTemplate = (item) => { + return ( +
+ {item.label} +
{item.label}
+
+ ); + }; + + const search = (event) => { + let query = event.query; + let _filteredCities = []; + + for (let country of groupedCities) { + let filteredItems = country.items.filter((item) => item.label.toLowerCase().indexOf(query.toLowerCase()) !== -1); + + if (filteredItems && filteredItems.length) { + _filteredCities.push({ ...country, ...{ items: filteredItems } }); + } + } + + setFilteredCities(_filteredCities); + }; + + const code = { + basic: ` + setSelectedCity(e.value)} suggestions={filteredCities} completeMethod={search} + field="label" optionGroupLabel="label" optionGroupChildren="items" optionGroupTemplate={groupedItemTemplate} placeholder="Hint: type 'a'" /> + `, + javascript: ` +import React, { useState } from 'react'; +import { AutoComplete } from "primereact/autocomplete"; + +export default function GroupDemo() { + const [selectedCity, setSelectedCity] = useState(null); + const [filteredCities, setFilteredCities] = useState(null); + const groupedCities = [ + { + label: 'Germany', + code: 'DE', + items: [ + { label: 'Berlin', value: 'Berlin' }, + { label: 'Frankfurt', value: 'Frankfurt' }, + { label: 'Hamburg', value: 'Hamburg' }, + { label: 'Munich', value: 'Munich' } + ] + }, + { + label: 'USA', + code: 'US', + items: [ + { label: 'Chicago', value: 'Chicago' }, + { label: 'Los Angeles', value: 'Los Angeles' }, + { label: 'New York', value: 'New York' }, + { label: 'San Francisco', value: 'San Francisco' } + ] + }, + { + label: 'Japan', + code: 'JP', + items: [ + { label: 'Kyoto', value: 'Kyoto' }, + { label: 'Osaka', value: 'Osaka' }, + { label: 'Tokyo', value: 'Tokyo' }, + { label: 'Yokohama', value: 'Yokohama' } + ] + } + ]; + + const groupedItemTemplate = (item) => { + return ( +
+ {item.label} +
{item.label}
+
+ ); + }; + + const search = (event) => { + let query = event.query; + let _filteredCities = []; + + for (let country of groupedCities) { + let filteredItems = country.items.filter((item) => item.label.toLowerCase().indexOf(query.toLowerCase()) !== -1); + + if (filteredItems && filteredItems.length) { + _filteredCities.push({ ...country, ...{ items: filteredItems } }); + } + } + + setFilteredCities(_filteredCities); + } + + return ( +
+ setSelectedCity(e.value)} suggestions={filteredCities} completeMethod={search} + field="label" optionGroupLabel="label" optionGroupChildren="items" optionGroupTemplate={groupedItemTemplate} placeholder="Hint: type 'a'" /> +
+ ) +} + `, + typescript: ` +import React, { useState } from "react"; +import { + AutoComplete, + AutoCompleteChangeEvent, + AutoCompleteCompleteEvent, +} from "primereact/autocomplete"; + +interface City { + label: string; + value: string; +} + +interface Country { + label: string; + code: string; + items: City[]; +} + +export default function GroupDemo() { + const [selectedCity, setSelectedCity] = useState(); + const [filteredCities, setFilteredCities] = useState(); + const groupedCities: Array = [ + { + label: "Germany", + code: "DE", + items: [ + { label: "Berlin", value: "Berlin" }, + { label: "Frankfurt", value: "Frankfurt" }, + { label: "Hamburg", value: "Hamburg" }, + { label: "Munich", value: "Munich" }, + ], + }, + { + label: "USA", + code: "US", + items: [ + { label: "Chicago", value: "Chicago" }, + { label: "Los Angeles", value: "Los Angeles" }, + { label: "New York", value: "New York" }, + { label: "San Francisco", value: "San Francisco" }, + ], + }, + { + label: "Japan", + code: "JP", + items: [ + { label: "Kyoto", value: "Kyoto" }, + { label: "Osaka", value: "Osaka" }, + { label: "Tokyo", value: "Tokyo" }, + { label: "Yokohama", value: "Yokohama" }, + ], + }, + ]; + + const groupedItemTemplate = (item: Country) => { + return ( +
+ {item.label} +
{item.label}
+
+ ); + }; + + const search = (event: AutoCompleteCompleteEvent) => { + let query = event.query; + let _filteredCities = []; + + for (let country of groupedCities) { + let filteredItems = country.items.filter( + (item) => item.label.toLowerCase().indexOf(query.toLowerCase()) !== -1 + ); + + if (filteredItems && filteredItems.length) { + _filteredCities.push({ ...country, ...{ items: filteredItems } }); + } + } + + setFilteredCities(_filteredCities); + }; + + return ( +
+ setSelectedCity(e.value)} + suggestions={filteredCities} + completeMethod={search} + field="label" + optionGroupLabel="label" + optionGroupChildren="items" + optionGroupTemplate={groupedItemTemplate} + placeholder="Hint: type 'a'" + /> +
+ ); +} +` + }; + + return ( + <> + +

+ Option groups are specified with the optionGroupLabel and optionGroupChildren properties. +

+
+
+ setSelectedCity(e.value)} + suggestions={filteredCities} + completeMethod={search} + field="label" + optionGroupLabel="label" + optionGroupChildren="items" + optionGroupTemplate={groupedItemTemplate} + placeholder="Hint: type 'a'" + /> +
+ + + ); +} diff --git a/components/doc/autocomplete/importdoc.js b/components/doc/autocomplete/importdoc.js new file mode 100644 index 0000000000..d10a63222a --- /dev/null +++ b/components/doc/autocomplete/importdoc.js @@ -0,0 +1,17 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; + +export function ImportDoc(props) { + const code = { + basic: ` +import { AutoComplete } from 'primereact/autocomplete'; + ` + }; + + return ( + <> + + + + ); +} diff --git a/components/doc/autocomplete/invaliddoc.js b/components/doc/autocomplete/invaliddoc.js new file mode 100644 index 0000000000..c374c7828c --- /dev/null +++ b/components/doc/autocomplete/invaliddoc.js @@ -0,0 +1,71 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { AutoComplete } from '@/components/lib/autocomplete/AutoComplete'; +import { useState } from 'react'; + +export function InvalidDoc(props) { + const [value, setValue] = useState(''); + const [items, setItems] = useState([]); + + const search = (event) => { + setItems([...Array(10).keys()].map((item) => event.query + '-' + item)); + }; + + const code = { + basic: ` + setValue(e.value)} /> + `, + javascript: ` +import React, { useState } from "react"; +import { AutoComplete } from "primereact/autocomplete"; + +export default function InvalidDemo() { + const [value, setValue] = useState(''); + const [items, setItems] = useState([]); + + const search = (event) => { + setItems([...Array(10).keys()].map(item => event.query + '-' + item)); + } + + return ( +
+ setValue(e.value)} /> +
+ ) +} + `, + typescript: ` +import React, { useState } from "react"; +import { AutoComplete, AutoCompleteCompleteEvent } from "primereact/autocomplete"; + +export default function InvalidDemo() { + const [value, setValue] = useState(''); + const [items, setItems] = useState([]); + + const search = (event: AutoCompleteCompleteEvent) => { + setItems([...Array(10).keys()].map(item => event.query + '-' + item)); + } + + return ( +
+ setValue(e.value)} /> +
+ ) +} + ` + }; + + return ( + <> + +

+ Invalid state is displayed using the invalid prop to indicate a failed validation. You can use this style when integrating with form validation libraries. +

+
+
+ setValue(e.value)} /> +
+ + + ); +} diff --git a/components/doc/autocomplete/multipledoc.js b/components/doc/autocomplete/multipledoc.js new file mode 100644 index 0000000000..671e93e94c --- /dev/null +++ b/components/doc/autocomplete/multipledoc.js @@ -0,0 +1,145 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { AutoComplete } from '@/components/lib/autocomplete/AutoComplete'; +import { useEffect, useState } from 'react'; +import { CountryService } from '../../../service/CountryService'; + +export function MultipleDoc(props) { + const [countries, setCountries] = useState([]); + const [selectedCountries, setSelectedCountries] = useState(null); + const [filteredCountries, setFilteredCountries] = useState(null); + + const search = (event) => { + // Timeout to emulate a network connection + setTimeout(() => { + let _filteredCountries; + + if (!event.query.trim().length) { + _filteredCountries = [...countries]; + } else { + _filteredCountries = countries.filter((country) => { + return country.name.toLowerCase().startsWith(event.query.toLowerCase()); + }); + } + + setFilteredCountries(_filteredCountries); + }, 250); + }; + + useEffect(() => { + CountryService.getCountries().then((data) => setCountries(data)); + }, []); // eslint-disable-line react-hooks/exhaustive-deps + + const code = { + basic: ` + setSelectedCountries(e.value)} /> + `, + javascript: ` +import React, { useEffect, useState } from 'react'; +import { AutoComplete } from "primereact/autocomplete"; +import { CountryService } from "./service/CountryService"; + +export default function MultipleDemo() { + const [countries, setCountries] = useState([]); + const [selectedCountries, setSelectedCountries] = useState(null); + const [filteredCountries, setFilteredCountries] = useState(null); + + const search = (event) => { + // Timeout to emulate a network connection + setTimeout(() => { + let _filteredCountries; + + if (!event.query.trim().length) { + _filteredCountries = [...countries]; + } + else { + _filteredCountries = countries.filter((country) => { + return country.name.toLowerCase().startsWith(event.query.toLowerCase()); + }); + } + + setFilteredCountries(_filteredCountries); + }, 250); + } + + useEffect(() => { + CountryService.getCountries().then((data) => setCountries(data)); + }, []); + + return ( +
+ setSelectedCountries(e.value)} /> +
+ ) +} + `, + typescript: ` +import React, { useEffect, useState } from 'react'; +import { AutoComplete, AutoCompleteCompleteEvent } from "primereact/autocomplete"; +import { CountryService } from "./service/CountryService"; + +interface Country { + name: string; + code: string; +} + +export default function MultipleDemo() { + const [countries, setCountries] = useState([]); + const [selectedCountries, setSelectedCountries] = useState(null); + const [filteredCountries, setFilteredCountries] = useState(null); + + const search = (event: AutoCompleteCompleteEvent) => { + // Timeout to emulate a network connection + setTimeout(() => { + let _filteredCountries; + + if (!event.query.trim().length) { + _filteredCountries = [...countries]; + } + else { + _filteredCountries = countries.filter((country) => { + return country.name.toLowerCase().startsWith(event.query.toLowerCase()); + }); + } + + setFilteredCountries(_filteredCountries); + }, 250); + } + + useEffect(() => { + CountryService.getCountries().then((data) => setCountries(data)); + }, []); + + return ( +
+ setSelectedCountries(e.value)} /> +
+ ) +} + `, + data: ` + { + "data": [ + {"name": "United Kingdom", "code": "UK"}, + {"name": "United States", "code": "USA"}, + ... + ] + } + ` + }; + + return ( + <> + +

+ Multiple mode is enabled using multiple property used to select more than one value from the autocomplete. In this case, value reference should be an array. The number of values selectable can be restricted using the{' '} + selectionLimit property. +

+
+
+ setSelectedCountries(e.value)} /> +
+ + + ); +} diff --git a/components/doc/autocomplete/objectsdoc.js b/components/doc/autocomplete/objectsdoc.js new file mode 100644 index 0000000000..4cddc54272 --- /dev/null +++ b/components/doc/autocomplete/objectsdoc.js @@ -0,0 +1,142 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { AutoComplete } from '@/components/lib/autocomplete/AutoComplete'; +import { useEffect, useState } from 'react'; +import { CountryService } from '../../../service/CountryService'; + +export function ObjectsDoc(props) { + const [countries, setCountries] = useState([]); + const [selectedCountry, setSelectedCountry] = useState(null); + const [filteredCountries, setFilteredCountries] = useState(null); + + const search = (event) => { + // Timeout to emulate a network connection + setTimeout(() => { + let _filteredCountries; + + if (!event.query.trim().length) { + _filteredCountries = [...countries]; + } else { + _filteredCountries = countries.filter((country) => { + return country.name.toLowerCase().startsWith(event.query.toLowerCase()); + }); + } + + setFilteredCountries(_filteredCountries); + }, 250); + }; + + useEffect(() => { + CountryService.getCountries().then((data) => setCountries(data)); + }, []); // eslint-disable-line react-hooks/exhaustive-deps + + const code = { + basic: ` + setSelectedCountry(e.value)} /> + `, + javascript: ` +import React, { useEffect, useState } from 'react'; +import { AutoComplete } from "primereact/autocomplete"; +import { CountryService } from './service/CountryService'; + +export default function ObjectDemo() { + const [countries, setCountries] = useState([]); + const [selectedCountry, setSelectedCountry] = useState(null); + const [filteredCountries, setFilteredCountries] = useState(null); + + const search = (event) => { + // Timeout to emulate a network connection + setTimeout(() => { + let _filteredCountries; + + if (!event.query.trim().length) { + _filteredCountries = [...countries]; + } + else { + _filteredCountries = countries.filter((country) => { + return country.name.toLowerCase().startsWith(event.query.toLowerCase()); + }); + } + + setFilteredCountries(_filteredCountries); + }, 250); + } + + useEffect(() => { + CountryService.getCountries().then((data) => setCountries(data)); + }, []); + + return ( +
+ setSelectedCountry(e.value)} /> +
+ ) +} + `, + typescript: ` +import React, { useEffect, useState } from 'react'; +import { AutoComplete, AutoCompleteCompleteEvent } from "primereact/autocomplete"; +import { CountryService } from './service/CountryService'; + +interface Country { + name: string; + code: string; +} + +export default function ObjectDemo() { + const [countries, setCountries] = useState([]); + const [selectedCountry, setSelectedCountry] = useState(null); + const [filteredCountries, setFilteredCountries] = useState(null); + + const search = (event: AutoCompleteCompleteEvent) => { + // Timeout to emulate a network connection + setTimeout(() => { + let _filteredCountries; + + if (!event.query.trim().length) { + _filteredCountries = [...countries]; + } + else { + _filteredCountries = countries.filter((country) => { + return country.name.toLowerCase().startsWith(event.query.toLowerCase()); + }); + } + + setFilteredCountries(_filteredCountries); + }, 250); + } + + useEffect(() => { + CountryService.getCountries().then((data) => setCountries(data)); + }, []); + + return ( +
+ setSelectedCountry(e.value)} /> +
+ ) +} + `, + data: ` + /* CountryService */ +{"name": "United Kingdom", "code": "UK"}, +{"name": "United States", "code": "USA"}, +... + ` + }; + + return ( + <> + +

+ AutoComplete can work with objects using the field property that defines the label to display as a suggestion. The value passed to the model would still be the object instance of a suggestion. Here is an example with a + Country object that has name and code fields such as {name: "United States", code:"USA"}. +

+
+
+ setSelectedCountry(e.value)} /> +
+ + + ); +} diff --git a/components/doc/autocomplete/pt/wireframe.js b/components/doc/autocomplete/pt/wireframe.js new file mode 100644 index 0000000000..1b4a953ab7 --- /dev/null +++ b/components/doc/autocomplete/pt/wireframe.js @@ -0,0 +1,12 @@ +import { DocSectionText } from '@/components/doc/common/docsectiontext'; + +export const Wireframe = (props) => { + return ( + <> + +
+ autocomplete +
+ + ); +}; diff --git a/components/doc/autocomplete/styledoc.js b/components/doc/autocomplete/styledoc.js new file mode 100644 index 0000000000..ba55597d4e --- /dev/null +++ b/components/doc/autocomplete/styledoc.js @@ -0,0 +1,54 @@ +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import Link from 'next/link'; + +export function StyleDoc() { + return ( + <> + +

+ Following is the list of structural style classes, for theming classes visit theming page. +

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameElement
p-autocompleteContainer element
p-autocomplete-panelOverlay panel of suggestions.
p-autocomplete-itemsList container of suggestions.
p-autocomplete-itemList item of a suggestion.
p-autocomplete-tokenElement of a selected item in multiple mode.
p-autocomplete-token-iconClose icon element of a selected item in multiple mode.
p-autocomplete-token-labelLabel of a selected item in multiple mode.
+
+ + ); +} diff --git a/components/doc/autocomplete/templatedoc.js b/components/doc/autocomplete/templatedoc.js new file mode 100644 index 0000000000..dccb8307e0 --- /dev/null +++ b/components/doc/autocomplete/templatedoc.js @@ -0,0 +1,250 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { AutoComplete } from '@/components/lib/autocomplete/AutoComplete'; +import { useEffect, useState } from 'react'; +import { CountryService } from '../../../service/CountryService'; + +export function TemplateDoc(props) { + const [countries, setCountries] = useState([]); + const [selectedCountry, setSelectedCountry] = useState(null); + const [filteredCountries, setFilteredCountries] = useState(null); + + const search = (event) => { + // Timeout to emulate a network connection + setTimeout(() => { + let _filteredCountries; + + if (!event.query.trim().length) { + _filteredCountries = [...countries]; + } else { + _filteredCountries = countries.filter((country) => { + return country.name.toLowerCase().startsWith(event.query.toLowerCase()); + }); + } + + setFilteredCountries(_filteredCountries); + }, 250); + }; + + const itemTemplate = (item) => { + return ( +
+ {item.name} +
{item.name}
+
+ ); + }; + + const selectedItemTemplate = (item) => { + return `${item.name} (${item.code.toUpperCase()})`; + }; + + const panelFooterTemplate = () => { + const isCountrySelected = (filteredCountries || []).some((country) => country.name === selectedCountry); + + return ( +
+ {isCountrySelected ? ( + + {selectedCountry} selected. + + ) : ( + 'No country selected.' + )} +
+ ); + }; + + useEffect(() => { + CountryService.getCountries().then((data) => setCountries(data)); + }, []); // eslint-disable-line react-hooks/exhaustive-deps + + const code = { + basic: ` + setSelectedCountry(e.value)} itemTemplate={itemTemplate} panelFooterTemplate={panelFooterTemplate} selectedItemTemplate={selectedItemTemplate} /> + `, + javascript: ` +import React, { useEffect, useState } from 'react'; +import { AutoComplete } from "primereact/autocomplete"; +import { CountryService } from './service/CountryService'; + +export default function TemplateDemo() { + const [countries, setCountries] = useState([]); + const [selectedCountry, setSelectedCountry] = useState(null); + const [filteredCountries, setFilteredCountries] = useState(null); + + const panelFooterTemplate = () => { + const isCountrySelected = (filteredCountries || []).some( country => country['name'] === selectedCountry ); + return ( +
+ {isCountrySelected ? ( + + {selectedCountry} selected. + + ) : ( + 'No country selected.' + )} +
+ ); + }; + + const search = (event) => { + // Timeout to emulate a network connection + setTimeout(() => { + let _filteredCountries; + + if (!event.query.trim().length) { + _filteredCountries = [...countries]; + } + else { + _filteredCountries = countries.filter((country) => { + return country.name.toLowerCase().startsWith(event.query.toLowerCase()); + }); + } + + setFilteredCountries(_filteredCountries); + }, 250); + } + + const itemTemplate = (item) => { + return ( +
+ {item.name} +
{item.name}
+
+ ); + }; + + const selectedItemTemplate = (item) => { + return item.name + ' (' + item.code.toUpperCase() + ')'; + }; + + useEffect(() => { + CountryService.getCountries().then((data) => setCountries(data)); + }, []); + + return ( +
+ setSelectedCountry(e.value)} itemTemplate={itemTemplate} panelFooterTemplate={panelFooterTemplate} selectedItemTemplate={selectedItemTemplate} /> +
+ ) +} + `, + typescript: ` +import React, { useEffect, useState } from 'react'; +import { AutoComplete, AutoCompleteCompleteEvent } from "primereact/autocomplete"; +import { CountryService } from './service/CountryService'; + +interface Country { + name: string; + code: string; +} + +export default function TemplateDemo() { + const [countries, setCountries] = useState([]); + const [selectedCountry, setSelectedCountry] = useState(null); + const [filteredCountries, setFilteredCountries] = useState(null); + + const search = (event: AutoCompleteCompleteEvent) => { + // Timeout to emulate a network connection + setTimeout(() => { + let _filteredCountries; + + if (!event.query.trim().length) { + _filteredCountries = [...countries]; + } + else { + _filteredCountries = countries.filter((country) => { + return country.name.toLowerCase().startsWith(event.query.toLowerCase()); + }); + } + + setFilteredCountries(_filteredCountries); + }, 250); + } + + const itemTemplate = (item: Country) => { + return ( +
+ {item.name} +
{item.name}
+
+ ); + }; + + const selectedItemTemplate = (item: Country) => { + return item.name + ' (' + item.code.toUpperCase() + ')'; + }; + + const panelFooterTemplate = () => { + const isCountrySelected = (filteredCountries || []).some( country => country['name'] === selectedCountry ); + return ( +
+ {isCountrySelected ? ( + + {selectedCountry} selected. + + ) : ( + 'No country selected.' + )} +
+ ); + }; + + useEffect(() => { + CountryService.getCountries().then((data) => setCountries(data)); + }, []); + + return ( +
+ setSelectedCountry(e.value)} itemTemplate={itemTemplate} panelFooterTemplate={panelFooterTemplate} selectedItemTemplate={selectedItemTemplate} /> +
+ ) +} + `, + data: ` + /* CountryService */ + +{"name": "United Kingdom", "code": "UK"}, +{"name": "United States", "code": "USA"}, +... + ` + }; + + return ( + <> + +

+ Custom content can be displayed as an option using itemTemplate property that references a function with a suggestion option as a parameter and returns an element. Similarly selectedItemTemplate property is available + to customize the chips in multiple mode and the text in single mode using the same approach. +

+
+
+ setSelectedCountry(e.value)} + itemTemplate={itemTemplate} + panelFooterTemplate={panelFooterTemplate} + selectedItemTemplate={selectedItemTemplate} + /> +
+ + + ); +} diff --git a/components/doc/autocomplete/theming/styleddoc.js b/components/doc/autocomplete/theming/styleddoc.js new file mode 100644 index 0000000000..a6a3a1f998 --- /dev/null +++ b/components/doc/autocomplete/theming/styleddoc.js @@ -0,0 +1,51 @@ +import { DocSectionText } from '@/components/doc/common/docsectiontext'; + +export function StyledDoc(props) { + return ( + <> + +

List of class names used in the styled mode.

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameElement
p-autocompleteContainer element
p-autocomplete-panelOverlay panel of suggestions.
p-autocomplete-itemsList container of suggestions.
p-autocomplete-itemList item of a suggestion.
p-autocomplete-tokenElement of a selected item in multiple mode.
p-autocomplete-token-iconClose icon element of a selected item in multiple mode.
p-autocomplete-token-labelLabel of a selected item in multiple mode.
+
+ + ); +} diff --git a/components/doc/autocomplete/theming/tailwinddoc.js b/components/doc/autocomplete/theming/tailwinddoc.js new file mode 100644 index 0000000000..9783e7648d --- /dev/null +++ b/components/doc/autocomplete/theming/tailwinddoc.js @@ -0,0 +1,118 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import Link from 'next/link'; + +export function TailwindDoc(props) { + const code = { + basic: ` +const TRANSITIONS = { + overlay: { + timeout: 150, + classNames: { + enter: 'opacity-0 scale-75', + enterActive: 'opacity-100 !scale-100 transition-transform transition-opacity duration-150 ease-in', + exit: 'opacity-100', + exitActive: '!opacity-0 transition-opacity duration-150 ease-linear' + } + } +}; + +const Tailwind = { + autocomplete: { + root: ({ props }) => ({ + className: classNames( + 'relative inline-flex', + { + 'opacity-60 select-none pointer-events-none cursor-default': props.disabled + }, + { 'w-full': props.multiple } + ) + }), + container: { + className: classNames( + 'm-0 list-none cursor-text overflow-hidden flex items-center flex-wrap w-full', + 'px-3 py-2 gap-2', + 'font-sans text-base text-gray-700 dark:text-white/80 bg-white dark:bg-gray-900 border border-gray-300 dark:border-blue-900/40 transition duration-200 ease-in-out appearance-none rounded-md', + 'focus:outline-offset-0 focus:shadow-[0_0_0_0.2rem_rgba(191,219,254,1)] hover:border-blue-500 focus:outline-none dark:focus:shadow-[0_0_0_0.2rem_rgba(147,197,253,0.5)]' + ) + }, + inputToken: { + className: classNames('py-0.375rem px-0', 'flex-1 inline-flex') + }, + input: ({ props }) => ({ + root: { + className: classNames( + 'm-0', + 'transition-colors duration-200 appearance-none rounded-lg', + { 'rounded-tr-none rounded-br-none': props.dropdown }, + { + 'font-sans text-base text-gray-700 dark:text-white/80 bg-white dark:bg-gray-900 p-3 border border-gray-300 dark:border-blue-900/40 focus:outline-offset-0 focus:shadow-[0_0_0_0.2rem_rgba(191,219,254,1)] dark:focus:shadow-[0_0_0_0.2rem_rgba(147,197,253,0.5)] hover:border-blue-500 focus:outline-none': + !props.multiple, + 'font-sans text-base text-gray-700 dark:text-white/80 border-0 outline-none bg-transparent m-0 p-0 shadow-none rounded-none w-full': props.multiple + } + ) + } + }), + token: { + className: classNames('py-1 px-2 mr-2 bg-gray-300 dark:bg-gray-700 text-gray-700 dark:text-white/80 rounded-full', 'cursor-default inline-flex items-center') + }, + dropdownButton: { + root: 'rounded-tl-none rounded-bl-none' + }, + panel: { + className: classNames('bg-white text-gray-700 border-0 rounded-md shadow-lg', 'max-h-[200px] overflow-auto', 'dark:bg-gray-900 dark:text-white/80') + }, + list: 'py-3 list-none m-0', + item: ({ context }) => ({ + className: classNames('cursor-pointer font-normal overflow-hidden relative whitespace-nowrap', 'm-0 p-3 border-0 transition-shadow duration-200 rounded-none', { + 'text-gray-700 hover:text-gray-700 hover:bg-gray-200 dark:text-white/80 dark:hover:bg-gray-800': !context.selected, + 'bg-gray-300 text-gray-700 dark:text-white/80 dark:bg-gray-800/90 hover:text-gray-700 hover:bg-gray-200 dark:text-white/80 dark:hover:bg-gray-800': context.focused && !context.selected, + 'bg-blue-100 text-blue-700 dark:bg-blue-400 dark:text-white/80': context.selected, + 'bg-blue-50 text-blue-700 dark:bg-blue-300 dark:text-white/80': context.selected + }) + }), + itemGroup: { + className: classNames('m-0 p-3 text-gray-800 bg-white font-bold', 'dark:bg-gray-900 dark:text-white/80', 'cursor-auto') + }, + transition: TRANSITIONS.overlay + } +} + ` + }; + + const code2 = { + javascript: ` +import React, { useState } from "react"; +import { AutoComplete } from "primereact/autocomplete"; + +export default function UnstyledDemo() { + const [value, setValue] = useState(''); + const [items, setItems] = useState([]); + + const search = (event) => { + setItems([...Array(10).keys()].map(item => event.query + '-' + item)); + } + + return ( +
+ setValue(e.value)} /> +
+ ) +} + ` + }; + + return ( + <> + +

+ PrimeReact offers a built-in Tailwind theme to get you started quickly. The default values related to the component are displayed below. The component can easily be styled with your own design based on Tailwind utilities, see the{' '} + Tailwind Customization section for an example. +

+ +

A playground sample with the pre-built Tailwind theme.

+ +
+ + ); +} diff --git a/components/doc/autocomplete/virtualscrolldoc.js b/components/doc/autocomplete/virtualscrolldoc.js new file mode 100644 index 0000000000..823b2cd866 --- /dev/null +++ b/components/doc/autocomplete/virtualscrolldoc.js @@ -0,0 +1,114 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { AutoComplete } from '@/components/lib/autocomplete/AutoComplete'; +import Link from 'next/link'; +import { useState } from 'react'; + +export function VirtualScrollDoc(props) { + const [selectedItem, setSelectedItem] = useState(null); + const [filteredItems, setFilteredItems] = useState(null); + const items = Array.from({ length: 100000 }).map((_, i) => ({ label: `Item #${i}`, value: i })); + + const searchItems = (event) => { + //in a real application, make a request to a remote url with the query and return filtered results, for demo purposes we filter at client side + let query = event.query; + let _filteredItems = []; + + for (let i = 0; i < items.length; i++) { + let item = items[i]; + + if (item.label.toLowerCase().indexOf(query.toLowerCase()) === 0) { + _filteredItems.push(item); + } + } + + setFilteredItems(_filteredItems); + }; + + const code = { + basic: ` + setSelectedItem(e.value)} /> + `, + javascript: ` +import React, { useState } from "react"; +import { AutoComplete } from "primereact/autocomplete"; + +export default function VirtualScrollerDemo() { + const [selectedItem, setSelectedItem] = useState(null); + const [filteredItems, setFilteredItems] = useState(null); + const items = Array.from({ length: 100000 }).map((_, i) => ({ label: \`Item #\${i}\`, value: i })); + + const searchItems = (event) => { + //in a real application, make a request to a remote url with the query and return filtered results, for demo purposes we filter at client side + let query = event.query; + let _filteredItems = []; + + for(let i = 0; i < items.length; i++) { + let item = items[i]; + if (item.label.toLowerCase().indexOf(query.toLowerCase()) === 0) { + _filteredItems.push(item); + } + } + + setFilteredItems(_filteredItems); + } + + return ( + setSelectedItem(e.value)} /> + ) +} + `, + typescript: ` +import React, { useState } from "react"; +import { AutoComplete, AutoCompleteCompleteEvent } from "primereact/autocomplete"; + +interface Item { + label: string; + value: number; +} + +export default function VirtualScrollerDemo() { + const [selectedItem, setSelectedItem] = useState(null); + const [filteredItems, setFilteredItems] = useState(null); + const items = Array.from({ length: 100000 }).map((_, i) => ({ label: \`Item #\${i}\`, value: i })); + + const searchItems = (event: AutoCompleteCompleteEvent) => { + //in a real application, make a request to a remote url with the query and return filtered results, for demo purposes we filter at client side + let query = event.query; + let _filteredItems = []; + + for(let i = 0; i < items.length; i++) { + let item = items[i]; + if (item.label.toLowerCase().indexOf(query.toLowerCase()) === 0) { + _filteredItems.push(item); + } + } + + setFilteredItems(_filteredItems); + } + + return ( + setSelectedItem(e.value)} /> + ) +} + ` + }; + + return ( + <> + +

+ Virtual Scrolling is a performant way to render large lists. Configuration of the scroll behavior is defined with virtualScrollerOptions + that requires itemSize as the mandatory value to set the height of an item. Visit VirtualScroller documentation for more information about the configuration API. +

+
+
+ setSelectedItem(e.value)} /> +
+ + + ); +} diff --git a/components/doc/avatar/accessibilitydoc.js b/components/doc/avatar/accessibilitydoc.js new file mode 100644 index 0000000000..9bbb016751 --- /dev/null +++ b/components/doc/avatar/accessibilitydoc.js @@ -0,0 +1,17 @@ +import { DevelopmentSection } from '@/components/doc/common/developmentsection'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; + +export function AccessibilityDoc() { + return ( + +

Screen Reader

+

+ Avatar does not include any roles and attributes by default. Any attribute is passed to the root element so you may add a role like img along with aria-labelledby or aria-label to describe the component. In case + avatars need to be tabbable, tabIndex can be added as well to implement custom key handlers. +

+ +

Keyboard Support

+

Component does not include any interactive elements.

+
+ ); +} diff --git a/components/doc/avatar/groupdoc.js b/components/doc/avatar/groupdoc.js new file mode 100644 index 0000000000..860941d3e4 --- /dev/null +++ b/components/doc/avatar/groupdoc.js @@ -0,0 +1,83 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { Avatar } from '@/components/lib/avatar/Avatar'; +import { AvatarGroup } from '@/components/lib/avatargroup/AvatarGroup'; + +export function GroupDoc(props) { + const code = { + basic: ` + + + + + + + + + + `, + javascript: ` +import React from 'react'; +import { Avatar } from 'primereact/avatar'; +import { AvatarGroup } from 'primereact/avatargroup'; +import { Badge } from 'primereact/badge'; + +export default function GroupDemo() { + + return ( +
+ + + + + + + + +
+ ) +} + `, + typescript: ` +import React from 'react'; +import { Avatar } from 'primereact/avatar'; +import { AvatarGroup } from 'primereact/avatargroup'; +import { Badge } from 'primereact/badge'; + +export default function GroupDemo() { + + return ( +
+ + + + + + + + +
+ ) +} + ` + }; + + return ( + <> + +

Grouping is available by wrapping multiple Avatar components inside an AvatarGroup.

+
+
+ + + + + + + + +
+ + + ); +} diff --git a/components/doc/avatar/icondoc.js b/components/doc/avatar/icondoc.js new file mode 100644 index 0000000000..d9b6a1509e --- /dev/null +++ b/components/doc/avatar/icondoc.js @@ -0,0 +1,125 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { Avatar } from '@/components/lib/avatar/Avatar'; +import { Badge } from '@/components/lib/badge/Badge'; + +export function IconDoc(props) { + const code = { + basic: ` + + + + + + + + + + + + `, + javascript: ` +import React from 'react'; +import { Avatar } from 'primereact/avatar'; +import { Badge } from 'primereact/badge'; + +export default function IconDemo() { + return ( +
+
+
+
Icon
+ + + +
+ +
+
Circle
+ + + +
+ +
+
Badge
+ + + +
+
+
+ ) +} + `, + typescript: ` +import React from 'react'; +import { Avatar } from 'primereact/avatar'; +import { Badge } from 'primereact/badge'; + +export default function IconDemo() { + return ( +
+
+
+
Icon
+ + + +
+ +
+
Circle
+ + + +
+ +
+
Badge
+ + + +
+
+
+ ) +} + ` + }; + + return ( + <> + +

+ A font icon is displayed as an Avatar with the icon property. +

+
+
+
+
+
Icon
+ + + +
+ +
+
Circle
+ + + +
+ +
+
Badge
+ + + +
+
+
+ + + ); +} diff --git a/components/doc/avatar/imagedoc.js b/components/doc/avatar/imagedoc.js new file mode 100644 index 0000000000..0ebea6d2a6 --- /dev/null +++ b/components/doc/avatar/imagedoc.js @@ -0,0 +1,117 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { Avatar } from '@/components/lib/avatar/Avatar'; +import { Badge } from '@/components/lib/badge/Badge'; + +export function ImageDoc(props) { + const code = { + basic: ` + + + + + + + + + + `, + javascript: ` +import React from 'react'; +import { Avatar } from 'primereact/avatar'; +import { Badge } from 'primereact/badge'; + +export default function ImageDemo() { + return ( +
+
+
+
Image
+ + + +
+ +
+
Badge
+ + + +
+ +
+
Gravatar
+ +
+
+
+ ) +} + `, + typescript: ` +import React from 'react'; +import { Avatar } from 'primereact/avatar'; +import { Badge } from 'primereact/badge'; + +export default function ImageDemo() { + return ( +
+
+
+
Image
+ + + +
+ +
+
Badge
+ + + +
+ +
+
Gravatar
+ +
+
+
+ ) +} + ` + }; + + return ( + <> + +

+ Use the image property to display an image as an Avatar. +

+
+
+
+
+
Image
+ + + +
+ +
+
Badge
+ + + +
+ +
+
Gravatar
+ +
+
+
+ + + ); +} diff --git a/components/doc/avatar/importdoc.js b/components/doc/avatar/importdoc.js new file mode 100644 index 0000000000..1dfec4cc32 --- /dev/null +++ b/components/doc/avatar/importdoc.js @@ -0,0 +1,18 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; + +export function ImportDoc(props) { + const code = { + basic: ` +import { Avatar } from 'primereact/avatar'; +import { AvatarGroup } from 'primereact/avatargroup'; //Optional for grouping + ` + }; + + return ( + <> + + + + ); +} diff --git a/components/doc/avatar/labeldoc.js b/components/doc/avatar/labeldoc.js new file mode 100644 index 0000000000..3ced00d542 --- /dev/null +++ b/components/doc/avatar/labeldoc.js @@ -0,0 +1,120 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { Avatar } from '@/components/lib/avatar/Avatar'; +import { Badge } from '@/components/lib/badge/Badge'; + +export function LabelDoc(props) { + const code = { + basic: ` + + + + + + + + + + + `, + javascript: ` +import React from 'react'; +import { Avatar } from 'primereact/avatar'; +import { Badge } from 'primereact/badge'; + +export default function LabelDemo() { + return ( +
+
+
Label
+ + + +
+ +
+
Circle
+ + + +
+ +
+
Badge
+ + + +
+
+ ) +} + `, + typescript: ` +import React from 'react'; +import { Avatar } from 'primereact/avatar'; +import { Badge } from 'primereact/badge'; + +export default function LabelDemo() { + return ( +
+
+
Label
+ + + +
+ +
+
Circle
+ + + +
+ +
+
Badge
+ + + +
+
+ ) +} + ` + }; + + return ( + <> + +

+ A letter Avatar is defined with the label property. +

+
+
+
+
+
Label
+ + + +
+ +
+
Circle
+ + + +
+ +
+
Badge
+ + + +
+
+
+ + + ); +} diff --git a/components/doc/avatar/pt/wireframe.js b/components/doc/avatar/pt/wireframe.js new file mode 100644 index 0000000000..8553999a8b --- /dev/null +++ b/components/doc/avatar/pt/wireframe.js @@ -0,0 +1,12 @@ +import { DocSectionText } from '@/components/doc/common/docsectiontext'; + +export const Wireframe = (props) => { + return ( + <> + +
+ avatar +
+ + ); +}; diff --git a/components/doc/avatar/styledoc.js b/components/doc/avatar/styledoc.js new file mode 100644 index 0000000000..0ccdb228ce --- /dev/null +++ b/components/doc/avatar/styledoc.js @@ -0,0 +1,58 @@ +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import Link from 'next/link'; + +export function StyleDoc() { + return ( + <> + +

+ Following is the list of structural style classes, for theming classes visit theming page. +

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameElement
p-avatarContainer element.
p-avatar-imageContainer element in image mode.
p-avatar-circleContainer element with a circle shape.
p-avatar-textText of the Avatar.
p-avatar-iconIcon of the Avatar.
p-avatar-lgContainer element with a large size.
p-avatar-xlContainer element with an xlarge size.
p-avatar-groupContainer element of the group element.
+
+ + ); +} diff --git a/components/doc/avatar/theming/styleddoc.js b/components/doc/avatar/theming/styleddoc.js new file mode 100644 index 0000000000..a1af46994b --- /dev/null +++ b/components/doc/avatar/theming/styleddoc.js @@ -0,0 +1,55 @@ +import { DocSectionText } from '@/components/doc/common/docsectiontext'; + +export function StyledDoc(props) { + return ( + <> + +

List of class names used in the styled mode.

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameElement
p-avatarContainer element.
p-avatar-imageContainer element in image mode.
p-avatar-circleContainer element with a circle shape.
p-avatar-textText of the Avatar.
p-avatar-iconIcon of the Avatar.
p-avatar-lgContainer element with a large size.
p-avatar-xlContainer element with an xlarge size.
p-avatar-groupContainer element of the group element.
+
+ + ); +} diff --git a/components/doc/avatar/theming/tailwinddoc.js b/components/doc/avatar/theming/tailwinddoc.js new file mode 100644 index 0000000000..b0a3d7d24b --- /dev/null +++ b/components/doc/avatar/theming/tailwinddoc.js @@ -0,0 +1,99 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import Link from 'next/link'; + +export function TailwindDoc(props) { + const code = { + basic: ` +const Tailwind = { + avatar: { + root: ({ props, state }) => ({ + className: classNames( + 'flex items-center justify-center', + 'bg-gray-300 dark:bg-gray-800', + { + 'rounded-lg': props.shape == 'square', + 'rounded-full': props.shape == 'circle' + }, + { + 'text-base h-8 w-8': props.size == null || props.size == 'normal', + 'w-12 h-12 text-xl': props.size == 'large', + 'w-16 h-16 text-2xl': props.size == 'xlarge' + }, + { + '-ml-4 border-2 border-white dark:border-gray-900': state.isNestedInAvatarGroup + } + ) + }), + image: 'h-full w-full' + }, + avatargroup: { + root: 'flex items-center' + } +} + ` + }; + + const code2 = { + javascript: ` +import React from 'react'; +import { Avatar } from 'primereact/avatar'; +import { AvatarGroup } from 'primereact/avatargroup'; +import { Badge } from 'primereact/badge'; + +export default function UnstyledDemo() { + return ( + <> +
+
+
+
Image
+ + + +
+ +
+
Badge
+ + + +
+ +
+
Gravatar
+ +
+
+
+ +
+ + + + + + + + +
+ + ) +} + ` + }; + + return ( + <> + +

+ PrimeReact offers a built-in Tailwind theme to get you started quickly. The default values related to the component are displayed below. The component can easily be styled with your own design based on Tailwind utilities, see the{' '} + Tailwind Customization section for an example. +

+ +

A playground sample with the pre-built Tailwind theme.

+ +
+ + ); +} diff --git a/components/doc/badge/accessibilitydoc.js b/components/doc/badge/accessibilitydoc.js new file mode 100644 index 0000000000..c0e5e759d3 --- /dev/null +++ b/components/doc/badge/accessibilitydoc.js @@ -0,0 +1,16 @@ +import { DocSectionText } from '@/components/doc/common/docsectiontext'; + +export function AccessibilityDoc() { + return ( + +

Screen Reader

+

+ Badge does not include any roles and attributes by default, any attribute is passed to the root element so aria roles and attributes can be added if required. If the badges are dynamic, + aria-live may be utilized as well. In case badges need to be tabbable, tabIndex can be added to implement custom key handlers. +

+ +

Keyboard Support

+

Component does not include any interactive elements.

+
+ ); +} diff --git a/components/doc/badge/basicdoc.js b/components/doc/badge/basicdoc.js new file mode 100644 index 0000000000..eaab7af004 --- /dev/null +++ b/components/doc/badge/basicdoc.js @@ -0,0 +1,49 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { Badge } from '@/components/lib/badge/Badge'; + +export function BasicDoc(props) { + const code = { + basic: ` + + `, + javascript: ` +import React from 'react'; +import { Badge } from 'primereact/badge'; + +export default function BasicDemo() { + return ( +
+ +
+ ); +} + `, + typescript: ` +import React from 'react'; +import { Badge } from 'primereact/badge'; + +export default function BasicDemo() { + return ( +
+ +
+ ); +} + ` + }; + + return ( + <> + +

+ Text to display is defined with the value property. +

+
+
+ +
+ + + ); +} diff --git a/components/doc/badge/buttondoc.js b/components/doc/badge/buttondoc.js new file mode 100644 index 0000000000..8bcadfc398 --- /dev/null +++ b/components/doc/badge/buttondoc.js @@ -0,0 +1,70 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { Badge } from '@/components/lib/badge/Badge'; +import { Button } from '@/components/lib/button/Button'; + +export function ButtonDoc(props) { + const code = { + basic: ` + + + `, + javascript: ` +import React from 'react'; +import { Button } from 'primereact/button'; +import { Badge } from 'primereact/badge'; + +export default function ButtonDemo() { + return ( +
+ + +
+ ); +} + `, + typescript: ` +import React from 'react'; +import { Button } from 'primereact/button'; +import { Badge } from 'primereact/badge'; + +export default function ButtonDemo() { + return ( +
+ + +
+ ); +} + ` + }; + + return ( + <> + +

Buttons have built-in support for badges to display a badge inline.

+
+
+ + +
+ + + ); +} diff --git a/components/doc/badge/importdoc.js b/components/doc/badge/importdoc.js new file mode 100644 index 0000000000..53b56ec03d --- /dev/null +++ b/components/doc/badge/importdoc.js @@ -0,0 +1,17 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; + +export function ImportDoc(props) { + const code = { + basic: ` +import { Badge } from 'primereact/badge'; + ` + }; + + return ( + <> + + + + ); +} diff --git a/components/doc/badge/positiondoc.js b/components/doc/badge/positiondoc.js new file mode 100644 index 0000000000..1b77a34dfd --- /dev/null +++ b/components/doc/badge/positiondoc.js @@ -0,0 +1,81 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { Badge } from '@/components/lib/badge/Badge'; + +export function PositionDoc(props) { + const code = { + basic: ` + + + + + + + + + + `, + javascript: ` +import React from 'react'; +import { Badge } from 'primereact/badge'; + +export default function PositionDemo() { + return ( +
+ + + + + + + + + +
+ ); +} + `, + typescript: ` +import React from 'react'; +import { Badge } from 'primereact/badge'; + +export default function PositionDemo() { + return ( +
+ + + + + + + + + +
+ ); +} + ` + }; + + return ( + <> + +

+ A Badge can be positioned at the top right corner of an element by adding p-overlay-badge style class to the element and embedding the badge inside. +

+
+
+ + + + + + + + + +
+ + + ); +} diff --git a/components/doc/badge/pt/wireframe.js b/components/doc/badge/pt/wireframe.js new file mode 100644 index 0000000000..da473ac88a --- /dev/null +++ b/components/doc/badge/pt/wireframe.js @@ -0,0 +1,12 @@ +import { DocSectionText } from '@/components/doc/common/docsectiontext'; + +export const Wireframe = (props) => { + return ( + <> + +
+ badge +
+ + ); +}; diff --git a/components/doc/badge/severitydoc.js b/components/doc/badge/severitydoc.js new file mode 100644 index 0000000000..989b4137d8 --- /dev/null +++ b/components/doc/badge/severitydoc.js @@ -0,0 +1,73 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { Badge } from '@/components/lib/badge/Badge'; + +export function SeverityDoc(props) { + const code = { + basic: ` + + + + + + + + `, + javascript: ` +import React from 'react'; +import { Badge } from 'primereact/badge'; + +export default function SeverityDemo() { + return ( +
+ + + + + + + +
+ ); +} + `, + typescript: ` +import React from 'react'; +import { Badge } from 'primereact/badge'; + +export default function SeverityDemo() { + return ( +
+ + + + + + + +
+ ); +} + ` + }; + + return ( + <> + +

+ Severity defines the color of the badge, possible values are success, info, warning and danger in addition to the default theme color. +

+
+
+ + + + + + + +
+ + + ); +} diff --git a/components/doc/badge/sizedoc.js b/components/doc/badge/sizedoc.js new file mode 100644 index 0000000000..ca52ec5659 --- /dev/null +++ b/components/doc/badge/sizedoc.js @@ -0,0 +1,57 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { Badge } from '@/components/lib/badge/Badge'; + +export function SizeDoc(props) { + const code = { + basic: ` + + + + `, + javascript: ` +import React from 'react'; +import { Badge } from 'primereact/badge'; + +export default function SizeDemo() { + return ( +
+ + + +
+ ); +} + `, + typescript: ` +import React from 'react'; +import { Badge } from 'primereact/badge'; + +export default function SizeDemo() { + return ( +
+ + + +
+ ); +} + ` + }; + + return ( + <> + +

+ Use the size property to customize the size of a Badge, currently large and xlarge are available as size options. +

+
+
+ + + +
+ + + ); +} diff --git a/components/doc/badge/styledoc.js b/components/doc/badge/styledoc.js new file mode 100644 index 0000000000..265b71d6c3 --- /dev/null +++ b/components/doc/badge/styledoc.js @@ -0,0 +1,62 @@ +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import Link from 'next/link'; + +export function StyleDoc() { + return ( + <> + +

+ Following is the list of structural style classes, for theming classes visit theming page. +

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameElement
p-badgeBadge element
p-overlay-badgeWrapper of a badge and its target.
p-badge-dotBadge element with no value.
p-badge-successBadge element with success severity.
p-badge-infoBadge element with info severity.
p-badge-warningBadge element with warning severity.
p-badge-dangerBadge element with danger severity.
p-badge-lgLarge badge element
p-badge-xlExtra large badge element
+
+ + ); +} diff --git a/components/doc/badge/theming/styleddoc.js b/components/doc/badge/theming/styleddoc.js new file mode 100644 index 0000000000..5f3f890350 --- /dev/null +++ b/components/doc/badge/theming/styleddoc.js @@ -0,0 +1,59 @@ +import { DocSectionText } from '@/components/doc/common/docsectiontext'; + +export function StyledDoc(props) { + return ( + <> + +

List of class names used in the styled mode.

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameElement
p-badgeBadge element
p-overlay-badgeWrapper of a badge and its target.
p-badge-dotBadge element with no value.
p-badge-successBadge element with success severity.
p-badge-infoBadge element with info severity.
p-badge-warningBadge element with warning severity.
p-badge-dangerBadge element with danger severity.
p-badge-lgLarge badge element
p-badge-xlExtra large badge element
+
+ + ); +} diff --git a/components/doc/badge/theming/tailwinddoc.js b/components/doc/badge/theming/tailwinddoc.js new file mode 100644 index 0000000000..ab8a4ddf32 --- /dev/null +++ b/components/doc/badge/theming/tailwinddoc.js @@ -0,0 +1,79 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import Link from 'next/link'; + +export function TailwindDoc(props) { + const code = { + basic: ` +const Tailwind = { + badge: { + root: ({ props }) => ({ + className: classNames( + 'rounded-full p-0 text-center inline-block', + 'bg-blue-500 text-white font-bold', + { + 'bg-gray-500 ': props.severity == 'secondary', + 'bg-green-500 ': props.severity == 'success', + 'bg-blue-500 ': props.severity == 'info', + 'bg-orange-500 ': props.severity == 'warning', + 'bg-purple-500 ': props.severity == 'help', + 'bg-red-500 ': props.severity == 'danger' + }, + { + 'text-xs min-w-[1.5rem] h-[1.5rem] leading-[1.5rem]': props.size == null, + 'text-lg min-w-[2.25rem] h-[2.25rem] leading-[2.25rem]': props.size == 'large', + 'text-2xl min-w-[3rem] h-[3rem] leading-[3rem]': props.size == 'xlarge' + } + ) + }) + } +} + ` + }; + + const code2 = { + javascript: ` +import React from 'react'; +import { Badge } from 'primereact/badge'; + +export default function UnstyledDemo() { + return ( +
+
+ + + + + +
+
+ + + + + + + + + +
+
+ ); +} + ` + }; + + return ( + <> + +

+ PrimeReact offers a built-in Tailwind theme to get you started quickly. The default values related to the component are displayed below. The component can easily be styled with your own design based on Tailwind utilities, see the{' '} + Tailwind Customization section for an example. +

+ +

A playground sample with the pre-built Tailwind theme.

+ +
+ + ); +} diff --git a/components/doc/blockui/accessibilitydoc.js b/components/doc/blockui/accessibilitydoc.js new file mode 100644 index 0000000000..d4fc4af696 --- /dev/null +++ b/components/doc/blockui/accessibilitydoc.js @@ -0,0 +1,17 @@ +import { DevelopmentSection } from '@/components/doc/common/developmentsection'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; + +export function AccessibilityDoc() { + return ( + +

Screen Reader

+

+ BlockUI manages aria-busy state attribute when the UI gets blocked and unblocked. Any valid attribute is passed to the root element so additional attributes like role and aria-live can be used to define live + regions. +

+ +

Keyboard Support

+

Component does not include any interactive elements.

+
+ ); +} diff --git a/components/doc/blockui/basicdoc.js b/components/doc/blockui/basicdoc.js new file mode 100644 index 0000000000..8825c1ae98 --- /dev/null +++ b/components/doc/blockui/basicdoc.js @@ -0,0 +1,110 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { Button } from '@/components/lib/button/Button'; +import { useState } from 'react'; +import { BlockUI } from '../../../components/lib/blockui/BlockUI'; +import { Panel } from '../../../components/lib/panel/Panel'; + +export function BasicDoc(props) { + const [blocked, setBlocked] = useState(false); + + const code = { + basic: ` +
+ + +
+ + +

+ 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. +

+
+
+ `, + javascript: ` +import React, { useState } from 'react'; +import { BlockUI } from 'primereact/blockui'; +import { Panel } from 'primereact/panel'; +import { Button } from 'primereact/button'; + +export default function BasicDemo() { + const [blocked, setBlocked] = useState(false); + + return ( +
+
+ + +
+ + +

+ 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. +

+
+
+
+ ); +} + `, + typescript: ` +import React, { useState } from 'react'; +import { BlockUI } from 'primereact/blockui'; +import { Panel } from 'primereact/panel'; +import { Button } from 'primereact/button'; + +export default function BasicDemo() { + const [blocked, setBlocked] = useState(false); + + return ( +
+
+ + +
+ + +

+ 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. +

+
+
+
+ ); +} + ` + }; + + return ( + <> + +

+ The element to block should be placed as a child of BlockUI and blocked property is required to control the state. +

+
+
+
+
+ + +

+ 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. +

+
+
+
+ + + ); +} diff --git a/components/doc/blockui/documentdoc.js b/components/doc/blockui/documentdoc.js new file mode 100644 index 0000000000..429b1e1275 --- /dev/null +++ b/components/doc/blockui/documentdoc.js @@ -0,0 +1,89 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import { useEffect, useState } from 'react'; +import { BlockUI } from '../../../components/lib/blockui/BlockUI'; +import { Button } from '../../../components/lib/button/Button'; + +export function DocumentDoc(props) { + const [blocked, setBlocked] = useState(false); + + useEffect(() => { + if (blocked) { + setTimeout(() => { + setBlocked(false); + }, 3000); + } + }, [blocked]); + + const code = { + basic: ` + +
+ + `, + javascript: ` +import React, { useState } from 'react'; +import { BlockUI } from 'primereact/blockui'; +import { Panel } from 'primereact/panel'; +import { Button } from 'primereact/button'; + +export default function TemplateDemo() { + const [blocked, setBlocked] = useState(false); + const buttonText = blocked ? 'Subscribe' : 'Unsubscribe'; + + return ( +
+ }> + +

+ 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. +

+
+ +
+

Continue reading?

+ +
+
+ ); +} + `, + typescript: ` +import React, { useState } from 'react'; +import { BlockUI } from 'primereact/blockui'; +import { Panel } from 'primereact/panel'; +import { Button } from 'primereact/button'; + +export default function TemplateDemo() { + const [blocked, setBlocked] = useState(false); + const buttonText = blocked ? 'Subscribe' : 'Unsubscribe'; + + return ( +
+ }> + +

+ 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. +

+
+
+
+

Continue reading?

+ +
+
+ ); +} + ` + }; + + return ( + <> + +

+ Custom content can be placed inside the modal layer using the template property. +

+
+
+ }> + +

+ 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. +

+
+
+
+

Continue reading?

+
+
+ + + ); +} diff --git a/components/doc/blockui/theming/styleddoc.js b/components/doc/blockui/theming/styleddoc.js new file mode 100644 index 0000000000..4bbbc9f794 --- /dev/null +++ b/components/doc/blockui/theming/styleddoc.js @@ -0,0 +1,31 @@ +import { DocSectionText } from '@/components/doc/common/docsectiontext'; + +export function StyledDoc(props) { + return ( + <> + +

List of class names used in the styled mode.

+
+
+ + + + + + + + + + + + + + + + + +
NameElement
p-blockuiMask element.
p-blockui-documentMask element in full screen mode.
+
+ + ); +} diff --git a/components/doc/blockui/theming/tailwinddoc.js b/components/doc/blockui/theming/tailwinddoc.js new file mode 100644 index 0000000000..b1a419c5b5 --- /dev/null +++ b/components/doc/blockui/theming/tailwinddoc.js @@ -0,0 +1,61 @@ +import { DocSectionCode } from '@/components/doc/common/docsectioncode'; +import { DocSectionText } from '@/components/doc/common/docsectiontext'; +import Link from 'next/link'; + +export function TailwindDoc(props) { + const code = { + basic: ` +const Tailwind = { + blockui: { + root: 'relative', + mask: 'bg-black/40' + } +} + ` + }; + + const code2 = { + javascript: ` +import React, { useState } from 'react'; +import { BlockUI } from 'primereact/blockui'; +import { Panel } from 'primereact/panel'; +import { Button } from 'primereact/button'; + +export default function UnstyledDemo() { + const [blocked, setBlocked] = useState(false); + + return ( +
+
+ + +
+ + +

+ 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. +

+
+
+
+ ); +} + ` + }; + + return ( + <> + +

+ PrimeReact offers a built-in Tailwind theme to get you started quickly. The default values related to the component are displayed below. The component can easily be styled with your own design based on Tailwind utilities, see the{' '} + Tailwind Customization section for an example. +

+ +

A playground sample with the pre-built Tailwind theme.

+ +
+ + ); +} diff --git a/components/doc/bootstrap/exampledoc.js b/components/doc/bootstrap/exampledoc.js new file mode 100644 index 0000000000..60b1859951 --- /dev/null +++ b/components/doc/bootstrap/exampledoc.js @@ -0,0 +1,18 @@ +import { DocSectionText } from '@/components/doc/common/docsectiontext'; + +export function ExampleDoc(props) { + return ( + <> + +

+ As an example, Modal and Button styles of Bootstrap are used to style PrimeReact Button and + Dialog. +

+ +
+ - -
- - - - ); - } -} - -class LightboxDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- - {` -import {Lightbox} from 'primereact/lightbox'; - -`} - -

Getting Started

-

Lightbox has two modes; image and custom content. In image mode a collection of images are required to display - where an image object in the collection defines the source of the original image, thumbnail image and the title.

- - -{` -var images=[ - {source:'showcase/resources/demo/images/sopranos/sopranos1.jpg', thumbnail:'showcase/resources/demo/images/sopranos/sopranos1_small.jpg', title:'Sopranos 1'}, - {source:'showcase/resources/demo/images/sopranos/sopranos2.jpg', thumbnail:'showcase/resources/demo/images/sopranos/sopranos2_small.jpg', title:'Sopranos 2'}, - {source:'showcase/resources/demo/images/sopranos/sopranos3.jpg', thumbnail:'showcase/resources/demo/images/sopranos/sopranos3_small.jpg', title:'Sopranos 3'}, - {source:'showcase/resources/demo/images/sopranos/sopranos4.jpg', thumbnail:'showcase/resources/demo/images/sopranos/sopranos4_small.jpg', title:'Sopranos 4'} -]; - -`} - - - - {` - - -`} - - -

Content mode is enabled by defining target property as the trigger to display the lightbox. In this setting, children of the component would be displayed inside the overlay

- - {` -Watch Video}> - - - -`} - - -

Effects

-

The easing function to use between image transitions is "ease-out" by default and this can be customized using easing property. See here for possible alternative values. Duration of the effect can be changed using effectDuration option.

- - {` - - -`} - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
imagesarraynullAn array of images to display.
targetanynullTarget element to show the Lightbox in content mode.
styleobjectnullInline style of the component.
classNamestringnullStyle class of the component.
easingstringease-outEasing to use for transition between images.
effectDurationstring500msDuration of the transition between the images.
-
-

Styling

-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameElement
p-lightboxContainer element
p-lightbox-contentContent element.
p-lightbox-nav-rightElement to navigate to next image.
p-lightbox-nav-leftElement to navigate to previous image.
p-lightbox-captionCaption element.
p-lightbox-caption-textText of caption.
p-lightbox-closeClose icon.
-
- -

Dependencies

-

None.

-
- - - - View on GitHub - - - {` -import React, {Component} from 'react'; -import {Lightbox} from 'primereact/lightbox'; - -export class LightboxDemo extends Component { - - render() { - const images = [ - { - source:'showcase/resources/demo/images/sopranos/sopranos1.jpg', - thumbnail:'showcase/resources/demo/images/sopranos/sopranos1_small.jpg', - title:'Sopranos 1' - }, - { - source:'showcase/resources/demo/images/sopranos/sopranos2.jpg', - thumbnail:'showcase/resources/demo/images/sopranos/sopranos2_small.jpg', - title:'Sopranos 2' - }, - { - source:'showcase/resources/demo/images/sopranos/sopranos3.jpg', - thumbnail:'showcase/resources/demo/images/sopranos/sopranos3_small.jpg', - title:'Sopranos 3' - }, - { - source:'showcase/resources/demo/images/sopranos/sopranos4.jpg', - thumbnail:'showcase/resources/demo/images/sopranos/sopranos4_small.jpg', - title:'Sopranos 4' - } - ]; - - const videoTarget = ( - - ); - - return ( -
-
-
-

Lightbox

-

LightBox is a modal overlay component to display images, videos and inline content.

-
-
- -
-

Basic

- - -

Content

- - - -
-
- ); - } -} } -} - `} -
-
-
-
- ) - } - -} diff --git a/src/showcase/listbox/ListBoxDemo.js b/src/showcase/listbox/ListBoxDemo.js deleted file mode 100644 index e0d13dfe93..0000000000 --- a/src/showcase/listbox/ListBoxDemo.js +++ /dev/null @@ -1,536 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {ListBox} from '../../components/listbox/ListBox'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class ListBoxDemo extends Component { - - constructor() { - super(); - this.state = { - city: null, - cities: null, - car: 'BMW' - }; - } - - carTemplate(option) { - const logoPath = 'showcase/resources/demo/images/car/' + option.label + '.png'; - - return ( -
- {option.label} - {option.label} -
- ); - } - - render() { - const cities = [ - {name: 'New York', code: 'NY'}, - {name: 'Rome', code: 'RM'}, - {name: 'London', code: 'LDN'}, - {name: 'Istanbul', code: 'IST'}, - {name: 'Paris', code: 'PRS'} - ]; - - const cars = [ - {label: 'Audi', value: 'Audi'}, - {label: 'BMW', value: 'BMW'}, - {label: 'Fiat', value: 'Fiat'}, - {label: 'Honda', value: 'Honda'}, - {label: 'Jaguar', value: 'Jaguar'}, - {label: 'Mercedes', value: 'Mercedes'}, - {label: 'Renault', value: 'Renault'}, - {label: 'VW', value: 'VW'}, - {label: 'Volvo', value: 'Volvo'} - ]; - - return ( -
-
-
-

ListBox

-

ListBox is used to select one or more values from a list of items.

- - - { context => } - -
-
- -
-

Single

- this.setState({city: e.value})} optionLabel="name"/> - -

Multiple

- this.setState({cities: e.value})} multiple={true} optionLabel="name"/> - -

Advanced

- this.setState({car: e.value})} itemTemplate={this.carTemplate} - style={{width: '15em'}} listStyle={{maxHeight: '250px'}} /> -
- - -
- ); - } -} - -class ListboxDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - - -

Import

- -{` -import {ListBox} from 'primereact/listbox'; - -`} - - -

Getting Started

-

Listbox is used as a controlled component with value and onChange properties along with the options collection. There are two alternatives - of how to define the options property; One way is providing a collection of SelectItem instances having label-value pairs - whereas other way is providing an array of arbitrary objects along with the optionLabel and optionValue properties to specify the label/value field pair. - In addition, options can be simple primitive values such as a string array, in this case no optionLabel or optionValue is necessary.

- -

Options as SelectItems

- -{` -const citySelectItems = [ - {label: 'New York', value: 'NY'}, - {label: 'Rome', value: 'RM'}, - {label: 'London', value: 'LDN'}, - {label: 'Istanbul', value: 'IST'}, - {label: 'Paris', value: 'PRS'} -]; - -`} - - - -{` - this.setState({city: e.value})} /> - -`} - - -

Options as any type

- -{` -const cities = [ - {name: 'New York', code: 'NY'}, - {name: 'Rome', code: 'RM'}, - {name: 'London', code: 'LDN'}, - {name: 'Istanbul', code: 'IST'}, - {name: 'Paris', code: 'PRS'} -]; - -`} - - - -{` - this.setState({city: e.value})} /> - this.setState({city: e.value})} /> - - -`} - -

When optionValue is not defined, value of an option refers to the option object itself.

- -

Selection

-

Listbox allows selection of either single or multiple items. In single case, model should be a single object reference whereas in multiple case should be an array. Multiple items can either be selected - using metaKey or toggled individually depending on the value of metaKeySelection property value which is true by default. On touch enabled - devices metaKeySelection is turned off automatically.

- - -{` - this.setState({city: e.value})} multiple={true}/> - -`} - - -

Custom Content

-

Label of an option is used as the display text of an item by default, for custom content support define an itemTemplate function that gets the option as a parameter and returns the content.

- - -{` - this.setState({city: e.value})} itemTemplate={this.carTemplate} /> - -`} - - - -{` -carTemplate(option) { - const logoPath = 'showcase/resources/demo/images/car/' + option.label + '.png'; - - return ( -
- {option.label} - {option.label} -
- ); -} - -`} -
-

Filtering

-

Options can be filtered using an input field in the overlay by enabling the filter property. By default filtering is done against - label of the items and filterBy property is available to choose one or more properties of the options. In addition filterMatchMode can be utilized - to define the filtering algorithm, valid options are "contains" (default), "startsWith", "endsWith", "equals" and "notEquals".

- - -{` - this.setState({city: e.value})} filter={true} /> - -`} - - -

SelectItem API

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
labelstringnullLabel of the option.
valuestringnullValue of the option.
classNamestringnullClassName of the option.
titlestringnullTooltip text of the option. (Not supported)
disabledbooleanfalseWhether the option is disabled or not. (Not supported)
-
- -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
valueobjectnullSelected value to display.
optionsarraynullAn array of objects to display as the available options.
optionLabelstringnullName of the label field of an option when an arbitrary objects instead of SelectItems are used as options.
optionValuestringnullName of the value field of an option when arbitrary objects are used as options instead of SelectItems.
itemTemplatefunctionnullFunction that gets the option and returns the content for it.
stylestringnullInline style of the element.
listStylestringnullInline style of inner list element.
classNamestringnullStyle class of the element.
disabledbooleanfalseWhen specified, disables the component.
dataKeystringfalseA property to uniquely match the value in options for better performance.
multiplebooleanfalseWhen specified, allows selecting multiple values.
metaKeySelectionbooleantrueDefines how multiple items can be selected, when true metaKey needs to be pressed to select or unselect an item and when set to false selection of each item - can be toggled individually. On touch enabled devices, metaKeySelection is turned off automatically.
filterbooleanfalseWhen specified, displays a filter input at header.
filterBystringlabelWhen filtering is enabled, filterBy decides which field or fields (comma separated) to search against.
filterMatchModestringcontainsDefines how the items are filtered, valid values are "contains" (default), "startsWith", "endsWith", "equals" and "notEquals".
filterPlaceholderstringnullPlaceholder text to show when filter input is empty.
filterLocalestringundefinedLocale to use in filtering. The default locale is the host environment's current locale.
tabIndexstringnullIndex of the element in tabbing order.
tooltipanynullContent of the tooltip.
tooltipOptionsobjectnullConfiguration of the tooltip, refer to the tooltip documentation for more information.
-
- -

Events

-
- - - - - - - - - - - - - - - -
NameParametersDescription
onChangeevent.originalEvent: Browser event
- event.value: Single value or an array of values depending on the selection mode
-
Callback to invoke when value of listbox changes.
-
- -

Styling

-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameElement
p-listboxMain container element.
p-listbox-headerHeader element.
p-listbox-list-wrapperContainer of list element.
p-listbox-listList element.
p-listbox-itemAn item in the list element.
-
- -

Dependencies

-

None.

-
- - - - View on GitHub - - -{` -import React, {Component} from 'react'; -import {ListBox} from 'primereact/listbox'; - -export class ListBoxDemo extends Component { - - constructor() { - super(); - this.state = { - city: null, - cities: null, - car: 'BMW' - }; - } - - carTemplate(option) { - const logoPath = 'showcase/resources/demo/images/car/' + option.label + '.png'; - - return ( -
- {option.label} - {option.label} -
- ); - } - - render() { - const cities = [ - {name: 'New York', code: 'NY'}, - {name: 'Rome', code: 'RM'}, - {name: 'London', code: 'LDN'}, - {name: 'Istanbul', code: 'IST'}, - {name: 'Paris', code: 'PRS'} - ]; - - const cars = [ - {label: 'Audi', value: 'Audi'}, - {label: 'BMW', value: 'BMW'}, - {label: 'Fiat', value: 'Fiat'}, - {label: 'Honda', value: 'Honda'}, - {label: 'Jaguar', value: 'Jaguar'}, - {label: 'Mercedes', value: 'Mercedes'}, - {label: 'Renault', value: 'Renault'}, - {label: 'VW', value: 'VW'}, - {label: 'Volvo', value: 'Volvo'} - ]; - - return ( -
-
-
-

ListBox

-

ListBox is used to select one or more values from a list of items.

-
-
- -
-

Single

- this.setState({city: e.value})} optionLabel="name"/> - -

Multiple

- this.setState({cities: e.value})} multiple={true} optionLabel="name"/> - -

Advanced

- this.setState({car: e.value})} itemTemplate={this.carTemplate} - style={{width: '15em'}} listStyle={{maxHeight: '250px'}}/> -
-
- ); - } -} - -`} -
-
-
-
- ); - } -} diff --git a/src/showcase/load/GoogleMaps.js b/src/showcase/load/GoogleMaps.js deleted file mode 100644 index ce8acc20fc..0000000000 --- a/src/showcase/load/GoogleMaps.js +++ /dev/null @@ -1,37 +0,0 @@ -export const loadGoogleMaps = (callback) => { - const existingScript = document.getElementById('googleMaps'); - - if (!existingScript) { - const script = document.createElement('script'); - script.src = 'https://maps.google.com/maps/api/js?key=AIzaSyA6Ar0UymhiklJBzEPLKKn2QHwbjdz3XV0'; - script.id = 'googleMaps'; - script.async = true; - script.defer = true; - document.body.appendChild(script); - - script.onload = () => { - if (callback) callback(); - }; - } - - if (existingScript && callback) callback(); -}; - -export const removeGoogleMaps = () => { - const mapScript = document.getElementById('googleMaps'); - - if (mapScript) { - mapScript.parentNode.removeChild(mapScript); - - const head = document.getElementsByTagName('head')[0]; - const scripts = head.getElementsByTagName('script'); - for (let i = 0; i < scripts.length; i++) { - let script = scripts[i]; - let src = script.src; - - if (src.startsWith('https://maps.google.com/maps')) { - head.removeChild(script); - } - } - } -}; diff --git a/src/showcase/megamenu/MegaMenuDemo.js b/src/showcase/megamenu/MegaMenuDemo.js deleted file mode 100644 index d8883fd240..0000000000 --- a/src/showcase/megamenu/MegaMenuDemo.js +++ /dev/null @@ -1,583 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {MegaMenu} from '../../components/megamenu/MegaMenu'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class MegaMenuDemo extends Component { - - constructor() { - super(); - this.state = { - items: [ - { - label: 'Videos', icon: 'pi pi-fw pi-video', - items: [ - [ - { - label: 'Video 1', - items: [{label: 'Video 1.1'}, {label: 'Video 1.2'}] - }, - { - label: 'Video 2', - items: [{label: 'Video 2.1'}, {label: 'Video 2.2'}] - } - ], - [ - { - label: 'Video 3', - items: [{label: 'Video 3.1'}, {label: 'Video 3.2'}] - }, - { - label: 'Video 4', - items: [{label: 'Video 4.1'}, {label: 'Video 4.2'}] - } - ] - ] - }, - { - label: 'Users', icon: 'pi pi-fw pi-users', - items: [ - [ - { - label: 'User 1', - items: [{label: 'User 1.1'}, {label: 'User 1.2'}] - }, - { - label: 'User 2', - items: [{label: 'User 2.1'}, {label: 'User 2.2'}] - }, - ], - [ - { - label: 'User 3', - items: [{label: 'User 3.1'}, {label: 'User 3.2'}] - }, - { - label: 'User 4', - items: [{label: 'User 4.1'}, {label: 'User 4.2'}] - } - ], - [ - { - label: 'User 5', - items: [{label: 'User 5.1'}, {label: 'User 5.2'}] - }, - { - label: 'User 6', - items: [{label: 'User 6.1'}, {label: 'User 6.2'}] - } - ] - ] - }, - { - label: 'Events', icon: 'pi pi-fw pi-calendar', - items: [ - [ - { - label: 'Event 1', - items: [{label: 'Event 1.1'}, {label: 'Event 1.2'}] - }, - { - label: 'Event 2', - items: [{label: 'Event 2.1'}, {label: 'Event 2.2'}] - } - ], - [ - { - label: 'Event 3', - items: [{label: 'Event 3.1'}, {label: 'Event 3.2'}] - }, - { - label: 'Event 4', - items: [{label: 'Event 4.1'}, {label: 'Event 4.2'}] - } - ] - ] - }, - { - label: 'Settings', icon: 'pi pi-fw pi-cog', - items: [ - [ - { - label: 'Setting 1', - items: [{label: 'Setting 1.1'}, {label: 'Setting 1.2'}] - }, - { - label: 'Setting 2', - items: [{label: 'Setting 2.1'}, {label: 'Setting 2.2'}] - }, - { - label: 'Setting 3', - items: [{label: 'Setting 3.1'}, {label: 'Setting 3.2'}] - } - ], - [ - { - label: 'Technology 4', - items: [{label: 'Setting 4.1'}, {label: 'Setting 4.2'}] - } - ] - ] - } - ] - }; - } - - render() { - return ( -
-
-
-

MegaMenu

-

MegaMenu is navigation component that displays submenus together.

- - - { context => } - -
-
- -
-

Horizontal

- - -

Vertical

- -
- - -
- ); - } -} - -class MegaMenuDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- - {` -import {MegaMenu} from 'primereact/megamenu'; - -`} - -

MenuItem API

-

MegaMenu uses the common menu item api to define its items, visit MenuModel for details.

- -

Getting Started

-

Layout of the MegaMenu is managed by the PrimeFlex that can be downloaded from npm.

- - -{` -npm install primeflex --save - -`} - - -

MegaMenu requires a collection of menuitems as its model.

- - - {` -const items: [ - { - label: 'Videos', icon: 'pi pi-fw pi-video', - items: [ - [ - { - label: 'Video 1', - items: [{label: 'Video 1.1'}, {label: 'Video 1.2'}] - }, - { - label: 'Video 2', - items: [{label: 'Video 2.1'}, {label: 'Video 2.2'}] - } - ], - [ - { - label: 'Video 3', - items: [{label: 'Video 3.1'}, {label: 'Video 3.2'}] - }, - { - label: 'Video 4', - items: [{label: 'Video 4.1'}, {label: 'Video 4.2'}] - } - ] - ] - }, - { - label: 'Users', icon: 'pi pi-fw pi-users', - items: [ - [ - { - label: 'User 1', - items: [{label: 'User 1.1'}, {label: 'User 1.2'}] - }, - { - label: 'User 2', - items: [{label: 'User 2.1'}, {label: 'User 2.2'}] - }, - ], - [ - { - label: 'User 3', - items: [{label: 'User 3.1'}, {label: 'User 3.2'}] - }, - { - label: 'User 4', - items: [{label: 'User 4.1'}, {label: 'User 4.2'}] - } - ], - [ - { - label: 'User 5', - items: [{label: 'User 5.1'}, {label: 'User 5.2'}] - }, - { - label: 'User 6', - items: [{label: 'User 6.1'}, {label: 'User 6.2'}] - } - ] - ] - }, - { - label: 'Events', icon: 'pi pi-fw pi-calendar', - items: [ - [ - { - label: 'Event 1', - items: [{label: 'Event 1.1'}, {label: 'Event 1.2'}] - }, - { - label: 'Event 2', - items: [{label: 'Event 2.1'}, {label: 'Event 2.2'}] - } - ], - [ - { - label: 'Event 3', - items: [{label: 'Event 3.1'}, {label: 'Event 3.2'}] - }, - { - label: 'Event 4', - items: [{label: 'Event 4.1'}, {label: 'Event 4.2'}] - } - ] - ] - }, - { - label: 'Settings', icon: 'pi pi-fw pi-cog', - items: [ - [ - { - label: 'Setting 1', - items: [{label: 'Setting 1.1'}, {label: 'Setting 1.2'}] - }, - { - label: 'Setting 2', - items: [{label: 'Setting 2.1'}, {label: 'Setting 2.2'}] - }, - { - label: 'Setting 3', - items: [{label: 'Setting 3.1'}, {label: 'Setting 3.2'}] - } - ], - [ - { - label: 'Technology 4', - items: [{label: 'Setting 4.1'}, {label: 'Setting 4.2'}] - } - ] - ] - } -] - -`} - - - - {` - - -`} - - -

Orientation

-

Default orientation is "horizontal" with "vertical" as the alternative.

- - {` - - -`} - - -

Custom Content

-

Any content inside the megamenu will be displayed on the right side by default. You may use ".ui-megamenu-custom" style class to change the location of the content.

- - {` - - -
- ) - } - -} diff --git a/src/showcase/menu/MenuDemo.js b/src/showcase/menu/MenuDemo.js deleted file mode 100644 index cabc8db0df..0000000000 --- a/src/showcase/menu/MenuDemo.js +++ /dev/null @@ -1,350 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {Menu} from '../../components/menu/Menu'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; -import {Button} from "../../components/button/Button"; - -export class MenuDemo extends Component { - - constructor() { - super(); - this.state = { - items: [ - { - label: 'Options', - items: [{label: 'Upload', icon: 'pi pi-fw pi-upload', command:()=>{ window.location.hash="/fileupload"; }}, - {label: 'Home', icon: 'pi pi-fw pi-home', url: 'http://primetek.com.tr/'}] - }, - { - label: 'Account', - items: [{label: 'Components', icon: 'pi pi-fw pi-cog', command:()=>{ window.location.hash="/"; }}, - {label: 'Sign Out', icon: 'pi pi-fw pi-power-off'} ] - } - ] - }; - } - - render() { - return ( -
-
-
-

Menu

-

Menu is a navigation/command component that supports dynamic and static positioning.

- - - { context => } - -
-
- -
-

Basic

- - -

Popup

- this.menu = el} id="popup_menu"/> -
- - - -
- ) - } -} - -class MenuDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- - {` -import {Menu} from 'primereact/menu'; - -`} - - -

MenuModel API

-

Menu uses the common menumodel api to define its items, visit MenuModel API for details.

- -

Getting Started

-

Menu requires a collection of menuitems as its model.

- - {` - - -`} - - - - {` -let items = [ - {label: 'New', icon: 'pi pi-fw pi-plus'}, - {label: 'Delete', icon: 'pi pi-fw pi-trash'} -]; - -`} - - -

SubMenus

-

Menu supports one level of nesting via subitems of an item.

- - {` -let items: [ - { - label: 'Options', - items: [{label: 'New', icon: 'pi pi-fw pi-plus',command:()=>{ window.location.hash="/fileupload"; }}, - {label: 'Delete', icon: 'pi pi-fw pi-trash', url: 'http://primetek.com.tr/'}] - }, - { - label: 'Account', - items: [{label: 'Options', icon: 'pi pi-fw pi-cog',command:()=>{ window.location.hash="/"; }}, - {label: 'Sign Out', icon: 'pi pi-fw pi-power-off'} ] - } -] - -`} - - -

Popup Mode

-

Menu is inline by default whereas popup mode is supported by enabling popup property and calling toggle method with an event of the target.

- - - {` - this.menu=el} /> -
- - - - - ) - } -} -`} - - - - - ) - } -} diff --git a/src/showcase/menubar/MenubarDemo.js b/src/showcase/menubar/MenubarDemo.js deleted file mode 100644 index 868950591c..0000000000 --- a/src/showcase/menubar/MenubarDemo.js +++ /dev/null @@ -1,608 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {Menubar} from '../../components/menubar/Menubar'; -import {Button} from '../../components/button/Button'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; -import {InputText} from "../../components/inputtext/InputText"; - -export class MenubarDemo extends Component { - - constructor() { - super(); - - this.state = { - items:[ - { - label:'File', - icon:'pi pi-fw pi-file', - items:[ - { - label:'New', - icon:'pi pi-fw pi-plus', - items:[ - { - label:'Bookmark', - icon:'pi pi-fw pi-bookmark' - }, - { - label:'Video', - icon:'pi pi-fw pi-video' - }, - - ] - }, - { - label:'Delete', - icon:'pi pi-fw pi-trash' - }, - { - separator:true - }, - { - label:'Export', - icon:'pi pi-fw pi-external-link' - } - ] - }, - { - label:'Edit', - icon:'pi pi-fw pi-pencil', - items:[ - { - label:'Left', - icon:'pi pi-fw pi-align-left' - }, - { - label:'Right', - icon:'pi pi-fw pi-align-right' - }, - { - label:'Center', - icon:'pi pi-fw pi-align-center' - }, - { - label:'Justify', - icon:'pi pi-fw pi-align-justify' - }, - - ] - }, - { - label:'Users', - icon:'pi pi-fw pi-user', - items:[ - { - label:'New', - icon:'pi pi-fw pi-user-plus', - - }, - { - label:'Delete', - icon:'pi pi-fw pi-user-minus', - - }, - { - label:'Search', - icon:'pi pi-fw pi-users', - items:[ - { - label:'Filter', - icon:'pi pi-fw pi-filter', - items:[ - { - label:'Print', - icon:'pi pi-fw pi-print' - } - ] - }, - { - icon:'pi pi-fw pi-bars', - label:'List' - } - ] - } - ] - }, - { - label:'Events', - icon:'pi pi-fw pi-calendar', - items:[ - { - label:'Edit', - icon:'pi pi-fw pi-pencil', - items:[ - { - label:'Save', - icon:'pi pi-fw pi-calendar-plus' - }, - { - label:'Delete', - icon:'pi pi-fw pi-calendar-minus' - } - ] - }, - { - label:'Archieve', - icon:'pi pi-fw pi-calendar-times', - items:[ - { - label:'Remove', - icon:'pi pi-fw pi-calendar-minus' - } - ] - } - ] - }, - { - label:'Quit', - icon:'pi pi-fw pi-power-off' - } - ] - }; - } - - render() { - return ( -
-
-
-

Menubar

-

Menubar is a horizontal menu component.

- - - { context => } - -
-
-
- - -
- - - -
- ); - } -} - -class MenubarDoc extends Component { - - shouldComponentUpdate() { - return false; - } - - render() { - return ( -
- - -

Import

- - {` -import {Menubar} from 'primereact/menubar'; - -`} - -

MenuItem API

-

Menubar uses the common menu item api to define its items, visit MenuModel for details.

- -

Getting Started

-

Menubar requires nested menuitems as its model.

- - {` - - -`} - - {` -const items:[ - { - label:'File', - icon:'pi pi-fw pi-file', - items:[ - { - label:'New', - icon:'pi pi-fw pi-plus', - items:[ - { - label:'Bookmark', - icon:'pi pi-fw pi-bookmark' - }, - { - label:'Video', - icon:'pi pi-fw pi-video' - }, - - ] - }, - { - label:'Delete', - icon:'pi pi-fw pi-trash' - }, - { - separator:true - }, - { - label:'Export', - icon:'pi pi-fw pi-external-link' - } - ] - }, - { - label:'Edit', - icon:'pi pi-fw pi-pencil', - items:[ - { - label:'Left', - icon:'pi pi-fw pi-align-left' - }, - { - label:'Right', - icon:'pi pi-fw pi-align-right' - }, - { - label:'Center', - icon:'pi pi-fw pi-align-center' - }, - { - label:'Justify', - icon:'pi pi-fw pi-align-justify' - }, - - ] - }, - { - label:'Users', - icon:'pi pi-fw pi-user', - items:[ - { - label:'New', - icon:'pi pi-fw pi-user-plus', - - }, - { - label:'Delete', - icon:'pi pi-fw pi-user-minus', - - }, - { - label:'Search', - icon:'pi pi-fw pi-users', - items:[ - { - label:'Filter', - icon:'pi pi-fw pi-filter', - items:[ - { - label:'Print', - icon:'pi pi-fw pi-print' - } - ] - }, - { - icon:'pi pi-fw pi-bars', - label:'List' - } - ] - } - ] - }, - { - label:'Events', - icon:'pi pi-fw pi-calendar', - items:[ - { - label:'Edit', - icon:'pi pi-fw pi-pencil', - items:[ - { - label:'Save', - icon:'pi pi-fw pi-calendar-plus' - }, - { - label:'Delete', - icon:'pi pi-fw pi-calendar-minus' - }, - - ] - }, - { - label:'Archieve', - icon:'pi pi-fw pi-calendar-times', - items:[ - { - label:'Remove', - icon:'pi pi-fw pi-calendar-minus' - } - ] - } - ] - }, - { - label:'Quit', - icon:'pi pi-fw pi-power-off' - } - ]; - -`} - -

Custom Content

-

Any content inside the menubar will be displayed on the right side by default. You may use ".ui-menubar-custom" style class to change the location of the content.

- - {` - - -
- - ); - } -} - `} - - - - - ) - } - -} diff --git a/src/showcase/menumodel/MenuModelDemo.js b/src/showcase/menumodel/MenuModelDemo.js deleted file mode 100644 index e80195abb3..0000000000 --- a/src/showcase/menumodel/MenuModelDemo.js +++ /dev/null @@ -1,178 +0,0 @@ -import React, {Component} from 'react'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; - -export class MenuModelDemo extends Component { - - constructor() { - super(); - this.state = {}; - } - - render() { - return ( -
-
-
-

MenuModel API

-

PrimeReact menus components share a common api to specify the menuitems and submenus.

-
-
- - - -
- ) - } -} - -class MenuModelDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
-

MenuItem

-

Core of the API is the MenuItem class that defines various options such as the label, icon and children of an item in a menu.

- - {` -const items: [ - { - label: 'Options', - items: [{label: 'New', icon: 'pi pi-fw pi-plus',command:()=>{ window.location.hash="/fileupload"; }}, - {label: 'Delete', icon: 'pi pi-fw pi-trash', url: 'http://primetek.com.tr/'}] - }, - { - label: 'Account', - items: [{label: 'Options', icon: 'pi pi-fw pi-cog',command:()=>{ window.location.hash="/"; }}, - {label: 'Sign Out', icon: 'pi pi-fw pi-power-off'} ] - } -] - -`} - - -

MenuItem provides the following properties. Note that not all of them may be utilized by the corresponding menu component.

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
labelstringnullText of the item.
iconstringnullIcon of the item.
commandfunctionnullCallback to execute when item is clicked.
urlstringnullExternal link to navigate when item is clicked.
itemsarraynullAn array of children menuitems.
disabledbooleanfalseWhen set as true, disables the menuitem.
targetstringnullSpecifies where to open the linked document.
separatorbooleanfalseDefines the item as a separator.
styleobjectnullInline style of the menuitem.
classNamestringnullStyle class of the menuitem.
-
- -

Command

-

The function to invoke when an item is clicked is defined using the command property.

- - {` -const items = -[ - { - label: 'New', - icon: 'pi pi-plus', - command: (event) => { - // event.originalEvent: Browser event - // event.item: MenuItem instance - } - } -]; - -`} - - -

Navigation

-

Navigation is specified using url property for external links or using command function for internal router.

- - {` -const items = -[ - { - label: 'New', - icon: 'pi pi-plus', - command: (event) => { - window.location.hash = "/fileupload"; - } - }, - { - label: 'Link', - icon: 'pi pi-check', - url: 'https://www.primefaces.org/primereact' - } -]; - -`} - -
- ) - } -} diff --git a/src/showcase/messages/MessagesDemo.js b/src/showcase/messages/MessagesDemo.js deleted file mode 100644 index 01d1e11a00..0000000000 --- a/src/showcase/messages/MessagesDemo.js +++ /dev/null @@ -1,643 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {Messages} from '../../components/messages/Messages'; -import {Message} from '../../components/message/Message'; -import {InputText} from '../../components/inputtext/InputText'; -import {Button} from '../../components/button/Button'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class MessagesDemo extends Component { - - constructor() { - super(); - this.showSuccess = this.showSuccess.bind(this); - this.showInfo = this.showInfo.bind(this); - this.showWarn = this.showWarn.bind(this); - this.showError = this.showError.bind(this); - this.showMultiple = this.showMultiple.bind(this); - this.showSticky = this.showSticky.bind(this); - this.clear = this.clear.bind(this); - } - - showSuccess() { - this.messages.show({severity: 'success', summary: 'Success Message', detail: 'Order submitted'}); - } - - showInfo() { - this.messages.show({severity: 'info', summary: 'Info Message', detail: 'PrimeReact rocks'}); - } - - showWarn() { - this.messages.show({severity: 'warn', summary: 'Warn Message', detail: 'There are unsaved changes'}); - } - - showError() { - this.messages.show({severity: 'error', summary: 'Error Message', detail: 'Validation failed'}); - } - - showSticky() { - this.messages.show({severity: 'info', summary: 'Sticky Message', detail: 'You need to close Me', sticky: true}); - } - - showMultiple() { - this.messages.show([ - {severity: 'info', summary: 'Message 1', detail: 'PrimeReact rocks'}, - {severity: 'info', summary: 'Message 2', detail: 'PrimeReact rocks'}, - {severity: 'info', summary: 'Message 3', detail: 'PrimeFaces rocks'} - ]); - } - - clear() { - this.messages.clear(); - } - - render() { - return ( -
-
-
-

Messages

-

Messages is used to display inline messages with various severities.

- - - { context => } - -
-
- -
- this.messages = el} /> - -

Severities

-
-
-
-
-
-
-
-
-
-
- -

Options

-
-
-
-
-
-
-
-
- -

Inline Message CSS

-

CSS helpers to display inline messages mostly within forms.

-
-
- -
-
- -
-
- -
-
- -
-
- -
- - -
-
- - -
-
- - -
- ) - } -} - -export class MessagesDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import {Messages} from 'primereact/messages'; -import {Message} from 'primereact/message'; - -`} - - -

Getting Started

-

A single message is specified by the Message interface in PrimeReact that defines various properties such as severity, - summary and detail. Messages are displayed by using the show method on the ref of the Messages instance.

- -

Note that for animations, messages requires react-transition-group package.

- - -{` - this.messages = el}> - -`} - - - -{` -this.messages.show({severity: 'success', summary: 'Success Message', detail: 'Order submitted'}); - -`} - - -

Message API

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
severitystringnullSeverity of the message.
summaryelementnullSummary content of the message.
detailelementnullDetail content of the message.
closablebooleantrueWhether the message can be closed manually using the close icon.
stickyelementnullWhen enabled, message is not removed automatically.
lifenumber3000Delay in milliseconds to close the message automatically.
-
- -

Severities

-

There are four possible values for the severity of a message.

- -
    -
  • success
  • -
  • info
  • -
  • warn
  • -
  • error
  • -
- -

Showing Messages

-

Show method accepts either a single message or an array of messages.

- - -{` - this.messages = el}> - -
-
-
-
-
-
-
- - -

Options

-
-
-
-
-
-
-
-
- -

Inline Message CSS

-

CSS helpers to display inline messages mostly within forms.

-
-
- -
-
- -
-
- -
-
- -
-
- -
- - -
-
- - -
- - - ) - } -} - -`} - - - - - ); - } -} diff --git a/src/showcase/multiselect/MultiSelectDemo.js b/src/showcase/multiselect/MultiSelectDemo.js deleted file mode 100644 index aedeee5332..0000000000 --- a/src/showcase/multiselect/MultiSelectDemo.js +++ /dev/null @@ -1,651 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {MultiSelect} from '../../components/multiselect/MultiSelect'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class MultiSelectDemo extends Component { - - constructor() { - super(); - this.state = { - cars1: [], - cars2: [] - }; - this.carTemplate = this.carTemplate.bind(this); - this.selectedCarTemplate = this.selectedCarTemplate.bind(this); - } - - carTemplate(option) { - const logoPath = 'showcase/resources/demo/images/car/' + option.label + '.png'; - - return ( -
- {option.label} - {option.label} -
- ); - } - - selectedCarTemplate(value) { - if (value) { - const logoPath = 'showcase/resources/demo/images/car/' + value + '.png'; - - return ( -
- {value} - {value} -
- ); - } - else { - return Choose - } - } - - render() { - const cars = [ - {label: 'Audi', value: 'Audi'}, - {label: 'BMW', value: 'BMW'}, - {label: 'Fiat', value: 'Fiat'}, - {label: 'Honda', value: 'Honda'}, - {label: 'Jaguar', value: 'Jaguar'}, - {label: 'Mercedes', value: 'Mercedes'}, - {label: 'Renault', value: 'Renault'}, - {label: 'VW', value: 'VW'}, - {label: 'Volvo', value: 'Volvo'} - ]; - - return ( -
-
-
-

MultiSelect

-

MultiSelect is used to select multiple items from a collection.

- - - { context => } - -
-
- -
-

Basic

- this.setState({cars1: e.value})} - style={{minWidth:'15em'}} filter={true} filterPlaceholder="Search" placeholder="Choose" /> - -

Templating

- this.setState({cars2: e.value})} - style={{minWidth:'15em'}} filter={true} filterPlaceholder="Search" itemTemplate={this.carTemplate} selectedItemTemplate={this.selectedCarTemplate} /> -
- - -
- ); - } -} - -export class MultiSelectDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import {MultiSelect} from 'primereact/multiselect'; - -`} - - -

Getting Started

-

MultiSelect is used as a controlled component with value and onChange properties along with the options collection. There are two alternatives - of how to define the options property; One way is providing a collection of SelectItem instances having label-value pairs - whereas other way is providing an array of arbitrary objects along with the optionLabel and optionValue properties to specify the label/value field pair. In addition, - options can be simple primitive values such as a string array, in this case no optionLabel or optionValue is necessary.

- -

Options as SelectItems

- -{` -const citySelectItems = [ - {label: 'New York', value: 'NY'}, - {label: 'Rome', value: 'RM'}, - {label: 'London', value: 'LDN'}, - {label: 'Istanbul', value: 'IST'}, - {label: 'Paris', value: 'PRS'} -]; - -`} - - - -{` - this.setState({cities: e.value})} /> - -`} - - -

Options as any type

- -{` -const cities = [ - {name: 'New York', code: 'NY'}, - {name: 'Rome', code: 'RM'}, - {name: 'London', code: 'LDN'}, - {name: 'Istanbul', code: 'IST'}, - {name: 'Paris', code: 'PRS'} -]; - -`} - - - -{` - this.setState({cities: e.value})} /> - this.setState({cities: e.value})} /> - -`} - -

When optionValue is not defined, value of an option refers to the option object itself.

- -

Custom Content

-

Label of an option is used as the display text of an item by default, for custom content support define an itemTemplate function that gets the option as a parameter and returns the content.

- - -{` - this.setState({cars: e.value})} itemTemplate={this.carTemplate} /> - -`} - - - -{` -carTemplate(option) { - const logoPath = 'showcase/resources/demo/images/car/' + option.label + '.png'; - - return ( -
- {option.label} - {option.label} -
- ); -} - -`} -
-

In addition selectedItemTemplate can be used to customize the selected values display instead of the default comma separated list.

- - - {` - this.setState({cars: e.value})} selectedItemTemplate={this.selectedCarTemplate} /> - -`} - - - - {` - -selectedCarTemplate(option) { - - if(option) { - const logoPath = 'showcase/resources/demo/images/car/' + option.label + '.png'; - return ( -
- {option.label} - {option.label} -
- ); - } - else { - return Choose - } -} - -`} -
- -

Filtering

-

Options can be filtered using an input field in the overlay by enabling the filter property. By default filtering is done against - label of the items and filterBy property is available to choose one or more properties of the options. In addition filterMatchMode can be utilized - to define the filtering algorithm, valid options are "contains" (default), "startsWith", "endsWith", "equals" and "notEquals".

- - -{` - this.setState({cars: e.value})} filter={true}/> - -`} - - -

SelectItem API

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
labelstringnullLabel of the option.
valuestringnullValue of the option.
classNamestringnullClassName of the option.
titlestringnullTooltip text of the option. (Not supported)
disabledbooleanfalseWhether the option is disabled or not. (Not supported)
-
- -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
namestringnullName of the input element.
valuearraynullValue of the component.
optionsarraynullAn array of selectitems to display as the available options.
optionLabelstringnullName of the label field of an option when an arbitrary objects instead of SelectItems are used as options.
stylestringnullInline style of the element.
classNamestringnullStyle class of the element.
scrollHeightstring200pxHeight of the viewport in pixels, a scrollbar is defined if height of list exceeds this value.
placeholderstringnullLabel to display when there are no selections.
fixedPlaceholderbooleanfalseWhether to display selected items in the label section or always display the placeholder as the default label.
disabledbooleanfalseWhen present, it specifies that the component should be disabled.
filterbooleantrueWhen specified, displays an input field to filter the items on keyup.
filterBystringlabelWhen filtering is enabled, filterBy decides which field or fields (comma separated) to search against.
filterMatchModestringcontainsDefines how the items are filtered, valid values are "contains", (default) "startsWith", "endsWith", "equals" and "notEquals".
filterPlaceholderstringnullPlaceholder text to show when filter input is empty.
filterLocalestringundefinedLocale to use in filtering. The default locale is the host environment's current locale.
tabIndexstringnullIndex of the element in tabbing order.
dataKeystringnullA property to uniquely match the value in options for better performance.
requiredbooleanfalseWhen present, it specifies that an input field must be filled out before submitting the form.
inputIdstringnullIdentifier of the focusable input.
tooltipanynullContent of the tooltip.
tooltipOptionsobjectnullConfiguration of the tooltip, refer to the tooltip documentation for more information.
itemTemplatefunctionnullFunction that gets the option and returns the content for it.
selectedItemTemplatefunctionnullFunction that gets an item in the value and returns the content for it.
appendToDOM elementnullDOM element instance where the dialog should be mounted.
maxSelectedLabelsnumber3Decides how many selected item labels to show at most.
selectedItemsLabelstring{0} items selectedLabel to display after exceeding max selected labels.
ariaLabelledBystringnullEstablishes relationships between the component and label(s) where its value should be one or more element IDs.
-
- -

Events

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
NameParametersDescription
onChangeevent.originalEvent: Browser event
- event.value: Current selected values
-
Callback to invoke when value changes.
onFocusevent: Browser event.Callback to invoke when the element receives focus.
onBlurevent: Browser event.Callback to invoke when the element loses focus.
-
- -

Methods

-
- - - - - - - - - - - - - - - -
NameParametersDescription
checkValidity-Checks whether the native hidden select element has any constraints and returns a boolean for the result.
-
- -

Styling

-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameElement
p-multiselectContainer element.
p-multiselect-label-containerContainer of the label to display selected items.
p-multiselect-label-containerLabel to display selected items.
p-multiselect-triggerDropdown button.
p-multiselect-filter-containerContainer of filter input.
p-multiselect-panelOverlay panel for items.
p-multiselect-itemsList container of items.
p-multiselect-itemAn item in the list.
- -

Dependencies

-

None.

-
- -
- - - - View on GitHub - - -{` -import React, {Component} from 'react'; -import {MultiSelect} from 'primereact/multiselect'; - -export class MultiSelectDemo extends Component { - - constructor() { - super(); - this.state = { - cars1: [], - cars2: [] - }; - this.carTemplate = this.carTemplate.bind(this); - this.selectedCarTemplate = this.selectedCarTemplate.bind(this); - } - - carTemplate(option) { - const logoPath = 'showcase/resources/demo/images/car/' + option.label + '.png'; - - return ( -
- {option.label} - {option.label} -
- ); - } - - selectedCarTemplate(value) { - if (value) { - const logoPath = 'showcase/resources/demo/images/car/' + value + '.png'; - - return ( -
- {value} - {value} -
- ); - } - else { - return Choose - } - } - - render() { - const cars = [ - {label: 'Audi', value: 'Audi'}, - {label: 'BMW', value: 'BMW'}, - {label: 'Fiat', value: 'Fiat'}, - {label: 'Honda', value: 'Honda'}, - {label: 'Jaguar', value: 'Jaguar'}, - {label: 'Mercedes', value: 'Mercedes'}, - {label: 'Renault', value: 'Renault'}, - {label: 'VW', value: 'VW'}, - {label: 'Volvo', value: 'Volvo'} - ]; - - return ( -
-
-
-

MultiSelect

-

MultiSelect is used to select multiple items from a collection.

-
-
- -
-

Basic

- this.setState({cars1: e.value})} - style={{minWidth:'12em'}} filter={true} filterPlaceholder="Search" placeholder="Choose" /> - -

Templating

- this.setState({cars2: e.value})} - style={{minWidth:'12em'}} filter={true} filterPlaceholder="Search" itemTemplate={this.carTemplate} selectedItemTemplate={this.selectedCarTemplate} /> -
-
- ); - } -} - -`} -
-
-
-
- ); - } -} diff --git a/src/showcase/orderlist/OrderListDemo.js b/src/showcase/orderlist/OrderListDemo.js deleted file mode 100644 index 1b5a484a98..0000000000 --- a/src/showcase/orderlist/OrderListDemo.js +++ /dev/null @@ -1,330 +0,0 @@ -import React, { Component } from 'react'; -import {Link} from 'react-router-dom'; -import {OrderList} from '../../components/orderlist/OrderList'; -import {CarService} from '../service/CarService'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class OrderListDemo extends Component { - - constructor() { - super(); - this.state = { - cars: [] - }; - - this.carservice = new CarService(); - this.carTemplate = this.carTemplate.bind(this); - } - - componentDidMount() { - this.carservice.getCarsSmall().then(data => this.setState({cars: data})); - } - - carTemplate(car) { - const imageSource = 'showcase/resources/demo/images/car/' + car.brand + '.png'; - - return ( -
- {car.brand} -
{car.brand} - {car.year} - {car.color}
-
- ); - } - - render() { - return ( -
-
-
-

OrderList

-

OrderList is used to sort a collection.

- - - { context => } - -
-
- -
-
-
- this.setState({cars: e.value})} /> -
-
-
    - {this.state.cars.map(car =>
  • {car.brand} - {car.year} - {car.color}
  • )} -
-
-
-
- - -
- ); - } -} - -export class OrderListDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import {OrderList} from 'primereact/orderlist'; - -`} - - -

Getting Started

-

OrderList requires an array as its value, a template for its content where each item in the array can be accessed inside the template and onChange - callback to update the value after reorder. -

- -{` - this.setState({cars: e.value})}> - -`} - - -

DragDrop

-

Items can be reordered using drag and drop by enabling dragdrop property.

- - -{` - this.setState({cars: e.value})}> - -`} - - -

Responsive

-

In responsive mode, orderlist adjusts its controls based on screen size. To activate this mode, set responsive as true.

- -{` - this.setState({cars: e.value})}> - -`} - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
valuearraynullAn array of objects to reorder.
headerstringnullText for the caption
stylestringnullInline style of the element.
classNamestringnullStyle class of the element.
listStylestringnullInline style of the list element.
responsivebooleanfalseWhen enabled orderlist adjusts its controls based on screen size.
dragdropbooleanfalseWhether to enable dragdrop based reordering.
dragdropScopestringnullUnique key of drag drop events to avoid conflict with other drag drop events on the page.
itemTemplatefunctionnullFunction that gets an item in the list and returns the content for it.
tabIndexstringnullIndex of the element in tabbing order.
-
- -

Events

-
- - - - - - - - - - - - - - - -
NameParametersDescription
onChangeevent.originalEvent: Browser event
- event.value: Reordered list
Callback to invoke when list is reordered.
-
- -

Styling

-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - -
NameElement
p-orderlistContainer element.
p-orderlist-listList container.
p-orderlist-itemAn item in the list
- -

Dependencies

-

None.

-
- -
- - - - View on GitHub - - - -{` -import React, { Component } from 'react'; -import {OrderList} from 'primereact/orderlist'; -import {CarService} from '../service/CarService'; - -export class OrderListDemo extends Component { - - constructor() { - super(); - this.state = { - cars: null - }; - - this.carservice = new CarService(); - this.carTemplate = this.carTemplate.bind(this); - } - - componentDidMount() { - this.carservice.getCarsSmall().then(data => this.setState({cars: data})); - } - - carTemplate(car) { - const imageSource = 'showcase/resources/demo/images/car/' + car.brand + '.png'; - - return ( -
- {car.brand} -
{car.brand} - {car.year} - {car.color}
-
- ); - } - - render() { - return ( -
-
-
-

OrderList

-

OrderList is used to sort a collection.

-
-
- -
-
-
- this.setState({cars: e.value})} /> -
-
-
    - {this.state.cars.map(car =>
  • {car.brand} - {car.year} - {car.color}
  • )} -
-
-
-
-
- ); - } -} - -`} -
-
-
-
- ); - } -} diff --git a/src/showcase/organizationchart/OrganizationChartDemo.js b/src/showcase/organizationchart/OrganizationChartDemo.js deleted file mode 100644 index 4c284dfe61..0000000000 --- a/src/showcase/organizationchart/OrganizationChartDemo.js +++ /dev/null @@ -1,638 +0,0 @@ -import React, {Component} from 'react'; -import {OrganizationChart} from '../../components/organizationchart/OrganizationChart'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class OrganizationChartDemo extends Component { - - constructor() { - super(); - this.state = { - data1: [{ - label: 'CEO', - type: 'person', - className: 'p-person', - expanded: true, - data: {name:'Walter White', 'avatar': 'walter.jpg'}, - children: [ - { - label: 'CFO', - type: 'person', - className: 'p-person', - expanded: true, - data: {name:'Saul Goodman', 'avatar': 'saul.jpg'}, - children:[{ - label: 'Tax', - className: 'department-cfo' - }, - { - label: 'Legal', - className: 'department-cfo' - }], - }, - { - label: 'COO', - type: 'person', - className: 'p-person', - expanded: true, - data: {name:'Mike E.', 'avatar': 'mike.jpg'}, - children:[{ - label: 'Operations', - className: 'department-coo' - }] - }, - { - label: 'CTO', - type: 'person', - className: 'p-person', - expanded: true, - data: {name:'Jesse Pinkman', 'avatar': 'jesse.jpg'}, - children:[{ - label: 'Development', - className: 'department-cto', - expanded: true, - children:[{ - label: 'Analysis', - className: 'department-cto' - }, - { - label: 'Front End', - className: 'department-cto' - }, - { - label: 'Back End', - className: 'department-cto' - }] - }, - { - label: 'QA', - className: 'department-cto' - }, - { - label: 'R&D', - className: 'department-cto' - }] - } - ] - }], - data2 : [{ - label: 'F.C Barcelona', - expanded: true, - children: [ - { - label: 'F.C Barcelona', - expanded: true, - children: [ - { - label: 'Chelsea FC' - }, - { - label: 'F.C. Barcelona' - } - ] - }, - { - label: 'Real Madrid', - expanded: true, - children: [ - { - label: 'Bayern Munich' - }, - { - label: 'Real Madrid' - } - ] - } - ] - }], - selection: [] - }; - - this.nodeTemplate = this.nodeTemplate.bind(this); - } - - nodeTemplate(node) { - if (node.type === "person") { - return ( -
-
{node.label}
-
- {node.data.avatar} -
{node.data.name}
-
-
- ); - } - - if (node.type === "department") { - return node.label; - } - } - - render() { - return ( -
-
-
-

OrganizationChart

-

OrganizationChart visualizes hierarchical organization data.

- - - { context => } - -
-
- -
-

Advanced

- this.setState({selection: event.data})} className="company"> - -

Basic

- -
- - -
- ) - } -} - -export class OrganizationChartDoc extends Component { - - shouldComponentUpdate() { - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import {OrganizationChart} from 'primereact/organizationchart'; - -`} - - - -

Getting Started

-

OrganizationChart requires a model of TreeNode as its value.

- -{` -export class OrganizationChartDemo extends Component { - - constructor() { - super(); - this.state = { - data: [{ - label: 'F.C Barcelona', - expanded: true, - children: [ - { - label: 'F.C Barcelona', - expanded: true, - children: [ - { - label: 'Chelsea FC' - }, - { - label: 'F.C. Barcelona' - } - ] - }, - { - label: 'Real Madrid', - expanded: true, - children: [ - { - label: 'Bayern Munich' - }, - { - label: 'Real Madrid' - } - ] - } - ] - }] - }; - } - - render() { - return ( - - ) - } -} - -`} - - -

Templating

-

Label of the treenode is displayed inside the node content by default and templating enables further customization.

- - -{` - - -`} - - - -{` - -nodeTemplate(node) { - if (node.type === "person") { - return ( -
-
{node.label}
-
- {node.data.avatar} -
{node.data.name}
-
-
- ); - } - - if (node.type === "department") { - return node.label; - } -} -`} -
- -

Expand/Collapse State

-

In order to display a treenode as expanded by default, set "expanded" property as true in your model.

- -

Selection

-

OrganizationChart supports two selection methods; single or multiple. Selection is enabled by setting selectionMode property to the corresponding mode, defining selection property along with selectionChange callback.

- -{` - this.setState({selectedNode: event.data})}> - -`} - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
valuearraynullAn array of nested TreeNodes.
stylestringnullInline style of the component.
classNamestringnullStyle class of the component.
selectionModestringnullDefines the selection mode, valid values "single" and "multiple".
selectionanynullA single treenode instance or an array to refer to the selections.
nodeTemplatefunctionnullTemplate function that gets a node as a parameter and returns a content.
-
- -

Events

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
NameParametersDescription
onNodeSelectevent.originalEvent: browser event
- event.node: Selected node instance.
Callback to invoke when a node is selected.
onNodeUnselectevent.originalEvent: browser event
- event.node: Unselected node instance.
Callback to invoke when a node is unselected.
onSelectionChangeevent.originalEvent: browser event
- event.data: New selection.
Callback to invoke when node selection changes.
-
- -

Styling

-

Following is the list of structural style classes.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameElement
p-organizationchartContainer element.
p-organizationchart-tableTable container of a node.
p-organizationchart-linesConnector lines container.
p-organizationchart-nodesContained of node children.
p-organizationchart-line-rightRight side line of a node connector.
p-organizationchart-line-leftLeft side line of a node connector.
p-organizationchart-line-topTop side line of a node connector.
-
- -

Dependencies

-

None.

- -
- - - - View on GitHub - - -{` -import React, {Component} from 'react'; -import {OrganizationChart} from 'primereact/organizationchart'; -import './OrganizationChartCustomStyle.css'; - -export class OrganizationChartDemo extends Component { - - constructor() { - super(); - this.state = { - data1: [{ - label: 'CEO', - type: 'person', - className: 'p-person', - expanded: true, - data: {name:'Walter White', 'avatar': 'walter.jpg'}, - children: [ - { - label: 'CFO', - type: 'person', - className: 'p-person', - expanded: true, - data: {name:'Saul Goodman', 'avatar': 'saul.jpg'}, - children:[{ - label: 'Tax', - className: 'department-cfo' - }, - { - label: 'Legal', - className: 'department-cfo' - }], - }, - { - label: 'COO', - type: 'person', - className: 'p-person', - expanded: true, - data: {name:'Mike E.', 'avatar': 'mike.jpg'}, - children:[{ - label: 'Operations', - className: 'department-coo' - }] - }, - { - label: 'CTO', - type: 'person', - className: 'p-person', - expanded: true, - data: {name:'Jesse Pinkman', 'avatar': 'jesse.jpg'}, - children:[{ - label: 'Development', - className: 'department-cto', - expanded: true, - children:[{ - label: 'Analysis', - className: 'department-cto' - }, - { - label: 'Front End', - className: 'department-cto' - }, - { - label: 'Back End', - className: 'department-cto' - }] - }, - { - label: 'QA', - className: 'department-cto' - }, - { - label: 'R&D', - className: 'department-cto' - }] - } - ] - }], - data2 : [{ - label: 'F.C Barcelona', - expanded: true, - children: [ - { - label: 'F.C Barcelona', - expanded: true, - children: [ - { - label: 'Chelsea FC' - }, - { - label: 'F.C. Barcelona' - } - ] - }, - { - label: 'Real Madrid', - expanded: true, - children: [ - { - label: 'Bayern Munich' - }, - { - label: 'Real Madrid' - } - ] - } - ] - }], - selection: [] - }; - - this.nodeTemplate = this.nodeTemplate.bind(this); - } - - nodeTemplate(node) { - if (node.type === "person") { - return ( -
-
{node.label}
-
- {node.data.avatar} -
{node.data.name}
-
-
- ); - } - - if (node.type === "department") { - return node.label; - } - } - - render() { - return ( -
-
-
-

OrganizationChart

-

OrganizationChart visualized hierarchical organization data.

-
-
- -
-

Advanced

- this.setState({selection: event.data})} className="company"> - -

Basic

- -
-
- ) - } -} - -`} -
- - -{` -.company.p-organizationchart .p-organizationchart-node-content.p-person { - padding: 0; - border: 0 none; -} - -.node-header, .node-content { - padding: .5em .7em; -} - -.node-header { - background-color: #495ebb; - color: #ffffff; -} - -.node-content { - text-align: center; - border: 1px solid #495ebb; -} - -.node-content img { - border-radius: 50%; -} - -.department-cfo { - background-color: #7247bc; - color: #ffffff; -} - -.department-coo { - background-color: #a534b6; - color: #ffffff; -} - -.department-cto { - background-color: #e9286f; - color: #ffffff; -} - -.p-organizationchart .p-highlight { - background-color: orange; -} - -.p-person .p-node-toggler { - color: #495ebb !important; -} - -.department-cto .p-node-toggler { - color: #8a0a39 !important; -} -`} - -
-
-
- ); - } -} diff --git a/src/showcase/overlaypanel/OverlayPanelDemo.js b/src/showcase/overlaypanel/OverlayPanelDemo.js deleted file mode 100644 index 79caa130d2..0000000000 --- a/src/showcase/overlaypanel/OverlayPanelDemo.js +++ /dev/null @@ -1,265 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {OverlayPanel} from '../../components/overlaypanel/OverlayPanel'; -import {Button} from '../../components/button/Button'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class OverlayPanelDemo extends Component { - - render() { - return ( -
-
-
-

OverlayPanel

-

OverlayPanel is a container component that can overlay other components on page.

- - - { context => } - -
-
- -
-
- - -
- ) - } -} - -export class OverlayPanelDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import {OverlayPanel} from 'primereact/overlaypanel'; - -`} - - -

Getting Started

-

OverlayPanel is accessed via its reference where visibility is controlled using toggle, show and hide methods.

- -{` -
- - ) - } -} - -`} - - - - - ); - } -} diff --git a/src/showcase/paginator/PaginatorDemo.js b/src/showcase/paginator/PaginatorDemo.js deleted file mode 100644 index 572d9a7e4f..0000000000 --- a/src/showcase/paginator/PaginatorDemo.js +++ /dev/null @@ -1,371 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {Paginator} from '../../components/paginator/Paginator'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class PaginatorDemo extends Component { - - constructor() { - super(); - this.state = { - first: 0, - rows: 10, - first2: 0, - rows2: 10 - }; - - this.onPageChange = this.onPageChange.bind(this); - this.onPageChange2 = this.onPageChange2.bind(this); - } - - onPageChange(event) { - this.setState({ - first: event.first, - rows: event.rows - }); - } - - onPageChange2(event) { - this.setState({ - first2: event.first, - rows2: event.rows - }); - } - - render() { - return ( -
-
-
-

Paginator

-

Paginator is a generic widget to display content in paged format.

- - - { context => } - -
-
- -
-

Default

- - -

Custom Template

- -
- - -
- ); - } -} - -export class PaginatorDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import {Paginator} from 'primereact/paginator'; - -`} - - -

Getting Started

-

Paginator is used as a controlled component with first, rows (optional) and onPageChange properties.

- - -{` - this.setState({first: e.first})}> - -`} - - -

Rows and TotalRecords

-

Rows and TotalRecords define how many pages the paginator should display. Paginator below will have 10 pages.

- -{` - this.setState({first: e.first})}> - -`} - - -

Rows Per Page

-

Number of items per page can be changed by the user using a dropdown if you define rowsPerPageOptions as an array of possible values. In this case, - rows property should also be updated -

- -{` - this.setState({first: e.first, rows: e.rows})}> - -`} - - -

Template

-

Paginator elements can be customized using the template property using the predefined keys, default value is - "FirstPageLink PrevPageLink PageLinks NextPageLink LastPageLink RowsPerPageDropdown". Here are the available elements that - can be placed inside a paginator.

- -
    -
  • FirstPageLink
  • -
  • PrevPageLink
  • -
  • PageLinks
  • -
  • NextPageLink
  • -
  • LastPageLink
  • -
  • RowsPerPageDropdown
  • -
  • CurrentPageReport
  • -
- -

CurrentPageReport

-

Current page report item in the itemplate displays information about the pagination state. Default value is ({currentPage} of {totalPages}) - whereas available placeholders are the following;

-
    -
  • {currentPage}
  • -
  • {totalPages}
  • -
  • {rows}
  • -
  • {first}
  • -
  • {last}
  • -
  • {totalRecords}
  • -
- -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
totalRecordsnumber0Number of total records.
rowsnumber0Data count to display per page.
firstnumber0Zero-relative number of the first row to be displayed.
pageLinkSizenumber5Number of page links to display.
rowsPerPageOptionsarraynullArray of integer values to display inside rows per page dropdown.
stylestringnullInline style of the element.
classNamestringnullStyle class of the element.
templatestringFirstPageLink PrevPageLink PageLinks NextPageLink LastPageLink RowsPerPageDropdownTemplate of the paginator.
leftContentanynullContent to inject into the left side of the paginator.
rightContentanynullContent to inject into the right side of the paginator.
currentPageReportTemplatestring({currentPage} of {totalPages})Template of the current page report element. Available placeholders are - {currentPage},{totalPages},{rows},{first},{last} and {totalRecords} -
-
- -

Events

-
- - - - - - - - - - - - - - - -
NameParametersDescription
onPageChangeevent.page: New page number
- event.first: Index of first record
- event.rows: Number of rows to display in new page
- event.page: Index of the new page
- event.pageCount: Total number of pages -
Callback to invoke when page changes, the event object contains information about the new state.
-
- -

Styling

-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameElement
p-paginatorContainer element.
p-paginator-firstFirst page element.
p-paginator-prevPrevious page element.
p-paginator-pagesContainer of page links.
p-paginator-pageA page link.
p-paginator-nextNext pge element.
p-paginator-lastLast page element.
p-paginator-rpp-optionsRows per page dropdown.
- -

Dependencies

-

None.

-
- -
- - - - View on GitHub - - -{` -import React, {Component} from 'react'; -import {Paginator} from 'primereact/paginator'; - -export class PaginatorDemo extends Component { - - constructor() { - super(); - this.state = { - first: 0, - rows: 10, - first2: 0, - rows2: 10 - }; - - this.onPageChange = this.onPageChange.bind(this); - this.onPageChange2 = this.onPageChange2.bind(this); - } - - onPageChange(event) { - this.setState({ - first: event.first, - rows: event.rows - }); - } - - onPageChange2(event) { - this.setState({ - first2: event.first, - rows2: event.rows - }); - } - - render() { - return ( -
-
-
-

Paginator

-

Paginator is a generic widget to display content in paged format.

-
-
- -
-

Default

- - -

Custom Template

- -
-
- ); - } -} - -`} -
-
-
-
- ); - } -} diff --git a/src/showcase/panel/PanelDemo.js b/src/showcase/panel/PanelDemo.js deleted file mode 100644 index e14b83ae4d..0000000000 --- a/src/showcase/panel/PanelDemo.js +++ /dev/null @@ -1,287 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {Panel} from '../../components/panel/Panel'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class PanelDemo extends Component { - - render() { - return ( -
-
-
-

Panel

-

Panel is a grouping component providing with content toggle feature.

- - - { context => } - -
-
- -
- -

The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. - His beloved son Michael has just come home from the war, but does not intend to become part of his father's business. - Through Michael's life the nature of the family business becomes clear. The business of the family is just like the head of the family, - kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the family.

-
- - -

The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. - His beloved son Michael has just come home from the war, but does not intend to become part of his father's business. - Through Michael's life the nature of the family business becomes clear. The business of the family is just like the head of the family, - kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the family.

-
-
- - -
- ) - } -} - -export class PanelDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import {Panel} from 'primereact/panel'; - -`} - - -

Getting Started

-

Panel is a container component that accepts content as its children.

- -{` - - The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. - His beloved son Michael has just come home from the war, but does not intend to become part of his father's business. - Through Michael's life the nature of the family business becomes clear. The business of the family is just like the head of the family, - kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the family. - - -`} - - -

Instead of simple strings, header propery also can be used to provide custom content as JSX.

- -

Toggleable

-

Content of the panel can be expanded and collapsed using toggleable option. A toggleable panel can either be used as a Controlled or Uncontrolled component.

- -

In controlled mode, collapsed and onToggle properties needs to be defined to control the collapsed state.

- - -{` - this.setState({panelCollapsed: e.value})}> - The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. - His beloved son Michael has just come home from the war, but does not intend to become part of his father's business. - Through Michael's life the nature of the family business becomes clear. The business of the family is just like the head of the family, - kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the family. - - -`} - - -

In uncontrolled mode, only toggleable property needs to be enabled. Initial state can be still be provided using the collapsed property in uncontrolled mode however - it is evaluated at initial rendering and ignored in further updates. If you programmatically need to update the collapsed state, prefer to use the component as controlled.

- - -{` - - The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. - His beloved son Michael has just come home from the war, but does not intend to become part of his father's business. - Through Michael's life the nature of the family business becomes clear. The business of the family is just like the head of the family, - kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the family. - - -`} - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
headerstringnullHeader text of the panel.
toggleablebooleanfalseDefines if content of panel can be expanded and collapsed.
styleobjectnullInline style of the element.
classNamestringnullStyle class of the element.
collapsedbooleanfalseDefines the initial state of panel content, supports one or two-way binding as well.
-
- -

Events

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
NameParametersDescription
onCollapseevent.originalEvent: browser event Callback to invoke when an active tab is collapsed by clicking on the header.
onExpandevent.originalEvent: browser event Callback to invoke when a tab gets expanded.
onToggleevent.originalEvent: browser event
- event.value: collapsed state as a boolean -
Callback to invoke when a tab gets expanded.
-
- -

Styling

-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameElement
p-panelContainer element.
p-panel-titlebarHeader section.
p-panel-titleTitle text of panel.
p-panel-titlebar-togglerToggle icon.
p-panel-contentContent of panel.
- -

Dependencies

-
    -
  • react-transition-group
  • -
-
- -
- - - - View on GitHub - - -{` -import React, {Component} from 'react'; -import {Panel} from 'primereact/panel'; - -export class PanelDemo extends Component { - - render() { - return ( -
-
-
-

Panel

-

Panel is a grouping component providing with content toggle feature.

-
-
- -
- -

The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. - His beloved son Michael has just come home from the war, but does not intend to become part of his father's business. - Through Michael's life the nature of the family business becomes clear. The business of the family is just like the head of the family, - kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the family.

-
- - -

The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. - His beloved son Michael has just come home from the war, but does not intend to become part of his father's business. - Through Michael's life the nature of the family business becomes clear. The business of the family is just like the head of the family, - kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the family.

-
-
-
- ) - } -} - -`} -
-
-
-
- ); - } -} diff --git a/src/showcase/panelmenu/PanelMenuDemo.js b/src/showcase/panelmenu/PanelMenuDemo.js deleted file mode 100644 index 85795ac86d..0000000000 --- a/src/showcase/panelmenu/PanelMenuDemo.js +++ /dev/null @@ -1,561 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {PanelMenu} from '../../components/panelmenu/PanelMenu'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class PanelMenuDemo extends Component { - - constructor() { - super(); - this.state = { - items:[ - { - label:'File', - icon:'pi pi-fw pi-file', - items:[ - { - label:'New', - icon:'pi pi-fw pi-plus', - items:[ - { - label:'Bookmark', - icon:'pi pi-fw pi-bookmark' - }, - { - label:'Video', - icon:'pi pi-fw pi-video' - } - ] - }, - { - label:'Delete', - icon:'pi pi-fw pi-trash' - }, - { - label:'Export', - icon:'pi pi-fw pi-external-link' - } - ] - }, - { - label:'Edit', - icon:'pi pi-fw pi-pencil', - items:[ - { - label:'Left', - icon:'pi pi-fw pi-align-left' - }, - { - label:'Right', - icon:'pi pi-fw pi-align-right' - }, - { - label:'Center', - icon:'pi pi-fw pi-align-center' - }, - { - label:'Justify', - icon:'pi pi-fw pi-align-justify' - } - ] - }, - { - label:'Users', - icon:'pi pi-fw pi-user', - items:[ - { - label:'New', - icon:'pi pi-fw pi-user-plus' - }, - { - label:'Delete', - icon:'pi pi-fw pi-user-minus' - }, - { - label:'Search', - icon:'pi pi-fw pi-users', - items:[ - { - label:'Filter', - icon:'pi pi-fw pi-filter', - items:[ - { - label:'Print', - icon:'pi pi-fw pi-print' - } - ] - }, - { - icon:'pi pi-fw pi-bars', - label:'List' - } - ] - } - ] - }, - { - label:'Events', - icon:'pi pi-fw pi-calendar', - items:[ - { - label:'Edit', - icon:'pi pi-fw pi-pencil', - items:[ - { - label:'Save', - icon:'pi pi-fw pi-calendar-plus' - }, - { - label:'Delete', - icon:'pi pi-fw pi-calendar-minus' - } - ] - }, - { - label:'Archieve', - icon:'pi pi-fw pi-calendar-times', - items:[ - { - label:'Remove', - icon:'pi pi-fw pi-calendar-minus' - } - ] - } - ] - } - ] - }; - } - - render() { - return ( -
-
-
-

PanelMenu

-

PanelMenu is a hybrid of accordion-tree components.

- - - { context => } - -
-
- -
- -
- - -
- ); - } -} - -class PanelMenuDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- - {` -import {PanelMenu} from 'primereact/panelmenu'; - -`} -

MenuItem API

-

PanelMenu uses the common menu item api to define its items, visit MenuModel for details.

- -

Getting Started

-

PanelMenu requires a collection of menuitems as its model.

- - {` - - -`} - - - - {` -const items:[ - { - label:'File', - icon:'pi pi-fw pi-file', - items:[ - { - label:'New', - icon:'pi pi-fw pi-plus', - items:[ - { - label:'Bookmark', - icon:'pi pi-fw pi-bookmark' - }, - { - label:'Video', - icon:'pi pi-fw pi-video' - } - ] - }, - { - label:'Delete', - icon:'pi pi-fw pi-trash' - }, - { - label:'Export', - icon:'pi pi-fw pi-external-link' - } - ] - }, - { - label:'Edit', - icon:'pi pi-fw pi-pencil', - items:[ - { - label:'Left', - icon:'pi pi-fw pi-align-left' - }, - { - label:'Right', - icon:'pi pi-fw pi-align-right' - }, - { - label:'Center', - icon:'pi pi-fw pi-align-center' - }, - { - label:'Justify', - icon:'pi pi-fw pi-align-justify' - }, - - ] - }, - { - label:'Users', - icon:'pi pi-fw pi-user', - items:[ - { - label:'New', - icon:'pi pi-fw pi-user-plus' - }, - { - label:'Delete', - icon:'pi pi-fw pi-user-minus' - }, - { - label:'Search', - icon:'pi pi-fw pi-users', - items:[ - { - label:'Filter', - icon:'pi pi-fw pi-filter', - items:[ - { - label:'Print', - icon:'pi pi-fw pi-print' - } - ] - }, - { - icon:'pi pi-fw pi-bars', - label:'List' - } - ] - } - ] - }, - { - label:'Events', - icon:'pi pi-fw pi-calendar', - items:[ - { - label:'Edit', - icon:'pi pi-fw pi-pencil', - items:[ - { - label:'Save', - icon:'pi pi-fw pi-calendar-plus' - }, - { - label:'Delete', - icon:'pi pi-fw pi-calendar-minus' - } - ] - }, - { - label:'Archieve', - icon:'pi pi-fw pi-calendar-times', - items:[ - { - label:'Remove', - icon:'pi pi-fw pi-calendar-minus' - } - ] - } - ] - } - ]; - -`} - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
modelarraynullAn array of menuitems.
stylestringnullInline style of the component.
classNamestringnullStyle class of the component.
-
- -

Styling

-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameElement
p-panelmenuContainer element.
p-panelmenu-headerAccordion header of root submenu.
p-panelmenu-contentAccordion content of root submenu.
p-submenu-listList element.
p-menuitemMenuitem element.
p-menuitem-textLabel of a menuitem.
p-menuitem-iconIcon of a menuitem.
p-panelmenu-iconArrow icon of an accordion header.
-
- -

Dependencies

-

None.

-
- - - - View on GitHub - - - {` -import React, {Component} from 'react'; -import {PanelMenu} from 'primereact/panelmenu'; - -export class PanelMenuDemo extends Component { - - constructor() { - super(); - this.state = { - items:[ - { - label:'File', - icon:'pi pi-fw pi-file', - items:[ - { - label:'New', - icon:'pi pi-fw pi-plus', - items:[ - { - label:'Bookmark', - icon:'pi pi-fw pi-bookmark' - }, - { - label:'Video', - icon:'pi pi-fw pi-video' - }, - - ] - }, - { - label:'Delete', - icon:'pi pi-fw pi-trash' - }, - { - label:'Export', - icon:'pi pi-fw pi-external-link' - } - ] - }, - { - label:'Edit', - icon:'pi pi-fw pi-pencil', - items:[ - { - label:'Left', - icon:'pi pi-fw pi-align-left' - }, - { - label:'Right', - icon:'pi pi-fw pi-align-right' - }, - { - label:'Center', - icon:'pi pi-fw pi-align-center' - }, - { - label:'Justify', - icon:'pi pi-fw pi-align-justify' - }, - - ] - }, - { - label:'Users', - icon:'pi pi-fw pi-user', - items:[ - { - label:'New', - icon:'pi pi-fw pi-user-plus', - - }, - { - label:'Delete', - icon:'pi pi-fw pi-user-minus', - - }, - { - label:'Search', - icon:'pi pi-fw pi-users', - items:[ - { - label:'Filter', - icon:'pi pi-fw pi-filter', - items:[ - { - label:'Print', - icon:'pi pi-fw pi-print' - } - ] - }, - { - icon:'pi pi-fw pi-bars', - label:'List' - } - ] - } - ] - }, - { - label:'Events', - icon:'pi pi-fw pi-calendar', - items:[ - { - label:'Edit', - icon:'pi pi-fw pi-pencil', - items:[ - { - label:'Save', - icon:'pi pi-fw pi-calendar-plus' - }, - { - label:'Delete', - icon:'pi pi-fw pi-calendar-minus' - } - ] - }, - { - label:'Archieve', - icon:'pi pi-fw pi-calendar-times', - items:[ - { - label:'Remove', - icon:'pi pi-fw pi-calendar-minus' - } - ] - } - ] - } - ] - }; - } - - render() { - return ( -
-
-
-

PanelMenu

-

PanelMenu is a hybrid of accordion-tree components.

-
-
- -
- -
-
- ); - } -} - `} -
-
-
-
- ) - } - -} diff --git a/src/showcase/password/PasswordDemo.js b/src/showcase/password/PasswordDemo.js deleted file mode 100644 index f634603e04..0000000000 --- a/src/showcase/password/PasswordDemo.js +++ /dev/null @@ -1,190 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {Password} from '../../components/password/Password'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class PasswordDemo extends Component { - - render() { - return ( -
-
-
-

Password

-

Password displays strength indicator for password fields.

- - - { context => } - -
-
- -
-

Password

- -
- - -
- ); - } -} - -class PasswordDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- - {` -import {Password} from 'primereact/password'; - -`} - -

Getting Started

-

Password is used as a controlled component with value and onChange properties.

- - {` - this.setState({value: e.target.value})} /> - -`} - - -

Properties

-

Password accepts all valid properties of an input element in addition the the custom properties below.

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
promptLabelstringPlease enter a passwordText to prompt password entry.
weakLabelstringWeakText for a weak password.
mediumLabelstringMediumText for a medium password.
strongLabelstringStrongText for a strong password.
feedbackbooleantrueWhether to show the strength indicator or not.
tooltipanynullContent of the tooltip.
tooltipOptionsobjectnullConfiguration of the tooltip, refer to the tooltip documentation for more information.
-
- -

Styling

-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - -
NameElement
p-password-panelContainer of password panel
p-password-meterMeter element of password strength
p-password-infoText to display strength
-
- -

Dependencies

-

None.

-
- - - - View on GitHub - - - {` -import React, {Component} from 'react'; -import {Password} from 'primereact/password'; - -export class PasswordDemo extends Component { - - render() { - return ( -
-
-
-

Password

-

Password displays strength indicator for password fields.

-
-
- -
-

Password

- -
-
- ); - } -} - `} -
-
-
-
- ) - } - -} diff --git a/src/showcase/picklist/PickListDemo.js b/src/showcase/picklist/PickListDemo.js deleted file mode 100644 index 2333e1905a..0000000000 --- a/src/showcase/picklist/PickListDemo.js +++ /dev/null @@ -1,407 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {PickList} from '../../components/picklist/PickList'; -import {CarService} from '../service/CarService'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class PickListDemo extends Component { - - constructor() { - super(); - this.state = { - source: [], - target: [] - }; - this.carservice = new CarService(); - this.carTemplate = this.carTemplate.bind(this); - this.onChange = this.onChange.bind(this); - } - - componentDidMount() { - this.carservice.getCarsSmall().then(data => this.setState({source: data})); - } - - onChange(event) { - this.setState({ - source: event.source, - target: event.target - }); - } - - carTemplate(car) { - var imageSource = 'showcase/resources/demo/images/car/' + car.brand + '.png'; - - return ( -
- {car.brand} -
{car.brand} - {car.year} - {car.color}
-
- ); - } - - render() { - return ( -
-
-
-

PickList

-

PickList is used to reorder items between different lists.

- - - { context => } - -
-
- -
- -
- - -
- ); - } -} - -export class PickListDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import {PickList} from 'primereact/picklist'; - -`} - - -

Getting Started

-

PickList requires two arrays as source and target lists, an itemTemplate for the item content and onChange callback to update the value after reorder or transfer.

- -{` - this.setState({source: e.source, target: e.target})} /> - -`} - - -

Responsive

-

In responsive mode, picklist adjusts its controls based on screen size. To activate this mode, set responsive as true.

- -{` - this.setState({source: e.source, target: e.target})} responsive={true} /> - -`} - - -

Headers

-

sourceHeader and targetHeader properties are used to define captions for the lists that accept simple strings or JSX for custom content.

- - -{` - this.setState({source: e.source, target: e.target})} sourceHeader="Available" targetHeader="Seleced"/> - -`} - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
sourcearraynullAn array of objects for the source list.
targetarraynullAn array of objects for the target list.
sourceHeaderstringnullText for the source list caption.
targetHeaderstringnullText for the target list caption.
stylestringnullInline style of the element.
classNamestringnullStyle class of the element.
sourceStylestringnullInline style of the source list element.
targetStylestringnullInline style of the target list element.
responsivebooleanfalseWhen enabled orderlist adjusts its controls based on screen size.
showSourceControlsbooleantrueWhether to show buttons of source list.
showTargetControlsbooleantrueWhether to show buttons of target list.
itemTemplatefunctionnullFunction that gets the option and returns the content for it.
metaKeySelectionbooleantrueDefines how multiple items can be selected, when true metaKey needs to be pressed to select or unselect an item and when set to false selection of each item - can be toggled individually. On touch enabled devices, metaKeySelection is turned off automatically.
tabIndexstringnullIndex of the element in tabbing order.
-
- -

Events

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameParametersDescription
onChangeevent.originalEvent: Browser event
- event.source: Source list
- event.target: Target list
Callback to invoke when items are moved from source to target.
onMoveToSourceevent.originalEvent: Browser event
- event.value: Moved items
Callback to invoke when items are moved from target to source.
onMoveAllToSourceevent.originalEvent: Browser event
- event.value: Moved items
Callback to invoke when all items are moved from target to source.
onMoveToTargetevent.originalEvent: Browser event
- event.value: Moved items
Callback to invoke when items are moved from source to target.
onMoveAllToTargetevent.originalEvent: Browser event
- event.value: Moved items
Callback to invoke when all items are moved from source to target.
onSourceSelectevent.originalEvent: Browser event
- items: Selected items array
Callback to invoke when items are selected within source list.
onTargetSelectevent.originalEvent: Browser event
- items: Selected items array
Callback to invoke when items are selected within target list.
-
- -

Styling

-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameElement
p-picklistContainer element.
p-picklist-source-controlsContainer of source list buttons.
p-picklist-target-controlsContainer of target list buttons.
p-picklist-buttonsContainer of buttons.
p-picklist-listwrapperParent of a list element.
p-picklist-listList element.
p-picklist-itemAn item in the list.
- -

Dependencies

-

None.

-
- -
- - - - View on GitHub - - -{` -import React, {Component} from 'react'; -import {PickList} from 'primereact/picklist'; -import {CarService} from '../service/CarService'; - -export class PickListDemo extends Component { - - constructor() { - super(); - this.state = { - source: [], - target: [] - }; - this.carservice = new CarService(); - this.carTemplate = this.carTemplate.bind(this); - this.onChange = this.onChange.bind(this); - } - - componentDidMount() { - this.carservice.getCarsSmall().then(data => this.setState({source: data})); - } - - onChange(event) { - this.setState({ - source: event.source, - target: event.target - }); - } - - carTemplate(car) { - var imageSource = 'showcase/resources/demo/images/car/' + car.brand + '.png'; - - return ( -
- {car.brand} -
{car.brand} - {car.year} - {car.color}
-
- ); - } - - render() { - return ( -
-
-
-

PickList

-

PickList is used to reorder items between differents lists.

-
-
- -
- -
-
- ); - } -} - -`} -
-
-
-
- ); - } -} diff --git a/src/showcase/progressbar/ProgressBarDemo.js b/src/showcase/progressbar/ProgressBarDemo.js deleted file mode 100644 index 068202459d..0000000000 --- a/src/showcase/progressbar/ProgressBarDemo.js +++ /dev/null @@ -1,319 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {ProgressBar} from '../../components/progressbar/ProgressBar'; -import {Growl} from '../../components/growl/Growl'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class ProgressBarDemo extends Component { - - constructor() { - super(); - this.state = { - value1: 0, - value2: 50, - value3: 40 - }; - - this.displayValueTemplate = this.displayValueTemplate.bind(this); - } - - displayValueTemplate(value) { - return ( - - {value}/100 - - ); - } - - componentDidMount() { - this.interval = setInterval(() => { - let val = this.state.value1; - val += Math.floor(Math.random() * 10) + 1; - - if(val >= 100) { - val = 100; - this.growl.show({severity: 'info', summary: 'Success', detail: 'Process Completed'}); - clearInterval(this.interval); - } - - this.setState({ - value1: val - }); - }, 2000); - } - - componentWillUnmount () { - if (this.interval) { - clearInterval(this.interval); - this.interval = null; - } - } - - render() { - return ( -
-
-
-

ProgressBar

-

ProgressBar is a process status indicator

- - - { context => } - -
-
- -
- this.growl = el}> - -

Dynamic

- - -

Static

- - -

Custom display value

- - -

Indeterminate

- -
- -
- ); - } -} - -export class ProgressBarDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import {ProgressBar} from 'primereact/progressbar'; - -`} - - -

Getting Started

-

ProgressBar has two modes; "determinate" (default) and "indeterminate". In determinate mode, a value between 0 and 100 is required to display the progress.

- -{` - - -`} - -

Indeterminate is simplly enabled using mode property.

- - {` - - -`} - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
valuenumbernullCurrent value of the progress.
showValuebooleantrueShow or hide progress bar value.
unitstring%Unit sign appended to the value.
stylestringnullInline style of the element.
classNamestringnullStyle class of the element.
modestringdeterminateDefines the mode of the progress, valid values are "determinate" and "indeterminate".
displayValueTemplateElementnullCustom display value template
-
- -

Styling

-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameElement
p-progressbarContainer element.
p-progressbar-determinateContainer element of a determinate progressbar.
p-progressbar-indeterminateContainer element of an indeterminate progressbar.
p-progressbar-valueElement whose width changes according to value.
p-progressbar-labelLabel element that displays the current value.
- -

Dependencies

-

None.

-
-
- - - - View on GitHub - - -{` -import React, {Component} from 'react'; -import {ProgressBar} from 'primereact/progressbar'; -import {Growl} from 'primereact/growl'; - -export class ProgressBarDemo extends Component { - - constructor() { - super(); - this.state = { - value1: 0, - value2: 50, - value3: 40 - }; - - this.displayValueTemplate = this.displayValueTemplate.bind(this); - } - - displayValueTemplate(value) { - return ( - - {value}/100 - - ); - } - - componentDidMount() { - this.interval = setInterval(() => { - let val = this.state.value1; - val += Math.floor(Math.random() * 10) + 1; - - if(val >= 100) { - val = 100; - this.growl.show({severity: 'info', summary: 'Success', detail: 'Process Completed'}); - clearInterval(this.interval); - } - - this.setState({ - value1: val - }); - }, 2000); - } - - componentWillUnmount () { - if (this.interval) { - clearInterval(this.interval); - this.interval = null; - } - } - - render() { - return ( -
-
-
-

ProgressBar

-

ProgressBar is a process status indicator

-
-
- -
- this.growl = el}> - -

Dynamic

- - -

Static

- - -

Custom display value

- - -

Indeterminate

- -
-
- ); - } -} - -`} -
-
-
-
- ); - } -} diff --git a/src/showcase/progressspinner/ProgressSpinnerDemo.js b/src/showcase/progressspinner/ProgressSpinnerDemo.js deleted file mode 100644 index 1f3aa46f65..0000000000 --- a/src/showcase/progressspinner/ProgressSpinnerDemo.js +++ /dev/null @@ -1,211 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {ProgressSpinner} from '../../components/progressspinner/ProgressSpinner'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class ProgressSpinnerDemo extends Component { - - render() { - return ( -
-
-
-

ProgressSpinner

-

ProgressSpinner is a process status indicator.

- - - { context => } - -
-
- -
-

Basic

- - -

Custom

- -
- - -
- ); - } -} - -class ProgressSpinnerDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- - {` -import {ProgressSpinner} from 'primereact/progressspinner'; - -`} - -

Getting Started

-

ProgressSpinner is defined using ProgressSpinner element.

- - {` - - -`} - - -

Colors

-

Colors of the spinner can be changed by overriding the keyframes animation

- - {` -@keyframes ui-progress-spinner-color { - 100%, - 0% { - stroke: #d62d20; - } - 40% { - stroke: #0057e7; - } - 66% { - stroke: #008744; - } - 80%, - 90% { - stroke: #ffa700; - } -} - -`} - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
styleobjectnullInline style of the element.
classNamestringnullStyle class of the element.
strokeWidthstring2Width of the circle stroke.
fillstringnullColor for the background of the circle.
animationDurationstring2sDuration of the rotate animation.
-
-

Styling

-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - -
NameElement
p-progress-spinnerContainer element.
p-progress-circleSVG element.
p-progress-pathCircle element.
-
- -

Dependencies

-

None.

-
- - - - View on GitHub - - - {` -import React, {Component} from 'react'; -import {ProgressSpinner} from 'primereact/progressspinner'; - -export class ProgressSpinnerDemo extends Component { - - render() { - return ( -
-
-
-

ProgressSpinner

-

ProgressSpinner is a process status indicator.

-
-
- -
-

Basic

- - -

Custom

- -
-
- ); - } -} - `} -
-
-
-
- ) - } - -} diff --git a/src/showcase/radiobutton/RadioButtonDemo.js b/src/showcase/radiobutton/RadioButtonDemo.js deleted file mode 100644 index 96eb8de5db..0000000000 --- a/src/showcase/radiobutton/RadioButtonDemo.js +++ /dev/null @@ -1,285 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {RadioButton} from '../../components/radiobutton/RadioButton'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class RadioButtonDemo extends Component { - - constructor() { - super(); - this.state = { - city: null - }; - } - - render() { - return ( -
-
-
-

RadioButton

-

RadioButton is an extension to standard radio button element with skinning capabilities.

- - - { context => } - -
-
- -
-
-
- this.setState({city: e.value})} checked={this.state.city === 'New York'} /> - -
-
- this.setState({city: e.value})} checked={this.state.city === 'San Francisco'} /> - -
-
- this.setState({city: e.value})} checked={this.state.city === 'Los Angeles'} /> - -
-
- Selected City : {this.state.city} -
- - -
- ) - } -} - -class RadioButtonDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import {RadioButton} from 'primereact/radiobutton'; - -`} - - -

Getting Started

-

RadioButton is used as a controlled input with checked and onChange properties.

- -{` - this.setState({value: e.value})} checked={this.state.value === 'val1'} /> - this.setState({value: e.value})} checked={this.state.value === 'val1'} /> - -`} - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
inputIdstringnullUnique identifier of the inner native radiobutton.
namestringnullName of the checkbox element .
valueanynullValue of the radiobutton.
checkedbooleanfalseSpecifies whether a radiobutton should be checked or not.
stylestringnullInline style of the element.
classNamestringnullStyle class of the element.
disabledbooleanfalseWhen present, it specifies that the element value cannot be altered.
requiredbooleanfalseWhen present, it specifies that an input field must be filled out before submitting the form.
tooltipanynullContent of the tooltip.
tooltipOptionsobjectnullConfiguration of the tooltip, refer to the tooltip documentation for more information.
ariaLabelledBystringnullEstablishes relationships between the component and label(s) where its value should be one or more element IDs.
-
- -

Events

-
- - - - - - - - - - - - - - - -
NameParametersDescription
onChangeevent.originalEvent: Original event
- event.value: Value of the radiobutton
- event.checked: Checked state as a boolean.
Callback to invoke on radio button click.
-
- -

Styling

-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
NameElement
p-radiobuttonContainer element
p-radiobutton-boxContainer of icon.
p-radiobutton-iconIcon element.
p-radiobutton-labelLabel element.
-
- -

Dependencies

-

None.

-
- - - View on GitHub - - -{` -import React, {Component} from 'react'; -import {RadioButton} from 'primereact/radiobutton'; - -export class RadioButtonDemo extends Component { - - constructor() { - super(); - this.state = { - city: null - }; - } - - render() { - return ( -
-
-
-

RadioButton

-

RadioButton is an extension to standard radio button element with skinning capabilities.

-
-
- -
-
-
- this.setState({city: e.value})} checked={this.state.city === 'New York'} /> - -
-
- this.setState({city: e.value})} checked={this.state.city === 'San Francisco'} /> - -
-
- this.setState({city: e.value})} checked={this.state.city === 'Los Angeles'} /> - -
-
- Selected City : {this.state.city} -
-
- ) - } -} - -`} -
-
-
-
- ) - } -} diff --git a/src/showcase/rating/RatingDemo.js b/src/showcase/rating/RatingDemo.js deleted file mode 100644 index 3736edda29..0000000000 --- a/src/showcase/rating/RatingDemo.js +++ /dev/null @@ -1,287 +0,0 @@ -import React, { Component } from 'react'; -import { Rating } from '../../components/rating/Rating' -import { TabView, TabPanel } from '../../components/tabview/TabView'; -import { CodeHighlight } from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class RatingDemo extends Component { - - constructor() { - super(); - this.state = { - val1: null, - val2: null - }; - } - - render() { - return ( -
-
-
-

Rating

-

Rating componentsis a star based selection input.

- - - { context => } - -
-
- -
-

Basic {this.state.val1}

- this.setState({val1: e.value})} /> - -

No Cancel {this.state.val2}

- this.setState({val2: e.value})} /> - -

ReadOnly

- - -

Disabled

- -
- - -
- ) - } -} - -class RatingDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- - {` -import {Rating} from 'primereact/rating'; - -`} - - -

Getting Started

-

Rating is used a controlled input component with value and onChange properties.

- - -{` - this.setState({value: e.value})} /> - -`} - - -

Number of Stars

-

Number of stars to display is defined with stars property, default is 5.

- - -{` - this.setState({value: e.value})} stars={5} /> - -`} - - -

Cancel

-

A cancel icon is displayed to reset the value by default, set cancel as false to remove this option.

- - -{` - this.setState({value: e.value})} cancel={5} /> - -`} - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
valuenumbernullValue of the rating.
disabledbooleanfalseWhen present, it specifies that the element should be disabled.
readonlybooleanfalseWhen present, changing the value is not possible.
starsnumber5Number of stars.
cancelbooleantrueWhen specified a cancel icon is displayed to allow removing the value.
styleobjectnullInline style of the component.
classNamestringnullClassName of the component.
tooltipanynullContent of the tooltip.
tooltipOptionsobjectnullConfiguration of the tooltip, refer to the tooltip documentation for more information.
-
- -

Events

-
- - - - - - - - - - - - - - - -
NameParametersDescription
onChangeevent.originalEvent: Browser event
- event.value: selected value -
Callback to invoke on value change.
-
- -

Styling

-

Following is the list of structural style classes

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
NameElement
p-ratingContainer element
p-rating-starStar element
p-rating-star-onSelected star element.
p-rating-cancelCancel icon.
-
- -

Dependencies

-

None.

-
- - - - View on GitHub - - - {` -import React, {Component} from 'react'; -import {Rating} from 'primereact/rating'; - -export class RatingDemo extends Component { - - constructor() { - super(); - this.state = { - val1: null, - val2: null - }; - } - - render() { - return ( -
-
-
-

Rating

-

Rating components is a star based selection input.

-
-
- -
-

Basic {this.state.val1}

- this.setState({val1: e.value})} /> - -

No Cancel {this.state.val2}

- this.setState({val2: e.value})} /> - -

ReadOnly

- - -

Disabled

- -
-
- ) - } -} - -`} -
-
-
-
- ) - } -} diff --git a/src/showcase/scrollpanel/ScrollPanelDemo.js b/src/showcase/scrollpanel/ScrollPanelDemo.js deleted file mode 100644 index 12d9d242de..0000000000 --- a/src/showcase/scrollpanel/ScrollPanelDemo.js +++ /dev/null @@ -1,332 +0,0 @@ -import React, { Component } from 'react'; -import { Link } from 'react-router-dom'; -import { ScrollPanel } from '../../components/scrollpanel/ScrollPanel'; -import { TabView, TabPanel } from '../../components/tabview/TabView'; -import { CodeHighlight } from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class ScrollPanelDemo extends Component { - - render() { - return ( -
-
-
-

ScrollPanel

-

ScrollPanel is a cross browser, lightweight and skinnable alternative to native browser scrollbar.

- - - { context => } - -
-
- -
-
-
- -
- The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved - son Michael has just come home from the war, but does not intend to become part of his father's business. Through - Michael's life the nature of the family business becomes clear. The business of the family is just like the head - of the family, kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands - against the good of the family. - The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved - son Michael has just come home from the war, but does not intend to become part of his father's business. Through Michael's - life the nature of the family business becomes clear. The business of the family is just like the head of the family, kind - and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the - family. -
-
-
-
- -
- The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved - son Michael has just come home from the war, but does not intend to become part of his father's business. Through - Michael's life the nature of the family business becomes clear. The business of the family is just like the head - of the family, kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands - against the good of the family. - The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved - son Michael has just come home from the war, but does not intend to become part of his father's business. Through Michael's - life the nature of the family business becomes clear. The business of the family is just like the head of the family, kind - and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the - family. -
-
-
-
- -
- The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved - son Michael has just come home from the war, but does not intend to become part of his father's business. Through - Michael's life the nature of the family business becomes clear. The business of the family is just like the head - of the family, kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands - against the good of the family. - The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved - son Michael has just come home from the war, but does not intend to become part of his father's business. Through Michael's - life the nature of the family business becomes clear. The business of the family is just like the head of the family, kind - and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the - family. -
-
-
-
-
- - -
- ) - } -} - -export class ScrollPanelDoc extends Component { - - shouldComponentUpdate() { - return false; - } - - render() { - return ( -
- - -

Import

- - {` -import {ScrollPanel} from 'primereact/scrollpanel'; - -`} - - -

Getting Started

-

ScrollPanel is defined using dimensions for the scrollable viewport.

- - {` - - The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. - His beloved son Michael has just come home from the war, but does not intend to become part of his father's business. - Through Michael's life the nature of the family business becomes clear. The business of the family is just like the head of the family, - kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the family. - - -`} - - -

Customization

-

Look and feel can easily be customized, here is an example with a custom handle.

- - {` - - The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. - His beloved son Michael has just come home from the war, but does not intend to become part of his father's business. - Through Michael's life the nature of the family business becomes clear. The business of the family is just like the head of the family, - kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the family. - - -`} - - - - {` -.custom .p-scrollpanel-wrapper { - border-right: 9px solid #f4f4f4; -} - -.custom .p-scrollpanel-bar { - background-color: #1976d2; - opacity: 1; - transition: background-color .3s; -} - -.custom .p-scrollpanel-bar:hover { - background-color: #135ba1; -} - -`} - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
stylestringnullInline style of the component.
styleClassstringnullStyle class of the component.
-
- -

Methods

-
- - - - - - - - - - - - - - - -
NameParametersDescription
refresh-Refreshes the position and size of the scrollbar.
-
- -

Styling

-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameElement
p-scrollpanelContainer element.
p-scrollpanel-wrapperWrapper of content section.
p-scrollpanel-contentContent section.
p-scrollpanel-barScrollbar handle.
p-scrollpanel-bar-xScrollbar handle of a horizontal bar.
p-scrollpanel-bar-yScrollbar handle of a vertical bar
- -

Dependencies

-

None.

-
- -
- - - - View on GitHub - - - {` -import React, {Component} from 'react'; -import {ScrollPanel} from 'primereact/scrollpanel'; - -export class ScrollPanelDemo extends Component { - - render() { - return ( -
-
-
-

ScrollPanel

-

ScrollPanel is a cross browser, lightweight and skinnable alternative to native browser scrollbar.

-
-
- -
-
-
- -
- The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved - son Michael has just come home from the war, but does not intend to become part of his father's business. Through - Michael's life the nature of the family business becomes clear. The business of the family is just like the head - of the family, kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands - against the good of the family. - The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved - son Michael has just come home from the war, but does not intend to become part of his father's business. Through Michael's - life the nature of the family business becomes clear. The business of the family is just like the head of the family, kind - and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the - family. -
-
-
-
- -
- The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved - son Michael has just come home from the war, but does not intend to become part of his father's business. Through - Michael's life the nature of the family business becomes clear. The business of the family is just like the head - of the family, kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands - against the good of the family. - The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved - son Michael has just come home from the war, but does not intend to become part of his father's business. Through Michael's - life the nature of the family business becomes clear. The business of the family is just like the head of the family, kind - and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the - family. -
-
-
-
- -
- The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved - son Michael has just come home from the war, but does not intend to become part of his father's business. Through - Michael's life the nature of the family business becomes clear. The business of the family is just like the head - of the family, kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands - against the good of the family. - The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved - son Michael has just come home from the war, but does not intend to become part of his father's business. Through Michael's - life the nature of the family business becomes clear. The business of the family is just like the head of the family, kind - and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the - family. -
-
-
-
-
-
- ) - } -} - -`} -
-
-
-
- ); - } -} diff --git a/src/showcase/scrolltotop/ScrollToTop.js b/src/showcase/scrolltotop/ScrollToTop.js deleted file mode 100644 index dd9e874f91..0000000000 --- a/src/showcase/scrolltotop/ScrollToTop.js +++ /dev/null @@ -1,16 +0,0 @@ -import {Component} from 'react'; -import {withRouter } from 'react-router-dom'; - -class ScrollToTop extends Component { - componentDidUpdate(prevProps) { - if (this.props.location !== prevProps.location) { - window.scrollTo(0, 0) - } - } - - render() { - return this.props.children - } -} - -export default withRouter(ScrollToTop); \ No newline at end of file diff --git a/src/showcase/selectbutton/SelectButtonDemo.js b/src/showcase/selectbutton/SelectButtonDemo.js deleted file mode 100644 index 25d3993c22..0000000000 --- a/src/showcase/selectbutton/SelectButtonDemo.js +++ /dev/null @@ -1,431 +0,0 @@ -import React, {Component} from 'react'; -import {SelectButton} from '../../components/selectbutton/SelectButton'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class SelectButtonDemo extends Component { - - constructor(props) { - super(props); - this.state = { - value1: null, - value2: ['Apartment', 'Studio'], - value3: null, - options: [ - {label: 'Apartment', value: 'Apartment'}, - {label: 'House', value: 'House'}, - {label: 'Studio', value: 'Studio'} - ], - cars: [ - {brand: 'Audi', key: 'A'}, - {brand: 'BMW', key: 'B'}, - {brand: 'Mercedes', key: 'M'} - ] - }; - } - - carTemplate(option) { - const logoPath = 'showcase/resources/demo/images/car/' + option.brand + '.png'; - - return ( -
- {option.brand} -
{option.brand}
-
- ) - } - - render() { - return ( -
-
-
-

SelectButton

-

SelectButton is used to choose single or multiple items from a list using buttons.

- - - { context => } - -
-
- -
-

Single

- this.setState({value1: e.value})} /> -
-

Selected Value: {this.state.value1}

- -

Multiple

- this.setState({value2: e.value})} /> -
-

Selected Values: {this.state.value2 && this.state.value2.map((val) => val + " ")}

- -

Custom Content

- this.setState({value3: e.value})} itemTemplate={this.carTemplate} optionLabel="brand" optionValue="brand" /> -
-

Selected Value: {this.state.value3}

-
- - -
- ); - } -} - -class SelectButtonDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import {SelectButton} from 'primereact/selectbutton'; - -`} - - -

Getting Started

-

Dropdown is used as a controlled component with value and onChange properties along with the options collection. There are two alternatives - of how to define the options property; One way is providing a collection of SelectItem instances having label-value pairs - whereas other way is providing an array of arbitrary objects along with the optionLabel and optionValue properties to specify the label/value field pair. In addition, - options can be simple primitive values such as a string array, in this case no optionLabel or optionValue is necessary.

- -

Options as SelectItems

- - {` -const citySelectItems = [ - {label: 'New York', value: 'NY'}, - {label: 'Rome', value: 'RM'}, - {label: 'London', value: 'LDN'}, - {label: 'Istanbul', value: 'IST'}, - {label: 'Paris', value: 'PRS'} -]; - -`} - - - -{` - this.setState({city: e.value})}> - -`} - - -

Options as any type

- -{` -const cities = [ - {name: 'New York', code: 'NY'}, - {name: 'Rome', code: 'RM'}, - {name: 'London', code: 'LDN'}, - {name: 'Istanbul', code: 'IST'}, - {name: 'Paris', code: 'PRS'} -]; - -`} - - - -{` - this.setState({city: e.value})}> - this.setState({city: e.value})}> - -`} - -

When optionValue is not defined, value of an option refers to the option object itself.

- -

Multiple

-

SelectButton allows selecting only one item by default and setting multiple option enables choosing more than one item. In multiple case, model property should be an array.

- -

Custom Content

-

Options support templating using the itemTemplate property that references a function to render the content. Notice - the usage of optionLabel, although it is not rendered visually, it is still required to be used as the list key.

- - -{` - this.setState({value: e.value})} itemTemplate={this.carTemplate} optionLabel="brand" optionValue="brand" /> - -`} - - - -{` -carTemplate(option) { - const logoPath = 'showcase/resources/demo/images/car/' + option.brand + '.png'; - - return ( -
- {option.brand} -
{option.brand}
-
- ) -} - -`} -
- -

SelectItem API

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
labelstringnullLabel of the option.
valuestringnullValue of the option.
classNamestringnullClassName of the option.
titlestringnullTooltip text of the option. (Not supported)
disabledbooleanfalseWhether the option is disabled or not. (Not supported)
-
- -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
valueanynullValue of the component.
optionsarraynullAn array of objects to display as the available options.
optionLabelstringnullName of the label field of an option when an arbitrary objects instead of SelectItems are used as options.
optionValuestringnullName of the value field of an option when arbitrary objects are used as options instead of SelectItems.
tabIndexstringnullIndex of the element in tabbing order.
multiplebooleanfalseWhen specified, allows selecting multiple values.
disabledbooleanfalseWhen present, it specifies that the element should be disabled.
stylestringnullInline style of the element.
classNamestringnullStyle class of the element.
dataKeystringnullA property to uniquely match the value in options for better performance.
tooltipanynullContent of the tooltip.
tooltipOptionsobjectnullConfiguration of the tooltip, refer to the tooltip documentation for more information.
ariaLabelledBystringnullEstablishes relationships between the component and label(s) where its value should be one or more element IDs.
itemTemplatefunctionnullFunction that gets the option and returns the content.
-
- -

Events

-
- - - - - - - - - - - - - - - -
NameParametersDescription
onChangeevent.originalEvent: browser event
- event.value: Single value or an array of values that are selected.
Callback to invoke on value change.
-
- -

Dependencies

-

None.

-
- - - - View on GitHub - - -{` -import React, {Component} from 'react'; -import {SelectButton} from 'primereact/selectbutton'; - -export class SelectButtonDemo extends Component { - - constructor(props) { - super(props); - this.state = { - value1: null, - value2: ['Apartment', 'Studio'], - value3: null, - options: [ - {label: 'Apartment', value: 'Apartment'}, - {label: 'House', value: 'House'}, - {label: 'Studio', value: 'Studio'} - ], - cars: [ - {brand: 'Audi', key: 'A'}, - {brand: 'BMW', key: 'B'}, - {brand: 'Mercedes', key: 'M'} - ] - }; - } - - carTemplate(option) { - const logoPath = 'showcase/resources/demo/images/car/' + option.brand + '.png'; - - return ( -
- {option.brand} -
{option.brand}
-
- ) - } - - render() { - return ( -
-
-
-

SelectButton

-

SelectButton is used to choose single or multiple items from a list using buttons.

-
-
- -
-

Single

- this.setState({value1: e.value})} /> -
-

Selected Value: {this.state.value1}

- -

Multiple

- this.setState({value2: e.value})} /> -
-

Selected Values: {this.state.value2 && this.state.value2.map((val) => val + " ")}

- -

Custom Content

- this.setState({value3: e.value})} itemTemplate={this.carTemplate} optionLabel="brand" optionValue="brand" /> -
-

Selected Value: {this.state.value3}

-
-
- ); - } -} - -`} -
-
-
-
- ); - } -} diff --git a/src/showcase/service/CarService.js b/src/showcase/service/CarService.js deleted file mode 100644 index 8732993199..0000000000 --- a/src/showcase/service/CarService.js +++ /dev/null @@ -1,19 +0,0 @@ -import axios from 'axios'; - -export class CarService { - - getCarsSmall() { - return axios.get('showcase/resources/demo/data/cars-small.json') - .then(res => res.data.data); - } - - getCarsMedium() { - return axios.get('showcase/resources/demo/data/cars-medium.json') - .then(res => res.data.data); - } - - getCarsLarge() { - return axios.get('showcase/resources/demo/data/cars-large.json') - .then(res => res.data.data); - } -} \ No newline at end of file diff --git a/src/showcase/service/CountryService.js b/src/showcase/service/CountryService.js deleted file mode 100644 index 8e0d7dc471..0000000000 --- a/src/showcase/service/CountryService.js +++ /dev/null @@ -1,13 +0,0 @@ -import axios from 'axios' - -export class CountryService { - - getCountries(_this) { - axios.get('showcase/resources/demo/data/countries.json') - .then(res => res.data.data) - .then(data => { - _this.setState({ countriesData: data }); - return data; - }); - } -} \ No newline at end of file diff --git a/src/showcase/service/CustomerService.js b/src/showcase/service/CustomerService.js deleted file mode 100644 index 6c729e1bc0..0000000000 --- a/src/showcase/service/CustomerService.js +++ /dev/null @@ -1,24 +0,0 @@ -import axios from 'axios'; - -export class CustomerService { - - getCustomersSmall() { - return axios.get('showcase/resources/demo/data/customers-small.json') - .then(res => res.data.data); - } - - getCustomersMedium() { - return axios.get('showcase/resources/demo/data/customers-medium.json') - .then(res => res.data.data); - } - - getCustomersLarge() { - return axios.get('showcase/resources/demo/data/customers-large.json') - .then(res => res.data.data); - } - - getCustomersXLarge() { - return axios.get('showcase/resources/demo/data/customers-xlarge.json') - .then(res => res.data.data); - } -} \ No newline at end of file diff --git a/src/showcase/service/EventService.js b/src/showcase/service/EventService.js deleted file mode 100644 index 6e940e6603..0000000000 --- a/src/showcase/service/EventService.js +++ /dev/null @@ -1,9 +0,0 @@ -import axios from 'axios'; - -export class EventService { - - getEvents() { - return axios.get('showcase/resources/demo/data/events.json') - .then(res => res.data.data); - } -} \ No newline at end of file diff --git a/src/showcase/service/GalleriaService.js b/src/showcase/service/GalleriaService.js deleted file mode 100644 index 80d8a2201c..0000000000 --- a/src/showcase/service/GalleriaService.js +++ /dev/null @@ -1,9 +0,0 @@ -import axios from 'axios'; - -export class GalleriaService { - - getImages() { - return axios.get('showcase/resources/demo/data/galleria.json') - .then(res => res.data.data); - } -} diff --git a/src/showcase/service/IconService.js b/src/showcase/service/IconService.js deleted file mode 100644 index 8e7817747a..0000000000 --- a/src/showcase/service/IconService.js +++ /dev/null @@ -1,21 +0,0 @@ -import axios from 'axios'; - -export class IconService { - - constructor() { - this.icons = []; - this.selectedIcon = null; - } - - getIcons() { - return axios.get('showcase/resources/demo/data/icons.json', { headers: { 'Cache-Control' : 'no-cache' } }) - .then(res => res.data.icons); - } - - getIcon(id){ - if (this.icons) { - this.selectedIcon=this.icons.find(x => x.properties.id === id); - return this.selectedIcon; - } - } -} diff --git a/src/showcase/service/NodeService.js b/src/showcase/service/NodeService.js deleted file mode 100644 index 2c0249cf12..0000000000 --- a/src/showcase/service/NodeService.js +++ /dev/null @@ -1,14 +0,0 @@ -import axios from 'axios'; - -export class NodeService { - - getTreeTableNodes() { - return axios.get('showcase/resources/demo/data/treetablenodes.json') - .then(res => res.data.root); - } - - getTreeNodes() { - return axios.get('showcase/resources/demo/data/treenodes.json') - .then(res => res.data.root); - } -} \ No newline at end of file diff --git a/src/showcase/setup/SetupPage.js b/src/showcase/setup/SetupPage.js deleted file mode 100644 index 50e5236a54..0000000000 --- a/src/showcase/setup/SetupPage.js +++ /dev/null @@ -1,136 +0,0 @@ -import React, { Component } from 'react'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; - -export class SetupPage extends Component { - - render() { - return ( -
-
-
-

Setup

-

PrimeReact is a rich set of open source native components for React.

-
-
- -
-

Download

-

PrimeReact is available at npm, if you have an existing application run the following commands to download PrimeReact and PrimeIcons to your project.

- - -{` -npm install primereact --save -npm install primeicons --save - -`} - - -

Import

-

Path of each component is available at the "import" section of a component documentation.

- - -{` -//import {ComponentName} from 'primereact/{componentname}'; -import {Dialog} from 'primereact/dialog'; -import {Accordion,AccordionTab} from 'primereact/accordion'; - -`} - - -

Dependencies

-

Majority of PrimeReact components (95%) are native and there are some exceptions having 3rd party dependencies such as Google Maps for GMap.

-

In addition, components require PrimeIcons library for icons, classNames package to manage style classes and - react-transition-group for animations.

- - -{` -dependencies: { - "react": "^16.6.3", - "react-dom": "^16.6.3", - "react-transition-group": "^2.5.1" - "classnames": "^2.2.6", - "primeicons": "^1.0.0" -} - -`} - - -

Here is the list of components with 3rd party dependencies.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ComponentDependency
ChartsCharts.js 2.1.x
GMapGoogle Maps
EditorQuill.js
FullCalendarFullCalendar 4.0 Alpha.2+.
PrimeFlexDataView and MegaMenu components.
-
- -

Styles

-

The css dependencies are as follows, note that you may change the theme with another one of your choice.

- - -{` -primereact/resources/themes/nova-light/theme.css -primereact/resources/primereact.min.css -primeicons/primeicons.css - -`} - - -

If you are using a bundler such as webpack with a css loader you may also import them to your main application component, an example from create-react-app would be.

- -{` -import 'primereact/resources/themes/nova-light/theme.css'; -import 'primereact/resources/primereact.min.css'; -import 'primeicons/primeicons.css'; - -`} - - -

Quickstart

-

An example application based on create-react-app is available at github.

- -

Typescript

-

Typescript is fully supported as type definition files are provided in the npm package of PrimeReact. A sample typescript-primereact application - is available as well at github.

- -

Note: A shorthand API is available to import APIs such as MenuModel and SelectItem.

- -{` -import {SelectItem} from 'primereact/api'; -import {MenuItem} from 'primereact/api'; - -`} - - -

Next.js

-

A sample next.js-primereact application is available as well at github.

-
-
- ); - } -} diff --git a/src/showcase/sidebar/SidebarDemo.js b/src/showcase/sidebar/SidebarDemo.js deleted file mode 100644 index a90c029c04..0000000000 --- a/src/showcase/sidebar/SidebarDemo.js +++ /dev/null @@ -1,465 +0,0 @@ -import React, {Component} from 'react'; -import {Sidebar} from "../../components/sidebar/Sidebar"; -import {Button} from '../../components/button/Button'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class SidebarDemo extends Component { - - constructor() { - super(); - this.state = { - visibleLeft: false, - visibleRight: false, - visibleTop:false, - visibleBottom: false, - visibleFullScreen: false, - visibleCustomToolbar: false - }; - } - - render() { - return ( -
-
-
-

Sidebar

-

Sidebar is a panel component displayed as an overlay.

- - - { context => } - -
-
- -
- this.setState({visibleLeft: false})}> -

Left Sidebar

- - - - )}> -

Sidebar with custom icons

-
- - - -
- ) - } -} - -class SidebarDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- - {` -import {Sidebar} from 'primereact/sidebar'; - -`} - - -

Getting Started

-

Sidebar is used as a container and visibility is controlled with visible property.

- - - {` - this.setState({visible:false})}> - Content - - - - - -)}> -

Sidebar with custom icons

-
- - - - - ) - } -} - -`} - - - - - ) - } -} diff --git a/src/showcase/slidemenu/SlideMenuDemo.js b/src/showcase/slidemenu/SlideMenuDemo.js deleted file mode 100644 index 6c93180bdf..0000000000 --- a/src/showcase/slidemenu/SlideMenuDemo.js +++ /dev/null @@ -1,751 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {SlideMenu} from '../../components/slidemenu/SlideMenu'; -import {Button} from '../../components/button/Button'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class SlideMenuDemo extends Component { - - constructor() { - super(); - this.state = { - items:[ - { - label:'File', - icon:'pi pi-fw pi-file', - items:[ - { - label:'New', - icon:'pi pi-fw pi-plus', - items:[ - { - label:'Bookmark', - icon:'pi pi-fw pi-bookmark' - }, - { - label:'Video', - icon:'pi pi-fw pi-video' - }, - - ] - }, - { - label:'Delete', - icon:'pi pi-fw pi-trash' - }, - { - separator:true - }, - { - label:'Export', - icon:'pi pi-fw pi-external-link' - } - ] - }, - { - label:'Edit', - icon:'pi pi-fw pi-pencil', - items:[ - { - label:'Left', - icon:'pi pi-fw pi-align-left' - }, - { - label:'Right', - icon:'pi pi-fw pi-align-right' - }, - { - label:'Center', - icon:'pi pi-fw pi-align-center' - }, - { - label:'Justify', - icon:'pi pi-fw pi-align-justify' - }, - - ] - }, - { - label:'Users', - icon:'pi pi-fw pi-user', - items:[ - { - label:'New', - icon:'pi pi-fw pi-user-plus', - - }, - { - label:'Delete', - icon:'pi pi-fw pi-user-minus', - - }, - { - label:'Search', - icon:'pi pi-fw pi-users', - items:[ - { - label:'Filter', - icon:'pi pi-fw pi-filter', - items:[ - { - label:'Print', - icon:'pi pi-fw pi-print' - } - ] - }, - { - icon:'pi pi-fw pi-bars', - label:'List' - } - ] - } - ] - }, - { - label:'Events', - icon:'pi pi-fw pi-calendar', - items:[ - { - label:'Edit', - icon:'pi pi-fw pi-pencil', - items:[ - { - label:'Save', - icon:'pi pi-fw pi-calendar-plus' - }, - { - label:'Delete', - icon:'pi pi-fw pi-calendar-minus' - } - ] - }, - { - label:'Archieve', - icon:'pi pi-fw pi-calendar-times', - items:[ - { - label:'Remove', - icon:'pi pi-fw pi-calendar-minus' - } - ] - } - ] - }, - { - separator:true - }, - { - label:'Quit', - icon:'pi pi-fw pi-power-off' - } - ] - } - } - - render() { - return ( -
-
-
-

Slide Menu

-

SlideMenu displays submenus with a slide animation.

- - - { context => } - -
-
- -
-

Basic

- - -

Popup

- this.menu = el} model={this.state.items} popup={true} viewportHeight={250} style={{width: '13.5em'}}> - -
- - -
- ) - } -} - -class SlideMenuDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import {SlideMenu} from 'primereact/slidemenu'; - -`} - - -

MenuItem API

-

Menu uses the common menumodel api to define its items, visit MenuModel API for details.

- -

Getting Started

-

Menu requires a collection of menuitems as its model.

- - -{` -const items:[ - { - label:'File', - icon:'pi pi-fw pi-file', - items:[ - { - label:'New', - icon:'pi pi-fw pi-plus', - items:[ - { - label:'Bookmark', - icon:'pi pi-fw pi-bookmark' - }, - { - label:'Video', - icon:'pi pi-fw pi-video' - }, - - ] - }, - { - label:'Delete', - icon:'pi pi-fw pi-trash' - }, - { - separator:true - }, - { - label:'Export', - icon:'pi pi-fw pi-external-link' - } - ] - }, - { - label:'Edit', - icon:'pi pi-fw pi-pencil', - items:[ - { - label:'Left', - icon:'pi pi-fw pi-align-left' - }, - { - label:'Right', - icon:'pi pi-fw pi-align-right' - }, - { - label:'Center', - icon:'pi pi-fw pi-align-center' - }, - { - label:'Justify', - icon:'pi pi-fw pi-align-justify' - }, - - ] - }, - { - label:'Users', - icon:'pi pi-fw pi-user', - items:[ - { - label:'New', - icon:'pi pi-fw pi-user-plus', - - }, - { - label:'Delete', - icon:'pi pi-fw pi-user-minus', - - }, - { - label:'Search', - icon:'pi pi-fw pi-users', - items:[ - { - label:'Filter', - icon:'pi pi-fw pi-filter', - items:[ - { - label:'Print', - icon:'pi pi-fw pi-print' - } - ] - }, - { - icon:'pi pi-fw pi-bars', - label:'List' - } - ] - } - ] - }, - { - label:'Events', - icon:'pi pi-fw pi-calendar', - items:[ - { - label:'Edit', - icon:'pi pi-fw pi-pencil', - items:[ - { - label:'Save', - icon:'pi pi-fw pi-calendar-plus' - }, - { - label:'Delete', - icon:'pi pi-fw pi-calendar-minus' - }, - - ] - }, - { - label:'Archieve', - icon:'pi pi-fw pi-calendar-times', - items:[ - { - label:'Remove', - icon:'pi pi-fw pi-calendar-minus' - } - ] - } - ] - }, - { - separator:true - }, - { - label:'Quit', - icon:'pi pi-fw pi-power-off' - } - ]; - -`} - - - -{` - - -`} - - - -

Popup Mode

-

SlideMenu is inline by default whereas popup mode is supported by enabling popup property and calling toggle method with an event of the target.

- -{` - this.menu = el} model={items} popup={true} /> - - - -`} - - -

Effects

-

The easing function to use is "ease-out" by default which can be customized using easing property. - See here for possible alternative values.

- - -{` - - -`} - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
modelarraynullAn array of menuitems.
popupbooleanfalseDefines if menu would displayed as a popup.
stylestringnullInline style of the component.
classNamestringnullStyle class of the component.
easingstringease-outEasing animation to use for sliding.
effectDurationany250Duration of the sliding animation in milliseconds.
backLabelstringBackLabel of element to navigate back.
menuWidthnumber190Width of the submenus.
viewportHeightnumber175Height of the scrollable area, a scrollbar appears if a menu height is longer than this value.
baseZIndexnumber0Base zIndex value to use in layering.
autoZIndexbooleantrueWhether to automatically manage layering.
appendToDOM elementnullDOM element instance where the dialog should be mounted.
-
- -

Methods

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
NameParametersDescription
toggleevent: Browser eventToggles the visibility of the popup menu.
showevent: Browser eventDisplays the popup menu.
hideevent: Browser eventHides the popup menu.
-
- -

Events

-
- - - - - - - - - - - - - - - - - - - - -
NameParametersDescription
onShowevent: Browser event Callback to invoke when a popup menu is shown.
onHideevent: Browser event Callback to invoke when a popup menu is hidden.
-
- -

Styling

-

Following is the list of structural style classes.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameElement
p-slidemenuContainer element.
p-slidemenu-wrapperWrapper of content.
p-slidemenu-contentContent element.
p-slidemenu-backwardElement to navigate to previous menu on click.
p-menu-listList element.
p-menuitemMenuitem element.
p-menuitem-textLabel of a menuitem.
p-menuitem-iconIcon of a menuitem.
p-submenu-iconArrow icon of a submenu.
-
- -

Dependencies

-

None.

-
- - - - View on GitHub - - -{` -import React, {Component} from 'react'; -import {SlideMenu} from 'primereact/slidemenu'; -import {Button} from 'primereact/button'; - -export class SlideMenuDemo extends Component { - - constructor() { - super(); - this.state = { - items:[ - { - label:'File', - icon:'pi pi-fw pi-file', - items:[ - { - label:'New', - icon:'pi pi-fw pi-plus', - items:[ - { - label:'Bookmark', - icon:'pi pi-fw pi-bookmark' - }, - { - label:'Video', - icon:'pi pi-fw pi-video' - }, - - ] - }, - { - label:'Delete', - icon:'pi pi-fw pi-trash' - }, - { - separator:true - }, - { - label:'Export', - icon:'pi pi-fw pi-external-link' - } - ] - }, - { - label:'Edit', - icon:'pi pi-fw pi-pencil', - items:[ - { - label:'Left', - icon:'pi pi-fw pi-align-left' - }, - { - label:'Right', - icon:'pi pi-fw pi-align-right' - }, - { - label:'Center', - icon:'pi pi-fw pi-align-center' - }, - { - label:'Justify', - icon:'pi pi-fw pi-align-justify' - }, - - ] - }, - { - label:'Users', - icon:'pi pi-fw pi-user', - items:[ - { - label:'New', - icon:'pi pi-fw pi-user-plus', - - }, - { - label:'Delete', - icon:'pi pi-fw pi-user-minus', - - }, - { - label:'Search', - icon:'pi pi-fw pi-users', - items:[ - { - label:'Filter', - icon:'pi pi-fw pi-filter', - items:[ - { - label:'Print', - icon:'pi pi-fw pi-print' - } - ] - }, - { - icon:'pi pi-fw pi-bars', - label:'List' - } - ] - } - ] - }, - { - label:'Events', - icon:'pi pi-fw pi-calendar', - items:[ - { - label:'Edit', - icon:'pi pi-fw pi-pencil', - items:[ - { - label:'Save', - icon:'pi pi-fw pi-calendar-plus' - }, - { - label:'Delete', - icon:'pi pi-fw pi-calendar-minus' - }, - - ] - }, - { - label:'Archieve', - icon:'pi pi-fw pi-calendar-times', - items:[ - { - label:'Remove', - icon:'pi pi-fw pi-calendar-minus' - } - ] - } - ] - }, - { - separator:true - }, - { - label:'Quit', - icon:'pi pi-fw pi-power-off' - } - ] - } - } - - render() { - return ( -
-
-
-

Slide Menu

-

SlideMenu displays submenus with a slide animation.

-
-
- -
-

Basic

- - -

Popup

- this.menu = el} model={this.state.items} popup={true}> - -
-
- ) - } -} - -`} -
-
-
-
- ) - } -} diff --git a/src/showcase/slider/SliderDemo.js b/src/showcase/slider/SliderDemo.js deleted file mode 100644 index cb598782cc..0000000000 --- a/src/showcase/slider/SliderDemo.js +++ /dev/null @@ -1,385 +0,0 @@ -import React, { Component } from 'react'; -import {Link} from 'react-router-dom'; -import { Slider } from '../../components/slider/Slider'; -import { InputText } from '../../components/inputtext/InputText'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class SliderDemo extends Component { - - constructor() { - super(); - this.state = { - val1: null, - val2: 50, - val3: null, - val4: null, - rangeValues: [20, 80] - }; - this.onChangeSlider1 = this.onChangeSlider1.bind(this); - this.onChangeSlider2 = this.onChangeSlider2.bind(this); - this.onChangeSlider3 = this.onChangeSlider3.bind(this); - this.onChangeSlider4 = this.onChangeSlider4.bind(this); - this.onChangeRangeSlider = this.onChangeRangeSlider.bind(this); - } - - onChangeSlider1(e) { - this.setState({ val1: e.value }); - } - - onChangeSlider2(e) { - var newValue; - if (e.target && e.target.nodeName === "INPUT") { - newValue = e.target.value; - } - else { - newValue = e.value; - } - - this.setState({ val2: newValue }); - } - - onChangeSlider3(e) { - this.setState({ val3: e.value }); - } - - onChangeSlider4(e) { - this.setState({ val4: e.value }); - } - - onChangeRangeSlider(e) { - this.setState({ rangeValues: e.value }); - } - - render() { - return ( -
-
-
-

Slider

-

Slider is a component to provide input using dragging of a handle.

- - - { context => } - -
-
- -
-

Basic: {this.state.val1}

- - -

Input: {this.state.val2}

- - - -

Step: {this.state.val3}

- - -

Range: {this.state.rangeValues[0]},{this.state.rangeValues[1]}

- - -

Vertical: {this.state.val4}

- -
- - -
- ); - } -} - -class SliderDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import {Slider} from 'primereact/slider'; - -`} - - -

Getting Started

-

Slider is used as a controlled input with value and onChange properties.

- - -{` - this.setState({value: e.value})} /> - -`} - - -

Range

-

Range slider provides two handles to define two values. Enable range property and bind an array to implement a range slider.

- -{` - this.setState({rangeValues: e.value})} range={true} /> - -`} - - -

Orientation

-

Default layout of slider is horizontal, use orientation property for the alternative vertical mode.

- -{` - this.setState({value: e.value})} orientation="vertical" /> - -`} - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
valuenumber0Value of the component.
animatebooleanfalseWhen enabled, displays an animation on click of the slider bar.
minnumber0Mininum boundary value.
maxnumber100Maximum boundary value.
orientationstringhorizontalOrientation of the slider, valid values are horizontal and vertical.
stepnumber1Step factor to increment/decrement the value.
rangebooleanfalseWhen speficed, allows two boundary values to be picked.
stylestringnullInline style of the component.
classNamestringnullStyle class of the element.
disabledbooleanfalseWhen present, it specifies that the component should be disabled.
tabIndexstringnullIndex of the element in tabbing order.
ariaLabelledBystringnullEstablishes relationships between the component and label(s) where its value should be one or more element IDs.
-
- -

Events

-
- - - - - - - - - - - - - - - - - - - - -
NameParametersDescription
onChangeevent.originalEvent: Slide event
- event.value: New value. -
Callback to invoke on value change via slide.
onSlideEndevent.originalEvent: Slide event
- event.value: New value. -
Callback to invoke when slide ends.
-
- -

Styling

-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - -
NameElement
p-sliderContainer element
p-slider-handleHandle element.
-
- -

Dependencies

-

None.

-
- - - - View on GitHub - - -{` -import React, {Component} from 'react'; -import {Slider} from 'primereact/slider'; -import {InputText} from 'primereact/inputtext'; - -export class SliderDemo extends Component { - - constructor() { - super(); - this.state = { - val1: null, - val2: 50, - val3: null, - val4: null, - rangeValues: [20, 80] - }; - this.onChangeSlider1 = this.onChangeSlider1.bind(this); - this.onChangeSlider2 = this.onChangeSlider2.bind(this); - this.onChangeSlider3 = this.onChangeSlider3.bind(this); - this.onChangeSlider4 = this.onChangeSlider4.bind(this); - this.onChangeRangeSlider = this.onChangeRangeSlider.bind(this); - } - - onChangeSlider1(e) { - this.setState({ val1: e.value }); - } - - onChangeSlider2(e) { - var newValue; - if (e.target && e.target.nodeName === "INPUT") { - newValue = e.target.value; - } - else { - newValue = e.value; - } - - this.setState({ val2: newValue }); - } - - onChangeSlider3(e) { - this.setState({ val3: e.value }); - } - - onChangeSlider4(e) { - this.setState({ val4: e.value }); - } - - onChangeRangeSlider(e) { - this.setState({ rangeValues: e.value }); - } - - render() { - return ( -
-
-
-

Slider

-

Slider is a component to provide input using dragging of a handle.

-
-
- -
-

Basic: {this.state.val1}

- - -

Input: {this.state.val2}

- - - -

Step: {this.state.val3}

- - -

Range: {this.state.rangeValues[0]},{this.state.rangeValues[1]}

- - -

Vertical: {this.state.val4}

- -
-
- ); - } -} - -`} -
-
-
-
- ); - } -} diff --git a/src/showcase/spinner/SpinnerDemo.js b/src/showcase/spinner/SpinnerDemo.js deleted file mode 100644 index efa0b2d78d..0000000000 --- a/src/showcase/spinner/SpinnerDemo.js +++ /dev/null @@ -1,357 +0,0 @@ -import React, { Component } from 'react'; -import {Link} from 'react-router-dom'; -import {Spinner} from '../../components/spinner/Spinner'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class SpinnerDemo extends Component { - - constructor() { - super(); - this.state = { - value1: null, - value2: null, - value3: null - }; - } - - render() { - return ( -
-
-
-

Spinner - Deprecated

-

Spinner is deprecated in favor of InputNumber.

- - - { context => } - -
-
- -
-

Basic

- this.setState({value1: e.value})} /> - -

Min/Max

- this.setState({value2: e.value})} min={0} max={100} /> - -

Step

- this.setState({value3: e.value})} step={0.25} /> - -

Disabled

- -
- - -
- ); - } -} - -class SpinnerDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import {Spinner} from 'primereact/spinner'; - -`} - - -

Getting Started

-

Spinner is used as a controlled input with value and onChange properties. Note that onChange is triggered on blur instead of on key input

- - -{` - this.setState({value: e.value})} /> - -`} - - -

Min-Max

-

Boundaries are specified with min and max attributes.

- -{` - this.setState({value: e.value})} min={0} max={100} /> - -`} - - -

Step

-

Step factor is 1 by default and can be customized with step option.

- -{` - this.setState({value: e.value})} step={0.25} /> - -`} - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
valuestringnullValue of the component.
namestringnullName of the input element.
stepnumber1Step factor to increment/decrement the value.
minnumbernullMininum boundary value.
maxnumbernullMaximum boundary value.
disabledbooleanfalseWhen present, it specifies that the element should be disabled.
readonlybooleanfalseWhen present, it specifies that the element should be read-only.
maxlengthnumbernullMaximum number of character allows in the input field.
sizenumbernullSize of the input field.
stylestringnullInline style of the component.
classNamestringnullStyle class of the element.
inputIdstringnullIdentifier of the input element.
inputStylestringnullInline style of the input field.
inputClassNamestringnullInline style of the input field.
tooltipanynullContent of the tooltip.
tooltipOptionsobjectnullConfiguration of the tooltip, refer to the tooltip documentation for more information.
decimalSeparatorstringnullSeparator character for decimals, defaults to settings at user locale.
thousandSeparatorstringnullSeparator character for thousands, defaults to settings at user locale.
formatInputbooleanfalseWhen present, formats the user input at blur event.
ariaLabelledBystringnullEstablishes relationships between the component and label(s) where its value should be one or more element IDs.
-
- -

Events

-
- - - - - - - - - - - - - - - - - - - - -
NameParametersDescription
onChangeevent.value: New valueCallback to invoke on value change.
onBlurevent: Browser eventCallback to invoke when Spinner loses focus.
-
- -

Styling

-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
NameElement
p-spinnerContainer element
p-spinner-upUp icon.
p-spinner-downDown icon.
p-spinner-inputInput element
-
- -

Dependencies

-

None.

-
- - - - View on GitHub - - -{` -import React, {Component} from 'react'; -import {Spinner} from 'primereact/spinner'; - -export class SpinnerDemo extends Component { - - constructor() { - super(); - this.state = { - value1: null, - value2: null, - value3: null - }; - } - - render() { - return ( -
-
-
-

Spinner

-

Spinner is an input component to provide a numerical input.

-
-
- -
-

Basic

- this.setState({value1: e.value})} /> - -

Min/Max

- this.setState({value2: e.value})} min={0} max={100} /> - -

Step

- this.setState({value3: e.value})} step={0.25} /> - -

Disabled

- -
-
- ); - } -} - -`} -
-
-
-
- ); - } -} diff --git a/src/showcase/splitbutton/SplitButtonDemo.js b/src/showcase/splitbutton/SplitButtonDemo.js deleted file mode 100644 index 86335fed55..0000000000 --- a/src/showcase/splitbutton/SplitButtonDemo.js +++ /dev/null @@ -1,418 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {SplitButton} from '../../components/splitbutton/SplitButton'; -import {Growl} from '../../components/growl/Growl'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class SplitButtonDemo extends Component { - - constructor() { - super(); - this.state = { - items: [ - { - label: 'Update', - icon: 'pi pi-refresh', - command: (e) => { - this.growl.show({severity:'success', summary:'Updated', detail:'Data Updated'}); - } - }, - { - label: 'Delete', - icon: 'pi pi-times', - command: (e) => { - this.growl.show({ severity: 'success', summary: 'Delete', detail: 'Data Deleted' }); - } - }, - { - label: 'React Website', - icon: 'pi pi-external-link', - command:(e) => { - window.location.href = 'https://facebook.github.io/react/' - } - }, - { label: 'Upload', - icon: 'pi pi-upload', - command:(e) => { - window.location.hash = "/fileupload" - } - } - ] - } - - this.save = this.save.bind(this); - } - - save() { - this.growl.show({severity: 'success', summary: 'Success', detail: 'Data Saved'}); - } - - render() { - return ( -
-
-
-

SplitButton

-

SplitButton groups a set of commands in an overlay with a default command.

- - - { context => } - -
-
- -
- this.growl = el}> - -

Basic

- - -

Severities

- - - - - -
- - -
- ) - } -} - -class SplitButtonDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import {SplitButton} from 'primereact/splitbutton'; - -`} - - -

Getting Started

-

SplitButton has a default command button and a collection of additional options defined by the model property.

- -{` -export class SplitButtonDemo extends Component { - - constructor() { - super(); - this.state = { - items: [ - { - label: 'Update', - icon: 'pi pi-refresh', - command: (e) => { - this.growl.show({severity:'success', summary:'Updated', detail:'Data Updated'}); - } - }, - { - label: 'Delete', - icon: 'pi pi-times', - command: (e) => { - this.growl.show({ severity: 'success', summary: 'Delete', detail: 'Data Deleted' }); - } - }, - { - label: 'React Website', - icon: 'pi pi-external-link', - command:(e) => { - window.location.href = 'https://facebook.github.io/react/' - } - }, - { label: 'Upload', - icon: 'pi pi-upload', - command:(e) => { - window.location.hash = "/fileupload" - } - } - ] - } - - this.save = this.save.bind(this); - } - - save() { - this.growl.show({severity: 'success', summary: 'Success', detail: 'Data Saved'}); - } - - render() { - return ( - - ) - } -} - -`} - - -

MenuModel API

-

SplitButton uses the common MenuModel API to define the items, visit MenuModel API for details.

- -

Severity

-

Different color options are available as severity levels.

- -
    -
  • .p-button-secondary
  • -
  • .p-button-success
  • -
  • .p-button-info
  • -
  • .p-button-warning
  • -
  • .p-button-danger
  • -
- - -{` - - - - - - - -`} - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullIdentifier of the component.
labelstringnullText of the button.
iconstringnullName of the icon.
modelobjectnullMenuModel instance to define the overlay items.
disabledbooleanfalseWhen present, it specifies that the component should be disabled.
stylestringnullInline style of the component.
classNamestringnullClassName of the component.
menuStylestringnullInline style of the overlay menu.
menuStyleClassstringnullClassName class of the overlay menu.
tabIndexstringnullIndex of the element in tabbing order.
appendToDOM elementnullDOM element instance where the dialog should be mounted.
tooltipanynullContent of the tooltip.
tooltipOptionsobjectnullConfiguration of the tooltip, refer to the tooltip documentation for more information.
-
- -

Events

-
- - - - - - - - - - - - - - - -
NameParametersDescription
onClickevent: Browser eventCallback to invoke when main button is clicked.
-
- -

Styling

-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - -
NameElement
p-splitbuttonContainer element.
p-splitbutton-buttonDropdown button.
p-menuOverlay menu.
-
- -

Dependencies

-

None.

-
- - - -{` -import React, {Component} from 'react'; -import {SplitButton} from 'primereact/splitbutton'; -import {Growl} from 'primereact/growl'; - -export class SplitButtonDemo extends Component { - - constructor() { - super(); - this.state = { - items: [ - { - label: 'Update', - icon: 'pi pi-refresh', - command: (e) => { - this.growl.show({severity:'success', summary:'Updated', detail:'Data Updated'}); - } - }, - { - label: 'Delete', - icon: 'pi pi-times', - command: (e) => { - this.growl.show({ severity: 'success', summary: 'Delete', detail: 'Data Deleted' }); - } - }, - { - label: 'React Website', - icon: 'pi pi-external-link', - command:(e) => { - window.location.href = 'https://facebook.github.io/react/' - } - }, - { label: 'Upload', - icon: 'pi pi-upload', - command:(e) => { - window.location.hash = "/fileupload" - } - } - ] - } - - this.save = this.save.bind(this); - } - - save() { - this.growl.show({severity: 'success', summary: 'Success', detail: 'Data Saved'}); - } - - render() { - return ( -
-
-
-

SplitButton

-

SplitButton groups a set of commands in an overlay with a default command.

-
-
- -
- this.growl = el}> - -

Basic

- - -

Severities

- - - style={{marginRight: '.25em'}} - - -
-
- ) - } -} - -`} -
-
-
-
- ) - } -} diff --git a/src/showcase/steps/StepsDemo.css b/src/showcase/steps/StepsDemo.css deleted file mode 100644 index 7f628541cc..0000000000 --- a/src/showcase/steps/StepsDemo.css +++ /dev/null @@ -1,23 +0,0 @@ -.ui-steps.steps-custom { - margin-bottom: 30px; -} - -.ui-steps.steps-custom .ui-steps-item .ui-menuitem-link { - height: 10px; - padding: 0 1em; - overflow: visible; -} - -.ui-steps.steps-custom .ui-steps-item .ui-steps-number { - background-color: #0081c2; - color: #FFFFFF; - display: inline-block; - width: 36px; - border-radius: 50%; - margin-top: -14px; - margin-bottom: 10px; -} - -.ui-steps.steps-custom .ui-steps-item .ui-steps-title { - color: #555555; -} \ No newline at end of file diff --git a/src/showcase/steps/StepsDemo.js b/src/showcase/steps/StepsDemo.js deleted file mode 100644 index 6d9d20beba..0000000000 --- a/src/showcase/steps/StepsDemo.js +++ /dev/null @@ -1,386 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {Steps} from '../../components/steps/Steps'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; -import {Growl} from "../../components/growl/Growl"; -import "./StepsDemo.css" - -export class StepsDemo extends Component { - - constructor(props) { - super(props); - this.state = { - activeIndex: 1 - }; - - this.items = [ - { - label: 'Personal', - command: (event) => { - this.growl.show({severity:'info', summary:'First Step', detail: event.item.label}); - } - }, - { - label: 'Seat', - command: (event) => { - this.growl.show({severity:'info', summary:'Seat Selection', detail: event.item.label}); - } - }, - { - label: 'Payment', - command: (event) => { - this.growl.show({severity:'info', summary:'Pay with CC', detail: event.item.label}); - } - }, - { - label: 'Confirmation', - command: (event) => { - this.growl.show({severity:'info', summary:'Last Step', detail: event.item.label}); - } - } - ]; - } - - render() { - return ( -
-
-
-

Steps

-

Steps component is an indicator for the steps in a workflow. Layout of steps component is optimized for responsive design.

- - - { context => } - -
-
- -
- {this.growl = el}}> - -

Basic

- - -

Interactive

- this.setState({activeIndex: e.index})} readOnly={false} /> - -

Custom Style

- -
- - - -
- ); - } -} - -class StepsDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- - {` -import {Steps} from 'primereact/steps'; - -`} -

MenuItem API

-

Steps uses the common menu item api to define its items, visit MenuModel for details.

- -

Getting Started

-

TabMenu requires a collection of menuitems as its model.

- - - {` -const items = [ - {label: 'Personal'}, - {label: 'Seat'}, - {label: 'Payment'}, - {label: 'Confirmation'} -]; - -`} - - - - {` - - -`} - - -

interactive

-

Items are readonly by default, if you'd like to make them interactive then disable readonly, use command handlers of menuitem to respond to selection events and define activeIndex property along with the - onSelect event to use it as a controlled component.

- - - {` - this.setState({activeIndex: e.index})} readOnly={false} /> - -`} - - - - {` -const interactiveItems = [{ - label: 'Personal', - command: (event) => { - this.growl.show({severity:'info', summary:'First Step', detail: event.item.label}); - } -}, -{ - label: 'Seat', - command: (event) => { - this.growl.show({severity:'info', summary:'Seat Selection', detail: event.item.label}); - } -}, -{ - label: 'Payment', - command: (event) => { - this.growl.show({severity:'info', summary:'Pay with CC', detail: event.item.label}); - } -}, -{ - label: 'Confirmation', - command: (event) => { - this.growl.show({severity:'info', summary:'Last Step', detail: event.item.label}); - } -} -]; - -`} - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
modelarraynullAn array of menuitems.
activeIndexnumber0Index of the active item.
readOnlybooleantrueWhether the items are clickable or not.
stylestringnullInline style of the component.
classNamestringnullStyle class of the component.
-
- -

Events

-
- - - - - - - - - - - - - - - -
NameParametersDescription
onSelectevent.originalEvent: Browser event
- event.item: Selected item instance
- event.index: Index of selected item instance
Callback to invoke when the new step is selected.
-
- -

Styling

-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
NameElement
p-stepsContainer element.
p-steps-itemMenuitem element.
p-steps-numberNumber of menuitem.
p-steps-titleLabel of menuitem.
-
- -

Dependencies

-

None.

-
- - - - View on GitHub - - -

StepsDemo.css

- - {` -.ui-steps.steps-custom { - margin-bottom: 30px; -} - -.ui-steps.steps-custom .ui-steps-item .ui-menuitem-link { - height: 10px; - padding: 0 1em; - overflow: visible; -} - -.ui-steps.steps-custom .ui-steps-item .ui-steps-number { - background-color: #0081c2; - color: #FFFFFF; - display: inline-block; - width: 36px; - border-radius: 50%; - margin-top: -14px; - margin-bottom: 10px; -} - -.ui-steps.steps-custom .ui-steps-item .ui-steps-title { - color: #555555; -} - `} - - - {` -import React, {Component} from 'react'; -import {Steps} from 'primereact/steps'; -import {Growl} from "primereact/growl"; -import "./StepsDemo.css" - -export class StepsDemo extends Component { - - constructor(props) { - super(props); - this.state = { - activeIndex: 1 - }; - - this.items = [ - { - label: 'Personal', - command: (event) => { - this.growl.show({severity:'info', summary:'First Step', detail: event.item.label}); - } - }, - { - label: 'Seat', - command: (event) => { - this.growl.show({severity:'info', summary:'Seat Selection', detail: event.item.label}); - } - }, - { - label: 'Payment', - command: (event) => { - this.growl.show({severity:'info', summary:'Pay with CC', detail: event.item.label}); - } - }, - { - label: 'Confirmation', - command: (event) => { - this.growl.show({severity:'info', summary:'Last Step', detail: event.item.label}); - } - } - ]; - } - - render() { - return ( -
-
-
-

Steps

-

Steps component is an indicator for the steps in a workflow. Layout of steps component is optimized for responsive design.

-
-
- -
- {this.growl = el}}> - -

Basic

- - -

Clickable

- this.setState({activeIndex: e.index})} readOnly={false} /> - -

Custom Style

- -
- - - -
- ); - } -} - `} -
-
-
-
- ) - } - -} diff --git a/src/showcase/support/SupportPage.js b/src/showcase/support/SupportPage.js deleted file mode 100644 index 93dcb28deb..0000000000 --- a/src/showcase/support/SupportPage.js +++ /dev/null @@ -1,68 +0,0 @@ -import React, {Component} from 'react'; - -export class SupportPage extends Component { - - render() { - return ( -
-
-
-

Support

- Professional support for the open source innovation -
-
- -
-
-
-
-

PrimeReact PRO Support

-

With PrimeReact PRO, it's easy to support, tune and add features to PrimeReact as if it were an in-house framework.

- GET A QUOTE -
-
- PRO -
-
-
- -

PrimeReact PRO is a term based commercial support service. With the exclusive services of Pro account, - you no longer need to post your questions in the community forum and your issues to community issue tracker.

- -

Standard PRO Services

-
    -
  • Access to pro.primefaces.org
  • -
  • Response within 1 business day.
  • -
  • Defect patches.
  • -
  • Private branch management in case you need.
  • -
  • Customized builds.
  • -
  • Unlimited number of cases.
  • -
  • Remote desktop connection.
  • -
  • Conference calls for discussions.
  • -
  • High priority to your issues.
  • -
  • Notifications about security updates.
  • -
- -

New Features (Optional)

- -

New feature and enhancement requests are not available in core services and provided via an hour based model instead. When you have a feature request we provide an estimate, if you confirm we deliver your request within an estimated timeframe and deduct the amount of work from your hours. These requests can be;

- -
    -
  • New components.
  • -
  • New functionality to existing components.
  • -
  • Changing the way a certain functionality is implemented.
  • -
  • Accessibility improvements.
  • -
  • Proof of Concept implementations of a use case.
  • -
  • Code reviews to offer best practices.
  • -
- -

You can purchase additional hours along with the subscription and also anytime during your subscription period. If your subscription term ends with unused hours, they will be added to your new subscription term in case you extend.

- -

Community Support

-

Forum is where the community users gather to seek support, post topics and discuss the technology. PrimeTek does not - guarantee response at forum although it is monitored and maintained by our staff. If you need to secure our response within 1 business day, you may consider PrimeReact PRO support.

-
-
- ); - } -} diff --git a/src/showcase/tabmenu/TabMenuDemo.js b/src/showcase/tabmenu/TabMenuDemo.js deleted file mode 100644 index efbb5f2972..0000000000 --- a/src/showcase/tabmenu/TabMenuDemo.js +++ /dev/null @@ -1,268 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {TabMenu} from '../../components/tabmenu/TabMenu'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TabMenuDemo extends Component { - - constructor() { - super(); - this.state = { - items: [ - {label: 'Home', icon: 'pi pi-fw pi-home'}, - {label: 'Calendar', icon: 'pi pi-fw pi-calendar'}, - {label: 'Edit', icon: 'pi pi-fw pi-pencil'}, - {label: 'Documentation', icon: 'pi pi-fw pi-file'}, - {label: 'Settings', icon: 'pi pi-fw pi-cog'} - ] - }; - } - - render() { - return ( -
-
-
-

TabMenu

-

Menu is a navigation/command component that displays items as tab headers.

- - - { context => } - -
-
- -
- -
- - -
- ); - } -} - -class TabMenuDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- - {` -import {TabMenu} from 'primereact/tabmenu'; - -`} -

MenuModel API

-

TabMenu uses the common menumodel api to define its items, visit MenuModel for details.

- -

Getting Started

-

TabMenu requires a collection of menuitems as its model and can either be used as a Controlled or Uncontrolled component.

- - - {` -constructor() { - super(); - this.state = { - items: [ - {label: 'Home', icon: 'pi pi-fw pi-home'}, - {label: 'Calendar', icon: 'pi pi-fw pi-calendar'}, - {label: 'Edit', icon: 'pi pi-fw pi-pencil'}, - {label: 'Documentation', icon: 'pi pi-fw pi-file'}, - {label: 'Settings', icon: 'pi pi-fw pi-cog'} - ] - }; -} - -`} - - -

Controlled Component

-

In controlled mode, activeItem and onTabChange properties must be defined along with the model.

- - - {` - this.setState({activeItem: e.value})}/> - -`} - - -

Uncontrolled

-

In uncontrolled mode, only model is required. Initial active item can be provided using the activeItem property in uncontrolled mode however it is evaluated at initial rendering and ignored in further updates. If you programmatically - need to update the active item, prefer to use the component as controlled.

- - - {` - - -`} - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
modelarraynullAn array of menuitems.
activeItemMenuItemnullDefines the default active menuitem
stylestringnullInline style of the component.
classNamestringnullStyle class of the component.
-
- -

Events

-
- - - - - - - - - - - - - - - -
NameParametersDescription
onTabChangeevent.originalEvent: Browser event
- event.value: Selected menuitem
Callback to invoke when active tab changes.
-
- -

Styling

-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameElement
p-tabmenuContainer element.
p-tabmenu-navList element of headers.
p-tabmenuitemMenuitem element.
p-menuitem-linkLink inside a menuitem.
p-menuitem-textLabel of a menuitem.
p-menuitem-iconIcon of a menuitem.
-
- -

Dependencies

-

None.

-
- - - - View on GitHub - - - {` -import React, {Component} from 'react'; -import {TabMenu} from 'primereact/tabmenu'; - -export class TabMenuDemo extends Component { - - constructor() { - super(); - this.state = { - items: [ - {label: 'Home', icon: 'pi pi-fw pi-home'}, - {label: 'Calendar', icon: 'pi pi-fw pi-calendar'}, - {label: 'Edit', icon: 'pi pi-fw pi-pencil'}, - {label: 'Documentation', icon: 'pi pi-fw pi-file'}, - {label: 'Settings', icon: 'pi pi-fw pi-cog'} - ] - }; - } - - render() { - return ( -
-
-
-

TabMenu

-

Menu is a navigation component that displays items as tab headers.

-
-
- -
- -
-
- ); - } -} - `} -
-
-
-
- ) - } - -} diff --git a/src/showcase/tabview/TabViewDemo.js b/src/showcase/tabview/TabViewDemo.js deleted file mode 100644 index dd2f80c3e7..0000000000 --- a/src/showcase/tabview/TabViewDemo.js +++ /dev/null @@ -1,393 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TabViewDemo extends Component { - - constructor() { - super(); - this.state = { - activeIndex: 1 - } - } - - render() { - return ( -
-
-
-

TabView

-

TabView is a container component to group content with tabs.

- - - { context => } - -
-
- -
-

Uncontrolled

- - -

The story begins as Don Vito Corleone, the head of a New York Mafia family, overseeshis daughter's wedding. His beloved son ichael has just come home from the war, - but does not intend to become part of his father's business. Through Michael's life the nature of the family business becomes clear. The business of the family is - just like the head of the family, kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the family.

-
- -

Francis Ford Coppola's legendary continuation and sequel to his landmark 1972 film, The_Godfather parallels the young Vito Corleone's rise with his son Michael's spiritual fall, - deepening The_Godfather's depiction of the dark side of the American dream. In the early 1900s, the child Vito flees his Sicilian village for America after the local Mafia kills - his family. Vito struggles to make a living, legally or illegally, for his wife and growing brood in Little Italy.

-
- -

The Godfather Part III is set in 1979 and 1980. Michael has moved back to New York and taken great strides to remove the family from crime. He turns over his New York criminal - interests to longtime enforcer Joey Zasa. He uses his wealth in an attempt to rehabilitate his reputation through numerous philanthropic acts, administered by a foundation named after his father. - A decade earlier, he gave custody of his two children to Kay, who has since remarried.

-
- - - -
- -

Controlled

- this.setState({activeIndex: e.index})}> - -

The story begins as Don Vito Corleone, the head of a New York Mafia family, overseeshis daughter's wedding. His beloved son ichael has just come home from the war, - but does not intend to become part of his father's business. Through Michael's life the nature of the family business becomes clear. The business of the family is - just like the head of the family, kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the family.

-
- -

Francis Ford Coppola's legendary continuation and sequel to his landmark 1972 film, The_Godfather parallels the young Vito Corleone's rise with his son Michael's spiritual fall, - deepening The_Godfather's depiction of the dark side of the American dream. In the early 1900s, the child Vito flees his Sicilian village for America after the local Mafia kills - his family. Vito struggles to make a living, legally or illegally, for his wife and growing brood in Little Italy.

-
- -

The Godfather Part III is set in 1979 and 1980. Michael has moved back to New York and taken great strides to remove the family from crime. He turns over his New York criminal - interests to longtime enforcer Joey Zasa. He uses his wealth in an attempt to rehabilitate his reputation through numerous philanthropic acts, administered by a foundation named after his father. - A decade earlier, he gave custody of his two children to Kay, who has since remarried.

-
- - - -
-
- -
- ) - } -} - -export class TabViewDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import {TabView,TabPanel} from 'primereact/tabview'; - -`} - - -

Getting Started

-

Tabview element consists of one or more TabPanel elements and can either be used as a Controlled or Uncontrolled component.

- -

Controlled Component

-

In controlled mode, activeIndex and onTabChange properties need to be defined to control the state.

- - -{` - this.setState({activeIndex: e.index})}> - - Content I - - - Content II - - - Content III - - - -`} - - -

Uncontrolled

-

In uncontrolled mode, no additional properties are required. Initial active tab can be provided using the activeIndex property in uncontrolled mode however it is evaluated at initial rendering and ignored in further updates. If you programmatically - need to update the active tab, prefer to use the component as controlled.

- - -{` - - - Content I - - - Content II - - - Content III - - - -`} - - -

Properties For TabPanel

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
headeranynullOrientation of tab headers.
leftIconstringnullIcons can be placed at left of a header.
rightIconstringnullIcons can be placed at right of a header.
disabledbooleanfalseWhether the tab is disabled.
headerStyleobjectnullInline style of the tab header.
headerClassNamestringnullStyle class of the tab header.
contentStyleobjectnullInline style of the tab content.
contentClassNamestringnullStyle class of the tab content.
-
- -

Properties For TabView

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
activeIndexnumbernullActive index of the TabView.
styleobjectnullInline style of the tabview.
classNamestringnullStyle class of the tabview.
renderActiveOnlybooleantrueWhether to render the contents of the selected tab or all tabs.
-
- -

Events

-
- - - - - - - - - - - - - - - -
NameParametersDescription
onTabChangeevent.originalEvent: Browser event
- event.index: Index of the selected tab -
Callback to invoke when an active tab is changed.
-
- -

Styling

-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameElement
p-tabviewContainer element.
p-tabview-navContainer of headers.
p-tabview-selectedSelected tab header.
p-tabview-panelsContainer panels.
p-tabview-panelContent of a tab.
- -

Dependencies

-

None.

-
- -
- - - - View on GitHub - - -{` -import React, {Component} from 'react'; -import {TabView,TabPanel} from 'primereact/tabview'; - -export class TabViewDemo extends Component { - - render() { - return ( -
-
-
-

TabView

-

TabView is a container component to group content with tabs.

-
-
- -
- - -

The story begins as Don Vito Corleone, the head of a New York Mafia family, overseeshis daughter's wedding. His beloved son ichael has just come home from the war, - but does not intend to become part of his father's business. Through Michael's life the nature of the family business becomes clear. The business of the family is - just like the head of the family, kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the family.

-
- -

Francis Ford Coppola's legendary continuation and sequel to his landmark 1972 film, The_Godfather parallels the young Vito Corleone's rise with his son Michael's spiritual fall, - deepening The_Godfather's depiction of the dark side of the American dream. In the early 1900s, the child Vito flees his Sicilian village for America after the local Mafia kills - his family. Vito struggles to make a living, legally or illegally, for his wife and growing brood in Little Italy.

-
- -

The Godfather Part III is set in 1979 and 1980. Michael has moved back to New York and taken great strides to remove the family from crime. He turns over his New York criminal - interests to longtime enforcer Joey Zasa. He uses his wealth in an attempt to rehabilitate his reputation through numerous philanthropic acts, administered by a foundation named after his father. - A decade earlier, he gave custody of his two children to Kay, who has since remarried.

-
- - - -
- -

Controlled

- this.setState({activeIndex: e.index})}> - -

The story begins as Don Vito Corleone, the head of a New York Mafia family, overseeshis daughter's wedding. His beloved son ichael has just come home from the war, - but does not intend to become part of his father's business. Through Michael's life the nature of the family business becomes clear. The business of the family is - just like the head of the family, kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the family.

-
- -

Francis Ford Coppola's legendary continuation and sequel to his landmark 1972 film, The_Godfather parallels the young Vito Corleone's rise with his son Michael's spiritual fall, - deepening The_Godfather's depiction of the dark side of the American dream. In the early 1900s, the child Vito flees his Sicilian village for America after the local Mafia kills - his family. Vito struggles to make a living, legally or illegally, for his wife and growing brood in Little Italy.

-
- -

The Godfather Part III is set in 1979 and 1980. Michael has moved back to New York and taken great strides to remove the family from crime. He turns over his New York criminal - interests to longtime enforcer Joey Zasa. He uses his wealth in an attempt to rehabilitate his reputation through numerous philanthropic acts, administered by a foundation named after his father. - A decade earlier, he gave custody of his two children to Kay, who has since remarried.

-
- - - -
-
-
- ) - } -} - -`} -
-
-
-
- ); - } -} diff --git a/src/showcase/theming/ThemingPage.js b/src/showcase/theming/ThemingPage.js deleted file mode 100644 index 055f1dada2..0000000000 --- a/src/showcase/theming/ThemingPage.js +++ /dev/null @@ -1,78 +0,0 @@ -import React, {Component} from 'react'; - -export class ThemingPage extends Component { - - render() { - return ( -
-
-
-

Theming

-

Choose from a variety of premium themes or develop your own theme using PrimeReact Theme Designer API.

-
-
- -
-

Theme Designer API

-

Designer API is the ultimate tool to create your own PrimeReact experience powered by a SASS based theme engine - with 500+ variables and a demo application. In addition, PrimeReact only ships the generated CSS of Nova, Luna and Rhea themes whereas Designer provides - full access to the whole SASS structure and the variables of these pre-built themes.

- -

Whether you have your own style guide or just need a custom theme, Designer API is the right tool to design and bring them to existence.

- -

Visit Designer API HomePage for more information, live demos and access to a trial version.

- - PrimeReact Designer - - -

Styled Components

-

All PrimeReact components support className property and are compatible with Styled Components.

- -

Premium Templates

-

Powered by create-react-app, create awesome applications in no time using the premium templates of PrimeReact and impress your users.

-

Premium Templates are advanced create-react-app based applications featuring a full application layout with various menu orientations, templates pages such as landing, login and - premium themes that share the same design language of the layout for a unified look.

- -
-
- - Sapphire - -
-
- - Serenity - -
-
- - Ultima - -
-
- - Babylon - -
-
- - Avalon - -
-
- - Apollo - -
-
- - Roma - -
-
- -
-
- ); - } -} diff --git a/src/showcase/tieredmenu/TieredMenuDemo.js b/src/showcase/tieredmenu/TieredMenuDemo.js deleted file mode 100644 index eb05e7ddc0..0000000000 --- a/src/showcase/tieredmenu/TieredMenuDemo.js +++ /dev/null @@ -1,695 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {TieredMenu} from '../../components/tieredmenu/TieredMenu'; -import {Button} from '../../components/button/Button'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TieredMenuDemo extends Component { - - constructor() { - super(); - - this.state = { - items:[ - { - label:'File', - icon:'pi pi-fw pi-file', - items:[ - { - label:'New', - icon:'pi pi-fw pi-plus', - items:[ - { - label:'Bookmark', - icon:'pi pi-fw pi-bookmark' - }, - { - label:'Video', - icon:'pi pi-fw pi-video' - }, - ] - }, - { - label:'Delete', - icon:'pi pi-fw pi-trash' - }, - { - separator:true - }, - { - label:'Export', - icon:'pi pi-fw pi-external-link' - } - ] - }, - { - label:'Edit', - icon:'pi pi-fw pi-pencil', - items:[ - { - label:'Left', - icon:'pi pi-fw pi-align-left' - }, - { - label:'Right', - icon:'pi pi-fw pi-align-right' - }, - { - label:'Center', - icon:'pi pi-fw pi-align-center' - }, - { - label:'Justify', - icon:'pi pi-fw pi-align-justify' - }, - - ] - }, - { - label:'Users', - icon:'pi pi-fw pi-user', - items:[ - { - label:'New', - icon:'pi pi-fw pi-user-plus', - - }, - { - label:'Delete', - icon:'pi pi-fw pi-user-minus', - - }, - { - label:'Search', - icon:'pi pi-fw pi-users', - items:[ - { - label:'Filter', - icon:'pi pi-fw pi-filter', - items:[ - { - label:'Print', - icon:'pi pi-fw pi-print' - } - ] - }, - { - icon:'pi pi-fw pi-bars', - label:'List' - } - ] - } - ] - }, - { - label:'Events', - icon:'pi pi-fw pi-calendar', - items:[ - { - label:'Edit', - icon:'pi pi-fw pi-pencil', - items:[ - { - label:'Save', - icon:'pi pi-fw pi-calendar-plus' - }, - { - label:'Delete', - icon:'pi pi-fw pi-calendar-minus' - } - ] - }, - { - label:'Archieve', - icon:'pi pi-fw pi-calendar-times', - items:[ - { - label:'Remove', - icon:'pi pi-fw pi-calendar-minus' - } - ] - } - ] - }, - { - separator:true - }, - { - label:'Quit', - icon:'pi pi-fw pi-power-off' - } - ] - }; - } - - render() { - return ( -
-
-
-

Tiered Menu

-

TieredMenu displays submenus in nested overlays.

- - - { context => } - -
-
-
-

Inline

- - -

Popup

- this.menu = el} id="overlay_tmenu" /> -
- - - -
- ); - } -} - -class TieredMenuDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- - {` -import {TieredMenu} from 'primereact/tieredmenu'; - -`} -

MenuItem API

-

TieredMenu uses the common menu item api to define its items, visit MenuModel for details.

- -

Getting Started

-

Menu requires a collection of menuitems as its model.

- - {` -const items:[ - { - label:'File', - icon:'pi pi-fw pi-file', - items:[ - { - label:'New', - icon:'pi pi-fw pi-plus', - items:[ - { - label:'Bookmark', - icon:'pi pi-fw pi-bookmark' - }, - { - label:'Video', - icon:'pi pi-fw pi-video' - }, - - ] - }, - { - label:'Delete', - icon:'pi pi-fw pi-trash' - }, - { - separator:true - }, - { - label:'Export', - icon:'pi pi-fw pi-external-link' - } - ] - }, - { - label:'Edit', - icon:'pi pi-fw pi-pencil', - items:[ - { - label:'Left', - icon:'pi pi-fw pi-align-left' - }, - { - label:'Right', - icon:'pi pi-fw pi-align-right' - }, - { - label:'Center', - icon:'pi pi-fw pi-align-center' - }, - { - label:'Justify', - icon:'pi pi-fw pi-align-justify' - }, - - ] - }, - { - label:'Users', - icon:'pi pi-fw pi-user', - items:[ - { - label:'New', - icon:'pi pi-fw pi-user-plus', - - }, - { - label:'Delete', - icon:'pi pi-fw pi-user-minus', - - }, - { - label:'Search', - icon:'pi pi-fw pi-users', - items:[ - { - label:'Filter', - icon:'pi pi-fw pi-filter', - items:[ - { - label:'Print', - icon:'pi pi-fw pi-print' - } - ] - }, - { - icon:'pi pi-fw pi-bars', - label:'List' - } - ] - } - ] - }, - { - label:'Events', - icon:'pi pi-fw pi-calendar', - items:[ - { - label:'Edit', - icon:'pi pi-fw pi-pencil', - items:[ - { - label:'Save', - icon:'pi pi-fw pi-calendar-plus' - }, - { - label:'Delete', - icon:'pi pi-fw pi-calendar-minus' - }, - - ] - }, - { - label:'Archieve', - icon:'pi pi-fw pi-calendar-times', - items:[ - { - label:'Remove', - icon:'pi pi-fw pi-calendar-minus' - } - ] - } - ] - }, - { - separator:true - }, - { - label:'Quit', - icon:'pi pi-fw pi-power-off' - } - ]; - -`} - - - - {` - - -`} - - -

Popup Mode

-

TieredMenu is inline by default whereas popup mode is supported by enabling popup property and calling toggle method with an event of the target.

- - - {` - this.menu = el} /> -
- - ); - } -} - `} - - - - - ) - } - -} diff --git a/src/showcase/togglebutton/ToggleButtonDemo.js b/src/showcase/togglebutton/ToggleButtonDemo.js deleted file mode 100644 index 5bf0b983cf..0000000000 --- a/src/showcase/togglebutton/ToggleButtonDemo.js +++ /dev/null @@ -1,290 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {ToggleButton} from '../../components/togglebutton/ToggleButton'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class ToggleButtonDemo extends Component { - - constructor() { - super(); - this.state = { - checked1: false, - checked2: false - }; - } - - render() { - return ( -
-
-
-

ToggleButton

-

ToggleButton is used to select a boolean value using a button.

- - - { context => } - -
-
- -
-

Basic

- this.setState({checked1: e.value})} /> -

Selected Value: {this.state.checked1 ? 'true' : 'false'}

- -

Custom

- this.setState({checked2: e.value})} /> -

Selected Value: {this.state.checked2 ? 'true' : 'false'}

-
- - -
- ); - } -} - -class ToggleButtonDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import {ToggleButton} from 'primereact/togglebutton'; - -`} - - -

Getting Started

-

ToggleButton is used as a controlled input with checked and onChange properties.

- - -{` - this.setState({checked1: e.value})} /> - -`} - - -

Labels and Icons

-

Icons and Labels can be customized using onLabel, offLabel, onIcon and offIcon properties.

- - -{` -ToggleButton onLabel="I confirm" offLabel="I reject" onIcon="pi pi-check" offIcon="pi pi-times" - checked={this.state.checked2} onChange={(e) => this.setState({checked2: e.value})} /> - -`} - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
onIconstringnullIcon for the on state.
offIconstringnullIcon for the off state.
onLabelstringyesLabel for the on state.
offLabelstringnoLabel for the off state.
stylestringnullInline style of the element.
classNamestringnullStyle class of the element.
checkedbooleanfalseSpecifies the on/off state of the button.
tabIndexnumber0Index of the element in tabbing order.
tooltipanynullContent of the tooltip.
tooltipOptionsobjectnullConfiguration of the tooltip, refer to the tooltip documentation for more information.
ariaLabelledBystringnullEstablishes relationships between the component and label(s) where its value should be one or more element IDs.
-
- -

Events

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
NameParametersDescription
onChangeevent.originalEvent: Browser event
- event.value: Value as the checked state.
Callback to invoke on value change.
onFocusevent: Browser eventCallback to invoke when autocomplete gets focus.
onBlurevent: Browser eventCallback to invoke when autocomplete loses focus.
-
- -

Styling

-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - -
NameElement
p-togglebuttonContainer element
p-button-icon-leftIcon element.
p-button-textLabel element.
-
- -

Dependencies

-

None.

-
- - - - View on GitHub - - -{` -import React, {Component} from 'react'; -import {ToggleButton} from 'primereact/togglebutton'; - -export class ToggleButtonDemo extends Component { - - constructor() { - super(); - this.state = { - checked1: false, - checked2: false - }; - } - - render() { - return ( -
-
-
-

ToggleButton

-

ToggleButton is used to select a boolean value using a button.

-
-
- -
-

Basic

- this.setState({checked1: e.value})} /> -

Selected Value: {this.state.checked1 ? 'true' : 'false'}

- -

Custom

- this.setState({checked2: e.value})} /> -

Selected Value: {this.state.checked2 ? 'true' : 'false'}

-
-
- ); - } -} - -`} -
-
-
-
- ); - } -} diff --git a/src/showcase/toolbar/ToolbarDemo.js b/src/showcase/toolbar/ToolbarDemo.js deleted file mode 100644 index d3f9bb4e07..0000000000 --- a/src/showcase/toolbar/ToolbarDemo.js +++ /dev/null @@ -1,206 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {Toolbar} from '../../components/toolbar/Toolbar'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; -import {Button} from "../../components/button/Button"; - -export class ToolbarDemo extends Component { - - constructor() { - super(); - this.state = {}; - } - - render() { - return ( -
-
-
-

Toolbar

-

Toolbar is a grouping component for buttons and other content.

- - - { context => } - -
-
-
- -
-
-
-
-
-
- - - -
- ); - } -} - -class ToolbarDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- - {` -import {Toolbar} from 'primereact/toolbar'; - -`} - -

Getting Started

-

Toolbar is a container component defined using Toolbar element. Left aligned content is placed inside a div having .p-toolbar-group-left class and similarly .p-toolbar-group-right for right alignment.

- - {` - -
-
-
-
-
- -`} -
-

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
stylestringnullInline style of the component.
classNamestringnullStyle class of the component.
-
-

Styling

-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - -
NameElement
p-toolbarMain container element.
p-toolbar-group-leftLeft content container.
p-toolbar-group-rightRight content container.
-
- -

Dependencies

-

None.

-
- - - - View on GitHub - - - {` -export class ToolbarDemo extends Component { - - constructor() { - super(); - this.state = {}; - } - - render() { - return ( -
-
-
-

Toolbar

-

Toolbar is a grouping component for buttons and other content.

-
-
-
- -
-
-
-
-
-
- - - -
- ); - } -} - `} -
-
-
-
- ) - } - -} diff --git a/src/showcase/tooltip/TooltipDemo.js b/src/showcase/tooltip/TooltipDemo.js deleted file mode 100644 index d648e29ee3..0000000000 --- a/src/showcase/tooltip/TooltipDemo.js +++ /dev/null @@ -1,265 +0,0 @@ -import React, {Component} from 'react'; -import {InputText} from '../../components/inputtext/InputText'; -import {Button} from '../../components/button/Button'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TooltipDemo extends Component { - - render() { - return ( -
-
-
-

Tooltip

-

Tooltip functionality is integrated within various PrimeReact components.

- - - { context => } - -
-
- -
-

Positions

-
-
- -
-
- -
-
- -
-
- -
-
- -

Focus and Blur

- - -

Button

-
- - -
- ) - } -} - -class TooltipDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Getting Started

-

Tooltip functionality is integrated within the the components that have support such as inputtext or buttons. Content is defined with the tooltip property.

- - -{` - -
- - ) - } -} - -`} - - - - - ) - } -} diff --git a/src/showcase/tree/TreeContextMenuDemo.js b/src/showcase/tree/TreeContextMenuDemo.js deleted file mode 100644 index 67c3f77113..0000000000 --- a/src/showcase/tree/TreeContextMenuDemo.js +++ /dev/null @@ -1,173 +0,0 @@ -import React, { Component } from 'react'; -import {Tree} from '../../components/tree/Tree'; -import {ContextMenu} from '../../components/contextmenu/ContextMenu'; -import {Growl} from '../../components/growl/Growl'; -import {NodeService} from '../service/NodeService'; -import {TreeSubmenu} from './TreeSubmenu'; -import {TabView, TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeContextMenuDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: null, - expandedKeys: {}, - selectedNodeKey: null, - menu: [ - { - label: 'View Key', - icon: 'pi pi-search', - command: () => { - this.growl.show({severity: 'success', summary: 'Node Key', detail: this.state.selectedNodeKey}); - } - }, - { - label: 'Toggle', - icon: 'pi pi-cog', - command: () => { - let expandedKeys = {...this.state.expandedKeys}; - if (expandedKeys[this.state.selectedNodeKey]) - delete expandedKeys[this.state.selectedNodeKey]; - else - expandedKeys[this.state.selectedNodeKey] = true; - - this.setState({expandedKeys: expandedKeys}); - } - } - ] - }; - - this.nodeService = new NodeService(); - } - - componentDidMount() { - this.nodeService.getTreeNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
- - -
-
-

Tree - ContextMenu

-

Tree has exclusive integration with the ContextMenu component with support for different menus depending on the node.

- - - { context => } - -
-
- -
- this.growl = el} /> - - this.cm = el} onHide={() => this.setState({selectedNodeKey: null})}/> - - this.setState({expandedKeys: e.value})} - contextMenuSelectionKey={this.state.selectedNodeKey} onContextMenuSelectionChange={event => this.setState({selectedNodeKey: event.value})} - onContextMenu={event => this.cm.show(event.originalEvent)} /> -
- - -
- ) - } -} - -export class TreeContextMenuDemoDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import React, { Component } from 'react'; -import {Tree} from 'primereact/tree' -import {ContextMenu} from 'primereact/contextmenu'; -import {Growl} from 'primereact/growl'; -import {NodeService} from '../service/NodeService'; - -export class TreeContextMenuDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: null, - expandedKeys: {}, - selectedNodeKey: null, - menu: [ - { - label: 'View Key', - icon: 'pi pi-search', - command: () => { - this.growl.show({severity: 'success', summary: 'Node Key', detail: this.state.selectedNodeKey}); - } - }, - { - label: 'Toggle', - icon: 'pi pi-cog', - command: () => { - let expandedKeys = {...this.state.expandedKeys}; - if (expandedKeys[this.state.selectedNodeKey]) - delete expandedKeys[this.state.selectedNodeKey]; - else - expandedKeys[this.state.selectedNodeKey] = true; - - this.setState({expandedKeys: expandedKeys}); - } - } - ] - }; - - this.nodeService = new NodeService(); - } - - componentDidMount() { - this.nodeService.getTreeNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
-
-
-

Tree - ContextMenu

-

Tree has exclusive integration with the ContextMenu component with support for different menus depending on the node.

-
-
- -
- this.growl = el} /> - - this.cm = el} /> - - this.setState({expandedKeys: e.value})} - onContextMenuSelectionChange={event => this.setState({selectedNodeKey: event.value})} - onContextMenu={event => this.cm.show(event.originalEvent)} /> -
-
- ) - } -} - -`} -
- -
-
-
- ); - } -} diff --git a/src/showcase/tree/TreeDemo.js b/src/showcase/tree/TreeDemo.js deleted file mode 100644 index 9d25517e6e..0000000000 --- a/src/showcase/tree/TreeDemo.js +++ /dev/null @@ -1,973 +0,0 @@ -import React, {Component} from 'react'; -import {Tree} from '../../components/tree/Tree'; -import {Button} from '../../components/button/Button'; -import {NodeService} from '../service/NodeService'; -import {TreeSubmenu} from './TreeSubmenu'; -import {TabView, TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: null, - expandedKeys: {} - }; - - this.nodeService = new NodeService(); - this.toggleMovies = this.toggleMovies.bind(this); - } - - toggleMovies() { - let expandedKeys = {...this.state.expandedKeys}; - if (expandedKeys['2']) - delete expandedKeys['2']; - else - expandedKeys['2'] = true; - - this.setState({expandedKeys: expandedKeys}); - } - - componentDidMount() { - this.nodeService.getTreeNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
- - -
-
-

Tree

-

Tree is used to display hierarchical data.

- - - { context => } - -
-
- -
-

Uncontrolled

- - -

Controlled

-
- - -
- ) - } -} - -export class TreeDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import {Tree} from 'primereact/tree'; - -`} - - -

Getting Started

-

Tree component requires an array of TreeNode objects as its value.

- -

TreeNode API

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
keyanynullUnique key of the node.
labelstringnullLabel of the node.
dataanynullData represented by the node.
iconstringnullIcon of the node to display next to content.
childrenTreeNode[]nullAn array of treenodes as children.
stylestringnullInline style of the node.
classNamestringnullStyle class of the node.
draggablebooleantrueWhether the node is draggable when dragdrop is enabled.
droppablebooleantrueWhether the node is droppable when dragdrop is enabled.
selectablebooleannullWhether the node is selectable when selection mode is enabled.
leafbooleannullSpecifies if the node has children. Used in lazy loading.
-
- - -{` - - -`} - - - -{` -const data: [ - { - "key": "0", - "label": "Documents", - "data": "Documents Folder", - "icon": "pi pi-fw pi-inbox", - "children": [{ - "key": "0-0", - "label": "Work", - "data": "Work Folder", - "icon": "pi pi-fw pi-cog", - "children": [{ "key": "0-0-0", "label": "Expenses.doc", "icon": "pi pi-fw pi-file", "data": "Expenses Document" }, { "key": "0-0-1", "label": "Resume.doc", "icon": "pi pi-fw pi-file", "data": "Resume Document" }] - }, - { - "key": "0-1", - "label": "Home", - "data": "Home Folder", - "icon": "pi pi-fw pi-home", - "children": [{ "key": "0-1-0", "label": "Invoices.txt", "icon": "pi pi-fw pi-file", "data": "Invoices for this month" }] - }] - }, - { - "key": "1", - "label": "Events", - "data": "Events Folder", - "icon": "pi pi-fw pi-calendar", - "children": [ - { "key": "1-0", "label": "Meeting", "icon": "pi pi-fw pi-calendar-plus", "data": "Meeting" }, - { "key": "1-1", "label": "Product Launch", "icon": "pi pi-fw pi-calendar-plus", "data": "Product Launch" }, - { "key": "1-2", "label": "Report Review", "icon": "pi pi-fw pi-calendar-plus", "data": "Report Review" }] - }, - { - "key": "2", - "label": "Movies", - "data": "Movies Folder", - "icon": "pi pi-fw pi-star", - "children": [{ - "key": "2-0", - "icon": "pi pi-fw pi-star", - "label": "Al Pacino", - "data": "Pacino Movies", - "children": [{ "key": "2-0-0", "label": "Scarface", "icon": "pi pi-fw pi-video", "data": "Scarface Movie" }, { "key": "2-0-1", "label": "Serpico", "icon": "pi pi-fw pi-video", "data": "Serpico Movie" }] - }, - { - "key": "2-1", - "label": "Robert De Niro", - "icon": "pi pi-fw pi-star", - "data": "De Niro Movies", - "children": [{ "key": "2-1-0", "label": "Goodfellas", "icon": "pi pi-fw pi-video", "data": "Goodfellas Movie" }, { "key": "2-1-1", "label": "Untouchables", "icon": "pi pi-fw pi-video", "data": "Untouchables Movie" }] - }] - } -] - -`} - - -

Controlled vs Uncontrolled

-

Tree expansion state is managed in two ways, in uncontrolled mode only initial expanded state of a node can be defined using expandedKeys property whereas in controlled mode expandedKeys - property along with onToggle properties are used for full control over the state. If you need to expand or collapse the state of nodes programmatically then controlled mode should be used. Example below demonstrates - both cases;

- - -{` -import React, {Component} from 'react'; -import {Tree} from 'primereact/tree'; -import {Button} from 'primereact/button'; -import {NodeService} from '../service/NodeService'; - -export class TreeDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: null, - expandedKeys: {} - }; - - this.nodeService = new NodeService(); - this.toggleMovies = this.toggleMovies.bind(this); - } - - toggleMovies() { - let expandedKeys = {...this.state.expandedKeys}; - if (expandedKeys['2']) - delete expandedKeys['2']; - else - expandedKeys['2'] = true; - - this.setState({expandedKeys: expandedKeys}); - } - - componentDidMount() { - this.nodeService.getTreeNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
-

Uncontrolled

- - -

Controlled

-
- ) - } -} - -`} -
- -

Selection

-

Tree supports single, multiple and checkbox selection modes. Define selectionMode, selectionKeys and onSelectionChange properties to control the selection. In single mode, selectionKeys should - be a single value whereas in multiple or checkbox modes an array is required. By default in multiple selection mode, metaKey is necessary to add to existing selections however this can be configured with metaKeySelection property. Note that - in touch enabled devices, Tree does not require metaKey.

- -{` -import React, {Component} from 'react'; -import {Tree} from 'primereact/tree'; -import {NodeService} from '../service/NodeService'; - -export class TreeSelectionDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: null, - selectedNodeKey: null, - selectedNodeKeys1: null, - selectedNodeKeys2: null, - selectedNodeKeys3: null - }; - - this.nodeService = new NodeService(); - } - - componentDidMount() { - this.nodeService.getTreeNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
-

Single Selection

- this.setState({selectedNodeKey: e.value})} /> - -

Multiple Selection with MetaKey

- this.setState({selectedNodeKeys1: e.value})} /> - -

Multiple Selection without MetaKey

- this.setState({selectedNodeKeys2: e.value})} /> - -

Checkbox Selection

- this.setState({selectedNodeKeys3: e.value})} /> -
- ) - } -} - - -`} -
- -

Lazy

-

Lazy loading is implemented using the onExpand event by adding children to the expanded node. leaf property should be enabled to indicate the node has children but not yet loaded. Here is a in-memory demo - that loads generated nodes on expand event to imitate a remote call with a timeout. Notice the usage of loading property as well to give users a feedback about the loading process.

- -{` -import React, {Component} from 'react'; -import {Tree} from 'primereact/tree'; -import {NodeService} from '../service/NodeService'; - -export class TreeLazyDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: null, - loading: true, - }; - - this.nodeService = new NodeService(); - - this.loadOnExpand = this.loadOnExpand.bind(this); - } - - loadOnExpand(event) { - if (!event.node.children) { - this.setState({ - loading: true - }); - - setTimeout(() => { - let node = {...event.node}; - node.children = []; - - for (let i = 0; i < 3; i++) { - node.children.push({ - key: node.key + '-' + i, - label: 'Lazy ' + node.label + '-' + i - }); - } - - let value = [...this.state.nodes]; - value[parseInt(event.node.key, 10)] = node; - this.setState({ - nodes: value, - loading: false - }); - }, 500); - } - } - - componentDidMount() { - setTimeout(() => { - this.nodeService.getTreeNodes().then(data => this.setState( - { - nodes: data, - loading: false - } - )); - }, 2000); - } - - render() { - return ( - - ) - } -} - -`} - - -

Templating

-

label property of a node is used to display as the content by default. Templating is supported as well with the nodeTemplate callback that gets the ndoe instance and returns JSX. Example - below is a sample tree based navigation of React docs.

- -{` -import React, {Component} from 'react'; -import {Tree} from 'primereact/tree'; - -export class TreeTemplatingDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: this.createNavigation() - }; - - this.nodeTemplate = this.nodeTemplate.bind(this); - } - - createNavigation() { - return [ - { - label: 'Insallation', - children: [ - {label: 'Getting Started', url:'https://reactjs.org/docs/getting-started.html'}, - {label: 'Add React', url: 'https://reactjs.org/docs/add-react-to-a-website.html'}, - {label: 'Create an App', url:'https://reactjs.org/docs/create-a-new-react-app.html'}, - {label: 'CDN Links', url: 'https://reactjs.org/docs/cdn-links.html'} - ] - }, - { - label: 'Main Concepts', - children: [ - {label: 'Hello World', url: 'https://reactjs.org/docs/hello-world.html'}, - {label: 'Introducing JSX', url: 'https://reactjs.org/docs/introducing-jsx.html'}, - {label: 'Rendering Elements', url: 'https://reactjs.org/docs/rendering-elements.html'}, - {label: 'Components and Props', url: 'https://reactjs.org/docs/components-and-props.html'}, - {label: 'State and LifeCycle', url: 'https://reactjs.org/docs/state-and-lifecycle.html'}, - {label: 'Handling Events', url: 'https://reactjs.org/docs/handling-events.html'} - ] - } - ]; - } - - nodeTemplate(node) { - if (node.url) { - return ( - {node.label} - ) - } - else { - return ( - {node.label} - ) - } - } - - render() { - return ( - - ) - } -} - -`} - - -

DragDrop

-

Tree nodes can be reordered using dragdrop by setting dragdropScope property to a unique variable and updating the new value at onDragDrop callback. The value of the dragdropScope must be unique to provide - intervention from other draggable elements on the page.

- -{` -import React, {Component} from 'react'; -import {Tree} from 'primereact/tree'; -import {NodeService} from '../service/NodeService'; - -export class TreeDragDropDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: null - }; - - this.nodeService = new NodeService(); - } - - componentDidMount() { - this.nodeService.getTreeNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
- this.setState({nodes: event.value})} /> -
- ) - } -} - -`} -
- -

Filtering

-

Filtering is enabled by setting the filter property to true, by default label property of a node - is used to compare against the value in the text field, in order to customize which field(s) should be used during search define filterBy property.

- -

In addition filterMode specifies the filtering strategy. In lenient mode when the query matches a node, children of the node are not searched further as all descendants of the node are included. On the other hand, - in strict mode when the query matches a node, filtering continues on all descendants.

- - -{` - - - - - - -`} - - -

ContextMenu

-

One or more ContextMenu instances can be attached to nodes. Similar to selection, separate contextMenuSelectionKey and onContextMenuSelectionChange properties are necesary to manage the selected node with - right click. In addition, a context menu can either be displayed at onContextMenu event. Since this event also passes the node instance, you may choose to display a different context menu for a particular node.

- - -{` -import React, { Component } from 'react'; -import {Tree} from 'primereact/tree' -import {ContextMenu} from 'primereact/contextmenu'; -import {Growl} from 'primereact/growl'; -import {NodeService} from '../service/NodeService'; - -export class TreeContextMenuDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: null, - expandedKeys: {}, - selectedNodeKey: null, - menu: [ - { - label: 'View Key', - icon: 'pi pi-search', - command: () => { - this.growl.show({severity: 'success', summary: 'Node Key', detail: this.state.selectedNodeKey}); - } - }, - { - label: 'Toggle', - icon: 'pi pi-cog', - command: () => { - let expandedKeys = {...this.state.expandedKeys}; - if (expandedKeys[this.state.selectedNodeKey]) - delete expandedKeys[this.state.selectedNodeKey]; - else - expandedKeys[this.state.selectedNodeKey] = true; - - this.setState({expandedKeys: expandedKeys}); - } - } - ] - }; - - this.nodeService = new NodeService(); - } - - componentDidMount() { - this.nodeService.getTreeNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
- this.growl = el} /> - - this.cm = el} /> - - this.setState({expandedKeys: e.value})} - onContextMenuSelectionChange={event => this.setState({selectedNodeKey: event.value})} - onContextMenu={event => this.cm.show(event.originalEvent)} /> -
- ) - } -} - -`} -
- -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
valuearraynullAn array of treenodes.
selectionModestringnullDefines the selection mode, valid values "single", "multiple", and "checkbox".
selectionKeysanynullA single or an array of keys to control the selection state.
contextMenuSelectionKeyanynullA single key to control the selection with the context menu.
expandedKeysarraynullAn array of keys to represent the state of the tree expansion state in controlled mode.
styleobjectnullInline style of the component.
classNamestringnullStyle class of the component.
contentStyleobjectnullInline style of the tree content.
contentClassNamestringnullStyle class of the tree content.
metaKeySelectionbooleantrueDefines how multiple items can be selected, when true metaKey needs to be pressed to select or unselect an item and when set to false selection of each item - can be toggled individually. On touch enabled devices, metaKeySelection is turned off automatically.
propagateSelectionUpbooleantrueWhether checkbox selections propagate to ancestor nodes.
propagateSelectionDownbooleantrueWhether checkbox selections propagate to descendant nodes.
loadingbooleanfalseWhether to display loading indicator.
loadingIconstringpi pi-spinIcon to display when tree is loading.
dragdropScopestringfalseUnique key to enable dragdrop functionality.
ariaLabelstringfalseUsed to define a string that labels the component.
ariaLabelledBystringnullContains the element IDs of labels.
nodeTemplatefunctionfalseFunction that gets a TreeNode instance and returns the content for it.
filterbooleanfalseWhen specified, displays an input field to filter the items.
filterBystringlabelWhen filtering is enabled, filterBy decides which field or fields (comma separated) to search against.
filterModestringlenientMode for filtering valid values are "lenient" and "strict". Default is lenient.
filterPlaceholderstringnullPlaceholder text to show when filter input is empty.
filterLocalestringundefinedLocale to use in filtering. The default locale is the host environment's current locale.
disabledbooleanfalseWhen present, it specifies that the component should be disabled.
-
- -

Events

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameParametersDescription
onSelectevent.originalEvent: browser event
- event.node: Selected node instance.
Callback to invoke when a node is selected.
onUnselectevent.originalEvent: browser event
- event.node: Unselected node instance.
Callback to invoke when a node is unselected.
onExpandevent.originalEvent: browser event
- event.node: Expanded node instance.
Callback to invoke when a node is expanded.
onCollapseevent.originalEvent: browser event
- event.node: Collapsed node instance.
Callback to invoke when a node is collapsed.
onSelectionChangeevent.originalEvent: browser event
- event.value: Selected node key(s).
Callback to invoke when selection changes.
onContextMenuSelectionChangeevent.originalEvent: browser event
- event.value: Selected node key.
Callback to invoke when selection changes with a context menu.
onToggleevent.originalEvent: browser event
- event.node: Toggled node instance.
Callback to invoke when a node is toggled.
onDragDropevent.originalEvent: browser event
- event.value: New value after the dragdrop.
Callback to invoke when a node is selected.
onContextMenuevent.originalEvent: browser event
- event.node: Selected node instance.
Callback to invoke when a node is selected with a context menu.
-
- -

Styling

-

Following is the list of structural style classes

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameElement
p-treeMain container element
p-tree-horizontalMain container element in horizontal mode
p-tree-containerContainer of nodes
p-treenodeA treenode element
p-treenode-contentContent of a treenode
p-treenode-togglerToggle element
p-treenode-toggler-iconToggle icon
p-treenode-iconIcon of a treenode
p-treenode-labelLabel of a treenode
p-treenode-childrenContainer element for node children
- -

Dependencies

-

None.

-
- -
- - - - View on GitHub - - -{` -import React, {Component} from 'react'; -import {Tree} from 'primereact/tree'; -import {Button} from 'primereact/button'; -import {NodeService} from '../service/NodeService'; - -export class TreeDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: null, - expandedKeys: {} - }; - - this.nodeService = new NodeService(); - this.toggleMovies = this.toggleMovies.bind(this); - } - - toggleMovies() { - let expandedKeys = {...this.state.expandedKeys}; - if (expandedKeys['2']) - delete expandedKeys['2']; - else - expandedKeys['2'] = true; - - this.setState({expandedKeys: expandedKeys}); - } - - componentDidMount() { - this.nodeService.getTreeNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
-
-
-

Tree

-

Tree is used to display hierarchical data.

-
-
- -
-

Uncontrolled

- - -

Controlled

-
-
- ) - } -} - -`} -
-
-
-
- ); - } -} diff --git a/src/showcase/tree/TreeDragDropDemo.js b/src/showcase/tree/TreeDragDropDemo.js deleted file mode 100644 index bbc953c9fa..0000000000 --- a/src/showcase/tree/TreeDragDropDemo.js +++ /dev/null @@ -1,109 +0,0 @@ -import React, {Component} from 'react'; -import {Tree} from '../../components/tree/Tree'; -import {NodeService} from '../service/NodeService'; -import {TreeSubmenu} from './TreeSubmenu'; -import {TabView, TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeDragDropDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: null - }; - - this.nodeService = new NodeService(); - } - - componentDidMount() { - this.nodeService.getTreeNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
- - -
-
-

Tree - DragDrop

-

Nodes can be reordered using drag and drop.

- - - { context => } - -
-
- -
- this.setState({nodes: event.value})} /> -
- - -
- ) - } -} - -export class TreeDragDropDemoDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import React, {Component} from 'react'; -import {Tree} from 'primereact/tree'; -import {NodeService} from '../service/NodeService'; - -export class TreeDragDropDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: null - }; - - this.nodeService = new NodeService(); - } - - componentDidMount() { - this.nodeService.getTreeNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
-
-
-

Tree - DragDrop

-

Nodes can be reordered using drag and drop.

-
-
- -
- this.setState({nodes: event.value})} /> -
-
- ) - } -} - -`} -
- -
-
-
- ); - } -} diff --git a/src/showcase/tree/TreeEventsDemo.js b/src/showcase/tree/TreeEventsDemo.js deleted file mode 100644 index 5788bb7682..0000000000 --- a/src/showcase/tree/TreeEventsDemo.js +++ /dev/null @@ -1,163 +0,0 @@ -import React, {Component} from 'react'; -import {Tree} from '../../components/tree/Tree'; -import {Growl} from '../../components/growl/Growl'; -import {NodeService} from '../service/NodeService'; -import {TreeSubmenu} from './TreeSubmenu'; -import {TabView, TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeEventsDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: null, - selectedNodeKey: null - }; - - this.nodeService = new NodeService(); - - this.onExpand = this.onExpand.bind(this); - this.onCollapse = this.onCollapse.bind(this); - this.onSelect = this.onSelect.bind(this); - this.onUnselect = this.onUnselect.bind(this); - } - - componentDidMount() { - this.nodeService.getTreeNodes().then(data => this.setState({nodes: data})); - } - - onExpand(event) { - this.growl.show({severity: 'success', summary: 'Node Expanded', detail: event.node.label}); - } - - onCollapse(event) { - this.growl.show({severity: 'success', summary: 'Node Collapsed', detail: event.node.label}); - } - - onSelect(event) { - this.growl.show({severity: 'info', summary: 'Node Selected', detail: event.node.label}); - } - - onUnselect(event) { - this.growl.show({severity: 'info', summary: 'Node Unselected', detail: event.node.label}); - } - - render() { - return ( -
- - -
-
-

Tree - Events

-

An event is provided each type of user interaction such as expand, collapse and selection.

- - - { context => } - -
-
- -
- this.growl = el} /> - -

Events

- this.setState({selectedNodeKey: e.value})} - onExpand={this.onExpand} onCollapse={this.onCollapse} onSelect={this.onSelect} onUnselect={this.onUnselect} /> -
- - -
- ) - } -} - -export class TreeEventsDemoDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import React, {Component} from 'react'; -import {Tree} from 'primereact/tree'; -import {Growl} from 'primereact/growl'; -import {NodeService} from '../service/NodeService'; - -export class TreeEventsDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: null, - selectedNodeKey: null - }; - - this.nodeService = new NodeService(); - - this.onExpand = this.onExpand.bind(this); - this.onCollapse = this.onCollapse.bind(this); - this.onSelect = this.onSelect.bind(this); - this.onUnselect = this.onUnselect.bind(this); - } - - componentDidMount() { - this.nodeService.getTreeNodes().then(data => this.setState({nodes: data})); - } - - onExpand(event) { - this.growl.show({severity: 'success', summary: 'Node Expanded', detail: event.node.label}); - } - - onCollapse(event) { - this.growl.show({severity: 'success', summary: 'Node Collapsed', detail: event.node.label}); - } - - onSelect(event) { - this.growl.show({severity: 'info', summary: 'Node Selected', detail: event.node.label}); - } - - onUnselect(event) { - this.growl.show({severity: 'info', summary: 'Node Unselected', detail: event.node.label}); - } - - render() { - return ( -
-
-
-

Tree - Events

-

An event is provided each type of user interaction such as expand, collapse and selection.

-
-
- -
- this.growl = el} /> - -

Events

- this.setState({selectedNodeKey: e.value})} - onExpand={this.onExpand} onCollapse={this.onCollapse} onSelect={this.onSelect} onUnselect={this.onUnselect} /> -
-
- ) - } -} - -`} -
- -
-
-
- ); - } -} diff --git a/src/showcase/tree/TreeFilterDemo.js b/src/showcase/tree/TreeFilterDemo.js deleted file mode 100644 index 797bec1750..0000000000 --- a/src/showcase/tree/TreeFilterDemo.js +++ /dev/null @@ -1,119 +0,0 @@ -import React, {Component} from 'react'; -import {Tree} from '../../components/tree/Tree'; -import {NodeService} from '../service/NodeService'; -import {TreeSubmenu} from './TreeSubmenu'; -import {TabView, TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeFilterDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes1: null, - nodes2: null - }; - - this.nodeService = new NodeService(); - } - - componentDidMount() { - this.nodeService.getTreeNodes().then(data => this.setState({nodes1: data, nodes2: data})); - } - - render() { - return ( -
- - -
-
-

Tree - Filter

-

Filtering updates the node based on the constraints.

- - - { context => } - -
-
- -
-

Lenient Filter Mode

- - -

Strict Filter Mode

- -
- - -
- ) - } -} - -export class TreeFilterDemoDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import React, {Component} from 'react'; -import {Tree} from 'primereact/tree'; -import {NodeService} from '../service/NodeService'; - -export class TreeFilterDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes1: null, - nodes2: null - }; - - this.nodeService = new NodeService(); - } - - componentDidMount() { - this.nodeService.getTreeNodes().then(data => this.setState({nodes1: data, nodes2: data})); - } - - render() { - return ( -
-
-
-

Tree - Filter

-

Filtering updates the node based on the constraints.

-
-
- -
-

Lenient Filter Mode

- - -

Strict Filter Mode

- -
-
- ) - } -} - -`} -
- -
-
-
- ); - } -} diff --git a/src/showcase/tree/TreeLazyDemo.js b/src/showcase/tree/TreeLazyDemo.js deleted file mode 100644 index 0d3eeaa253..0000000000 --- a/src/showcase/tree/TreeLazyDemo.js +++ /dev/null @@ -1,226 +0,0 @@ -import React, {Component} from 'react'; -import {Tree} from '../../components/tree/Tree'; -import {NodeService} from '../service/NodeService'; -import {TreeSubmenu} from './TreeSubmenu'; -import {TabView, TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeLazyDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: null, - loading: true, - }; - - this.nodeService = new NodeService(); - - this.loadOnExpand = this.loadOnExpand.bind(this); - } - - createLazyNodes() { - return [ - { - key: '0', - label: 'Node 0', - leaf: false - }, - { - key: '1', - label: 'Node 1', - leaf: false - }, - { - key: '2', - label: 'Node 2', - leaf: false - } - ]; - } - - loadOnExpand(event) { - if (!event.node.children) { - this.setState({ - loading: true - }); - - setTimeout(() => { - let node = {...event.node}; - node.children = []; - - for (let i = 0; i < 3; i++) { - node.children.push({ - key: node.key + '-' + i, - label: 'Lazy ' + node.label + '-' + i - }); - } - - let value = [...this.state.nodes]; - value[parseInt(event.node.key, 10)] = node; - this.setState({ - nodes: value, - loading: false - }); - }, 500); - } - } - - componentDidMount() { - setTimeout(() => { - this.nodeService.getTreeNodes().then(data => this.setState( - { - nodes: this.createLazyNodes(), - loading: false - } - )); - }, 2000); - } - - render() { - return ( -
- - -
-
-

Tree - Lazy

-

Lazy loading is useful when dealing with huge datasets.

- - - { context => } - -
-
- -
-

Lazy Loading

- -
- - -
- ) - } -} - -export class TreeLazyDemoDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import React, {Component} from 'react'; -import {Tree} from 'primereact/tree'; -import {NodeService} from '../service/NodeService'; - -export class TreeLazyDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: null, - loading: true, - }; - - this.nodeService = new NodeService(); - - this.loadOnExpand = this.loadOnExpand.bind(this); - } - - createLazyNodes() { - return [ - { - key: '0', - label: 'Node 0', - leaf: false - }, - { - key: '1', - label: 'Node 1', - leaf: false - }, - { - key: '2', - label: 'Node 2', - leaf: false - } - ]; - } - - loadOnExpand(event) { - if (!event.node.children) { - this.setState({ - loading: true - }); - - setTimeout(() => { - let node = {...event.node}; - node.children = []; - - for (let i = 0; i < 3; i++) { - node.children.push({ - key: node.key + '-' + i, - label: 'Lazy ' + node.label + '-' + i - }); - } - - let value = [...this.state.nodes]; - value[parseInt(event.node.key, 10)] = node; - this.setState({ - nodes: value, - loading: false - }); - }, 500); - } - } - - componentDidMount() { - setTimeout(() => { - this.nodeService.getTreeNodes().then(data => this.setState( - { - nodes: this.createLazyNodes(), - loading: false - } - )); - }, 2000); - } - - render() { - return ( -
- -
-
-

Tree - Lazy

-

Lazy loading is useful when dealing with huge datasets.

-
-
- -
-

Lazy Loading

- -
-
- ) - } -} - -`} -
- -
-
-
- ); - } -} diff --git a/src/showcase/tree/TreeSelectionDemo.js b/src/showcase/tree/TreeSelectionDemo.js deleted file mode 100644 index f581ade4fb..0000000000 --- a/src/showcase/tree/TreeSelectionDemo.js +++ /dev/null @@ -1,138 +0,0 @@ -import React, {Component} from 'react'; -import {Tree} from '../../components/tree/Tree'; -import {NodeService} from '../service/NodeService'; -import {TreeSubmenu} from './TreeSubmenu'; -import {TabView, TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeSelectionDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: null, - selectedNodeKey: null, - selectedNodeKeys1: null, - selectedNodeKeys2: null, - selectedNodeKeys3: null - }; - - this.nodeService = new NodeService(); - } - - componentDidMount() { - this.nodeService.getTreeNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
- - -
-
-

Tree - Selection

-

Tree supports "single", "multiple" and "checkbox" as selection modes.

- - - { context => } - -
-
- -
-

Single Selection

- this.setState({selectedNodeKey: e.value})} /> - -

Multiple Selection with MetaKey

- this.setState({selectedNodeKeys1: e.value})} /> - -

Multiple Selection without MetaKey

- this.setState({selectedNodeKeys2: e.value})} /> - -

Checkbox Selection

- this.setState({selectedNodeKeys3: e.value})} /> -
- - -
- ) - } -} - -export class TreeSelectionDemoDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import React, {Component} from 'react'; -import {Tree} from 'primereact/tree'; -import {NodeService} from '../service/NodeService'; - -export class TreeSelectionDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: null, - selectedNodeKey: null, - selectedNodeKeys1: null, - selectedNodeKeys2: null, - selectedNodeKeys3: null - }; - - this.nodeService = new NodeService(); - } - - componentDidMount() { - this.nodeService.getTreeNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
-
-
-

Tree - Selection

-

Tree supports "single", "multiple" and "checkbox" as selection modes.

-
-
- -
-

Single Selection

- this.setState({selectedNodeKey: e.value})} /> - -

Multiple Selection with MetaKey

- this.setState({selectedNodeKeys1: e.value})} /> - -

Multiple Selection without MetaKey

- this.setState({selectedNodeKeys2: e.value})} /> - -

Checkbox Selection

- this.setState({selectedNodeKeys3: e.value})} /> -
-
- ) - } -} - - -`} -
- -
-
-
- ); - } -} diff --git a/src/showcase/tree/TreeSubmenu.js b/src/showcase/tree/TreeSubmenu.js deleted file mode 100644 index ec64e13bb9..0000000000 --- a/src/showcase/tree/TreeSubmenu.js +++ /dev/null @@ -1,22 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; - -export class TreeSubmenu extends Component { - - render() { - return ( -
-
    -
  • ● Documentation
  • -
  • ● Selection
  • -
  • ● Events
  • -
  • ● Lazy
  • -
  • ● Templating
  • -
  • ● DragDrop
  • -
  • ● ContextMenu
  • -
  • ● Filter
  • -
-
- ); - } -} \ No newline at end of file diff --git a/src/showcase/tree/TreeTemplatingDemo.js b/src/showcase/tree/TreeTemplatingDemo.js deleted file mode 100644 index 8229bf3966..0000000000 --- a/src/showcase/tree/TreeTemplatingDemo.js +++ /dev/null @@ -1,181 +0,0 @@ -import React, {Component} from 'react'; -import {Tree} from '../../components/tree/Tree'; -import {TreeSubmenu} from './TreeSubmenu'; -import {TabView, TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeTemplatingDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: this.createNavigation() - }; - - this.nodeTemplate = this.nodeTemplate.bind(this); - } - - createNavigation() { - return [ - { - key: "0", - label: 'Installation', - children: [ - {key: "0-0", label: 'Getting Started', url:'https://reactjs.org/docs/getting-started.html'}, - {key: "0-1", label: 'Add React', url: 'https://reactjs.org/docs/add-react-to-a-website.html'}, - {key: "0-2", label: 'Create an App', url:'https://reactjs.org/docs/create-a-new-react-app.html'}, - {key: "0-3", label: 'CDN Links', url: 'https://reactjs.org/docs/cdn-links.html'} - ] - }, - { - key: "1", - label: 'Main Concepts', - children: [ - {key: "1-0", label: 'Hello World', url: 'https://reactjs.org/docs/hello-world.html'}, - {key: "1-1", label: 'Introducing JSX', url: 'https://reactjs.org/docs/introducing-jsx.html'}, - {key: "1-2", label: 'Rendering Elements', url: 'https://reactjs.org/docs/rendering-elements.html'}, - {key: "1-3", label: 'Components and Props', url: 'https://reactjs.org/docs/components-and-props.html'}, - {key: "1-4", label: 'State and LifeCycle', url: 'https://reactjs.org/docs/state-and-lifecycle.html'}, - {key: "1-5", label: 'Handling Events', url: 'https://reactjs.org/docs/handling-events.html'} - ] - } - ]; - } - - nodeTemplate(node) { - if (node.url) { - return ( - {node.label} - ) - } - else { - return ( - {node.label} - ) - } - } - - render() { - return ( -
- - -
-
-

Tree - Templating

-

Tree nodes can be customized to display custom content.

- - - { context => } - -
-
- -
-

Navigation

- -
- - -
- ) - } -} - -export class TreeTemplatingDemoDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import React, {Component} from 'react'; -import {Tree} from 'primereact/tree'; - -export class TreeTemplatingDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: this.createNavigation() - }; - - this.nodeTemplate = this.nodeTemplate.bind(this); - } - - createNavigation() { - return [ - { - key: "0", - label: 'Installation', - children: [ - {key: "0-0", label: 'Getting Started', url:'https://reactjs.org/docs/getting-started.html'}, - {key: "0-1", label: 'Add React', url: 'https://reactjs.org/docs/add-react-to-a-website.html'}, - {key: "0-2", label: 'Create an App', url:'https://reactjs.org/docs/create-a-new-react-app.html'}, - {key: "0-3", label: 'CDN Links', url: 'https://reactjs.org/docs/cdn-links.html'} - ] - }, - { - key: "1", - label: 'Main Concepts', - children: [ - {key: "1-0", label: 'Hello World', url: 'https://reactjs.org/docs/hello-world.html'}, - {key: "1-1", label: 'Introducing JSX', url: 'https://reactjs.org/docs/introducing-jsx.html'}, - {key: "1-2", label: 'Rendering Elements', url: 'https://reactjs.org/docs/rendering-elements.html'}, - {key: "1-3", label: 'Components and Props', url: 'https://reactjs.org/docs/components-and-props.html'}, - {key: "1-4", label: 'State and LifeCycle', url: 'https://reactjs.org/docs/state-and-lifecycle.html'}, - {key: "1-5", label: 'Handling Events', url: 'https://reactjs.org/docs/handling-events.html'} - ] - } - ]; - } - - nodeTemplate(node) { - if (node.url) { - return ( - {node.label} - ) - } - else { - return ( - {node.label} - ) - } - } - - render() { - return ( -
-
-
-

Tree - Templating

-

Tree nodes can be customized to display custom content.

-
-
- -
-

Navigation

- -
-
- ) - } -} - -`} -
- -
-
-
- ); - } -} diff --git a/src/showcase/treetable/TreeTableColGroupDemo.js b/src/showcase/treetable/TreeTableColGroupDemo.js deleted file mode 100644 index cb0457f36c..0000000000 --- a/src/showcase/treetable/TreeTableColGroupDemo.js +++ /dev/null @@ -1,495 +0,0 @@ -import React, { Component } from 'react'; -import { TreeTable } from '../../components/treetable/TreeTable'; -import { Column } from "../../components/column/Column"; -import { NodeService } from '../service/NodeService'; -import { TreeTableSubmenu } from '../../showcase/treetable/TreeTableSubmenu'; -import { ColumnGroup } from '../../components/columngroup/ColumnGroup'; -import { Row } from '../../components/row/Row'; -import { TabView, TabPanel } from '../../components/tabview/TabView'; -import { CodeHighlight } from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeTableColGroupDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [] - }; - this.nodeservice = new NodeService(); - } - - getSales() { - return [ - { - key: '0', - data: { brand: 'Bliss', lastYearSale: '51%', thisYearSale: '40%', lastYearProfit: '$54,406.00', thisYearProfit: '$43,342'}, - children: [ - { - key: '0-0', - data: { brand: 'Product A', lastYearSale: '25%', thisYearSale: '20%', lastYearProfit: '$34,406.00', thisYearProfit: '$23,342' }, - children: [ - { - key: '0-0-0', - data: { brand: 'Product A-1', lastYearSale: '20%', thisYearSale: '10%', lastYearProfit: '$24,406.00', thisYearProfit: '$13,342' }, - }, - { - key: '0-0-1', - data: { brand: 'Product A-2', lastYearSale: '5%', thisYearSale: '10%', lastYearProfit: '$10,000.00', thisYearProfit: '$10,000' }, - } - ] - }, - { - key: '0-1', - data: { brand: 'Product B', lastYearSale: '26%', thisYearSale: '20%', lastYearProfit: '$24,000.00', thisYearProfit: '$23,000' }, - } - ] - }, - { - key: '1', - data: { brand: 'Fate', lastYearSale: '83%', thisYearSale: '96%', lastYearProfit: '$423,132', thisYearProfit: '$312,122' }, - children: [ - { - key: '1-0', - data: { brand: 'Product X', lastYearSale: '50%', thisYearSale: '40%', lastYearProfit: '$223,132', thisYearProfit: '$156,061' }, - }, - { - key: '1-1', - data: { brand: 'Product Y', lastYearSale: '33%', thisYearSale: '56%', lastYearProfit: '$200,000', thisYearProfit: '$156,061' }, - } - ] - }, - { - key: '2', - data: { brand: 'Ruby', lastYearSale: '38%', thisYearSale: '5%', lastYearProfit: '$12,321', thisYearProfit: '$8,500' }, - children: [ - { - key: '2-0', - data: { brand: 'Product M', lastYearSale: '18%', thisYearSale: '2%', lastYearProfit: '$10,300', thisYearProfit: '$5,500' }, - }, - { - key: '2-1', - data: { brand: 'Product N', lastYearSale: '20%', thisYearSale: '3%', lastYearProfit: '$2,021', thisYearProfit: '$3,000' }, - } - ] - }, - { - key: '3', - data: { brand: 'Sky', lastYearSale: '49%', thisYearSale: '22%', lastYearProfit: '$745,232', thisYearProfit: '$650,323' }, - children: [ - { - key: '3-0', - data: { brand: 'Product P', lastYearSale: '20%', thisYearSale: '16%', lastYearProfit: '$345,232', thisYearProfit: '$350,000' }, - }, - { - key: '3-1', - data: { brand: 'Product R', lastYearSale: '29%', thisYearSale: '6%', lastYearProfit: '$400,009', thisYearProfit: '$300,323' }, - } - ] - }, - { - key: '4', - data: { brand: 'Comfort', lastYearSale: '17%', thisYearSale: '79%', lastYearProfit: '$643,242', thisYearProfit: '500,332' }, - children: [ - { - key: '4-0', - data: { brand: 'Product S', lastYearSale: '10%', thisYearSale: '40%', lastYearProfit: '$243,242', thisYearProfit: '$100,000' }, - }, - { - key: '4-1', - data: { brand: 'Product T', lastYearSale: '7%', thisYearSale: '39%', lastYearProfit: '$400,00', thisYearProfit: '$400,332' }, - } - ] - }, - { - key: '5', - data: { brand: 'Merit', lastYearSale: '52%', thisYearSale: ' 65%', lastYearProfit: '$421,132', thisYearProfit: '$150,005' }, - children: [ - { - key: '5-0', - data: { brand: 'Product L', lastYearSale: '20%', thisYearSale: '40%', lastYearProfit: '$121,132', thisYearProfit: '$100,000' }, - }, - { - key: '5-1', - data: { brand: 'Product G', lastYearSale: '32%', thisYearSale: '25%', lastYearProfit: '$300,000', thisYearProfit: '$50,005' }, - } - ] - }, - { - key: '6', - data: { brand: 'Violet', lastYearSale: '82%', thisYearSale: '12%', lastYearProfit: '$131,211', thisYearProfit: '$100,214' }, - children: [ - { - key: '6-0', - data: { brand: 'Product SH1', lastYearSale: '30%', thisYearSale: '6%', lastYearProfit: '$101,211', thisYearProfit: '$30,214' }, - }, - { - key: '6-1', - data: { brand: 'Product SH2', lastYearSale: '52%', thisYearSale: '6%', lastYearProfit: '$30,000', thisYearProfit: '$70,000' }, - } - ] - }, - { - key: '7', - data: { brand: 'Dulce', lastYearSale: '44%', thisYearSale: '45%', lastYearProfit: '$66,442', thisYearProfit: '$53,322' }, - children: [ - { - key: '7-0', - data: { brand: 'Product PN1', lastYearSale: '22%', thisYearSale: '25%', lastYearProfit: '$33,221', thisYearProfit: '$20,000' }, - }, - { - key: '7-1', - data: { brand: 'Product PN2', lastYearSale: '22%', thisYearSale: '25%', lastYearProfit: '$33,221', thisYearProfit: '$33,322' }, - } - ] - }, - { - key: '8', - data: { brand: 'Solace', lastYearSale: '90%', thisYearSale: '56%', lastYearProfit: '$765,442', thisYearProfit: '$296,232' }, - children: [ - { - key: '8-0', - data: { brand: 'Product HT1', lastYearSale: '60%', thisYearSale: '36%', lastYearProfit: '$465,000', thisYearProfit: '$150,653' }, - }, - { - key: '8-1', - data: { brand: 'Product HT2', lastYearSale: '30%', thisYearSale: '20%', lastYearProfit: '$300,442', thisYearProfit: '$145,579' }, - } - ] - }, - { - key: '9', - data: { brand: 'Essence', lastYearSale: '75%', thisYearSale: '54%', lastYearProfit: '$21,212', thisYearProfit: '$12,533' }, - children: [ - { - key: '9-0', - data: { brand: 'Product TS1', lastYearSale: '50%', thisYearSale: '34%', lastYearProfit: '$11,000', thisYearProfit: '$8,562' }, - }, - { - key: '9-1', - data: { brand: 'Product TS2', lastYearSale: '25%', thisYearSale: '20%', lastYearProfit: '$11,212', thisYearProfit: '$3,971' }, - } - ] - } - ]; - } - - componentDidMount() { - this.setState({ - nodes: this.getSales() - }); - } - - render() { - const headerGroup = ( - - - - - - - - - - - - - - - - - ); - - const footerGroup = ( - - - - - - - - ); - - return ( -
- - -
-
-

TreeTable - Column Grouping

-

Columns can be grouped at header and footer using headerColumnGroup and footerColumnGroup components that both define an array of columns each having colspan and rowspan.

- - - { context => } - -
-
- -
- - - - - - - -
- - -
- ) - } -} - -class TreeTableColGroupDemoDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; -import { ColumnGroup } from 'primereact/columngroup'; -import { Row } from 'primereact/row'; -import { NodeService } from '../service/NodeService'; - -export class TreeTableColGroupDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [] - }; - this.nodeservice = new NodeService(); - } - - getSales() { - return [ - { - key: '0', - data: { brand: 'Bliss', lastYearSale: '51%', thisYearSale: '40%', lastYearProfit: '$54,406.00', thisYearProfit: '$43,342'}, - children: [ - { - key: '0-0', - data: { brand: 'Product A', lastYearSale: '25%', thisYearSale: '20%', lastYearProfit: '$34,406.00', thisYearProfit: '$23,342' }, - children: [ - { - key: '0-0-0', - data: { brand: 'Product A-1', lastYearSale: '20%', thisYearSale: '10%', lastYearProfit: '$24,406.00', thisYearProfit: '$13,342' }, - }, - { - key: '0-0-1', - data: { brand: 'Product A-2', lastYearSale: '5%', thisYearSale: '10%', lastYearProfit: '$10,000.00', thisYearProfit: '$10,000' }, - } - ] - }, - { - key: '0-1', - data: { brand: 'Product B', lastYearSale: '26%', thisYearSale: '20%', lastYearProfit: '$24,000.00', thisYearProfit: '$23,000' }, - } - ] - }, - { - key: '1', - data: { brand: 'Fate', lastYearSale: '83%', thisYearSale: '96%', lastYearProfit: '$423,132', thisYearProfit: '$312,122' }, - children: [ - { - key: '1-0', - data: { brand: 'Product X', lastYearSale: '50%', thisYearSale: '40%', lastYearProfit: '$223,132', thisYearProfit: '$156,061' }, - }, - { - key: '1-1', - data: { brand: 'Product Y', lastYearSale: '33%', thisYearSale: '56%', lastYearProfit: '$200,000', thisYearProfit: '$156,061' }, - } - ] - }, - { - key: '2', - data: { brand: 'Ruby', lastYearSale: '38%', thisYearSale: '5%', lastYearProfit: '$12,321', thisYearProfit: '$8,500' }, - children: [ - { - key: '2-0', - data: { brand: 'Product M', lastYearSale: '18%', thisYearSale: '2%', lastYearProfit: '$10,300', thisYearProfit: '$5,500' }, - }, - { - key: '2-1', - data: { brand: 'Product N', lastYearSale: '20%', thisYearSale: '3%', lastYearProfit: '$2,021', thisYearProfit: '$3,000' }, - } - ] - }, - { - key: '3', - data: { brand: 'Sky', lastYearSale: '49%', thisYearSale: '22%', lastYearProfit: '$745,232', thisYearProfit: '$650,323' }, - children: [ - { - key: '3-0', - data: { brand: 'Product P', lastYearSale: '20%', thisYearSale: '16%', lastYearProfit: '$345,232', thisYearProfit: '$350,000' }, - }, - { - key: '3-1', - data: { brand: 'Product R', lastYearSale: '29%', thisYearSale: '6%', lastYearProfit: '$400,009', thisYearProfit: '$300,323' }, - } - ] - }, - { - key: '4', - data: { brand: 'Comfort', lastYearSale: '17%', thisYearSale: '79%', lastYearProfit: '$643,242', thisYearProfit: '500,332' }, - children: [ - { - key: '4-0', - data: { brand: 'Product S', lastYearSale: '10%', thisYearSale: '40%', lastYearProfit: '$243,242', thisYearProfit: '$100,000' }, - }, - { - key: '4-1', - data: { brand: 'Product T', lastYearSale: '7%', thisYearSale: '39%', lastYearProfit: '$400,00', thisYearProfit: '$400,332' }, - } - ] - }, - { - key: '5', - data: { brand: 'Merit', lastYearSale: '52%', thisYearSale: ' 65%', lastYearProfit: '$421,132', thisYearProfit: '$150,005' }, - children: [ - { - key: '5-0', - data: { brand: 'Product L', lastYearSale: '20%', thisYearSale: '40%', lastYearProfit: '$121,132', thisYearProfit: '$100,000' }, - }, - { - key: '5-1', - data: { brand: 'Product G', lastYearSale: '32%', thisYearSale: '25%', lastYearProfit: '$300,000', thisYearProfit: '$50,005' }, - } - ] - }, - { - key: '6', - data: { brand: 'Violet', lastYearSale: '82%', thisYearSale: '12%', lastYearProfit: '$131,211', thisYearProfit: '$100,214' }, - children: [ - { - key: '6-0', - data: { brand: 'Product SH1', lastYearSale: '30%', thisYearSale: '6%', lastYearProfit: '$101,211', thisYearProfit: '$30,214' }, - }, - { - key: '6-1', - data: { brand: 'Product SH2', lastYearSale: '52%', thisYearSale: '6%', lastYearProfit: '$30,000', thisYearProfit: '$70,000' }, - } - ] - }, - { - key: '7', - data: { brand: 'Dulce', lastYearSale: '44%', thisYearSale: '45%', lastYearProfit: '$66,442', thisYearProfit: '$53,322' }, - children: [ - { - key: '7-0', - data: { brand: 'Product PN1', lastYearSale: '22%', thisYearSale: '25%', lastYearProfit: '$33,221', thisYearProfit: '$20,000' }, - }, - { - key: '7-1', - data: { brand: 'Product PN2', lastYearSale: '22%', thisYearSale: '25%', lastYearProfit: '$33,221', thisYearProfit: '$33,322' }, - } - ] - }, - { - key: '8', - data: { brand: 'Solace', lastYearSale: '90%', thisYearSale: '56%', lastYearProfit: '$765,442', thisYearProfit: '$296,232' }, - children: [ - { - key: '8-0', - data: { brand: 'Product HT1', lastYearSale: '60%', thisYearSale: '36%', lastYearProfit: '$465,000', thisYearProfit: '$150,653' }, - }, - { - key: '8-1', - data: { brand: 'Product HT2', lastYearSale: '30%', thisYearSale: '20%', lastYearProfit: '$300,442', thisYearProfit: '$145,579' }, - } - ] - }, - { - key: '9', - data: { brand: 'Essence', lastYearSale: '75%', thisYearSale: '54%', lastYearProfit: '$21,212', thisYearProfit: '$12,533' }, - children: [ - { - key: '9-0', - data: { brand: 'Product TS1', lastYearSale: '50%', thisYearSale: '34%', lastYearProfit: '$11,000', thisYearProfit: '$8,562' }, - }, - { - key: '9-1', - data: { brand: 'Product TS2', lastYearSale: '25%', thisYearSale: '20%', lastYearProfit: '$11,212', thisYearProfit: '$3,971' }, - } - ] - } - ]; - } - - componentDidMount() { - this.setState({ - nodes: this.getSales() - }); - } - - render() { - const headerGroup = ( - - - - - - - - - - - - - - - - - ); - - const footerGroup = ( - - - - - - - - ); - - return ( -
-
-
-

TreeTable - Column Grouping

-

Columns can be grouped at header and footer using headerColumnGroup and footerColumnGroup components that both define an array of columns each having colspan and rowspan.

-
-
- -
- - - - - - - -
-
- ) - } -} - -`} -
-
-
-
- ) - } -} diff --git a/src/showcase/treetable/TreeTableColReorderDemo.js b/src/showcase/treetable/TreeTableColReorderDemo.js deleted file mode 100644 index fbd77822c8..0000000000 --- a/src/showcase/treetable/TreeTableColReorderDemo.js +++ /dev/null @@ -1,115 +0,0 @@ -import React, { Component } from 'react'; -import { TreeTable } from '../../components/treetable/TreeTable'; -import { Column } from "../../components/column/Column"; -import { NodeService } from '../service/NodeService'; -import { TreeTableSubmenu } from '../../showcase/treetable/TreeTableSubmenu'; -import { TabView, TabPanel } from '../../components/tabview/TabView'; -import { CodeHighlight } from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeTableColReorderDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [] - }; - this.nodeservice = new NodeService(); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
- - -
-
-

TreeTable - Column Reorder

-

Order of the columns can be changed using drag and drop.

- - - { context => } - -
-
- -
- - - - - -
- - -
- ) - } -} - -class TreeTableColReorderDemoDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; -import { NodeService } from '../service/NodeService'; - -export class TreeTableColReorderDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [] - }; - this.nodeservice = new NodeService(); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
-
-
-

TreeTable - Column Reorder

-

Order of the columns can be changed using drag and drop.

-
-
- -
- - - - - -
-
- ) - } -} - -`} -
-
-
-
- ) - } -} diff --git a/src/showcase/treetable/TreeTableColResizeDemo.js b/src/showcase/treetable/TreeTableColResizeDemo.js deleted file mode 100644 index 3848493fda..0000000000 --- a/src/showcase/treetable/TreeTableColResizeDemo.js +++ /dev/null @@ -1,163 +0,0 @@ -import React, { Component } from 'react'; -import { TreeTable } from '../../components/treetable/TreeTable'; -import { Column } from "../../components/column/Column"; -import { NodeService } from '../service/NodeService'; -import { TreeTableSubmenu } from '../../showcase/treetable/TreeTableSubmenu'; -import { TabView, TabPanel } from '../../components/tabview/TabView'; -import { CodeHighlight } from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeTableColResizeDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [], - expandedKeys: [] - }; - this.nodeservice = new NodeService(); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
- - -
-
-

TreeTable - Column Resize

-

Columns can be resized using drag drop by setting the resizableColumns to true. There are two resize modes; "fit" and "expand". - Fit is the default one and the overall table width does not change when a column is resized whereas in "expand" mode, table width also changes along with the column width.

- - - { context => } - -
-
- -
-

Fit Mode

- - - - - - -

Expand Mode

- - - - - - -

Scrollable

- - - - - - -

Scrollable with Variable Width

- - - - - -
- - -
- ) - } -} - -class TreeTableColResizeDemoDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; -import { NodeService } from '../service/NodeService'; - -export class TreeTableColResizeDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [], - expandedKeys: [] - }; - this.nodeservice = new NodeService(); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
-
-
-

TreeTable - Column Resize

-

Columns can be resized using drag drop by setting the resizableColumns to true. There are two resize modes; "fit" and "expand". - Fit is the default one and the overall table width does not change when a column is resized whereas in "expand" mode, table width also changes along with the column width.

-
-
- -
-

Fit Mode

- - - - - - -

Expand Mode

- - - - - - -

Scrollable

- - - - - - -

Scrollable with Variable Width

- - - - - -
-
- ) - } -} - -`} -
-
-
-
- ) - } -} diff --git a/src/showcase/treetable/TreeTableColTogglerDemo.js b/src/showcase/treetable/TreeTableColTogglerDemo.js deleted file mode 100644 index b7ec9c8fd7..0000000000 --- a/src/showcase/treetable/TreeTableColTogglerDemo.js +++ /dev/null @@ -1,173 +0,0 @@ -import React, { Component } from 'react'; -import { TreeTable } from '../../components/treetable/TreeTable'; -import { Column } from "../../components/column/Column"; -import { NodeService } from '../service/NodeService'; -import { MultiSelect } from '../../components/multiselect/MultiSelect'; -import { TreeTableSubmenu } from '../../showcase/treetable/TreeTableSubmenu'; -import { TabView, TabPanel } from '../../components/tabview/TabView'; -import { CodeHighlight } from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeTableColTogglerDemo extends Component { - - constructor(props) { - super(props); - let columns = [ - {field: 'size', header: 'Size'}, - {field: 'type', header: 'Type'} - ]; - - let colOptions = []; - for(let col of columns) { - colOptions.push({label: col.header, value: col}); - } - - this.state = { - nodes: [], - cols: columns, - colOptions: colOptions - }; - - this.nodeservice = new NodeService(); - this.onColumnToggle = this.onColumnToggle.bind(this); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - onColumnToggle(event) { - this.setState({cols: event.value}); - } - - render() { - const header = ( -
- -
- ); - - const columns = this.state.cols.map((col, i) => { - return ; - }); - - return ( -
- - -
-
-

TreeTable - Column Toggler

-

MultiSelect component can be used to implement column toggler functionality.

- - - { context => } - -
-
- -
- - - {columns} - -
- - -
- ) - } -} - -class TreeTableColTogglerDemoDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; -import { MultiSelect } from 'primereact/multiselect'; -import { NodeService } from '../service/NodeService'; - -export class TreeTableColTogglerDemo extends Component { - - constructor(props) { - super(props); - let columns = [ - {field: 'size', header: 'Size'}, - {field: 'type', header: 'Type'} - ]; - - let colOptions = []; - for(let col of columns) { - colOptions.push({label: col.header, value: col}); - } - - this.state = { - nodes: [], - cols: columns, - colOptions: colOptions - }; - - this.nodeservice = new NodeService(); - this.onColumnToggle = this.onColumnToggle.bind(this); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - onColumnToggle(event) { - this.setState({cols: event.value}); - } - - render() { - const header = ( -
- -
- ); - - const columns = this.state.cols.map((col, i) => { - return ; - }); - - return ( -
-
-
-

TreeTable - Column Toggler

-

MultiSelect component can be used to implement column toggler functionality.

-
-
- -
- - - {columns} - -
-
- ) - } -} - -`} -
-
-
-
- ) - } -} diff --git a/src/showcase/treetable/TreeTableContextMenuDemo.js b/src/showcase/treetable/TreeTableContextMenuDemo.js deleted file mode 100644 index c3a0a764aa..0000000000 --- a/src/showcase/treetable/TreeTableContextMenuDemo.js +++ /dev/null @@ -1,179 +0,0 @@ -import React, { Component } from 'react'; -import { TreeTable } from '../../components/treetable/TreeTable'; -import { ContextMenu } from '../../components/contextmenu/ContextMenu'; -import { Growl } from '../../components/growl/Growl'; -import { Column } from "../../components/column/Column"; -import { NodeService } from '../service/NodeService'; -import { TreeTableSubmenu } from '../../showcase/treetable/TreeTableSubmenu'; -import { TabView, TabPanel } from '../../components/tabview/TabView'; -import { CodeHighlight } from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeTableContextMenuDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [], - expandedKeys: {}, - selectedNodeKey: null, - menu: [ - { - label: 'View Key', - icon: 'pi pi-search', - command: () => { - this.growl.show({severity: 'success', summary: 'Node Key', detail: this.state.selectedNodeKey}); - } - }, - { - label: 'Toggle', - icon: 'pi pi-cog', - command: () => { - let expandedKeys = {...this.state.expandedKeys}; - if (expandedKeys[this.state.selectedNodeKey]) - delete expandedKeys[this.state.selectedNodeKey]; - else - expandedKeys[this.state.selectedNodeKey] = true; - - this.setState({expandedKeys: expandedKeys}); - } - } - ] - }; - this.nodeservice = new NodeService(); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
- - -
-
-

TreeTable - ContextMenu

-

TreeTable has exclusive integration with ContextMenu.

- - - { context => } - -
-
- -
- this.growl = el} /> - - this.cm = el} onHide={() => this.setState({selectedNodeKey: null})}/> - - this.setState({expandedKeys: e.value})} - contextMenuSelectionKey={this.state.selectedNodeKey} onContextMenuSelectionChange={event => this.setState({selectedNodeKey: event.value})} - onContextMenu={event => this.cm.show(event.originalEvent)}> - - - - -
- - -
- ) - } -} - -class TreeTableContextMenuDemoDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; -import { ContextMenu } from 'primereact/contextmenu'; -import { Growl } from 'primereact/growl'; -import { NodeService } from '../service/NodeService'; - -export class TreeTableContextMenuDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [], - expandedKeys: {}, - selectedNodeKey: null, - menu: [ - { - label: 'View Key', - icon: 'pi pi-search', - command: () => { - this.growl.show({severity: 'success', summary: 'Node Key', detail: this.state.selectedNodeKey}); - } - }, - { - label: 'Toggle', - icon: 'pi pi-cog', - command: () => { - let expandedKeys = {...this.state.expandedKeys}; - if (expandedKeys[this.state.selectedNodeKey]) - delete expandedKeys[this.state.selectedNodeKey]; - else - expandedKeys[this.state.selectedNodeKey] = true; - - this.setState({expandedKeys: expandedKeys}); - } - } - ] - }; - this.nodeservice = new NodeService(); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
-
-
-

TreeTable - ContextMenu

-

TreeTable has exclusive integration with ContextMenu.

-
-
- -
- this.growl = el} /> - - this.cm = el} onHide={() => this.setState({selectedNodeKey: null})}/> - - this.setState({expandedKeys: e.value})} - contextMenuSelectionKey={this.state.selectedNodeKey} onContextMenuSelectionChange={event => this.setState({selectedNodeKey: event.value})} - onContextMenu={event => this.cm.show(event.originalEvent)}> - - - - -
-
- ) - } -} - -`} -
-
-
-
- ) - } -} diff --git a/src/showcase/treetable/TreeTableDemo.js b/src/showcase/treetable/TreeTableDemo.js deleted file mode 100644 index d58d95433b..0000000000 --- a/src/showcase/treetable/TreeTableDemo.js +++ /dev/null @@ -1,2717 +0,0 @@ -import React, { Component } from 'react'; -import { Link } from 'react-router-dom'; -import { TreeTable } from '../../components/treetable/TreeTable'; -import { Column } from "../../components/column/Column"; -import { Button } from '../../components/button/Button'; -import { NodeService } from '../service/NodeService'; -import { TreeTableSubmenu } from '../../showcase/treetable/TreeTableSubmenu'; -import { TabView, TabPanel } from '../../components/tabview/TabView'; -import { CodeHighlight } from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeTableDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [], - expandedKeys: {} - }; - this.nodeservice = new NodeService(); - this.toggleApplications = this.toggleApplications.bind(this); - } - - toggleApplications() { - let expandedKeys = {...this.state.expandedKeys}; - if (expandedKeys['0']) - delete expandedKeys['0']; - else - expandedKeys['0'] = true; - - this.setState({expandedKeys: expandedKeys}); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
- - -
-
-

TreeTable

-

TreeTable is used to display hierarchical data in tabular format.

- - - { context => } - -
-
- -
-

Uncontrolled

- - - - - - -

Controlled

-
- - -
- ) - } -} - -export class TreeTableDoc extends Component { - - shouldComponentUpdate() { - return false; - } - - render() { - return ( -
- - -

Import

- - {` -import {TreeTable} from 'primereact/treetable'; - -`} - - -

Getting Started

-

TreeTable component requires an array of TreeNode objects as its value and columns defined with one or more Column components.

- -

TreeNode API

-

Following properties of the API are currently utilized by the TreeTable.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
keyanynullUnique key of the node.
dataanynullData represented by the node.
childrenTreeNode[]nullAn array of treenodes as children.
stylestringnullInline style of the node.
classNamestringnullStyle class of the node.
selectablebooleannullWhether the node is selectable when selection mode is enabled.
leafbooleannullSpecifies if the node has children. Used in lazy loading.
-
- -

Here is a sample json response to serve as the datasource of the TreeTable.

-
- -{` -{ - "root": - [ - { - "key": "0", - "data":{ - "name":"Applications", - "size":"100kb", - "type":"Folder" - }, - "children":[ - { - "key": "0-0", - "data":{ - "name":"React", - "size":"25kb", - "type":"Folder" - }, - "children":[ - { - "key": "0-0-0", - "data":{ - "name":"react.app", - "size":"10kb", - "type":"Application" - } - }, - { - "key": "0-0-1", - "data":{ - "name":"native.app", - "size":"10kb", - "type":"Application" - } - }, - { - "key": "0-0-2", - "data":{ - "name":"mobile.app", - "size":"5kb", - "type":"Application" - } - } - ] - }, - { - "key": "0-1", - "data":{ - "name":"editor.app", - "size":"25kb", - "type":"Application" - } - }, - { - "key": "0-2", - "data":{ - "name":"settings.app", - "size":"50kb", - "type":"Application" - } - } - ] - }, - { - "key": "1", - "data":{ - "name":"Cloud", - "size":"20kb", - "type":"Folder" - }, - "children":[ - { - "key": "1-0", - "data":{ - "name":"backup-1.zip", - "size":"10kb", - "type":"Zip" - } - }, - { - "key": "1-1", - "data":{ - "name":"backup-2.zip", - "size":"10kb", - "type":"Zip" - } - } - ] - }, - { - "key": "2", - "data": { - "name":"Desktop", - "size":"150kb", - "type":"Folder" - }, - "children":[ - { - "key": "2-0", - "data":{ - "name":"note-meeting.txt", - "size":"50kb", - "type":"Text" - } - }, - { - "key": "2-1", - "data":{ - "name":"note-todo.txt", - "size":"100kb", - "type":"Text" - } - } - ] - }, - { - "key": "3", - "data":{ - "name":"Documents", - "size":"75kb", - "type":"Folder" - }, - "children":[ - { - "key": "3-0", - "data":{ - "name":"Work", - "size":"55kb", - "type":"Folder" - }, - "children":[ - { - "key": "3-0-0", - "data":{ - "name":"Expenses.doc", - "size":"30kb", - "type":"Document" - } - }, - { - "key": "3-0-1", - "data":{ - "name":"Resume.doc", - "size":"25kb", - "type":"Resume" - } - } - ] - }, - { - "key": "3-1", - "data":{ - "name":"Home", - "size":"20kb", - "type":"Folder" - }, - "children":[ - { - "key": "3-1-0", - "data":{ - "name":"Invoices", - "size":"20kb", - "type":"Text" - } - } - ] - } - ] - }, - { - "key": "4", - "data": { - "name":"Downloads", - "size":"25kb", - "type":"Folder" - }, - "children":[ - { - "key": "4-0", - "data": { - "name":"Spanish", - "size":"10kb", - "type":"Folder" - }, - "children":[ - { - "key": "4-0-0", - "data":{ - "name":"tutorial-a1.txt", - "size":"5kb", - "type":"Text" - } - }, - { - "key": "4-0-1", - "data":{ - "name":"tutorial-a2.txt", - "size":"5kb", - "type":"Text" - } - } - ] - }, - { - "key": "4-1", - "data":{ - "name":"Travel", - "size":"15kb", - "type":"Text" - }, - "children":[ - { - "key": "4-1-0", - "data":{ - "name":"Hotel.pdf", - "size":"10kb", - "type":"PDF" - } - }, - { - "key": "4-1-1", - "data":{ - "name":"Flight.pdf", - "size":"5kb", - "type":"PDF" - } - } - ] - } - ] - }, - { - "key": "5", - "data": { - "name":"Main", - "size":"50kb", - "type":"Folder" - }, - "children":[ - { - "key": "5-0", - "data":{ - "name":"bin", - "size":"50kb", - "type":"Link" - } - }, - { - "key": "5-1", - "data":{ - "name":"etc", - "size":"100kb", - "type":"Link" - } - }, - { - "key": "5-2", - "data":{ - "name":"var", - "size":"100kb", - "type":"Link" - } - } - ] - }, - { - "key": "6", - "data":{ - "name":"Other", - "size":"5kb", - "type":"Folder" - }, - "children":[ - { - "key": "6-0", - "data":{ - "name":"todo.txt", - "size":"3kb", - "type":"Text" - } - }, - { - "key": "6-1", - "data":{ - "name":"logo.png", - "size":"2kb", - "type":"Picture" - } - } - ] - }, - { - "key": "7", - "data":{ - "name":"Pictures", - "size":"150kb", - "type":"Folder" - }, - "children":[ - { - "key": "7-0", - "data":{ - "name":"barcelona.jpg", - "size":"90kb", - "type":"Picture" - } - }, - { - "key": "7-1", - "data":{ - "name":"primeng.png", - "size":"30kb", - "type":"Picture" - } - }, - { - "key": "7-2", - "data":{ - "name":"prime.jpg", - "size":"30kb", - "type":"Picture" - } - } - ] - }, - { - "key": "8", - "data":{ - "name":"Videos", - "size":"1500kb", - "type":"Folder" - }, - "children":[ - { - "key": "8-0", - "data":{ - "name":"primefaces.mkv", - "size":"1000kb", - "type":"Video" - } - }, - { - "key": "8-1", - "data":{ - "name":"intro.avi", - "size":"500kb", - "type":"Video" - } - } - ] - } - ] -} - -`} - -
- -

Throughout the samples, a NodeService would be used to connect to a server to fetch the nodes with axios. - Note that this is only for demo purposes, TreeTable does not have any restrictions on how data is provided.

- - -{` -import axios from 'axios'; - -export class NodeService { - - getTreeTableNodes() { - return axios.get('showcase/resources/demo/data/treetablenodes.json') - .then(res => res.data.root); - } - -} - -`} - - -

Following sample TreeTable has 3 columns and retrieves the data from the service on componentDidMount. Notice the expander property - in the name column to indicate that this column displays an icon to toggle the child nodes.

- -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; -import { NodeService } from '../service/NodeService'; - -export class TreeTableDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [] - }; - this.nodeservice = new NodeService(); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( - - - - - - ); - } -} - -`} - - -

Dynamic columns are also possible by creating the column component dynamically.

- -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; -import { NodeService } from '../service/NodeService'; - -export class TreeTableDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [] - }; - this.nodeservice = new NodeService(); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - render() { - let cols = [ - {field: 'name', header: 'Name'}, - {field: 'size', header: 'Size'}, - {field: 'type', header: 'Type'} - ]; - - let dynamicColumns = cols.map((col,i) => { - return ; - }); - - return ( - - {dynamicColumns} - - ); - } -} - -`} - -

Column Component

-

Column component defines various options that are utilized by the TreeTable to specify corresponding features.

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
columnKeystringnullIdentifier of a column if field property is not defined. Only utilized by reorderableColumns feature at the moment.
fieldstringnullProperty of a row data.
sortFieldstringnullProperty of a row data used for sorting, defaults to field.
headeranynullHeader content of the column.
bodyanynullBody content of the column.
footeranynullFooter content of the column.
sortableanyfalseDefines if a column is sortable.
sortFunctionfunctionnullSort function for custom sorting.
filterbooleanfalseDefines if a column can be filtered.
filterMatchModestringnullDefines filterMatchMode; "startsWith", "contains", "endsWidth", "equals", "notEquals", "in" and "custom".
filterTypestringtextType of the filter input field.
filterPlaceholderstringnullDefines placeholder of the input fields.
filterLocalestringundefinedLocale to use in filtering. The default locale is the host environment's current locale.
filterMaxlengthnumbernullSpecifies the maximum number of characters allowed in the filter element.
filterElementobjectnullElement for custom filtering.
filterFunctionfunctionnullCustom filter function.
filterHeaderStyleobjectnullInline style of the filter column header.
filterHeaderClassNamestringnullStyle class of the filter header column.
styleobjectnullInline style of the column.
classNamestringnullStyle class of the column.
headerStyleobjectnullInline style of the column.
headerClassNamestringnullStyle class of the column.
bodyStyleobjectnullInline style of the column.
bodyClassNamestringnullStyle class of the column.
footerStyleobjectnullInline style of the column.
footerClassNamestringnullStyle class of the column.
expanderbooleanfalseDisplays an icon to toggle expansion of children.
frozenbooleanfalseWhether the column is fixed in horizontal scrolling or not.
colSpannumbernullNumber of columns to span for grouping.
rowSpannumbernullNumber of rows to span for grouping.
editorfunctionnullFunction to provide the cell editor input.
editorValidatorfunctionnullValidator function to validate the cell input value.
reorderablebooleannullUsed to defined reorderableColumns per column when reorderableColumns of table is enabled, defaults to value of reorderableColumns.
-
- -

Controlled vs Uncontrolled

-

Expansion state is managed in two ways, in uncontrolled mode only initial expanded state of a node can be defined using expandedKeys property whereas in controlled mode expandedKeys - property along with onToggle properties are used for full control over the state. If you need to expand or collapse the state of nodes programmatically then controlled mode should be used. Example below demonstrates - both cases;

- - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; -import { Button } from 'primereact/button'; -import { NodeService } from '../service/NodeService'; - -export class TreeTableDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [], - expandedKeys: [] - }; - this.nodeservice = new NodeService(); - this.toggleApplications = this.toggleApplications.bind(this); - } - - toggleApplications() { - let expandedKeys = {...this.state.expandedKeys}; - if (expandedKeys['0']) - delete expandedKeys['0']; - else - expandedKeys['0'] = true; - - this.setState({expandedKeys: expandedKeys}); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
-

Uncontrolled

- - - - - - -

Controlled

-
- ) - } -} - -`} -
- -

Table Layout

-

Default table-layout is fixed meaning the cell widths do not depend on their content. If you require cells to scale based on their contents - set autoLayout property to true. Note that auto layout cannot be supported in Scrollable or Resizable columns. -

- -

Templates

-

Field data of a corresponding row is displayed as the cell content by default, this can be customized using templating where current row data and column properties are passed to the body template. - On the other hand, header and footer properties of a column are used to define the content of these sections by accepting either simple string values or JSX for advanced content. Similarly TreeTable itself - also provides header and footer properties for the main header and footer of the table.

- - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; -import { Button } from 'primereact/button'; -import { NodeService } from '../service/NodeService'; - -export class TreeTableTemplatingDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [] - }; - this.nodeservice = new NodeService(); - this.actionTemplate = this.actionTemplate.bind(this); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - actionTemplate(node, column) { - return
- - -
; - } - - render() { - const header = "File Viewer"; - const footer =
; - - return ( - - - - - - - ) - } -} - -`} -
- -

Column Group

-

Columns can be grouped at header and footer sections by defining a ColumnGroup component as the headerColumnGroup and footerColumnGroup properties.

- - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; -import { ColumnGroup } from 'primereact/columngroup'; -import { Row } from 'primereact/row'; -import { NodeService } from '../service/NodeService'; - -export class TreeTableColGroupDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [] - }; - this.nodeservice = new NodeService(); - } - - getSales() { - return [ - { - key: '0', - data: { brand: 'Bliss', lastYearSale: '51%', thisYearSale: '40%', lastYearProfit: '$54,406.00', thisYearProfit: '$43,342'}, - children: [ - { - key: '0-0', - data: { brand: 'Product A', lastYearSale: '25%', thisYearSale: '20%', lastYearProfit: '$34,406.00', thisYearProfit: '$23,342' }, - children: [ - { - key: '0-0-0', - data: { brand: 'Product A-1', lastYearSale: '20%', thisYearSale: '10%', lastYearProfit: '$24,406.00', thisYearProfit: '$13,342' }, - }, - { - key: '0-0-1', - data: { brand: 'Product A-2', lastYearSale: '5%', thisYearSale: '10%', lastYearProfit: '$10,000.00', thisYearProfit: '$10,000' }, - } - ] - }, - { - key: '0-1', - data: { brand: 'Product B', lastYearSale: '26%', thisYearSale: '20%', lastYearProfit: '$24,000.00', thisYearProfit: '$23,000' }, - } - ] - }, - { - key: '1', - data: { brand: 'Fate', lastYearSale: '83%', thisYearSale: '96%', lastYearProfit: '$423,132', thisYearProfit: '$312,122' }, - children: [ - { - key: '1-0', - data: { brand: 'Product X', lastYearSale: '50%', thisYearSale: '40%', lastYearProfit: '$223,132', thisYearProfit: '$156,061' }, - }, - { - key: '1-1', - data: { brand: 'Product Y', lastYearSale: '33%', thisYearSale: '56%', lastYearProfit: '$200,000', thisYearProfit: '$156,061' }, - } - ] - }, - { - key: '2', - data: { brand: 'Ruby', lastYearSale: '38%', thisYearSale: '5%', lastYearProfit: '$12,321', thisYearProfit: '$8,500' }, - children: [ - { - key: '2-0', - data: { brand: 'Product M', lastYearSale: '18%', thisYearSale: '2%', lastYearProfit: '$10,300', thisYearProfit: '$5,500' }, - }, - { - key: '2-1', - data: { brand: 'Product N', lastYearSale: '20%', thisYearSale: '3%', lastYearProfit: '$2,021', thisYearProfit: '$3,000' }, - } - ] - }, - { - key: '3', - data: { brand: 'Sky', lastYearSale: '49%', thisYearSale: '22%', lastYearProfit: '$745,232', thisYearProfit: '$650,323' }, - children: [ - { - key: '3-0', - data: { brand: 'Product P', lastYearSale: '20%', thisYearSale: '16%', lastYearProfit: '$345,232', thisYearProfit: '$350,000' }, - }, - { - key: '3-1', - data: { brand: 'Product R', lastYearSale: '29%', thisYearSale: '6%', lastYearProfit: '$400,009', thisYearProfit: '$300,323' }, - } - ] - }, - { - key: '4', - data: { brand: 'Comfort', lastYearSale: '17%', thisYearSale: '79%', lastYearProfit: '$643,242', thisYearProfit: '500,332' }, - children: [ - { - key: '4-0', - data: { brand: 'Product S', lastYearSale: '10%', thisYearSale: '40%', lastYearProfit: '$243,242', thisYearProfit: '$100,000' }, - }, - { - key: '4-1', - data: { brand: 'Product T', lastYearSale: '7%', thisYearSale: '39%', lastYearProfit: '$400,00', thisYearProfit: '$400,332' }, - } - ] - }, - { - key: '5', - data: { brand: 'Merit', lastYearSale: '52%', thisYearSale: ' 65%', lastYearProfit: '$421,132', thisYearProfit: '$150,005' }, - children: [ - { - key: '5-0', - data: { brand: 'Product L', lastYearSale: '20%', thisYearSale: '40%', lastYearProfit: '$121,132', thisYearProfit: '$100,000' }, - }, - { - key: '5-1', - data: { brand: 'Product G', lastYearSale: '32%', thisYearSale: '25%', lastYearProfit: '$300,000', thisYearProfit: '$50,005' }, - } - ] - }, - { - key: '6', - data: { brand: 'Violet', lastYearSale: '82%', thisYearSale: '12%', lastYearProfit: '$131,211', thisYearProfit: '$100,214' }, - children: [ - { - key: '6-0', - data: { brand: 'Product SH1', lastYearSale: '30%', thisYearSale: '6%', lastYearProfit: '$101,211', thisYearProfit: '$30,214' }, - }, - { - key: '6-1', - data: { brand: 'Product SH2', lastYearSale: '52%', thisYearSale: '6%', lastYearProfit: '$30,000', thisYearProfit: '$70,000' }, - } - ] - }, - { - key: '7', - data: { brand: 'Dulce', lastYearSale: '44%', thisYearSale: '45%', lastYearProfit: '$66,442', thisYearProfit: '$53,322' }, - children: [ - { - key: '7-0', - data: { brand: 'Product PN1', lastYearSale: '22%', thisYearSale: '25%', lastYearProfit: '$33,221', thisYearProfit: '$20,000' }, - }, - { - key: '7-1', - data: { brand: 'Product PN2', lastYearSale: '22%', thisYearSale: '25%', lastYearProfit: '$33,221', thisYearProfit: '$33,322' }, - } - ] - }, - { - key: '8', - data: { brand: 'Solace', lastYearSale: '90%', thisYearSale: '56%', lastYearProfit: '$765,442', thisYearProfit: '$296,232' }, - children: [ - { - key: '8-0', - data: { brand: 'Product HT1', lastYearSale: '60%', thisYearSale: '36%', lastYearProfit: '$465,000', thisYearProfit: '$150,653' }, - }, - { - key: '8-1', - data: { brand: 'Product HT2', lastYearSale: '30%', thisYearSale: '20%', lastYearProfit: '$300,442', thisYearProfit: '$145,579' }, - } - ] - }, - { - key: '9', - data: { brand: 'Essence', lastYearSale: '75%', thisYearSale: '54%', lastYearProfit: '$21,212', thisYearProfit: '$12,533' }, - children: [ - { - key: '9-0', - data: { brand: 'Product TS1', lastYearSale: '50%', thisYearSale: '34%', lastYearProfit: '$11,000', thisYearProfit: '$8,562' }, - }, - { - key: '9-1', - data: { brand: 'Product TS2', lastYearSale: '25%', thisYearSale: '20%', lastYearProfit: '$11,212', thisYearProfit: '$3,971' }, - } - ] - } - ]; - } - - componentDidMount() { - this.setState({ - nodes: this.getSales() - }); - } - - render() { - const headerGroup = ( - - - - - - - - - - - - - - - - - ); - - const footerGroup = ( - - - - - - - - ); - - return ( - - - - - - - - ) - } -} - -`} - - -

Pagination

-

Pagination is enabled by setting paginator property to true, rows property defines the number of rows per page and optionally pageLinks specify the the number of page links to display. - See paginator component for more information about further customization options such as paginatorTemplate.

- -

Pagination can either be used in Controlled or Uncontrolled manner. In controlled mode, first and onPage properties need to be defined to control the paginator state.

- - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; - -export class TreeTablePageDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [], - first: 0 - }; - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( - this.setState({first: e.first})}> - - - - - ) - } -} - -`} - - -

In uncontrolled mode, only paginator and rows need to be enabled. Index of the first record can be still be provided using the first property in uncontrolled mode however - it is evaluated at initial rendering and ignored in further updates. If you programmatically need to update the paginator state, prefer to use the component as controlled.

- - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; - -export class TreeTablePageDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [] - }; - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( - - - - - - ) - } -} - -`} - - -

Elements of the paginator can be customized using the paginatorTemplate by the TreeTable. Refer to the template section of the paginator documentation for further options.

- -{` - - - - - - -`} - - -

Sorting

-

Enabling sortable property at column component would be enough to make a column sortable. The property to use when sorting is field by default and can be customized using sortField.

- - -{` - - -`} - - -

By default sorting is executed on the clicked column only. To enable multiple field sorting, set sortMode property to "multiple" and use metakey when clicking on another column.

- -{` - - -`} - - -

In case you'd like to display the table as sorted per a single column by default on mount, use sortField and sortOrder properties in Controlled or Uncontrolled manner. - In controlled mode, sortField, sortOrder and onSort properties need to be defined to control the sorting state.

- - -{` - this.setState({sortField: e.sortField, sortOrder: e.sortOrder})}> - - - - - -`} - - -

In multiple mode, use the multiSortMeta property and bind an array of SortMeta objects instead.

- -{` - this.setState({multiSortMeta: e.multiSortMeta})}> - - - - - -`} - - - -{` -let multiSortMeta = []; -multiSortMeta.push({field: 'year', order: 1}); -multiSortMeta.push({field: 'brand', order: -1}); - -`} - - -

In uncontrolled mode, no additional properties need to be enabled. Initial sort field can be still be provided using the sortField property in uncontrolled mode however - it is evaluated at initial rendering and ignored in further updates. If you programmatically need to update the sorting state, prefer to use the component as controlled.

- -{` - - - - - - -`} - - -

To customize sorting algorithm, set sortable option to custom and define a sortFunction that sorts the list.

- -{` - - - - - - -`} - - - -{` -mysort(event) { - //event.field = Field to sort - //event.order = Sort order -} - -`} - - -

Filtering

-

Filtering is enabled by setting the filter property on a column. filterMode specifies the filtering strategy. In lenient mode when the query matches a node, children of the node are not searched further as all descendants of the node are included. On the other hand, - in strict mode when the query matches a node, filtering continues on all descendants.

- - -{` - - - - - - -`} - - -

An optional global filter feature is available to search all fields with the same keyword, - to implement this place an input component whose value is bound to the globalFilter property of the TreeTable.

- -{` -export class TreeTableFilterDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [], - globalFilter: null - }; - this.nodeservice = new NodeService(); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - render() { - let header =
- - this.setState({globalFilter: e.target.value})} placeholder="Global Search" size="50"/> -
; - - return ( - - - - - - ) - } -} - -`} -
- -

By default, input fields are used as filter elements and this can be customized using the filterElement property of the Column that calls the filter function of the table instance by passing the value, field and the match mode.

- -{` -export class TreeTableCustomFilterDemo extends Component { - - constructor() { - super(); - this.state = { - nodes: [], - brand: null, - colors: null - }; - this.nodeservice = new NodeService(); - this.onBrandChange = this.onBrandChange.bind(this); - this.onColorChange = this.onColorChange.bind(this); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - onBrandChange(event) { - this.tt.filter(event.value, 'brand', 'equals'); - this.setState({brand: event.value}); - } - - onColorChange(event) { - this.tt.filter(event.value, 'color', 'in'); - this.setState({colors: event.value}); - } - - render() { - let brands = [ - {label: 'All Brands', value: null}, - {label: 'Audi', value: 'Audi'}, - {label: 'BMW', value: 'BMW'}, - {label: 'Fiat', value: 'Fiat'}, - {label: 'Honda', value: 'Honda'}, - {label: 'Jaguar', value: 'Jaguar'}, - {label: 'Mercedes', value: 'Mercedes'}, - {label: 'Renault', value: 'Renault'}, - {label: 'VW', value: 'VW'}, - {label: 'Volvo', value: 'Volvo'} - ]; - - let brandFilter = - - let colors = [ - {label: 'White', value: 'White'}, - {label: 'Green', value: 'Green'}, - {label: 'Silver', value: 'Silver'}, - {label: 'Black', value: 'Black'}, - {label: 'Red', value: 'Red'}, - {label: 'Maroon', value: 'Maroon'}, - {label: 'Brown', value: 'Brown'}, - {label: 'Orange', value: 'Orange'}, - {label: 'Blue', value: 'Blue'} - ]; - - let colorFilter = - - return ( - this.tt = el} value={this.state.nodes}> - - - - - - ); - } -} - -`} - - -

In case you'd like to display the table as filtered by default on mount, use filters property in Controlled or Uncontrolled manner. - In controlled mode, filters and onFilter properties need to be defined to control the filtering state.

- - -{` -export class TreeTableDefaultFilteredDemo extends Component { - - constructor() { - super(); - this.state = { - nodes: [], - filters: { - 'brand': { - value: 'BMW' - } - } - }; - this.nodeservice = new NodeService(); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( - this.setState({filters: e.filters})}> - - - - - - ); - } -} - -`} - -

In uncontrolled filtering, no additional properties need to be enabled. Initial filtering can be still be provided using the filters property in uncontrolled mode however - it is evaluated at initial rendering and ignored in further updates. If you programmatically need to update the filtering state, prefer to use the component as controlled.

- -

Custom filtering is implemented by setting the filterMatchMode property as "custom" and providing a function that takes the data value along with the filter value to return a boolean.

- -{` -export class TreeTableFilterDemo extends Component { - - constructor() { - super(); - this.state = { - nodes: [] - }; - this.nodeservice = new NodeService(); - this.yearFilter = this.yearFilter.bind(this); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - yearFilter(value, filter) { - return filter > value; - } - - render() { - return ( - - - - - - - ); - } -} - -`} - - - -

Selection

-

TreeTable supports single, multiple and checkbox selection modes. Define selectionMode, selectionKeys and onSelectionChange properties to control the selection. In single mode, selectionKeys should - be a single value whereas in multiple or checkbox modes an array is required. By default in multiple selection mode, metaKey is necessary to add to existing selections however this can be configured with metaKeySelection property. Note that - in touch enabled devices, TreeTable does not require metaKey.

- -

Example below demonstrates all cases along with the available callbacks to listen events such as node selection.

- - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; -import { Growl } from 'primereact/growl'; -import { NodeService } from '../service/NodeService'; - -export class TreeTableSelectionDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes1: [], - nodes2: [], - nodes3: [], - nodes4: [], - nodes5: [], - selectedNodeKey1: null, - selectedNodeKey2: null, - selectedNodeKeys1: [], - selectedNodeKeys2: [], - selectedNodeKeys3: [] - }; - - this.nodeservice = new NodeService(); - this.onSelect = this.onSelect.bind(this); - this.onUnselect = this.onUnselect.bind(this); - } - - onSelect(event) { - this.growl.show({severity: 'info', summary: 'Node Selected', detail: event.node.data.name}); - } - - onUnselect(event) { - this.growl.show({severity: 'info', summary: 'Node Unselected', detail: event.node.data.name}); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes1: data})); - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes2: data})); - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes3: data})); - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes4: data})); - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes5: data})); - } - - render() { - return ( -
-
-
-

TreeTable - Selection

-

TreeTable supports single, multiple and checkbox based selection modes.

-
-
- -
- this.growl = el} /> - -

Single

- this.setState({selectedNodeKey1: e.value})}> - - - - - -

Multiple

- this.setState({selectedNodeKeys1: e.value})} metaKeySelection={false}> - - - - - -

Multiple with MetaKey

- this.setState({selectedNodeKeys2: e.value})} metaKeySelection={true}> - - - - - -

Events

- this.setState({selectedNodeKey2: e.value})} - onSelect={this.onSelect} onUnselect={this.onUnselect}> - - - - - -

Checkbox

- this.setState({selectedNodeKeys3: e.value})}> - - - - -
-
- ) - } -} - -`} -
- -

Lazy

-

Lazy loading is implemented using the onExpand event by adding children to the expanded node. leaf property should be enabled to indicate the node has children but not yet loaded. Here is a in-memory demo - that loads generated nodes on expand event to imitate a remote call with a timeout. Notice the usage of loading property as well to give users a feedback about the loading process.

- - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; - -export class TreeTableLazyDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [], - first: 0, - rows: 10, - totalRecords: 0, - loading: true - }; - - this.onPage = this.onPage.bind(this); - this.onExpand = this.onExpand.bind(this); - } - - componentDidMount() { - setTimeout(() => { - this.setState({ - loading: false, - nodes: this.loadNodes(this.state.first, this.state.first + this.state.rows), - totalRecords: 1000 - }); - }, 1000); - } - - loadNodes(start, end) { - let nodes = []; - - for(let i = start; i < end; i++) { - let node = { - key: i, - data: { - name: 'Item ' + (start + i), - size: Math.floor(Math.random() * 1000) + 1 + 'kb', - type: 'Type ' + (start + i) - }, - leaf: false - }; - - nodes.push(node); - } - - return nodes; - } - - onExpand(event) { - if (!event.node.children) { - this.setState({ - loading: true - }); - - setTimeout(() => { - this.loading = false; - let lazyNode = {...event.node}; - - lazyNode.children = [ - { - data: { - name: lazyNode.data.name + ' - 0', - size: Math.floor(Math.random() * 1000) + 1 + 'kb', - type: 'File' - }, - }, - { - data: { - name: lazyNode.data.name + ' - 1', - size: Math.floor(Math.random() * 1000) + 1 + 'kb', - type: 'File' - } - } - ]; - - let nodes = [...this.state.nodes]; - nodes[event.node.key] = lazyNode; - - this.setState({ - loading: false, - nodes: nodes - }); - }, 250); - } - } - - onPage(event) { - this.setState({ - loading: true - }); - - //imitate delay of a backend call - setTimeout(() => { - this.setState({ - first: event.first, - rows: event.rows, - nodes: this.loadNodes(event.first, event.first + event.rows), - loading: false - }); - }, 1000); - } - - render() { - return ( - - - - - - ) - } -} - -`} - - -

Incell Editing

-

Incell editing feature provides a way to quickly edit data inside the table. A cell editor is defined using the editor property - that refers to a function to return an input element for the editing. Clicking outside the cell or hitting enter key closes the cell, however this may not be desirable if the input is invalid. In order - to decide whether to keep the cell open or not, provide a editorValidator function that validates the value.

- - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; -import { InputText } from 'primereact/inputtext; -import { NodeService } from '../service/NodeService'; - -export class TreeTableEditDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [] - }; - this.nodeservice = new NodeService(); - - this.sizeEditor = this.sizeEditor.bind(this); - this.typeEditor = this.typeEditor.bind(this); - this.requiredValidator = this.requiredValidator.bind(this); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - onEditorValueChange(props, value) { - let newNodes = JSON.parse(JSON.stringify(this.state.nodes)); - let editedNode = this.findNodeByKey(newNodes, props.node.key); - editedNode.data[props.field] = value; - - this.setState({ - nodes: newNodes - }); - } - - findNodeByKey(nodes, key) { - let path = key.split('-'); - let node; - - while (path.length) { - let list = node ? node.children : nodes; - node = list[parseInt(path[0], 10)]; - path.shift(); - } - - return node; - } - - inputTextEditor(props, field, width) { - return ( - this.onEditorValueChange(props, e.target.value)} /> - ); - } - - sizeEditor(props) { - return this.inputTextEditor(props, 'size', '100%'); - } - - typeEditor(props) { - return this.inputTextEditor(props, 'type', '100%'); - } - - requiredValidator(props) { - let value = props.node.data[props.field]; - - return value && value.length > 0; - } - - render() { - return ( - - - - - - ) - } -} - -`} - - -

ContextMenu

-

One or more ContextMenu instances can be attached to nodes. Similar to selection, separate contextMenuSelectionKey and onContextMenuSelectionChange properties are necesary to manage the selected node with - right click. In addition, a context menu can either be displayed at onContextMenu event. Since this event also passes the node instance, you may choose to display a different context menu for a particular node.

- - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; -import { ContextMenu } from 'primereact/contextmenu'; -import { Growl } from 'primereact/growl'; -import { NodeService } from '../service/NodeService'; - -export class TreeTableContextMenuDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [], - expandedKeys: {}, - selectedNodeKey: null, - menu: [ - { - label: 'View Key', - icon: 'pi pi-search', - command: () => { - this.growl.show({severity: 'success', summary: 'Node Key', detail: this.state.selectedNodeKey}); - } - }, - { - label: 'Toggle', - icon: 'pi pi-cog', - command: () => { - let expandedKeys = {...this.state.expandedKeys}; - if (expandedKeys[this.state.selectedNodeKey]) - delete expandedKeys[this.state.selectedNodeKey]; - else - expandedKeys[this.state.selectedNodeKey] = true; - - this.setState({expandedKeys: expandedKeys}); - } - } - ] - }; - this.nodeservice = new NodeService(); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
- this.growl = el} /> - - this.cm = el} onHide={() => this.setState({selectedNodeKey: null})}/> - - this.setState({expandedKeys: e.value})} - contextMenuSelectionKey={this.state.selectedNodeKey} onContextMenuSelectionChange={event => this.setState({selectedNodeKey: event.value})} - onContextMenu={event => this.cm.show(event.originalEvent)}> - - - - -
- ) - } -} - -`} -
- -

Column Resize

-

Columns can be resized using drag drop by setting the resizableColumns to true. There are two resize modes; "fit" and "expand". Fit is the default one and the overall table width does not change when a column is resized. - In "expand" mode, table width also changes along with the column width. onColumnResizeEnd is a callback that passes the resized column header as a parameter.

- -{` -

Fit Mode

- - - - - - -

Expand Mode

- - - - - - -`} -
- -

It is important to note that when you need to change column widths, since table width is 100%, giving fixed pixel widths does not work well as browsers scale them, instead give percentage widths.

- -{` - - - - - - -`} - - -

Column Reorder

-

Columns can be reordered using drag drop by setting the reorderableColumns to true. onColReorder is a callback that is invoked when a column is reordered. - TreeTable keeps the column order state internally using keys that identifies a column using the field property. If the column has no field, use columnKey instead.

- - -{` - - - - - - -`} - - -

Scrolling

-

TreeTable supports both horizontal and vertical scrolling as well as frozen columns. Vertical scrolling is enabled using scrollable property and scrollHeight to define the viewport height.

- -{` - - - - - - -`} - - -

Horizontal Scrolling requires a width of DataTable to be defined and explicit widths on columns.

- -{` - - - - - - -`} - - -

Certain columns can be frozen by using the frozen property of the column component. Widths of the frozen section is specified by the frozenWidth property.

- - -{` - - - - - - - - - - -`} - - -

Note that frozen columns are enabled, frozen and scrollable cells may have content with varying height which leads to misalignment. Provide fixed height to cells to avoid alignment issues.

- -{` - - - - - - -`} - - -

When using frozen columns with column grouping, use frozenHeaderColumnGroup and frozenFooterColumnGroup properties along with - headerColumnGroup and footerColumnGroup.

- -

Responsive

-

TreeTable columns are displayed as stacked in responsive mode if the screen size becomes smaller than a certain breakpoint value. Here is a sample implementation;

- - -{` -.p-col-d { - display: table-cell; -} - -.p-col-m { - display: none; -} - -@media screen and (max-width: 64em) { - .p-col-d { - display: none; - } - - .p-col-m { - display: inline-block; - } -} - -`} - - - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; -import { NodeService } from '../service/NodeService'; - -export class TreeTableResponsiveDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [] - }; - this.nodeservice = new NodeService(); - this.nameTemplate = this.nameTemplate.bind(this); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - nameTemplate(node) { - return ( - - {node.data.name} - , {node.data.size} - , {node.data.type} - - ) - } - - render() { - return ( - - - - - - ) - } -} - -`} - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
valuearraynullAn array of treenodes to display.
headeranynullHeader content of the table.
footeranynullFooter content of the table.
styleobjectnullInline style of the component.
classNameanynullStyle class of the component.
tableStyleobjectnullInline style of the table element.
tableClassNameanynullStyle class of the table element.
expandedKeysarraynullAn array of keys to represent the state of the tree expansion state in controlled mode.
paginatorbooleanfalseWhen specified as true, enables the pagination.
paginatorPositionstringbottomPosition of the paginator, options are "top","bottom" or "both".
alwaysShowPaginatorbooleantrueWhether to show it even there is only one page.
paginatorTemplatestringFirstPageLink PrevPageLink PageLinks NextPageLink LastPageLink RowsPerPageDropdownTemplate of the paginator.
paginatorLeftElementnullContent for the left side of the paginator.
paginatorRightElementnullContent for the right side of the paginator.
pageLinkSizenumber5Number of page links to display.
rowsPerPageOptionsarraynullArray of integer values to display inside rows per page dropdown.
currentPageReportTemplatestring(&123;currentPage&125; of &123;totalPages&125;)Template of the current page report element. Available placeholders are - &123;currentPage&125;,&123;totalPages&125;,&123;rows&125;,&123;first&125;,&123;last&125; and &123;totalRecords&125; -
firstnumber0Index of the first row to be displayed.
rowsnumbernullNumber of rows to display per page.
totalRecordsnumbernullNumber of total records, defaults to length of value when not defined.
lazybooleanfalseDefines if data is loaded and interacted with in lazy manner.
sortFieldstringnullName of the field to sort data by default.
sortOrdernumbernullOrder to sort the data by default.
multiSortMetaarraynullAn array of SortMeta objects to sort the data by default in multiple sort mode.
sortModestringsingleDefines whether sorting works on single column or on multiple columns.
defaultSortOrdernumber1Default sort order of an unsorted column.
selectionModestringnullDefines the selection mode, valid values "single", "multiple", and "checkbox".
selectionKeysanynullA single or an array of keys to control the selection state.
contextMenuSelectionKeyanynullA single key to control the selection with the context menu.
metaKeySelectionbooleantrueDefines whether metaKey is requred or not for the selection. When true metaKey needs to be pressed to select or unselect an item and when set to false selection of each item - can be toggled individually. On touch enabled devices, metaKeySelection is turned off automatically.
propagateSelectionUpbooleantrueWhether checkbox selections propagate to ancestor nodes.
propagateSelectionDownbooleantrueWhether checkbox selections propagate to descendant nodes.
autoLayoutbooleanfalseWhether the cell widths scale according to their content or not.
rowClassNamefunctionnullFunction that takes the row data and returns an object in "{'styleclass' : condition}" format to define a classname for a particular now.
loadingbooleanfalseDisplays a loader to indicate data load is in progress.
loadingIconstringpi pi-spinnerThe icon to show while indicating data load is in progress.
tabIndexstringnullIndex of the element in tabbing order.
scrollablebooleanfalseWhen specified, enables horizontal and/or vertical scrolling.
scrollHeightstringnullHeight of the scroll viewport.
reorderableColumnsbooleanfalseWhen enabled, columns can be reordered using drag and drop.
filtersarraynullAn array of FilterMetadata objects to provide external filters.
globalFilteranynullValue of the global filter to use in filtering.
filterModestringlenientMode for filtering valid values are lenient and strict. Default is lenient.
headerColumnGroupColumnGroupnullColumnCroup component for header.
footerColumnGroupColumnGroupnullColumnCroup component for footer.
frozenHeaderColumnGroupColumnGroupnullColumnCroup component for header of frozen columns.
frozenFooterColumnGroupColumnGroupnullColumnCroup component for footer of frozen columns.
frozenWidthstringnullWidth of the frozen part in scrollable DataTable.
resizableColumnsbooleanfalseWhen enabled, columns can be resized using drag and drop.
columnResizeModestringfitDefines whether the overall table width should change on column resize, valid values are "fit" and "expand".
emptyMessagestringNo records foundText to display when there is no data.
-
- -

Events

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameParametersDescription
onExpandevent.originalEvent: browser event
- event.node: Expanded node instance.
Callback to invoke when a node is expanded.
onCollapseevent.originalEvent: browser event
- event.node: Collapsed node instance.
Callback to invoke when a node is collapsed.
onToggleevent.originalEvent: browser event
- event.node: Toggled node instance.
Callback to invoke when a node is toggled.
onPageevent.first: Index of the first row.
- event.rows: Rows per page.
Callback to invoke on pagination.
onSortevent.sortField: Field to sort against.
- event.sortOrder: Sort order as integer.
- event.multiSortMeta: MultiSort metadata.
Callback to invoke on sort.
onFilterevent.filters: Collection of active filters.Callback to invoke on filtering.
onSelectevent.originalEvent: browser event
- event.node: Selected node instance.
Callback to invoke when a node is selected.
onUnselectevent.originalEvent: browser event
- event.node: Unselected node instance.
Callback to invoke when a node is unselected.
onRowClickevent.originalEvent: Browser event
- event.data: Clicked row data
Callback to invoke when a row is clicked.
onSelectionChangeevent.originalEvent: browser event
- event.value: Selected node key(s).
Callback to invoke when selection changes.
onContextMenuSelectionChangeevent.originalEvent: browser event
- event.value: Selected node key.
Callback to invoke when selection changes with a context menu.
onColumnResizeEndevent.element: DOM element of the resized column. - event.column: Properties of the resized column.
- event.delta: Change in column width
Callback to invoke when a column is resized.
onColReorderevent.originalEvent: Browser event
- event.dragIndex: Index of the dragged column
- event.dropIndex: Index of the dropped column
- event.columns: Columns array after reorder.
Callback to invoke when a column is reordered.
onContextMenuevent.originalEvent: Original event instance.
- event.data: Collapsed row data
Callback to invoke when a context menu is clicked.
-
- -

Styling

-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameElement
p-treetableContainer element.
p-treetable-headerHeader section.
p-treetable-footerFooter section.
p-column-titleTitle of a column.
p-sortable-columnSortable column header.
p-treetable-scrollable-headerContainer of header in a scrollable table.
p-treetable-scrollable-bodyContainer of body in a scrollable table.
p-treetable-scrollable-footerContainer of footer in a scrollable table.
p-treetable-emptymessageCell containing the empty message.
p-treetable-togglerToggler icon.
-
- -

Dependencies

-

None.

- -
- - - - {` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; -import { Button } from 'primereact/button'; -import { NodeService } from '../service/NodeService'; - -export class TreeTableDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [], - expandedKeys: {} - }; - this.nodeservice = new NodeService(); - this.toggleApplications = this.toggleApplications.bind(this); - } - - toggleApplications() { - let expandedKeys = {...this.state.expandedKeys}; - if (expandedKeys['0']) - delete expandedKeys['0']; - else - expandedKeys['0'] = true; - - this.setState({expandedKeys: expandedKeys}); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
-
-
-

TreeTable

-

TreeTable is used to display hierarchical data in tabular format.

-
-
- -
-

Uncontrolled

- - - - - - -

Controlled

-
-
- ) - } -} - -`} -
-
-
-
- ); - } -} - diff --git a/src/showcase/treetable/TreeTableEditDemo.js b/src/showcase/treetable/TreeTableEditDemo.js deleted file mode 100644 index 7dd63c32a7..0000000000 --- a/src/showcase/treetable/TreeTableEditDemo.js +++ /dev/null @@ -1,213 +0,0 @@ -import React, { Component } from 'react'; -import { TreeTable } from '../../components/treetable/TreeTable'; -import { Column } from "../../components/column/Column"; -import { InputText } from '../../components/inputtext/InputText'; -import { NodeService } from '../service/NodeService'; -import { TreeTableSubmenu } from '../../showcase/treetable/TreeTableSubmenu'; -import { TabView, TabPanel } from '../../components/tabview/TabView'; -import { CodeHighlight } from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeTableEditDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [] - }; - this.nodeservice = new NodeService(); - - this.sizeEditor = this.sizeEditor.bind(this); - this.typeEditor = this.typeEditor.bind(this); - this.requiredValidator = this.requiredValidator.bind(this); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - onEditorValueChange(props, value) { - let newNodes = JSON.parse(JSON.stringify(this.state.nodes)); - let editedNode = this.findNodeByKey(newNodes, props.node.key); - editedNode.data[props.field] = value; - - this.setState({ - nodes: newNodes - }); - } - - findNodeByKey(nodes, key) { - let path = key.split('-'); - let node; - - while (path.length) { - let list = node ? node.children : nodes; - node = list[parseInt(path[0], 10)]; - path.shift(); - } - - return node; - } - - inputTextEditor(props, field) { - return ( - this.onEditorValueChange(props, e.target.value)} /> - ); - } - - sizeEditor(props) { - return this.inputTextEditor(props, 'size'); - } - - typeEditor(props) { - return this.inputTextEditor(props, 'type'); - } - - requiredValidator(props) { - let value = props.node.data[props.field]; - - return value && value.length > 0; - } - - render() { - return ( -
- - -
-
-

TreeTable - Edit

-

Incell editing provides a quick and user friendly way to manipulate data.

- - - { context => } - -
-
- -
- - - - - -
- - -
- ) - } -} - -class TreeTableEditDemoDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; -import { InputText } from 'primereact/inputtext; -import { NodeService } from '../service/NodeService'; - -export class TreeTableEditDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [] - }; - this.nodeservice = new NodeService(); - - this.sizeEditor = this.sizeEditor.bind(this); - this.typeEditor = this.typeEditor.bind(this); - this.requiredValidator = this.requiredValidator.bind(this); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - onEditorValueChange(props, value) { - let newNodes = JSON.parse(JSON.stringify(this.state.nodes)); - let editedNode = this.findNodeByKey(newNodes, props.node.key); - editedNode.data[props.field] = value; - - this.setState({ - nodes: newNodes - }); - } - - findNodeByKey(nodes, key) { - let path = key.split('-'); - let node; - - while (path.length) { - let list = node ? node.children : nodes; - node = list[parseInt(path[0], 10)]; - path.shift(); - } - - return node; - } - - inputTextEditor(props, field) { - return ( - this.onEditorValueChange(props, e.target.value)} /> - ); - } - - sizeEditor(props) { - return this.inputTextEditor(props, 'size'); - } - - typeEditor(props) { - return this.inputTextEditor(props, 'type'); - } - - requiredValidator(props) { - let value = props.node.data[props.field]; - - return value && value.length > 0; - } - - render() { - return ( -
-
-
-

TreeTable - Edit

-

Incell editing provides a quick and user friendly way to manipulate data.

-
-
- -
- - - - - -
-
- ) - } -} - -`} -
-
-
-
- ) - } -} diff --git a/src/showcase/treetable/TreeTableFilterDemo.js b/src/showcase/treetable/TreeTableFilterDemo.js deleted file mode 100644 index 05dedd6940..0000000000 --- a/src/showcase/treetable/TreeTableFilterDemo.js +++ /dev/null @@ -1,133 +0,0 @@ -import React, { Component } from 'react'; -import { TreeTable } from '../../components/treetable/TreeTable'; -import { Column } from '../../components/column/Column'; -import { InputText } from '../../components/inputtext/InputText'; -import { NodeService } from '../service/NodeService'; -import { TreeTableSubmenu } from '../../showcase/treetable/TreeTableSubmenu'; -import { TabView, TabPanel } from '../../components/tabview/TabView'; -import { CodeHighlight } from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeTableFilterDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [], - globalFilter: null - }; - this.nodeservice = new NodeService(); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - render() { - let header =
- - this.setState({globalFilter: e.target.value})} placeholder="Global Search" size="50"/> -
; - - return ( -
- - -
-
-

TreeTable - Filter

-

Filtering is enabled by setting the filter property as true in column object. Default match mode is "startsWith" and this can be configured using filterMatchMode - property of column object that also accepts "contains", "endsWith", "equals", "in" and "custom". An optional global filter feature is available to search all fields with a keyword. - By default input fields are generated as filter elements and using templating any component can be used as a filter.

- - - { context => } - -
-
- -
- - - - - -
- - -
- ) - } -} - -class TreeTableFilterDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from 'primereact/column'; -import { InputText } from 'primereact/inputtext'; -import { NodeService } from '../service/NodeService'; - -export class TreeTableFilterDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [], - globalFilter: null - }; - this.nodeservice = new NodeService(); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - render() { - let header =
- - this.setState({globalFilter: e.target.value})} placeholder="Global Search" size="50"/> -
; - - return ( -
-
-
-

TreeTable - Filter

-

Filtering is enabled by setting the filter property as true in column object. Default match mode is "startsWith" and this can be configured using filterMatchMode - property of column object that also accepts "contains", "endsWith", "equals", "in" and "custom". An optional global filter feature is available to search all fields with a keyword. - By default input fields are generated as filter elements and using templating any component can be used as a filter.

-
-
- -
- - - - - -
-
- ) - } -} - -`} -
-
-
-
- ) - } -} diff --git a/src/showcase/treetable/TreeTableLazyDemo.js b/src/showcase/treetable/TreeTableLazyDemo.js deleted file mode 100644 index 2c54d87889..0000000000 --- a/src/showcase/treetable/TreeTableLazyDemo.js +++ /dev/null @@ -1,299 +0,0 @@ -import React, { Component } from 'react'; -import { TreeTable } from '../../components/treetable/TreeTable'; -import { Column } from "../../components/column/Column"; -import { TreeTableSubmenu } from '../../showcase/treetable/TreeTableSubmenu'; -import { TabView, TabPanel } from '../../components/tabview/TabView'; -import { CodeHighlight } from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeTableLazyDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [], - first: 0, - rows: 10, - totalRecords: 0, - loading: true - }; - - this.onPage = this.onPage.bind(this); - this.onExpand = this.onExpand.bind(this); - } - - componentDidMount() { - setTimeout(() => { - this.setState({ - loading: false, - nodes: this.loadNodes(this.state.first, this.state.rows), - totalRecords: 1000 - }); - }, 1000); - } - - loadNodes(first, rows) { - let nodes = []; - - for(let i = 0; i < rows; i++) { - let node = { - key: (first + i), - data: { - name: 'Item ' + (first + i), - size: Math.floor(Math.random() * 1000) + 1 + 'kb', - type: 'Type ' + (first + i) - }, - leaf: false - }; - - nodes.push(node); - } - - return nodes; - } - - onExpand(event) { - if (!event.node.children) { - this.setState({ - loading: true - }); - - setTimeout(() => { - this.loading = false; - let lazyNode = {...event.node}; - - lazyNode.children = [ - { - data: { - name: lazyNode.data.name + ' - 0', - size: Math.floor(Math.random() * 1000) + 1 + 'kb', - type: 'File' - }, - }, - { - data: { - name: lazyNode.data.name + ' - 1', - size: Math.floor(Math.random() * 1000) + 1 + 'kb', - type: 'File' - } - } - ]; - - let nodes = this.state.nodes.map(node => { - if (node.key === event.node.key) { - node = lazyNode; - } - - return node; - }); - - this.setState({ - loading: false, - nodes: nodes - }); - }, 250); - } - } - - onPage(event) { - this.setState({ - loading: true - }); - - //imitate delay of a backend call - setTimeout(() => { - this.setState({ - first: event.first, - rows: event.rows, - nodes: this.loadNodes(event.first, event.rows), - loading: false - }); - }, 1000); - } - - render() { - return ( -
- - -
-
-

TreeTable - Lazy

-

Lazy mode is handy to deal with large datasets, instead of loading the entire data, small chunks of data is loaded by invoking corresponding callbacks everytime paging or sorting. - In addition, children of a node can be loaded on demand at onNodeExpand event as well. Sample belows imitates lazy paging by using an in memory list.

- - - { context => } - -
-
- -
- - - - - -
- - -
- ) - } -} - -class TreeTableLazyDemoDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; - -export class TreeTableLazyDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [], - first: 0, - rows: 10, - totalRecords: 0, - loading: true - }; - - this.onPage = this.onPage.bind(this); - this.onExpand = this.onExpand.bind(this); - } - - componentDidMount() { - setTimeout(() => { - this.setState({ - loading: false, - nodes: this.loadNodes(this.state.first, this.state.rows), - totalRecords: 1000 - }); - }, 1000); - } - - loadNodes(first, rows) { - let nodes = []; - - for(let i = 0; i < rows; i++) { - let node = { - key: (first + i), - data: { - name: 'Item ' + (first + i), - size: Math.floor(Math.random() * 1000) + 1 + 'kb', - type: 'Type ' + (first + i) - }, - leaf: false - }; - - nodes.push(node); - } - - return nodes; - } - - onExpand(event) { - if (!event.node.children) { - this.setState({ - loading: true - }); - - setTimeout(() => { - this.loading = false; - let lazyNode = {...event.node}; - - lazyNode.children = [ - { - data: { - name: lazyNode.data.name + ' - 0', - size: Math.floor(Math.random() * 1000) + 1 + 'kb', - type: 'File' - }, - }, - { - data: { - name: lazyNode.data.name + ' - 1', - size: Math.floor(Math.random() * 1000) + 1 + 'kb', - type: 'File' - } - } - ]; - - let nodes = this.state.nodes.map(node => { - if (node.key === event.node.key) { - node = lazyNode; - } - - return node; - }); - - this.setState({ - loading: false, - nodes: nodes - }); - }, 250); - } - } - - onPage(event) { - this.setState({ - loading: true - }); - - //imitate delay of a backend call - setTimeout(() => { - this.setState({ - first: event.first, - rows: event.rows, - nodes: this.loadNodes(event.first, event.rows), - loading: false - }); - }, 1000); - } - - render() { - return ( -
-
-
-

TreeTable - Lazy

-

Lazy mode is handy to deal with large datasets, instead of loading the entire data, small chunks of data is loaded by invoking corresponding callbacks everytime paging or sorting. - In addition, children of a node can be loaded on demand at onNodeExpand event as well. Sample belows imitates lazy paging by using an in memory list.

-
-
- -
- - - - - -
-
- ) - } -} - -`} -
-
-
-
- ) - } -} diff --git a/src/showcase/treetable/TreeTablePageDemo.js b/src/showcase/treetable/TreeTablePageDemo.js deleted file mode 100644 index 25e59d4fb8..0000000000 --- a/src/showcase/treetable/TreeTablePageDemo.js +++ /dev/null @@ -1,163 +0,0 @@ -import React, { Component } from 'react'; -import { TreeTable } from '../../components/treetable/TreeTable'; -import { Column } from "../../components/column/Column"; -import { TreeTableSubmenu } from '../../showcase/treetable/TreeTableSubmenu'; -import { TabView, TabPanel } from '../../components/tabview/TabView'; -import { CodeHighlight } from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeTablePageDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [] - }; - } - - componentDidMount() { - let files = []; - for(let i = 0; i < 50; i++) { - let node = { - key: i, - data: { - name: 'Item ' + i, - size: Math.floor(Math.random() * 1000) + 1 + 'kb', - type: 'Type ' + i - }, - children: [ - { - key: i + ' - 0', - data: { - name: 'Item ' + i + ' - 0', - size: Math.floor(Math.random() * 1000) + 1 + 'kb', - type: 'Type ' + i - } - } - ] - }; - - files.push(node); - } - - this.setState({ - nodes: files - }); - } - - render() { - return ( -
- - -
-
-

TreeTable - Page

-

Pagination is enabled by setting paginator property to true and defining a rows property to specify the number of rows per page.

- - - { context => } - -
-
- -
- - - - - -
- - -
- ) - } -} - -class TreeTablePageDemoDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; - -export class TreeTablePageDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [] - }; - } - - componentDidMount() { - let files = []; - for(let i = 0; i < 50; i++) { - let node = { - key: i, - data: { - name: 'Item ' + i, - size: Math.floor(Math.random() * 1000) + 1 + 'kb', - type: 'Type ' + i - }, - children: [ - { - key: i + ' - 0', - data: { - name: 'Item ' + i + ' - 0', - size: Math.floor(Math.random() * 1000) + 1 + 'kb', - type: 'Type ' + i - } - } - ] - }; - - files.push(node); - } - - this.setState({ - nodes: files - }); - } - - render() { - return ( -
-
-
-

TreeTable - Page

-

Pagination is enabled by setting paginator property to true and defining a rows property to specify the number of rows per page.

-
-
- -
- - - - - -
-
- ) - } -} - -`} -
-
-
-
- ) - } -} diff --git a/src/showcase/treetable/TreeTableResponsiveDemo.js b/src/showcase/treetable/TreeTableResponsiveDemo.js deleted file mode 100644 index cd2437671f..0000000000 --- a/src/showcase/treetable/TreeTableResponsiveDemo.js +++ /dev/null @@ -1,160 +0,0 @@ -import React, { Component } from 'react'; -import { TreeTable } from '../../components/treetable/TreeTable'; -import { Column } from "../../components/column/Column"; -import { NodeService } from '../service/NodeService'; -import { TreeTableSubmenu } from '../../showcase/treetable/TreeTableSubmenu'; -import { TabView, TabPanel } from '../../components/tabview/TabView'; -import { CodeHighlight } from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeTableResponsiveDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [] - }; - this.nodeservice = new NodeService(); - this.nameTemplate = this.nameTemplate.bind(this); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - nameTemplate(node) { - return ( - - {node.data.name} - , {node.data.size} - , {node.data.type} - - ) - } - - render() { - return ( -
- - -
-
-

TreeTable - Responsive

-

TreeTable columns are displayed as stacked in responsive mode if the screen size becomes smaller than a certain breakpoint value.

- - - { context => } - -
-
- -
- - - - - -
- - -
- ) - } -} - -class TreeTableResponsiveDemoDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - - -{` -.p-col-d { - display: table-cell; -} - -.p-col-m { - display: none; -} - -@media screen and (max-width: 64em) { - .p-col-d { - display: none; - } - - .p-col-m { - display: inline-block; - } -} - -`} - - - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; -import { NodeService } from '../service/NodeService'; - -export class TreeTableResponsiveDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [] - }; - this.nodeservice = new NodeService(); - this.nameTemplate = this.nameTemplate.bind(this); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - nameTemplate(node) { - return ( - - {node.data.name} - , {node.data.size} - , {node.data.type} - - ) - } - - render() { - return ( -
-
-
-

TreeTable - Responsive

-

TreeTable columns are displayed as stacked in responsive mode if the screen size becomes smaller than a certain breakpoint value.

-
-
- -
- - - - - -
-
- ) - } -} - -`} -
-
-
-
- ) - } -} diff --git a/src/showcase/treetable/TreeTableScrollDemo.js b/src/showcase/treetable/TreeTableScrollDemo.js deleted file mode 100644 index 690700cb1d..0000000000 --- a/src/showcase/treetable/TreeTableScrollDemo.js +++ /dev/null @@ -1,167 +0,0 @@ -import React, { Component } from 'react'; -import { TreeTable } from '../../components/treetable/TreeTable'; -import { Column } from "../../components/column/Column"; -import { NodeService } from '../service/NodeService'; -import { TreeTableSubmenu } from './TreeTableSubmenu'; -import { TabView, TabPanel } from '../../components/tabview/TabView'; -import { CodeHighlight } from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeTableScrollDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [] - }; - this.nodeservice = new NodeService(); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
- - -
-
-

TreeTable - Scroll

-

Scrolling data is available horizontally, vertically or both with optional support for frozen columns.

- - - { context => } - -
-
- -
-

Vertical

- - - - - - -

Horizontal

- - - - - - -

Horizontal and Vertical

- - - - - - -

Frozen Columns

- - - - - - - - - -
- - -
- ) - } -} - -class TreeTableScrollDemoDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; -import { NodeService } from '../service/NodeService'; - -export class TreeTableScrollDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [] - }; - this.nodeservice = new NodeService(); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - render() { - return ( -
-
-
-

TreeTable - Scroll

-

Scrolling data is available horizontally, vertically or both with optional support for frozen columns.

-
-
- -
-

Vertical

- - - - - - -

Horizontal

- - - - - - -

Horizontal and Vertical

- - - - - - -

Frozen Columns

- - - - - - - - - -
-
- ) - } -} - -`} -
-
-
-
- ) - } -} diff --git a/src/showcase/treetable/TreeTableSelectionDemo.js b/src/showcase/treetable/TreeTableSelectionDemo.js deleted file mode 100644 index 0d07970955..0000000000 --- a/src/showcase/treetable/TreeTableSelectionDemo.js +++ /dev/null @@ -1,229 +0,0 @@ -import React, { Component } from 'react'; -import { TreeTable } from '../../components/treetable/TreeTable'; -import { Growl } from '../../components/growl/Growl'; -import { Column } from "../../components/column/Column"; -import { NodeService } from '../service/NodeService'; -import { TreeTableSubmenu } from '../../showcase/treetable/TreeTableSubmenu'; -import { TabView, TabPanel } from '../../components/tabview/TabView'; -import { CodeHighlight } from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeTableSelectionDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes1: [], - nodes2: [], - nodes3: [], - nodes4: [], - nodes5: [], - selectedNodeKey1: null, - selectedNodeKey2: null, - selectedNodeKeys1: [], - selectedNodeKeys2: [], - selectedNodeKeys3: [] - }; - - this.nodeservice = new NodeService(); - this.onSelect = this.onSelect.bind(this); - this.onUnselect = this.onUnselect.bind(this); - } - - onSelect(event) { - this.growl.show({severity: 'info', summary: 'Node Selected', detail: event.node.data.name}); - } - - onUnselect(event) { - this.growl.show({severity: 'info', summary: 'Node Unselected', detail: event.node.data.name}); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes1: data})); - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes2: data})); - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes3: data})); - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes4: data})); - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes5: data})); - } - - render() { - return ( -
- - -
-
-

TreeTable - Selection

-

TreeTable supports single, multiple and checkbox based selection modes.

- - - { context => } - -
-
- -
- this.growl = el} /> - -

Single

- this.setState({selectedNodeKey1: e.value})}> - - - - - -

Multiple

- this.setState({selectedNodeKeys1: e.value})} metaKeySelection={false}> - - - - - -

Multiple with MetaKey

- this.setState({selectedNodeKeys2: e.value})} metaKeySelection={true}> - - - - - -

Events

- this.setState({selectedNodeKey2: e.value})} - onSelect={this.onSelect} onUnselect={this.onUnselect}> - - - - - -

Checkbox

- this.setState({selectedNodeKeys3: e.value})}> - - - - -
- - -
- ) - } -} - -class TreeTableSelectionDemoDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; -import { Growl } from 'primereact/growl'; -import { NodeService } from '../service/NodeService'; - -export class TreeTableSelectionDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes1: [], - nodes2: [], - nodes3: [], - nodes4: [], - nodes5: [], - selectedNodeKey1: null, - selectedNodeKey2: null, - selectedNodeKeys1: [], - selectedNodeKeys2: [], - selectedNodeKeys3: [] - }; - - this.nodeservice = new NodeService(); - this.onSelect = this.onSelect.bind(this); - this.onUnselect = this.onUnselect.bind(this); - } - - onSelect(event) { - this.growl.show({severity: 'info', summary: 'Node Selected', detail: event.node.data.name}); - } - - onUnselect(event) { - this.growl.show({severity: 'info', summary: 'Node Unselected', detail: event.node.data.name}); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes1: data})); - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes2: data})); - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes3: data})); - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes4: data})); - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes5: data})); - } - - render() { - return ( -
-
-
-

TreeTable - Selection

-

TreeTable supports single, multiple and checkbox based selection modes.

-
-
- -
- this.growl = el} /> - -

Single

- this.setState({selectedNodeKey1: e.value})}> - - - - - -

Multiple

- this.setState({selectedNodeKeys1: e.value})} metaKeySelection={false}> - - - - - -

Multiple with MetaKey

- this.setState({selectedNodeKeys2: e.value})} metaKeySelection={true}> - - - - - -

Events

- this.setState({selectedNodeKey2: e.value})} - onSelect={this.onSelect} onUnselect={this.onUnselect}> - - - - - -

Checkbox

- this.setState({selectedNodeKeys3: e.value})}> - - - - -
-
- ) - } -} - -`} -
-
-
-
- ) - } -} diff --git a/src/showcase/treetable/TreeTableSortDemo.js b/src/showcase/treetable/TreeTableSortDemo.js deleted file mode 100644 index b54649226b..0000000000 --- a/src/showcase/treetable/TreeTableSortDemo.js +++ /dev/null @@ -1,163 +0,0 @@ -import React, { Component } from 'react'; -import { TreeTable } from '../../components/treetable/TreeTable'; -import { Column } from '../../components/column/Column'; -import { NodeService } from '../service/NodeService'; -import { TreeTableSubmenu } from '../../showcase/treetable/TreeTableSubmenu'; -import { TabView, TabPanel } from '../../components/tabview/TabView'; -import { CodeHighlight } from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeTableSortDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes1: [], - nodes2: [] - }; - - this.nodeservice = new NodeService(); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes1: data})); - this.nodeservice.getTreeTableNodes().then(data => { - let nodes2 = data; - nodes2.push({ - data: { - name: 'Documents', - size: '100kb', - type: 'Link' - } - }); - - this.setState({ - nodes2: nodes2 - }); - }); - } - - render() { - return ( -
- - -
-
-

TreeTable - Sort

-

TreeTable supports both single column and multiple column sorting.

- - - { context => } - -
-
- -
-

Single Column Sorting

- - - - - - -

Multiple Column Sorting

- - - - - -
- - -
- ); - } -} - -class TreeTableSortDemoDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; -import { NodeService } from '../service/NodeService'; - -export class TreeTableSortDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes1: [], - nodes2: [] - }; - - this.nodeservice = new NodeService(); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes1: data})); - this.nodeservice.getTreeTableNodes().then(data => { - let nodes2 = data; - nodes2.push({ - data: { - name: 'Documents', - size: '100kb', - type: 'Link' - } - }); - - this.setState({ - nodes2: nodes2 - }); - }); - } - - render() { - return ( -
-
-
-

TreeTable - Sort

-

TreeTable supports both single column and multiple column sorting.

-
-
- -
-

Single Column Sorting

- - - - - - -

Multiple Column Sorting

- - - - - -
-
- ); - } -} - -`} -
-
-
-
- ) - } -} diff --git a/src/showcase/treetable/TreeTableStyleDemo.js b/src/showcase/treetable/TreeTableStyleDemo.js deleted file mode 100644 index 04f691521f..0000000000 --- a/src/showcase/treetable/TreeTableStyleDemo.js +++ /dev/null @@ -1,143 +0,0 @@ -import React, { Component } from 'react'; -import { TreeTable } from '../../components/treetable/TreeTable'; -import { Column } from "../../components/column/Column"; -import { NodeService } from '../service/NodeService'; -import { TreeTableSubmenu } from '../../showcase/treetable/TreeTableSubmenu'; -import { TabView, TabPanel } from '../../components/tabview/TabView'; -import { CodeHighlight } from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeTableStyleDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [] - }; - this.nodeservice = new NodeService(); - this.sizeTemplate = this.sizeTemplate.bind(this); - this.rowClassName = this.rowClassName.bind(this); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - sizeTemplate(node) { - let size = node.data.size; - let fontWeight = parseInt(size, 10) > 75 ? 'bold' : 'normal'; - - return {size}; - } - - rowClassName(node) { - return {'p-highlight' : (node.children && node.children.length === 3)}; - } - - render() { - return ( -
- - -
-
-

TreeTable - Styling

-

Particular rows and cells can be styled based on data.

- - - { context => } - -
-
- -
-

This treetable highlights cells with a bolder font weight whose size value is greater than 75kb and highlights rows who has at 3 child rows.

- - - - - -
- - -
- ) - } -} - -class TreeTableStyleDemoDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; -import { NodeService } from '../service/NodeService'; - -export class TreeTableStyleDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [] - }; - this.nodeservice = new NodeService(); - this.sizeTemplate = this.sizeTemplate.bind(this); - this.rowClassName = this.rowClassName.bind(this); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - sizeTemplate(node) { - let size = node.data.size; - let fontWeight = parseInt(size, 10) > 75 ? 'bold' : 'normal'; - - return {size}; - } - - rowClassName(node) { - return {'p-highlight' : (node.children && node.children.length === 3)}; - } - - render() { - return ( -
-
-
-

TreeTable - Styling

-

Particular rows and cells can be styled based on data.

-
-
- -
-

This treetable highlights cells with a bolder font weight whose size value is greater than 75kb and highlights rows who has at 3 child rows.

- - - - - -
-
- ) - } -} - -`} -
-
-
-
- ) - } -} diff --git a/src/showcase/treetable/TreeTableSubmenu.js b/src/showcase/treetable/TreeTableSubmenu.js deleted file mode 100644 index b0893402df..0000000000 --- a/src/showcase/treetable/TreeTableSubmenu.js +++ /dev/null @@ -1,30 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; - -export class TreeTableSubmenu extends Component { - - render() { - return ( -
-
    -
  • ● Documentation
  • -
  • ● Templating
  • -
  • ● Page
  • -
  • ● Sort
  • -
  • ● Selection
  • -
  • ● ColGroup
  • -
  • ● Lazy
  • -
  • ● Edit
  • -
  • ● Scroll
  • -
  • ● Resize
  • -
  • ● Reorder
  • -
  • ● Toggle
  • -
  • ● Style
  • -
  • ● ContextMenu
  • -
  • ● Responsive
  • -
  • ● Filter
  • -
-
- ); - } -} \ No newline at end of file diff --git a/src/showcase/treetable/TreeTableTemplatingDemo.js b/src/showcase/treetable/TreeTableTemplatingDemo.js deleted file mode 100644 index c4525d6127..0000000000 --- a/src/showcase/treetable/TreeTableTemplatingDemo.js +++ /dev/null @@ -1,141 +0,0 @@ -import React, { Component } from 'react'; -import { TreeTable } from '../../components/treetable/TreeTable'; -import { Column } from "../../components/column/Column"; -import { Button } from '../../components/button/Button'; -import { NodeService } from '../service/NodeService'; -import { TreeTableSubmenu } from '../../showcase/treetable/TreeTableSubmenu'; -import { TabView, TabPanel } from '../../components/tabview/TabView'; -import { CodeHighlight } from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TreeTableTemplatingDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [] - }; - this.nodeservice = new NodeService(); - this.actionTemplate = this.actionTemplate.bind(this); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - actionTemplate(node, column) { - return
- - -
; - } - - render() { - const header = "File Viewer"; - const footer =
; - - return ( -
- - -
-
-

TreeTable - Templating

-

Custom content at header, body and footer sections are supported via templating.

- - - { context => } - -
-
- -
- - - - - - -
- - -
- ) - } -} - -class TreeTableTemplatingDemoDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - - -{` -import React, { Component } from 'react'; -import { TreeTable } from 'primereact/treetable'; -import { Column } from "primereact/column"; -import { Button } from 'primereact/button'; -import { NodeService } from '../service/NodeService'; - -export class TreeTableTemplatingDemo extends Component { - - constructor(props) { - super(props); - this.state = { - nodes: [] - }; - this.nodeservice = new NodeService(); - this.actionTemplate = this.actionTemplate.bind(this); - } - - componentDidMount() { - this.nodeservice.getTreeTableNodes().then(data => this.setState({nodes: data})); - } - - actionTemplate(node, column) { - return
- - -
; - } - - render() { - const header = "File Viewer"; - const footer =
; - - return ( -
-
-
-

TreeTable - Templating

-

Custom content at header, body and footer sections are supported via templating.

-
-
- -
- - - - - - -
-
- ) - } -} - -`} -
-
-
-
- ) - } -} diff --git a/src/showcase/tristatecheckbox/TriStateCheckboxDemo.js b/src/showcase/tristatecheckbox/TriStateCheckboxDemo.js deleted file mode 100644 index 91da01b30e..0000000000 --- a/src/showcase/tristatecheckbox/TriStateCheckboxDemo.js +++ /dev/null @@ -1,246 +0,0 @@ -import React, {Component} from 'react'; -import {Link} from 'react-router-dom'; -import {TriStateCheckbox} from '../../components/tristatecheckbox/TriStateCheckbox'; -import {TabView,TabPanel} from '../../components/tabview/TabView'; -import {CodeHighlight} from '../codehighlight/CodeHighlight'; -import AppContentContext from '../../AppContentContext'; - -export class TriStateCheckboxDemo extends Component { - - constructor(props) { - super(props); - this.state = { - value: null - }; - } - - render() { - return ( -
-
-
-

TriStateCheckbox

-

TriStateCheckbox is used to select either "true", "false" or "null" as the value.

- - - { context => } - -
-
- -
-

Value: {this.state.value + ''}

- this.setState({value: e.value})} /> -
- - -
- ); - } -} - -class TriStateCheckboxDoc extends Component { - - shouldComponentUpdate(){ - return false; - } - - render() { - return ( -
- - -

Import

- -{` -import {TriStateCheckbox} from 'primereact/tristatecheckbox'; - -`} - - -

Getting Started

-

TriStateCheckbox is used as a controlled input with checked and onChange properties.

- -{` - this.setState({value: e.value})} /> - -`} - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
inputIdstringnullUnique identifier of the native checkbox element.
valueanynullValue of the TriStateCheckbox.
namestringnullName of the checkbox element .
stylestringnullInline style of the element.
classNamestringnullStyle class of the element.
disabledbooleanfalseWhen present, it specifies that the element value cannot be altered.
tooltipanynullContent of the tooltip.
tooltipOptionsobjectnullConfiguration of the tooltip, refer to the tooltip documentation for more information.
ariaLabelledBystringnullEstablishes relationships between the component and label(s) where its value should be one or more element IDs.
-
- -

Events

-
- - - - - - - - - - - - - - - -
NameParametersDescription
onChangeevent.originalEvent: Browser event
- event.value: Current Value -
Callback to invoke on value change
-
- -

Styling

-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
NameElement
p-chkboxContainer element
p-tristatechkboxContainer element
p-chkbox-boxContainer of icon.
p-chkbox-iconIcon element.
-
- -

Dependencies

-

None.

-
- - - View on GitHub - - -{` -import React, {Component} from 'react'; -import {TriStateCheckbox} from 'primereact/tristatecheckbox'; - -export class TriStateCheckboxDemo extends Component { - - constructor(props) { - super(props); - this.state = { - value: null - }; - } - - render() { - return ( -
-
-
-

TriStateCheckbox

-

TriStateCheckbox is used to select either "true", "false" or "null" as the value.

-
-
- -
-

Value: {this.state.value + ''}

- this.setState({value: e.value})} /> -
-
- ); - } -} - -`} -
-
-
-
- ) - } -} diff --git a/styles/demo/_common.scss b/styles/demo/_common.scss new file mode 100644 index 0000000000..7324fd59a7 --- /dev/null +++ b/styles/demo/_common.scss @@ -0,0 +1,4 @@ +.mypanel .p-panel-header { + background-color: #07c4e8; + color: #ffffff; +} \ No newline at end of file diff --git a/styles/demo/_datatable.scss b/styles/demo/_datatable.scss new file mode 100644 index 0000000000..3408488c33 --- /dev/null +++ b/styles/demo/_datatable.scss @@ -0,0 +1,9 @@ +.p-datatable .p-datatable-tbody > tr > td.p-cell-editing, +.p-treetable .p-treetable-tbody > tr > td.p-cell-editing { + padding-top: 0; + padding-bottom: 0; +} + +.p-datatable-frozen-tbody > tr { + font-weight: 700; +} \ No newline at end of file diff --git a/styles/demo/_dock.scss b/styles/demo/_dock.scss new file mode 100644 index 0000000000..b3b935af22 --- /dev/null +++ b/styles/demo/_dock.scss @@ -0,0 +1,109 @@ +.dock-demo { + .dock-window { + width: 100%; + height: 450px; + position: relative; + background-repeat: no-repeat; + background-size: cover; + } + + .p-dock { + z-index: 1000; + } + + .dock-advanced { + .p-dialog-mask, + .p-galleria-mask, + .p-galleria-mask .p-galleria-item-nav, + .p-toast { + position: absolute; + } + + .p-dialog { + .p-dialog-header { + padding: .2rem; + } + + .p-dialog-content { + padding: 0; + } + + p { + margin-top: 0; + } + + .p-terminal { + background-color: #212121; + color: #ffffff; + border: 0 none; + min-height: 18rem; + height: 100%; + + .p-terminal-command { + color: #80CBC4; + } + + .p-terminal-prompt { + color: #FFD54F; + } + + .p-terminal-response { + color: #9FA8DA; + } + } + + .p-tree { + height: 100%; + border-radius: 0; + border-left-width: 0; + border-right-width: 0; + border-bottom-width: 0; + } + } + + .p-toast { + top: 20px; + } + } + + .p-menubar { + padding-top: 0; + padding-bottom: 0; + border-radius: 0; + + .menubar-root { + font-weight: bold; + padding: 0 1rem; + } + + .p-menuitem-link { + padding: 0.5rem .75rem; + } + + .p-menubar-root-list > .p-menuitem > .p-menuitem-link { + padding: 0.5rem .75rem; + + > .p-submenu-icon { + display: none; + } + } + + .p-menubar-end { + span, i { + padding: 0 .75rem; + } + } + } +} + +.dark-tooltip { + .p-tooltip { + .p-tooltip-arrow { + border-top-color: var(--surface-900); + } + + .p-tooltip-text { + background-color: var(--surface-900); + } + } +} diff --git a/styles/demo/_galleria.scss b/styles/demo/_galleria.scss new file mode 100644 index 0000000000..5d3210f7df --- /dev/null +++ b/styles/demo/_galleria.scss @@ -0,0 +1,62 @@ +.galleria-demo { + .custom-galleria { + &.fullscreen { + display: flex; + flex-direction: column; + + .p-galleria-content { + flex-grow: 1; + justify-content: center; + } + } + + .p-galleria-content { + position: relative; + } + + .p-galleria-thumbnail-wrapper { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + } + + .p-galleria-thumbnail-items-container { + width: 100%; + } + + .custom-galleria-footer { + display: flex; + align-items: center; + background-color: rgba(0, 0, 0, .9); + color: #ffffff; + + > button { + background-color: transparent; + color: #ffffff; + border: 0 none; + border-radius: 0; + margin: .2rem 0; + + &.fullscreen-button { + margin-left: auto; + } + + &:hover { + background-color: rgba(255, 255, 255, 0.1); + } + } + } + + .title-container { + > span { + font-size: .9rem; + padding-left: .829rem; + + &.title { + font-weight: bold; + } + } + } + } +} diff --git a/styles/demo/_organizationchart.scss b/styles/demo/_organizationchart.scss new file mode 100644 index 0000000000..5a57b13e39 --- /dev/null +++ b/styles/demo/_organizationchart.scss @@ -0,0 +1,41 @@ +.organizationchart-demo { + .p-organizationchart { + .p-person { + padding: 0; + border: 0 none; + } + + .node-header, .node-content { + padding: .5em .7rem; + } + + .node-header { + background-color: #495ebb; + color: #ffffff; + } + + .node-content { + text-align: center; + border: 1px solid #495ebb; + } + + .node-content img { + border-radius: 50%; + } + + .department-cfo { + background-color: #7247bc; + color: #ffffff; + } + + .department-coo { + background-color: #a534b6; + color: #ffffff; + } + + .department-cto { + background-color: #e9286f; + color: #ffffff; + } + } +} diff --git a/styles/demo/_scrollpanel.scss b/styles/demo/_scrollpanel.scss new file mode 100644 index 0000000000..7a3d30491d --- /dev/null +++ b/styles/demo/_scrollpanel.scss @@ -0,0 +1,33 @@ +.scrollpanel-demo { + .p-scrollpanel { + &.custombar1 { + .p-scrollpanel-wrapper { + border-right: 10px solid var(--surface-ground); + } + + .p-scrollpanel-bar { + background-color: var(--primary-300); + opacity: 1; + transition: background-color .3s; + + &:hover { + background-color: var(--primary-400); + } + } + } + + &.custombar2 { + .p-scrollpanel-wrapper { + border-right: 10px solid var(--surface-50); + border-bottom: 10px solid var(--surface-50); + } + + .p-scrollpanel-bar { + background-color: var(--surface-200); + border-radius: 0; + opacity: 1; + transition: background-color .3s; + } + } + } +} \ No newline at end of file diff --git a/styles/demo/_timeline.scss b/styles/demo/_timeline.scss new file mode 100644 index 0000000000..a6ee1c7c9f --- /dev/null +++ b/styles/demo/_timeline.scss @@ -0,0 +1,19 @@ +@media screen and (max-width: 991px) { + .customized-timeline { + .p-timeline-event:nth-child(even) { + flex-direction: row !important; + + .p-timeline-event-content { + text-align: left !important; + } + } + + .p-timeline-event-opposite { + flex: 0; + } + + .p-card { + margin-top: 1rem; + } + } +} \ No newline at end of file diff --git a/styles/demo/demo.scss b/styles/demo/demo.scss new file mode 100644 index 0000000000..d534cc96f5 --- /dev/null +++ b/styles/demo/demo.scss @@ -0,0 +1,7 @@ +@import "http://github.com/_common"; +@import "http://github.com/_datatable"; +@import "http://github.com/_dock"; +@import "http://github.com/_galleria"; +@import "http://github.com/_organizationchart"; +@import "http://github.com/_scrollpanel"; +@import "http://github.com/_timeline"; diff --git a/styles/doc/index.css b/styles/doc/index.css new file mode 100644 index 0000000000..7374b7eee1 --- /dev/null +++ b/styles/doc/index.css @@ -0,0 +1,4 @@ +.tsd-panel.tsd-comment:has(img), +.tsd-comment img { + display: none !important; +} diff --git a/styles/layout/_code.scss b/styles/layout/_code.scss new file mode 100644 index 0000000000..28663ba977 --- /dev/null +++ b/styles/layout/_code.scss @@ -0,0 +1,143 @@ +code[class*="language-"], +pre[class*="language-"] { + background: none; + font-family: ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,Liberation Mono,monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +div.code-toolbar > .toolbar { + display: none; +} + + +pre[class*="language-"] { + position: relative; + background: transparent; + margin: 0; + padding: 0; + max-height: 40rem; + overflow: auto; + color-scheme: dark; + + &:before, &:after { + display: none !important; + } + + code { + border-left: 1rem solid transparent; + box-shadow: none; + margin: 0; + font-size: 14px; + border-radius: 10px; + color: #ffffff; + max-height: inherit; + height: inherit; + padding: 0 1rem; + display: block; + overflow: auto; + + .token.comment, + .token.block-comment, + .token.prolog, + .token.doctype, + .token.cdata { + color: #bbf7d0; + } + + .token.punctuation { + color: #bfdbfe; + } + + .token.property, + .token.tag, + .token.boolean, + .token.number, + .token.function-name, + .token.constant, + .token.symbol, + .token.deleted { + color: #93c5fd; + } + + .token.selector, + .token.attr-name, + .token.string, + .token.char, + .token.function, + .token.builtin, + .token.inserted { + color: #eff6ff; + } + + .token.operator, + .token.entity, + .token.url, + .token.variable { + color: #ffffff; + } + + .token.atrule, + .token.attr-value, + .token.keyword, + .token.class-name { + color: #bbf7d0; + } + + .token.regex, + .token.important { + color: #fde68a; + } + + .language-css .token.string, + .style .token.string { + color: #fde68a; + } + + .token.important { + font-weight: normal; + } + + .token.bold { + font-weight: bold; + } + .token.italic { + font-style: italic; + } + + .token.entity { + cursor: help; + } + } +} + +.copy-to-clipboard-button { + display: none; +} + +pre[class*="language-"] { + code { + background: var(--demo-code-bg); + } +} + +.layout-light { + &[data-p-theme^="md"] { + pre[class*="language-"] { + code { + background: var(--surface-900); + } + } + } +} \ No newline at end of file diff --git a/styles/layout/_config.scss b/styles/layout/_config.scss new file mode 100644 index 0000000000..87ed2e2442 --- /dev/null +++ b/styles/layout/_config.scss @@ -0,0 +1,52 @@ +.layout-config { + backdrop-filter: blur(20px); + background-color: var(--mobile-menu-bg); + + .p-selectbutton { + .p-button { + padding: 0.5rem 1rem; + + &:first-child { + border-top-left-radius: 30px; + border-bottom-left-radius: 30px; + } + + &:last-child { + border-top-right-radius: 30px; + border-bottom-right-radius: 30px; + } + } + } + + button { + &:focus-visible { + outline: 0 none; + border-color: var(--surface-500) !important; + } + } + + .grid { + > div { + padding: 1rem; + } + } + + .p-inputswitch { + .p-inputswitch-slider { + border-radius: 30px; + + &:before { + border-radius: 30px; + } + } + } + + &.layout-light { + background: var(--surface-overlay); + } + + &.layout-dark { + background: var(rgba(0,0,0,.3)); + border: 0 none; + } +} \ No newline at end of file diff --git a/styles/layout/_content.scss b/styles/layout/_content.scss new file mode 100644 index 0000000000..d60687945a --- /dev/null +++ b/styles/layout/_content.scss @@ -0,0 +1,18 @@ +.layout-content { + padding: 6rem 4rem 0 4rem; + display: flex; + + .layout-content-slot { + flex: 1 1 auto; + width: 1%; + padding-top: .5rem; + } +} + +.card { + background: var(--surface-card); + border: var(--card-border); + padding: 2rem; + border-radius: 10px; + margin-bottom: 1rem; +} diff --git a/styles/layout/_core.scss b/styles/layout/_core.scss new file mode 100644 index 0000000000..ab819c5a2f --- /dev/null +++ b/styles/layout/_core.scss @@ -0,0 +1,107 @@ +html { + font-size: 14px; +} + +body { + margin: 0px; + min-height: 100%; + overflow-x: hidden; + overflow-y: auto; + background-color: var(--surface-ground); + font-weight: normal; + color: var(--text-color); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.layout-wrapper { + background-color: var(--surface-ground); +} + +a { + text-decoration: none; +} + +::selection { + background-color: var(--highlight-bg); + color: var(--highlight-text-color); +} + +h1, h2, h3, h4, h5, h6 { + margin: 1.5rem 0 1rem 0; + font-family: inherit; + font-weight: 600; + line-height: 1.2; + color: var(--surface-900); + + &:first-child { + margin-top: 0; + } +} + +h1 { + font-size: 2rem; +} + +h2 { + font-size: 1.5rem; +} + +h3 { + font-size: 1.25rem; +} + +h4 { + font-size: 1.125rem; +} + +h5 { + font-size: 1rem; +} + +h6 { + font-size: .875rem; +} + +p { + line-height: 1.75; + margin: 0 0 1rem 0; +} + +input[type="number"] { + -moz-appearance: textfield; + + &::-webkit-outer-spin-button, + &::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; + } +} + +.p-toast.p-toast-top-right, +.p-toast.p-toast-top-left { + top: 7rem; +} + +.px-link { + font-size: 1rem; + border-radius: var(--border-radius); + text-align: left; + background-color: transparent; + margin: 0; + padding: 0; + border: none; + cursor: pointer; + user-select: none; + + @include focus-visible(); +} + +.px-link:disabled { + cursor: default; +} + +button { + font-family: var(--font-family); + font-feature-settings: var(--font-feature-settings); +} \ No newline at end of file diff --git a/styles/layout/_doc.scss b/styles/layout/_doc.scss new file mode 100644 index 0000000000..f6504b3a54 --- /dev/null +++ b/styles/layout/_doc.scss @@ -0,0 +1,452 @@ +.doc-tabmenu { + list-style: none; + margin: 0; + padding: 0; + display: flex; + margin-bottom: 2rem; + overflow: auto; + position: relative; + + &:after { + display: block; + position: absolute; + bottom: 0; + width: 100%; + border-bottom: 1px solid var(--surface-border); + content: ''; + } + + li { + position: relative; + z-index: 1; + + button { + background-color: transparent; + border: 0 none; + display: block; + padding: 0 2rem 1rem 2rem; + text-align: center; + color: var(--surface-700); + font-size: 1rem; + letter-spacing: 1px; + cursor: pointer; + margin: 0; + transition: all 0.2s; + border-bottom: 1px solid transparent; + border-top-right-radius: var(--border-round); + border-top-left-radius: var(--border-round); + white-space: nowrap; + + &:hover { + border-bottom-color: var(--surface-500); + } + + &:focus { + outline: 0 none; + } + + @include focus-visible(); + } + + &.doc-tabmenu-active { + button { + border-bottom-color: var(--primary-color); + color: var(--primary-color); + } + } + } + + &::-webkit-scrollbar { + display: none; + } +} + +.deferred-demo-loading { + border-radius: 10px; + height: 350px; + position: relative; + overflow: hidden; +} + +.deferred-demo-loading::after { + content: ''; + animation: deferred-demo-loading 1.2s infinite; + left: 0; + position: absolute; + right: 0; + top: 0; + height: 100%; + transform: translateX(-100%); + z-index: 1; + border-radius: 10px; + background: linear-gradient(90deg, rgba(255, 255, 255, 0), var(--surface-100), rgba(255, 255, 255, 0)); +} + +@keyframes deferred-demo-loading { + from { + transform: translateX(-100%); + } + to { + transform: translateX(100%); + } +} + +.doc-tabpanel, +.doc { + display: flex; +} + +.doc-main { + flex-grow: 1; + flex-shrink: 1; + flex-basis: 0; + min-width: 0; +} + +.doc-intro { + margin-bottom: 1.5rem; + + p { + font-size: 1.125rem; + color: var(--surface-900); + margin: 0; + } +} + +.doc-section-label { + display: flex; + align-items: center; + scroll-margin-top: 6.5rem; + + > a { + color: var(--primary-color); + opacity: 0.7; + margin-left: 1rem; + display: none; + transition: all .2s; + border-radius: var(--border-radius); + @include focus-visible(); + } + + &:hover { + > a { + display: block; + + &:hover { + opacity: 1; + } + } + } +} + +.doc-section-description { + > p { + font-size: 1.125rem; + color: var(--surface-900); + + i { + border-radius: 6px; + padding: 2px 6px; + font-size: 1rem; + font-weight: 500; + font-style: normal; + background-color: var(--doc-highlight-text-bg); + color: var(--doc-highlight-text-color); + } + + a { + color: var(--primary-color); + font-weight: 500; + transition: all .2s; + border-radius: var(--border-radius); + @include focus-visible(); + + &:hover { + text-decoration: underline; + } + } + } + + .notification { + line-height: 1.5; + padding: 1rem; + font-weight: 500; + border-radius: 10px; + background-color: var(--doc-highlight-text-bg); + color: var(--doc-highlight-text-color); + } +} + +.doc-section-nav-container { + position: sticky; + top: 6rem; + right: 0; + width: 14rem; + margin: 0; + padding-block: 0.25rem; + padding-inline: 0; + margin-inline-start: 4rem; + display: flex; + flex-direction: column; + align-self: flex-start; + max-height: calc(100vh - 14rem); +} + +.doc-section-nav { + list-style: none; + overflow-y: scroll; + overflow-x: hidden; + padding: 0; + + >.navbar-item { + .navbar-item-content { + border-left: 1px solid var(--surface-border); + padding-left: .25rem; + transition: all .2s; + + &:hover { + border-left-color: var(--surface-500); + } + } + } + + .navbar-item { + >.navbar-item-content { + display: flex; + + .px-link { + padding: 0.25rem 1rem 0.25rem 1rem; + color: var(--surface-800); + font-weight: 400; + white-space: nowrap; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + transition: all .2s; + } + + &:hover { + .px-link { + color: var(--surface-900); + } + } + } + + &.active-navbar-item { + > .navbar-item-content { + border-color: var(--primary-color); + + .px-link { + color: var(--primary-color); + } + } + } + + ul { + list-style: none; + margin: 0; + padding: 0; + + .navbar-item { + .navbar-item-content { + padding-left: 1rem; + } + } + } + } +} + +.doc-section-code { + position: relative; + + div { + &::-webkit-scrollbar { + width: 5px; + } + } + + &:not(:last-child) { + margin-bottom: 1rem; + } + + &:hover { + .doc-section-code-buttons { + display: flex; + } + } +} + +.doc-section-code-buttons { + position: absolute; + align-items: center; + justify-content: end; + z-index: 1; + top: .75rem; + right: .75rem; + gap: .5rem; + display: none; + background: rgba(255,255,255,.05); + border-radius: 10px; + padding: 2px; + backdrop-filter: blur(6px); + border: 1px solid rgba(255, 255, 255, .1); + + button { + outline: 0 none; + border-radius: 8px; + outline-offset: 0; + background-color: transparent; + transition: background-color .2s, box-shadow .2s; + border: 0 none; + color: var(--demo-code-button-color); + cursor: pointer; + + &:hover { + background-color: var(--demo-code-button-hover-bg); + color: var(--demo-code-button-hover-color); + } + + &.code-active { + color: #bbf7d0; + } + } +} + +.doc-section-code-tooltip .p-tooltip-text { + padding: 0.5rem; + font-size: 11px; +} + + + +.doc-tablewrapper { + overflow: auto; +} + +.doc-table { + border-collapse: collapse; + width: 100%; + min-width: 960px; + margin-bottom: 1.5rem; + + th { + border-bottom: 1px solid var(--surface-border); + padding: .75rem 1rem; + text-align: left; + text-transform: capitalize; + } + + tbody { + tr:hover { + background: var(--surface-hover); + } + + td { + padding: .75rem 1rem; + border-bottom: 1px solid var(--surface-border); + white-space: pre-line; + line-height: 1.5; + scroll-margin-top: 6.5rem; + + &:first-child { + color: var(--primary-color); + font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, Liberation Mono, monospace; + font-weight: 600; + } + + .doc-option-type { + font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, Liberation Mono, monospace; + color: var(--primary-500); + font-weight: 500; + + .doc-option-type-options-container { + display: flex; + align-items: center; + } + + span.doc-option-type-options { + color: var(--primary-700); + } + + &.doc-option-link { + &:hover { + text-decoration: underline; + } + } + } + + .doc-option-name, + > i:not(.pi) { + font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, Liberation Mono, monospace; + position: relative; + scroll-margin-top: 6.5rem; + background-color: var(--doc-highlight-text-bg); + color: var(--doc-highlight-text-color); + border-radius: 6px; + padding: 2px 6px; + font-weight: 600; + font-style: normal; + white-space: nowrap; + + .doc-option-link { + position: absolute; + top: 0; + right: -1.5rem; + color: var(--primary-color); + opacity: 0.7; + display: none; + transition: opacity 0.3s, colors 0.3s; + } + } + + &:hover { + .doc-option-name { + .doc-option-link { + display: inline; + + &:hover { + opacity: 1; + } + } + } + } + + .doc-option-default, + .doc-option-returnType { + font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, Liberation Mono, monospace; + font-weight: 400; + font-style: normal; + display: flex; + border-width: 1px; + border-style: solid; + border-radius: 6px; + padding: 2px 6px; + max-width: min-content; + } + + .doc-option-parameter-name { + font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, Liberation Mono, monospace; + color: var(--primary-700); + } + + .doc-option-parameter-type { + font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, Liberation Mono, monospace; + color: var(--primary-500); + } + + .doc-option-params { + font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, Liberation Mono, monospace; + } + + .doc-option-light { + background: var(--bluegray-50); + border-color: var(--bluegray-100); + } + + .doc-option-dark { + background: var(--bluegray-800); + border-color: var(--bluegray-800); + } + } + } +} diff --git a/styles/layout/_docsearch.scss b/styles/layout/_docsearch.scss new file mode 100644 index 0000000000..772aa1b9cc --- /dev/null +++ b/styles/layout/_docsearch.scss @@ -0,0 +1,149 @@ +.DocSearch-Button { + border-radius: var(--border-radius); + border: 1px solid var(--surface-border); + height: 2rem; + background-color: var(--surface-card); + margin: 0; + transition: all .3s; + padding: 0 .5rem; + @include focus-visible(); + + &:hover { + border-color: var(--primary-color); + } + + &:hover { + border-color: var(--primary-color); + box-shadow: none; + } + + .DocSearch-Search-Icon { + width: 1rem; + height: 1rem; + } + + .DocSearch-Button-Keys { + overflow: hidden; + min-width: auto; + height: auto; + background: transparent; + display: flex; + align-items: center; + justify-content: center; + width: auto; + padding: 0; + gap: 2px; + + .DocSearch-Button-Key { + background: transparent; + display: flex; + padding: 0; + margin: 0; + top: 0; + border-radius: 0; + height: auto; + width: auto; + font-family: var(--font-family); + + &:first-child { + font-size: 0.75rem; + line-height: normal; + } + + &:last-child { + justify-content: start; + align-items: center; + font-size: 0.75rem; + position: relative; + + &::before { + content: "\e90d"; + display: flex; + color: var(--text-color); + font-family: "primeicons"; + font-size: .4rem; + opacity: .7; + margin-right: 2px; + height: 13.5px; + align-items: center; + font-weight: 700; + + } + } + } + } +} + +.DocSearch-Container { + z-index: 1101; +} + +.DocSearch-Modal { + border: 1px solid var(--surface-border); + box-shadow: none; +} + +.DocSearch-Footer { + box-shadow: none; + border-top: 1px solid var(--surface-border); + background-color: var(--surface-overlay); +} + +.DocSearch-Form { + background: var(--surface-card); + box-shadow: none; + border: 1px solid var(--surface-border); + border-radius: var(--border-radius); + transition: border-color .3s; + + &:hover { + border-color: var(--primary-color); + } + + .DocSearch-MagnifierLabel, .DocSearch-Reset { + color: var(--text-color); + } +} + +.DocSearch-Hit { + border-bottom: 1px solid var(--surface-border); + padding-bottom: 0; + margin-bottom: .25rem; +} + +.DocSearch-Hit-source { + color: var(--primary-color); +} + +.DocSearch-Logo .cls-1, .DocSearch-Logo .cls-2 { + fill: var(--primary-color); +} + +.DocSearch-Prefill { + color: var(--primary-color); +} + +.DocSearch-Button-Placeholder { + text-align: center; + display: inline-block; + font-size: .875rem; +} + +:root { + --docsearch-searchbox-focus-background: var(--surface-card); + --docsearch-text-color: var(--text-color); + --docsearch-muted-color: var(--text-color); + --docsearch-searchbox-background: var(--surface-card); + --docsearch-text-color: var(--text-color); + --docsearch-modal-background: var(--surface-overlay); + --docsearch-key-gradient: var(--surface-ground); + --docsearch-key-shadow: none; + --docsearch-container-background: var(--maskbg); + --docsearch-hit-background: var(--surface-overlay); + --docsearch-hit-shadow: none; + --docsearch-spacing: 1rem; + --docsearch-hit-color: var(--text-color); + --docsearch-highlight-color: var(--primary-color); + --docsearch-hit-active-color: var(--primary-color-text); +} + diff --git a/styles/layout/_footer.scss b/styles/layout/_footer.scss new file mode 100644 index 0000000000..0eb285db1f --- /dev/null +++ b/styles/layout/_footer.scss @@ -0,0 +1,25 @@ +.layout-footer { + padding: 2rem 4rem; + margin-top: 4rem; + display: flex; + align-items: center; + justify-content: space-between; + flex-wrap: wrap; + font-weight: 500; + color: var(--text-800); + border-top: 1px solid var(--surface-border); + + a { + color: var(--primary-color); + font-weight: 700; + transition: all .3s; + border-radius: var(--border-radius); + + @include focus-visible(); + + &:hover { + text-decoration: underline; + } + + } +} \ No newline at end of file diff --git a/styles/layout/_glow.scss b/styles/layout/_glow.scss new file mode 100644 index 0000000000..f2e2895b15 --- /dev/null +++ b/styles/layout/_glow.scss @@ -0,0 +1,7 @@ +.landing, .layout-wrapper { + background-image: var(--glow-image); + background-blend-mode: var(--glow-blend); + background-position: top center; + background-repeat: no-repeat; + background-size: auto 20rem; +} \ No newline at end of file diff --git a/styles/layout/_mixins.scss b/styles/layout/_mixins.scss new file mode 100644 index 0000000000..6c13e91b11 --- /dev/null +++ b/styles/layout/_mixins.scss @@ -0,0 +1,13 @@ +@mixin focus-visible($type: null) { + &:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: $type var(--focus-ring); + } +} + +@mixin mobile { + @media (max-width: 900px) { + @content; + } +} \ No newline at end of file diff --git a/styles/layout/_news.scss b/styles/layout/_news.scss new file mode 100644 index 0000000000..f2d4686349 --- /dev/null +++ b/styles/layout/_news.scss @@ -0,0 +1,92 @@ +.layout-news { + position: fixed; + top: 0; + left: 0; + z-index: 1100; + width: 100%; + height: 2rem; + padding: 0 2rem; + background-color: var(--primary-color); + + .layout-news-container { + display: flex; + justify-content: space-between; + align-items: center; + width: calc(100% - var(--scrollbar-width, 0px)); + height: 100%; + } + + .layout-news-content { + flex: 1; + display: flex; + justify-content: center; + align-items: center; + min-width: 0%; + } + + .layout-news-text { + line-height: 1.5; + display: block; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + min-width: 0%; + font-weight: 500; + color: var(--primary-color-text); + } + + .layout-news-link { + margin-left: 0.5rem; + line-height: 1.5; + white-space: nowrap; + } + + .layout-news-link, + .layout-news-link:visited, + .layout-news-link:active { + color:var(--primary-color-text); + font-weight:700; + } + .layout-news-link:hover { + text-decoration: underline; + } + + .layout-news-close { + line-height: 1.5; + cursor: pointer; + display: inline-flex; + justify-content: center; + align-items: center; + border-radius: 50%; + width: 1.5rem; + height: 1.5rem; + transition: background-color 0.3s; + margin-left: 0.5rem; + color: var(--primary-color-text); + + &:hover { + background-color: rgba(255, 255, 255, 0.2); + } + } +} + +.layout-news-active { + .layout-topbar { + top: 2rem; + } + + .layout-sidebar, + .doc-section-nav { + top: 8rem; + } + + .layout-content { + padding-top: 8rem; + } + + .doc-section-label, + .doc-table tbody td .doc-option-name, + .doc-table tbody td > i { + scroll-margin-top: 8.5rem; + } +} diff --git a/styles/layout/_responsive.scss b/styles/layout/_responsive.scss new file mode 100644 index 0000000000..e46a70ded5 --- /dev/null +++ b/styles/layout/_responsive.scss @@ -0,0 +1,177 @@ +@media screen and (min-width: 1920px) { + .layout-content { + max-width: 1728px; + margin: 0 auto; + } + + .layout-topbar-inner, + .layout-footer { + max-width: 1728px; + margin: 0 auto; + } + +} + +@media screen and (max-width: 1199px) { + .layout-topbar-inner { + padding-left: 2rem; + padding-right: 2rem; + + .menu-button { + display: block; + } + + .layout-topbar-logo-container { + width: auto; + margin-right: 0; + } + + .DocSearch-Button { + width: 2rem; + height: 2rem; + overflow: hidden; + padding: 0; + justify-content: center; + align-items: center; + + .DocSearch-Search-Icon { + width: 1rem; + height: 1rem; + } + + .DocSearch-Button-Placeholder, + .DocSearch-Button-Keys { + display: none; + } + } + } + + .layout-sidebar { + top: 0; + left: 0; + position: fixed; + z-index: 1102; + height: 100%; + transform: translateX(-100%); + background-color: var(--mobile-menu-bg); + backdrop-filter: blur(20px); + width: 300px; + opacity: 0; + + nav { + padding: 1rem 1rem; + } + + &.active { + opacity: 1; + transform: translateX(0); + } + } + + .layout-news-active { + .layout-sidebar { + top: 0; + } + } + + .layout-mask { + background-color: rgba(0, 0, 0, 0.1); + + &.layout-mask-active { + z-index: 1101; + width: 100%; + height: 100%; + position: fixed; + top: 0; + left: 0; + background-color: rgba(0, 0, 0, 0.4); + transition: background-color .5s; + } + } + + .doc-section-nav-container { + display: none; + } + + .video-container { + position: relative; + width: 100%; + height: 0; + padding-bottom: 56.25%; + + iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } + } + + .layout-content { + padding-left: 2rem; + padding-right: 2rem; + } + + .layout-footer { + padding-left: 2rem; + padding-right: 2rem; + } + + .blocked-scroll { + overflow: hidden; + padding-right: var(--scrollbar-width); + } +} + +@media (max-width: 768px) { + .DocSearch-Container { + position: fixed !important; + } +} + +@media screen and (max-width: 575px) { + .layout-topbar-inner { + padding-left: 1rem; + padding-right: 1rem; + + .layout-topbar-logo { + display: none; + } + + .layout-topbar-icon { + display: inline-flex; + } + } + + .layout-content { + padding-left: 1rem; + padding-right: 1rem; + } + + .layout-footer { + padding-left: 1rem; + padding-right: 1rem; + } + + .doc-tabmenu { + li { + flex: 1 1 0; + + button { + width: 100%; + min-width: auto; + } + } + } + + .layout-news { + padding-left: 1rem; + padding-right: 1rem; + font-size: 12px; + + > i { + display: none; + } + } +} diff --git a/styles/layout/_sidebar.scss b/styles/layout/_sidebar.scss new file mode 100644 index 0000000000..d512bb1757 --- /dev/null +++ b/styles/layout/_sidebar.scss @@ -0,0 +1,154 @@ +.layout-sidebar { + position: sticky; + left: 0; + top: 6rem; + height: calc(100vh - 9rem); + user-select: none; + transition: transform .4s cubic-bezier(.05,.74,.2,.99), opacity .3s; + display: flex; + flex-direction: column; + padding: 0 0 0 0; + flex: 0 0 250px; + margin-right: 4rem; + overflow: auto; + + .logo { + display: flex; + justify-content: center; + } + + nav { + padding: 0 1rem 0 0; + margin: 0; + flex-grow: 1; + } + + .layout-menu { + list-style: none; + margin: 0; + padding: 0; + + > li { + margin-bottom: .25rem; + + > button, + > a { + display: flex; + width: 100%; + align-items: center; + padding: .5rem 0; + color: var(--surface-900); + font-weight: 600; + transition: all .2s; + border-radius: var(--border-radius); + + .menu-icon { + width: 2rem; + height: 2rem; + border-radius: var(--border-radius); + margin-right: .5rem; + border: 1px solid var(--surface-border); + display: inline-flex; + align-items: center; + justify-content: center; + transition: all .2s; + + i { + color: var(--surface-700); + transition: all .2s; + } + } + + .menu-toggle-icon { + color: var(--surface-700); + margin-left: auto; + } + + &:hover { + .menu-icon { + i { + color: var(--primary-color); + } + } + + .menu-toggle-icon { + color: var(--surface-900); + } + } + + &.router-link-active { + color: var(--primary-color); + + > .menu-icon { + i { + color: var(--primary-color); + } + } + } + + @include focus-visible(inset); + } + + > div { + ol { + margin: 0 0 0 1rem; + padding: .25rem 0; + list-style: none; + + li { + a { + color: var(--surface-700); + border-left: 1px solid var(--surface-border); + transition: all .2s; + font-weight: 450; + display: flex; + padding: .5rem .5rem .5rem 1rem; + color: var(--surface-700); + transition: all .2s; + + &:focus-visible { + outline: 0 none; + box-shadow: inset var(--focus-ring); + } + + &:hover { + color: var(--surface-900); + border-left-color: var(--surface-500); + } + + &.router-link-active { + color: var(--primary-color); + border-left-color: var(--primary-color); + } + } + + ol { + margin: 0; + padding: 0; + } + + + + &:has(.menu-child-category) { + margin-top: 1rem; + } + + &:has(.menu-child-category):first-child { + margin-top: 0rem; + } + } + } + } + } + + .menu-child-category { + display: flex; + padding: .5rem .5rem .5rem 0; + font-size: .875rem; + font-weight: 600; + letter-spacing: 1px; + color: var(--surface-900); + margin-bottom: .25rem; + } + } +} \ No newline at end of file diff --git a/styles/layout/_topbar.scss b/styles/layout/_topbar.scss new file mode 100644 index 0000000000..bafd71ff3d --- /dev/null +++ b/styles/layout/_topbar.scss @@ -0,0 +1,54 @@ +.layout-topbar { + position: fixed; + top: 0; + left: 0; + width: calc(100% - var(--scrollbar-width, 0px)); + z-index: 1100; + transition: background-color .5s, border-color .5s; + border-bottom: 1px solid transparent; + + &.layout-topbar-sticky { + border-bottom: 1px solid var(--surface-border); + background-color: var(--topbar-sticky-bg); + backdrop-filter: blur(8px); + } +} + +.layout-topbar-inner { + height: 4rem; + padding: 0 4rem; + display: flex; + align-items: center; + justify-content: space-between; + + .layout-topbar-logo-container { + width: 250px; + margin-right: 4rem; + } + + .layout-topbar-logo, + .layout-topbar-icon { + border-radius: var(--border-radius); + @include focus-visible(); + } + + .layout-topbar-logo { + display: inline-flex; + + svg { + width: 165px; + } + } + + .layout-topbar-icon { + display: none; + + svg { + width: 36px; + } + } + + .menu-button { + display: none; + } +} \ No newline at end of file diff --git a/styles/layout/landing/_blocks.scss b/styles/layout/landing/_blocks.scss new file mode 100644 index 0000000000..69a76d68fb --- /dev/null +++ b/styles/layout/landing/_blocks.scss @@ -0,0 +1,222 @@ +.landing-blocks { + * { + box-sizing: content-box; + } + + background: var(--home-blocks-bg); + + .prime-blocks { + transform: rotateX(55deg) rotateY(0deg) rotateZ(-45deg); + margin: -12rem 0; + + &.blocks-animation { + .prime-block { + .block-sidebar, + .block-header, + .block-sidebar-list, + .block-content { + opacity: 1; + visibility: visible; + transform: scale(1); + } + } + } + + .prime-block { + background: var(--home-blocks-block-bg); + box-shadow:var(--home-blocks-block-shadow); + border-left: var(--home-blocks-border-left); + border-bottom: var(--home-blocks-border-bottom); + border-radius: 10px; + height: 300px; + width: 600px; + position: relative; + z-index: 1; + margin: 15px; + transition: opacity 1.3s, transform 1.3s; + + .block-sidebar, + .block-header, + .block-sidebar-list, + .block-content { + transition: opacity 1.3s, transform 1.3s; + opacity: 0; + visibility: hidden; + transform: scale(0.9); + } + + &:before { + content: ''; + position: absolute; + top: 0; + left:0; + right:0; + bottom: 0; + border-radius: 6px; + border: var(--home-blocks-border) + } + + .block-sidebar, + .block-header { + background: var(--home-blocks-sidebar-bg); + border-radius: 6px; + } + + .block-sidebar-list { + background: var(--home-blocks-list-bg); + } + + .block-content { + .block-main { + border: var(--home-blocks-main-border); + border-radius: 13px; + background: var(--home-blocks-main-bg); + } + } + } + + .block-item { + background: var(--home-blocks-item-bg); + border-radius: 6px; + padding: 1rem; + transition: transform 1s, box-shadow 1s; + overflow: hidden; + transform: translateY(0); + + .box { + border-radius: 4px; + width: 14px; + height: 14px; + + &.box-orange{ + background-color: #F57C00; + } + + &.box-pink{ + background-color: #E91E63; + } + + &.box-green { + background-color: #4CAF50; + } + + &.box-blue{ + background-color: #2196F3; + } + } + + .block-image { + background-color: var(--home-blocks-image-bg); + height: 44px; + } + + .text { + display: block; + font-size: 24px; + font-weight: 700; + color: var(--home-blocks-text-color); + } + + &.block-item-active { + box-shadow: var(--home-blocks-active-shadow); + border-radius: 6px; + border-top: var(--home-blocks-active-border-top); + border-right: var(--home-blocks-active-border-right); + border-bottom: var(--home-blocks-active-border-bottom); + border-left: var(--home-blocks-active-border-left); + position: relative; + z-index: 5; + animation: block-animation 1500ms ease-in-out alternate infinite; + + &.animation-2{ + animation-delay: 1s; + } + + &.animation-3{ + animation-delay: 1.5s; + } + } + + &.block-item-col { + background: none !important; + border: none; + padding: 12px 0; + } + + &.block-item-table { + border-radius: 100px; + padding: 10px; + + .bar{ + background: var(--home-blocks-tablebar-bg); + } + } + } + + .bar { + background: var(--home-blocks-bar-bg); + height: 6px; + border-radius: 10px; + + &.bar-highlight { + background: var(--home-highlight-color); + + &:before { + background: var(--home-highlight-fore-color) !important ; + } + } + + &.bar-button { + height: 16px; + position: relative; + + &:before { + content: ''; + position: absolute; + top: 6px; + left: 10px; + right: 10px; + bottom: 6px; + height: 3px; + border-radius: 6px; + background: var(--home-blocks-bar-button-bg); + } + } + } + + .circle { + width: 18px; + height: 18px; + border-radius: 100%; + background: var(--home-blocks-circle-bg); + + &.circle-small { + width: 8px; + height: 8px; + } + + &.circle-medium { + width: 14px; + height: 14px; + } + + &.circle-highlight { + background: var(--home-highlight-color); + } + } + } +} + +@media screen and (max-width: $landingBreakpointXL) { + .landing-blocks .prime-blocks { + margin: -24rem 0; + transform: rotateX(55deg) rotateY(0deg) rotateZ(-45deg) scale(0.6); + } +} + +@keyframes block-animation { + to { + transform: translateY(-10px) translateX(10px) scale(1.02); + box-shadow: var(--home-blocks-animation-shadow); + } +} \ No newline at end of file diff --git a/styles/layout/landing/_features.scss b/styles/layout/landing/_features.scss new file mode 100644 index 0000000000..219b064760 --- /dev/null +++ b/styles/layout/landing/_features.scss @@ -0,0 +1,10 @@ +.landing-features { + .box { + box-shadow: var(--home-features-card-shadow); + } + .features-container{ + max-width: 1250px !important; + margin-left: auto !important; + margin-right: auto !important; + } +} \ No newline at end of file diff --git a/styles/layout/landing/_footer.scss b/styles/layout/landing/_footer.scss new file mode 100644 index 0000000000..3b97a5c680 --- /dev/null +++ b/styles/layout/landing/_footer.scss @@ -0,0 +1,5 @@ +.landing-footer { + a { + @include focus-visible(); + } +} \ No newline at end of file diff --git a/styles/layout/landing/_getstarted.scss b/styles/layout/landing/_getstarted.scss new file mode 100644 index 0000000000..f3d55c3468 --- /dev/null +++ b/styles/layout/landing/_getstarted.scss @@ -0,0 +1,11 @@ +.landing-getstarted { + .download-icon { + color: var(--home-highlight-color); + } + + .download-box { + span { + color: var(--home-primary-text-color); + } + } +} \ No newline at end of file diff --git a/styles/layout/landing/_hero.scss b/styles/layout/landing/_hero.scss new file mode 100644 index 0000000000..60a6db5fbc --- /dev/null +++ b/styles/layout/landing/_hero.scss @@ -0,0 +1,22 @@ +.landing-hero { + .p-tabmenu .p-tabmenu-nav .p-tabmenuitem .p-menuitem-link { + background: transparent; + } + + .box { + box-shadow: var(--home-card-shadow); + } + + .p-datepicker, .p-datepicker-header { + background: transparent; + border-color: transparent; + } +} + +@media screen and (min-width: 1660px) { + .landing-hero { + width: 1504px !important; + margin-left: auto !important; + margin-right: auto !important; + } +} \ No newline at end of file diff --git a/styles/layout/landing/_landing.scss b/styles/layout/landing/_landing.scss new file mode 100644 index 0000000000..a02515e118 --- /dev/null +++ b/styles/layout/landing/_landing.scss @@ -0,0 +1,14 @@ +$landingBreakpointMD: 767px; +$landingBreakpointLG: 991px; +$landingBreakpointXL: 1199px; + +@import 'http://github.com/_mixins'; +@import 'http://github.com/_main'; +@import 'http://github.com/_hero'; +@import 'http://github.com/_users'; +@import 'http://github.com/_getstarted'; +@import 'http://github.com/_themes'; +@import 'http://github.com/_blocks'; +@import 'http://github.com/_templates'; +@import 'http://github.com/_features'; +@import 'http://github.com/_footer'; diff --git a/styles/layout/landing/_main.scss b/styles/layout/landing/_main.scss new file mode 100644 index 0000000000..2d88aaa389 --- /dev/null +++ b/styles/layout/landing/_main.scss @@ -0,0 +1,182 @@ +.landing { + background-color: var(--home-bg); + scroll-behavior: smooth; + padding-top: 4rem; + + .box { + border: 1px solid var(--home-border-color); + border-radius: 10px; + background-color: var(--home-box-bg); + position: relative; + z-index: 0; + + &::before, + &::after { + content: ""; + position: absolute; + top: -2px; + left: -2px; + right: -2px; + bottom: -2px; + border: 2px solid var(--home-box-ring-color); + transition: all .5s; + animation: clippath 3s infinite linear; + border-radius: 10px; + opacity: 0; + z-index: -1; + } + + &::after { + animation: clippath 3s infinite -1.5s linear; + } + + &:hover { + &::before, + &::after { + opacity: 1; + } + } + } + + @keyframes clippath { + 0%, + 100% { + clip-path: inset(0 0 98% 0); + } + + 25% { + clip-path: inset(0 98% 0 0); + } + 50% { + clip-path: inset(98% 0 0 0); + } + 75% { + clip-path: inset(0 0 0 98%); + } + } + + .linkbox { + transition: background-color .2s, border-color .2s; + display: inline-flex; + align-items: center; + color: var(--home-linkbox-text-color); + padding: 0.5rem 1rem; + border: var(--home-linkbox-border); + background-color: var(--home-linkbox-bg); + border-radius: 10px; + cursor: pointer; + + @include focus-visible(); + + &:hover { + background: var(--home-linkbox-hover-bg); + } + + &.active { + background: var(--home-highlight-color); + color: var(--home-highlight-fore-color); + + &:hover { + background: var(--home-highlight-darker-color); + } + } + } + + .section-header { + font-size: 2rem; + color: var(--home-primary-text-color); + font-weight: 700; + text-align: center; + padding: 0 2rem; + } + + .section-detail { + text-align: center; + color: var(--home-secondary-text-color); + font-weight: 500; + font-size: 1.25rem; + margin: 1.5rem 0 0 0; + padding: 0 2rem; + } + + .section-divider { + border: 1px solid var(--home-border-color); + height: 1px; + border-bottom: 0 none; + overflow: hidden; + } + + &.layout-news-active { + padding-top: 6rem; + } +} + +.text-secondary { + color: var(--home-secondary-text-color); +} + +.hover\:surface-hover:hover { + background-color: var(--surface-hover); +} + +.landing-footer-container { + max-width: 1250px !important; + margin-left: auto !important; + margin-right: auto !important; +} + +.animated-text { + position: relative; + color: var(--home-text-color); + padding: 0.25rem 0.5rem; + border-radius: var(--border-radius); + display: inline-block; + width: 14.45rem; + + &::before { + border-radius: var(--border-radius); + animation: color-animation 2s linear infinite; + background-size: auto auto; + background-clip: border-box; + background-size: 200% auto; + content: ""; + width: 14.45rem; + height: 1.5rem; + position: absolute; + z-index: 0; + background-image: linear-gradient(-225deg, var(--blue-400) 30%, var(--cyan-400) 60%, var(--purple-400) 80%); + filter: blur(24px); + opacity: 0.6; + } + + > span { + position: relative; + z-index: 3; + background-image: linear-gradient(-225deg, var(--blue-400) 30%, var(--cyan-400) 60%, var(--purple-400) 80%); + animation: color-animation 2s linear infinite; + background-size: auto auto; + background-clip: border-box; + background-size: 200% auto; + background-clip: text; + text-fill-color: transparent; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } +} + +@keyframes color-animation { + 40%, + 100% { + background-position: -200% center; + } +} + +@keyframes scroll { + 0% { + transform: translateX(0%); + } + + 100% { + transform: translateX(calc(-100% - 3rem)); + } +} \ No newline at end of file diff --git a/styles/layout/landing/_templates.scss b/styles/layout/landing/_templates.scss new file mode 100644 index 0000000000..b83757e2f1 --- /dev/null +++ b/styles/layout/landing/_templates.scss @@ -0,0 +1,251 @@ +.landing-templates { + overflow: hidden; + background: var(--home-templates-bg); + + .templates { + transform: rotateX(55deg) rotateY(0deg) rotateZ(-45deg); + position: relative; + z-index: 1; + + .template-block { + width: 504px; + height: 257px; + background-size: cover; + border-radius: 6px; + overflow: hidden; + box-shadow: var(--home-templates-block-shadow); + border-left: var(--home-templates-block-border-left); + border-bottom: var(--home-templates-block-border-bottom); + position: relative; + z-index: 1; + transition: 1.5s; + opacity:0; + visibility: hidden; + + &.block-1 { + animation: animated-block-1 2s ease-in-out alternate infinite; + } + + &.block-2 { + animation: animated-block-2 2s 0.2s ease-in-out alternate infinite; + } + + &.block-middle { + transform: scale(0.9); + } + + &.block-3 { + animation: animated-block-1 2s 0.4s ease-in-out alternate infinite; + } + + &.block-4 { + animation: animated-block-2 2s 0.6s ease-in-out alternate infinite; + } + + &.block-5 { + animation: animated-block-1 2s 0.8s ease-in-out alternate infinite; + } + + &.block-6 { + animation: animated-block-2 2s 1s ease-in-out alternate infinite; + } + + &:hover { + &:before { + opacity: 1; + } + + .templates-btn { + transform: scale(1); + opacity: 1; + visibility: visible; + } + } + + &:before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: -1; + transition: 0.4s; + opacity: 0; + background-color: var(--home-templates-block-hover-bg); + } + + .templates-btn { + transition: 0.4s; + opacity: 0; + visibility: hidden; + transform: scale(0.4); + background: var(--home-templates-btn-bg); + border-radius: 30px; + padding: 8px 10px; + color: var(--home-templates-btn-text-color); + font-size: 14px; + text-decoration: none; + box-shadow: var(--home-templates-btn-shadow); + border-top: var(--home-templates-btn-border-top); + border-right: var(--home-templates-btn-border-right); + border-left: var(--home-templates-btn-border-left); + border-bottom: var(--home-templates-btn-border-bottom); + } + + &.border-none { + box-shadow: none; + + &:before { + display: none; + } + } + + .img-1 { + opacity: 0; + visibility: hidden; + transition: 1s; + transform: scale(0.4); + transition-delay: 0.8s; + } + + .img-2 { + opacity: 0; + visibility: hidden; + transition: 1s; + transform: scale(0.4); + transition-delay: 1.1s; + } + } + + .lines { + opacity: 0; + position: absolute; + top: 0; + left: 0; + width: 0%; + height: 100%; + z-index: -1; + transition: 2s; + + .top { + position: absolute; + top: 0; + left: 50%; + transform: translate(-50%, -25%); + z-index: -1; + display: flex; + width: 800px; + height: 200%; + align-items: center; + justify-content: space-between; + + span { + display: block; + width: 1px; + height: 100%; + background: var(--home-templates-line); + } + } + + .left { + position: absolute; + top: 50%; + left: 0; + transform: translateY(-50%); + z-index: -1; + width: 100%; + height: 800px; + display: flex; + align-items: center; + flex-direction: column; + justify-content: space-between; + + span { + display: block; + width: 100%; + height: 1px; + background: var(--home-templates-line); + } + } + } + + &.templates-animation { + .template-block { + opacity:1; + visibility: visible; + transition: none !important; + } + + .block-middle { + .theme-mode, img { + opacity: 1; + visibility: visible; + transform: scale(1); + transition: none !important; + } + } + + .lines { + opacity: 0.5; + width: 100%; + } + } + } +} +@media screen and (max-width: $landingBreakpointXL) { + .landing-templates { + .templates { + .template-block { + width: 336px; + height: 171px; + border: none !important; + } + } + } +} + +@media screen and (max-width: $landingBreakpointLG) { + .landing-templates { + .templates { + transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg); + .template-block { + width: 336px; + height: 171px; + border: none !important; + animation: none !important; + margin-right: 0 !important; + margin-left: 0 !important; + } + .lines { + display: none; + } + } + } +} +@media screen and (max-width: $landingBreakpointMD) { + .landing-templates { + .templates { + transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg); + .template-block { + width: 354px; + height: 180px; + + } + } + } +} + + +@keyframes animated-block-1 { + to { + transform: translateX(-10px); + } +} + +@keyframes animated-block-2 { + to { + transform: translateX(10px); + } +} + diff --git a/styles/layout/landing/_themes.scss b/styles/layout/landing/_themes.scss new file mode 100644 index 0000000000..2c0657dfe3 --- /dev/null +++ b/styles/layout/landing/_themes.scss @@ -0,0 +1,6 @@ +.landing-themes { + .table-container { + width: 1250px; + box-shadow: var(--home-card-shadow); + } +} \ No newline at end of file diff --git a/styles/layout/landing/_users.scss b/styles/layout/landing/_users.scss new file mode 100644 index 0000000000..5ebda5eafe --- /dev/null +++ b/styles/layout/landing/_users.scss @@ -0,0 +1,49 @@ +.landing-users { + .fade-right { + background: linear-gradient(to left, var(--home-bg), transparent); + } + .fade-left { + background: linear-gradient(to right, var(--home-bg), transparent); + } + .section-detail { + max-width: 1250px !important; + margin-left: auto !important; + margin-right: auto !important; + } + .users-container { + max-width: 1250px !important; + margin-left: auto !important; + margin-right: auto !important; + + .marquee-wrapper { + user-select: none; + gap: 3rem; + justify-content: center; + align-items: center; + flex-shrink: 0; + } + .marquee { + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: space-around; + gap: 3rem; + min-width: 100%; + animation: scroll 30s linear infinite; + + > div { + max-width: clamp(10rem, 1rem + 28vmin, 20rem); + aspect-ratio: 1; + display: flex; + justify-content: center; + align-items: center; + height: 8rem; + } + + &.marquee-reverse{ + animation-direction: reverse; + animation-delay: calc(30s / -2); + } + } + } +} \ No newline at end of file diff --git a/styles/layout/layout.scss b/styles/layout/layout.scss new file mode 100644 index 0000000000..5e8ef06211 --- /dev/null +++ b/styles/layout/layout.scss @@ -0,0 +1,31 @@ +@charset 'UTF-8'; + +@import 'http://github.com/variables/_variables'; +@import 'http://github.com/_mixins'; +@import 'http://github.com/_core'; +@import 'http://github.com/_glow'; +@import 'http://github.com/_topbar'; +@import 'http://github.com/_sidebar'; +@import 'http://github.com/_content'; +@import 'http://github.com/_news'; +@import 'http://github.com/_footer'; +@import 'http://github.com/_config'; +@import 'http://github.com/_code'; +@import 'http://github.com/_doc'; +@import 'http://github.com/_docsearch'; +@import 'http://github.com/_responsive'; +@import 'http://github.com/landing/_landing'; +@import 'http://github.com/templates/_apollo'; +@import 'http://github.com/templates/_atlantis'; +@import 'http://github.com/templates/_ultima'; +@import 'http://github.com/templates/_freya'; +@import 'http://github.com/templates/_verona'; +@import 'http://github.com/templates/_diamond'; +@import 'http://github.com/templates/_genesis'; +@import 'http://github.com/templates/_avalon'; +@import 'http://github.com/templates/_poseidon'; +@import 'http://github.com/templates/_babylon'; +@import 'http://github.com/templates/_california'; +@import 'http://github.com/templates/_sakai'; +@import 'http://github.com/templates/_roma'; +@import 'http://github.com/templates/_templates'; \ No newline at end of file diff --git a/styles/layout/templates/_apollo.scss b/styles/layout/templates/_apollo.scss new file mode 100644 index 0000000000..f513607b68 --- /dev/null +++ b/styles/layout/templates/_apollo.scss @@ -0,0 +1,32 @@ +.apollo { + .template { + &-hero { + + &-pattern { + width: 96rem; + height: auto; + position: absolute; + bottom: 0; + left: 0; + z-index: 6; + mix-blend-mode: overlay; + } + } + } + +} + +@media only screen and (max-width: 768px) { + .apollo { + .template { + &-hero { + &-pattern { + width: 90rem; + bottom: 20rem; + } + + } + } + + } +} \ No newline at end of file diff --git a/styles/layout/templates/_atlantis.scss b/styles/layout/templates/_atlantis.scss new file mode 100644 index 0000000000..91cfbdb8c8 --- /dev/null +++ b/styles/layout/templates/_atlantis.scss @@ -0,0 +1,49 @@ +.atlantis { + .template { + &-hero { + &-pattern { + width: 50rem; + height: auto; + position: absolute; + bottom: -7rem; + left: -7rem; + z-index: 6; + } + &-dashboard1, + &-dashboard2{ + border-radius: 1.12rem; + } + } + } + +} + +@media only screen and (max-width: 1200px) { + .atlantis { + .template{ + &-hero { + &-pattern { + width: 45rem; + bottom: -5.75rem; + left: -9.5rem; + } + } + } + + } +} + +@media only screen and (max-width: 768px) { + .atlantis { + .template{ + &-hero { + &-pattern { + width: 50rem; + bottom: 16.75rem; + left: -10.5rem; + } + } + } + + } +} \ No newline at end of file diff --git a/styles/layout/templates/_avalon.scss b/styles/layout/templates/_avalon.scss new file mode 100644 index 0000000000..9cd421985b --- /dev/null +++ b/styles/layout/templates/_avalon.scss @@ -0,0 +1,60 @@ +.avalon { + .template { + &-hero { + &-pattern { + width: 56rem; + height: auto; + position: absolute; + bottom: 0px; + left: -3.06; + z-index: 6; + + + } + &-rectangle{ + opacity: 0.5; + } + &-light{ + opacity: 0.75; + } + } + &-separator { + &-icon { + width: 7rem; + height: 3.5rem; + border-radius: 99px; + } + } + } + +} +@media only screen and (max-width: 1200px) { + .avalon { + .template{ + &-hero { + &-pattern { + width: 68rem; + height: auto; + bottom: -8rem; + left: -12rem; + } + } + } + + } +} +@media only screen and (max-width: 768px) { + .avalon { + .template{ + &-hero { + &-pattern { + width: 88rem; + height: auto; + bottom: 0rem; + left: -16rem; + } + } + } + + } +} \ No newline at end of file diff --git a/styles/layout/templates/_babylon.scss b/styles/layout/templates/_babylon.scss new file mode 100644 index 0000000000..a53e9f3dfb --- /dev/null +++ b/styles/layout/templates/_babylon.scss @@ -0,0 +1,49 @@ +.babylon { + .template { + &-hero { + &-pattern { + width: 100.3125rem; + height: auto; + position: absolute; + bottom: -23rem; + left: -15rem; + z-index: 6; + } + &-dashboard1, + &-dashboard2{ + width: 40rem; + } + } + } + +} +@media only screen and (max-width: 1200px) { + .babylon { + .template{ + &-hero { + &-pattern { + width: 72rem; + height: auto; + bottom: -16rem; + left: -20rem; + } + } + } + + } +} +@media only screen and (max-width: 768px) { + .babylon { + .template{ + &-hero { + &-pattern { + width: 100rem; + height: auto; + bottom: -21rem; + left: -24rem; + } + } + } + + } +} \ No newline at end of file diff --git a/styles/layout/templates/_california.scss b/styles/layout/templates/_california.scss new file mode 100644 index 0000000000..43f665a70f --- /dev/null +++ b/styles/layout/templates/_california.scss @@ -0,0 +1,49 @@ +.california { + .template { + &-hero { + &-pattern { + width: 70.3125rem; + height: auto; + position: absolute; + bottom: -1.2rem; + left: -8.65rem; + z-index: 6; + } + &-dashboard1, + &-dashboard2{ + width: 40rem; + } + } + } + +} +@media only screen and (max-width: 1200px) { + .california { + .template{ + &-hero { + &-pattern { + width: 64rem; + height: auto; + bottom: -1.2rem; + left: -10rem; + } + } + } + + } +} +@media only screen and (max-width: 768px) { + .california { + .template{ + &-hero { + &-pattern { + width: 92rem; + height: auto; + bottom: -1.2rem; + left: -16rem; + } + } + } + + } +} \ No newline at end of file diff --git a/styles/layout/templates/_diamond.scss b/styles/layout/templates/_diamond.scss new file mode 100644 index 0000000000..029f436cc0 --- /dev/null +++ b/styles/layout/templates/_diamond.scss @@ -0,0 +1,45 @@ +.diamond { + .template { + &-hero { + &-pattern { + width: 62.3125rem; + height: 44.8125rem; + position: absolute; + top: -3.62; + left: -3.06; + z-index: 6; + } + } + } +} + +@media only screen and (max-width: 1200px) { + .diamond { + .template{ + &-hero { + &-pattern { + width: 60rem; + height: auto; + bottom: -8rem; + left: -8rem; + } + } + } + + } +} +@media only screen and (max-width: 768px) { + .diamond { + .template{ + &-hero { + &-pattern { + width: 64rem; + height: auto; + bottom: 2rem; + left: -8rem; + } + } + } + + } +} \ No newline at end of file diff --git a/styles/layout/templates/_freya.scss b/styles/layout/templates/_freya.scss new file mode 100644 index 0000000000..8bc3734f64 --- /dev/null +++ b/styles/layout/templates/_freya.scss @@ -0,0 +1,33 @@ +.freya { + .template { + &-hero { + + &-pattern { + height: auto; + width: 45rem; + position: absolute; + bottom: -9rem; + left: 0rem; + z-index: 6; + } + } + } + +} + +@media only screen and (max-width: 768px) { + .freya { + .template { + &-hero { + + &-pattern { + width: 55rem; + height: auto; + bottom: -2rem; + left: 0; + } + } + } + + } +} \ No newline at end of file diff --git a/styles/layout/templates/_genesis.scss b/styles/layout/templates/_genesis.scss new file mode 100644 index 0000000000..2cbe8c208e --- /dev/null +++ b/styles/layout/templates/_genesis.scss @@ -0,0 +1,45 @@ +.genesis { + .template { + &-hero { + &-pattern { + width: 62.3125rem; + height: 44.8125rem; + position: absolute; + top: -3.62; + left: -3.06; + z-index: 6; + } + } + } +} + +@media only screen and (max-width: 1200px) { + .genesis { + .template{ + &-hero { + &-pattern { + width: 60rem; + height: auto; + bottom: -8rem; + left: -8rem; + } + } + } + + } +} +@media only screen and (max-width: 768px) { + .genesis { + .template{ + &-hero { + &-pattern { + width: 64rem; + height: auto; + bottom: 2rem; + left: -8rem; + } + } + } + + } +} \ No newline at end of file diff --git a/styles/layout/templates/_poseidon.scss b/styles/layout/templates/_poseidon.scss new file mode 100644 index 0000000000..0434c062e7 --- /dev/null +++ b/styles/layout/templates/_poseidon.scss @@ -0,0 +1,47 @@ +.poseidon { + .template { + &-hero { + &-pattern { + width: 102.3125rem; + height: auto; + position: absolute; + bottom: 0rem; + left: -26rem; + z-index: 6; + } + &-dashboard1, + &-dashboard2{ + width: 45rem; + } + } + } + +} +@media only screen and (max-width: 1200px) { + .poseidon { + .template{ + &-hero { + &-pattern { + height: auto; + bottom: 0rem; + left: -34rem; + } + } + } + + } +} +@media only screen and (max-width: 768px) { + .poseidon { + .template{ + &-hero { + &-pattern { + height: auto; + bottom: 21rem; + left: -35rem; + } + } + } + + } +} \ No newline at end of file diff --git a/styles/layout/templates/_roma.scss b/styles/layout/templates/_roma.scss new file mode 100644 index 0000000000..16b194cb2d --- /dev/null +++ b/styles/layout/templates/_roma.scss @@ -0,0 +1,60 @@ +.roma { + .template { + &-hero { + &-pattern { + width: 56rem; + height: auto; + position: absolute; + bottom: -0.5rem; + left: -4.06rem; + z-index: 6; + } + &-dashboard1, + &-dashboard2{ + width: 42rem; + } + } + &-separator { + &-icon { + width: 6rem; + height: 2.5rem; + border-radius: 99px; + svg{ + width: 4.2rem; + height: 4.2rem; + } + } + } + } + +} +@media only screen and (max-width: 1200px) { + .roma { + .template{ + &-hero { + &-pattern { + width: 68rem; + height: auto; + bottom: -8rem; + left: -12rem; + } + } + } + + } +} +@media only screen and (max-width: 768px) { + .roma { + .template{ + &-hero { + &-pattern { + width: 88rem; + height: auto; + bottom: 0rem; + left: -16rem; + } + } + } + + } +} \ No newline at end of file diff --git a/styles/layout/templates/_sakai.scss b/styles/layout/templates/_sakai.scss new file mode 100644 index 0000000000..fc75a58801 --- /dev/null +++ b/styles/layout/templates/_sakai.scss @@ -0,0 +1,54 @@ +.sakai { + .template { + &-hero { + &-pattern { + width: 72.3125rem; + height: auto; + position: absolute; + bottom: -1rem; + left: -1rem; + z-index: 6; + } + &-dashboard1, + &-dashboard2{ + width: 42rem; + } + } + &-features-horizontal-card{ + width: 30rem; + } + } + +} + +@media only screen and (max-width: 1200px) { + .sakai { + .template { + &-hero { + &-pattern { + width: 72.3125rem; + height: auto; + bottom: -1rem; + left: -2rem; + } + } + } + + } +} + +@media only screen and (max-width: 768px) { + .sakai { + .template { + &-hero { + &-pattern { + width: 64.3125rem; + height: auto; + bottom: 20rem; + left: -2rem; + } + } + } + + } +} \ No newline at end of file diff --git a/styles/layout/templates/_templates.scss b/styles/layout/templates/_templates.scss new file mode 100644 index 0000000000..522fb1acf9 --- /dev/null +++ b/styles/layout/templates/_templates.scss @@ -0,0 +1,1550 @@ +.template { + display: flex; + flex-direction: column; + gap: 2.19rem; +} + +// TEMPLATE YOUTUBE +.template { + &-youtube { + &-wrapper { + padding: 5rem 0; + background-color: var(--surface-card); + border-radius: 2rem; + } + + &-title { + h2 { + margin: 0; + text-align: center; + font-size: 3rem; + font-weight: 600; + color: var(--surface-900); + + @include mobile { + font-size: 1.5rem; + } + } + } + + &-video { + position: relative; + padding-bottom: 56.25%; + height: 100%; + overflow: hidden; + + iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border-radius: 0.5rem; + } + } + + &-description { + font-size: 1rem; + font-weight: 400; + line-height: 1.25rem; + text-align: center; + color: var(--surface-900); + width: 45rem; + margin: 1.25rem auto 0; + + @include mobile { + font-size: 1rem; + line-height: 1.25rem; + width: 96%; + } + } + + &-screen { + margin: 3rem auto 0; + width: 75%; + max-width: 70rem; + box-shadow: 0px 8px 32px 0px rgba(0, 0, 0, 0.02); + cursor: pointer; + position: relative; + background-color: var(--primary-100); + padding: 1.88rem 1.88rem 0; + border-radius: 1.5rem; + overflow: hidden; + + &-blur { + width: 100%; + position: absolute; + height: 100%; + top: 0; + left: 0; + z-index: 4; + backdrop-filter: blur(1.4px); + background: rgba(255, 255, 255, 0.06); + border-radius: inherit; + } + + &:hover &-play svg { + transform: scale(1.6); + } + + &-play { + position: absolute; + top: 50%; + left: 50%; + transform: translateX(-50%) translateY(-50%); + z-index: 5; + transform-origin: center; + + svg { + width: 180px; + height: 180px; + transition: all 0.2s ease; + } + } + + img { + width: 100%; + height: auto; + border-top-right-radius: 1rem; + border-top-left-radius: 1rem; + margin-bottom: -0.25rem; + box-shadow: 0px 0px 120px 0px rgba(0, 0, 0, 0.08); + } + } + } +} + +@media only screen and (max-width: 992px) { + .template { + &-youtube { + &-wrapper { + padding: 3rem 0 1.5rem; + border-radius: 1.25rem; + } + + &-title { + h2 { + @include mobile { + font-size: 1.5rem; + } + } + } + + &-description { + @include mobile { + font-size: 1rem; + line-height: 1.25rem; + width: 90%; + } + } + + &-screen { + width: 90%; + padding: 1.25rem 1.25rem 0; + border-radius: 1rem; + + &-blur { + backdrop-filter: blur(0.5px); + } + + &-play { + svg { + width: 100px; + height: 100px; + } + } + + img { + border-top-right-radius: 0.5rem; + border-top-left-radius: 0.5rem; + } + } + } + } +} + +// TEMPLATE FEATURES TYPE 1 +.template { + &-features-horizontal { + &-wrapper { + padding: 5rem 2rem; + border-radius: 2rem; + background: var(--surface-card, #FFF); + } + + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: 1.5rem; + margin: 0 auto; + width: fit-content; + + &-card { + width: 21.125rem; + padding: 1.25rem; + border-radius: 1.3125rem; + border: 1px solid var(--surface-border, #EEE); + background: var(--surface-0, #FFF); + + &-top { + width: 100%; + margin-bottom: 1.25rem; + background: var(--surface-100, #FFF); + border-radius: 0.65625rem; + overflow: hidden; + display: flex; + + img { + width: 100%; + border-radius: inherit; + } + } + + &-bottom { + &-title { + color: var(--surface-900); + font-size: 1.09375rem; + font-weight: 600; + line-height: 1.5; + margin-top: 0; + margin-bottom: 0.75rem; + } + + &-description { + color: var(--surface-600); + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + margin: 0; + } + } + } + } +} + +@media only screen and (max-width: 992px) { + .template { + &-features-horizontal { + &-wrapper { + padding: 2rem 1.25rem; + border-radius: 1.25rem; + } + + &-card { + padding: 1rem; + border-radius: 1rem; + } + } + } +} + +@media only screen and (max-width: 576px) { + .template { + &-features-horizontal { + &-wrapper { + padding: 1.5rem 1rem; + } + + width: 98%; + + &-card { + width: 100%; + } + } + } +} + +// TEMPLATE FEATURES TYPE 2 +.template { + &-features-vertical { + &-wrapper { + padding: 7rem 2rem; + border-radius: 2rem; + background: var(--surface-card, #FFF); + } + + margin: 0 auto; + width: 70%; + max-width: 52.75rem; + display: flex; + justify-content: center; + flex-wrap: wrap; + gap: 1.5rem; + + &-col { + display: flex; + flex-direction: column; + gap: 1.5rem; + flex: 1; + + &:last-child { + margin-top: 7.5rem; + } + } + + &-card { + width: 100%; + padding: 1.25rem; + border-radius: 1.3125rem; + border: 1px solid var(--surface-border); + background: var(--surface-0); + + &-image { + width: auto; + background: var(--surface-100); + border-radius: 0.65625rem; + display: flex; + + img { + border-radius: inherit; + width: 100%; + height: auto; + } + } + + h2 { + margin: 1.25rem 0 0; + color: var(--surface-900, var(--surface-900, #212121)); + font-size: 1.09375rem; + font-weight: 600; + line-height: 1.5; + } + + p { + margin: 0.75rem 0 0; + color: var(--surface-600, #757575); + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + } + } + } +} + +@media only screen and (max-width: 992px) { + .template { + &-features-vertical { + &-wrapper { + padding: 2.5rem 1rem; + border-radius: 1.25rem; + } + + max-width: 100%; + width: 100%; + align-items: center; + justify-content: center; + + &-card { + padding: 1rem; + border-radius: 1rem; + + &-img { + height: auto; + width: 100%; + border-radius: 0.5rem; + } + + &-withMargin { + margin-top: 0rem; + } + + &-withoutMargin { + margin-top: 0rem; + } + } + } + } +} + +@media only screen and (max-width: 768px) { + .template { + &-features-vertical { + width: 70%; + flex-direction: column; + + &-col { + &:last-child { + margin-top: 0rem; + } + } + } + } +} + +@media only screen and (max-width: 576px) { + .template { + &-features-vertical { + flex-direction: column; + width: 100%; + } + } +} + +// TEMPLATE RELATED +.template { + &-related { + &-wrapper { + padding: 5rem 2rem; + border-radius: 2rem; + background: var(--surface-card, #FFF); + } + + &-title { + text-align: center; + color: var(--surface-900); + font-size: 3rem; + font-weight: 600; + } + + &-slide { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; + width: fit-content; + margin: 3rem auto 0; + gap: 1.5rem; + + &-card { + border-radius: 1.3125rem; + border: 1px solid var(--surface-border, #EEE); + background: var(--surface-0, #FFF); + padding: 1.25rem; + display: flex; + img { + width: 18.625rem; + height: auto; + border-radius: 0.65625rem; + } + } + } + } +} + +@media only screen and (max-width: 992px) { + .template { + &-related { + &-wrapper { + padding: 2.5rem 1.25rem; + border-radius: 1.25rem; + } + + &-title { + padding-top: 1.5rem; + font-size: 1.5rem; + } + + &-slide { + gap: 2rem; + + width: 90%; + margin: 2rem auto 0; + + &-card { + border-radius: 1rem; + padding: 1rem; + max-width: 24rem; + + img { + width: 100%; + height: auto; + border-radius: 0.5rem; + } + } + } + } + } +} + +@media only screen and (max-width: 576px) { + .template { + &-related { + &-wrapper { + padding: 1.5rem 1rem; + } + + &-slide { + width: 98%; + max-width: 100%; + margin: 2rem auto 0; + + &-card { + max-width: 100%; + width: 100%; + } + } + } + } +} + +// TEMPLATE CONFIGURATION +.layout-dark { + .template { + &-configuration { + &-screen { + &-bottom { + background: var(--surface-card) !important; + + p { + color: var(--surface-900); + } + } + } + } + } +} + +.template { + &-configuration { + &-wrapper { + padding: 5rem 2rem; + border-radius: 2rem; + background: var(--surface-card, #FFF); + } + + padding: 2rem; + border-radius: 1.75rem; + border: 1px solid var(--surface-border, #EEE); + background: var(--surface-0, #FFF); + width: 49.25rem; + margin: 0 auto; + + &-title { + font-size: 1.53125rem; + font-weight: 700; + line-height: 1.8125rem; + color: var(--surface-900, var(--surface-900, #212121)); + } + + &-description { + color: var(--surface-600, #757575); + font-size: 1.09375rem; + font-weight: 400; + line-height: 1.64375rem; + margin: 0.75rem 0 0; + } + + &-screen { + border-radius: 0.875rem; + border: 1px solid var(--surface-border, #DFE7EF); + + &-top { + border-radius: 0.75rem 0.75rem 0rem 0rem; + background: var(--surface-0, #FFF); + padding: 0.25rem 1.5rem; + height: 3.5rem; + display: flex; + align-items: center; + gap: 0.5rem; + + &-circle { + width: 0.75rem; + height: 0.75rem; + border-radius: 999px; + } + + &-close { + background-color: #ED6B5D; + } + + &-minimize { + background-color: #F4BE50; + } + + &-zoom { + background-color: #61C554; + } + } + + &-bottom { + padding: 1.5rem; + background: var(--surface-900); + border-bottom-left-radius: inherit; + border-bottom-right-radius: inherit; + display: flex; + flex-direction: column; + gap: 1rem; + position: relative; + + p { + color: var(--surface-0); + font-size: 1rem; + font-weight: 400; + line-height: 1.0625rem; + margin: 0; + } + + &-logo { + width: 7.5rem; + height: 7.5rem; + position: absolute; + right: 1.5rem; + bottom: 1.38rem; + } + } + } + } +} + +@media only screen and (max-width: 992px) { + .template { + &-configuration { + &-wrapper { + padding: 2.5rem 1.25rem; + border-radius: 1.25rem; + } + + &-title { + font-size: 1.25rem; + } + + &-description { + font-size: 0.85rem; + line-height: 1.25rem; + } + + width: 80%; + padding: 1rem; + border-radius: 1rem; + + &-screen { + border-radius: 0.5rem; + + &-top { + border-radius: 0.5rem 0.5rem 0rem 0rem; + } + + &-bottom { + border-radius: 0rem 0rem 0.5rem 0.5rem; + + + } + } + } + } +} + +@media only screen and (max-width: 576px) { + .template { + &-configuration { + &-wrapper { + padding: 1.5rem 1rem; + } + + width: 98%; + + &-screen { + &-bottom { + &-logo { + width: 5.25rem; + height: 5.25rem; + right: 0.88rem; + bottom: 0.88rem; + } + } + } + } + } +} + +// TEMPLATE FEATURES ANIMATION +.template { + &-features-animation { + &-wrapper { + border-radius: 2rem; + background: var(--surface-card, #FFF); + padding: 5rem 2rem; + } + + &-title { + max-width: 45rem; + margin: 0 auto 3rem; + + h2 { + margin: 0; + color: var(--surface-900); + text-align: center; + font-size: 3rem; + font-weight: 600; + text-align: center; + } + } + + display: flex; + gap: 2.5rem; + width: fit-content; + margin: 0 auto; + padding: 1.75rem; + border-radius: 1.75rem; + border: 1px solid var(--surface-border, #EEE); + + &-left { + width: 100%; + max-width: 30rem; + display: flex; + flex-direction: column; + gap: 1rem; + + &-card { + padding: 1rem; + display: flex; + align-items: flex-start; + gap: 1.5rem; + cursor: pointer; + transition: all 0.2s ease; + + &-active { + border-radius: 0.75rem; + background: var(--surface-100, #F5F5F5); + transition: all 0.2s ease; + } + + &:hover { + border-radius: 0.75rem; + background: var(--surface-100, #F5F5F5); + } + + &:hover &-order { + + div { + &:nth-child(2) { + color: var(--surface-100); + + } + + &:nth-child(3) { + animation: FeaturesOrderAnimation 2.5s ease-in-out; + color: var(--primary-400); + } + } + } + + &-active &-order { + div { + &:nth-child(2) { + color: var(--surface-100); + + } + + &:nth-child(3) { + animation: FeaturesOrderAnimation 2.5s ease-in-out; + color: var(--primary-400); + } + } + } + + &-order { + width: 3.5rem; + height: 100%; + margin-top: -0.25rem; + position: relative; + transition: all 0.2s ease; + + div { + font-size: 2.5rem; + font-weight: 700; + position: absolute; + top: 0; + left: 0; + + &:nth-child(1) { + color: var(--primary-400); + -webkit-text-stroke: 1.2px var(--primary-400); + } + + &:nth-child(2) { + color: var(--surface-card); + transition: all 0.2s ease; + } + + &:nth-child(3) { + color: transparent; + } + } + } + + + + &-content { + flex: 1; + + h5 { + color: var(--surface-900, var(--color-surface-900, #212121)); + font-size: 1.09375rem; + font-weight: 600; + line-height: 1.5; + margin: 0; + } + + p { + color: var(--surface-600, #757575); + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + margin: 0.38rem 0 0; + + a { + color: var(--primary-400); + font-weight: 600; + + &:hover { + text-decoration: underline; + } + } + } + + } + } + } + + &-right { + width: 30rem; + height: fit-content; + border-radius: 0.875rem; + background-color: var(--surface-100); + display: flex; + overflow: hidden; + img { + width: 100%; + height: auto; + } + + &-inline { + width: 100%; + padding: 2rem 0; + border-radius: 0.75rem; + background: var(--surface-100); + position: relative; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + + &-image { + width: 90%; + overflow: hidden; + position: relative; + display: flex; + margin-top: 1.25rem; + border-radius: 0.5rem; + box-shadow: 0px 0px 48px 0px rgba(0, 0, 0, 0.08); + + img { + max-height: 24rem; + } + } + + &-tabs { + display: flex; + align-items: center; + gap: 0.25rem; + border-radius: 2.5rem; + border: 1px solid var(--surface-border); + background: var(--surface-0); + padding: 0.25rem; + width: 90%; + overflow: auto; + + button { + flex: 1; + width: 100%; + padding: 0.21875rem 0.5rem; + border-radius: 2.25rem; + color: var(--surface-900); + background: var(--surface-0); + border: none; + outline: none; + font-size: 0.75rem;; + font-weight: 500; + line-height: 1rem; + letter-spacing: -0.015rem; + cursor: pointer; + transition: all 0.15s ease; + + &:hover { + background: var(--surface-100); + } + + + } + + &-btnActive { + background: var(--surface-100) !important; + + } + } + } + } + } +} + +@keyframes FeaturesOrderAnimation { + 0% { + clip-path: polygon(0% 100%, 15% 100%, 32% 100%, 54% 100%, 70% 100%, 84% 100%, 100% 100%, + 100% 100%, 0% 100%); + } + + 20% { + clip-path: polygon(0% 45%, 15% 44%, 32% 50%, 54% 60%, 70% 61%, 84% 59%, 100% 52%, + 100% 100%, 0% 100%); + } + + 40% { + clip-path: polygon(0% 60%, 16% 65%, 34% 66%, 51% 62%, 67% 50%, 84% 45%, 100% 46%, 100% 100%, 0% 100%); + } + + 60% { + clip-path: polygon(0 51%, 14% 31%, 33% 42%, 49% 53%, 68% 55%, 85% 50%, 100% 60%, 100% 100%, 0 100%); + } + + 100% { + clip-path: polygon(0 0, 18% 0, 39% 0, 53% 0, 62% 0, 87% 0, 100% 0, 100% 100%, 0 100%); + } +} + +@media only screen and (max-width: 1440px) { + .template { + &-features-animation { + + &-left { + flex: 0.4; + } + + &-right { + flex: 0.6; + &-inline { + &-image { + width: 92%; + } + + &-tabs { + width: 92%; + + button { + padding: 0.21875rem 0.25rem; + } + } + } + } + + + } + } +} + +@media only screen and (max-width: 992px) { + .template { + &-features-animation { + &-wrapper { + padding: 2.5rem 1.25rem; + } + + &-title { + padding-top: 1.5rem; + + h2 { + font-size: 1.5rem; + } + } + + flex-direction: column-reverse; + gap: 1.31rem; + padding: 1rem; + border-radius: 1rem; + width: 70%; + + &-left { + width: 100%; + max-width: 100%; + } + + &-right { + border-radius: 0.75rem; + width: 100%; + min-width: 0rem; + max-width: 100%; + + &-inline { + height: fit-content; + padding: 2rem 0; + + &-image { + width: 90%; + margin: 0; + height: auto; + } + + &-tabs { + display: none; + } + } + } + } + } +} + +@media only screen and (max-width: 576px) { + .template { + &-features-animation { + &-wrapper { + padding: 1.5rem 1rem; + } + + width: 98%; + + + } + } +} + +// TEMPLATE HERO +.template { + display: flex; + flex-direction: column; + gap: 2.19rem; + + &-hero { + width: 100%; + height: 36.25rem; + background: var(--primary-500); + border-radius: 2rem; + position: relative; + overflow: hidden; + display: flex; + align-items: center; + &-card { + position: relative; + z-index: 15; + width: 29rem; + margin-left: 10rem; + + border-radius: 1.5rem; + border: 1px solid rgba(255, 255, 255, 0.24); + background: linear-gradient(180deg, rgba(170, 140, 255, 0.00) 0%, var(--primary-400)/0.8 100%), rgba(255, 255, 255, 0.10); + box-shadow: 0px 2px 4px 0px rgba(255, 255, 255, 0.24) inset, 0px 48px 80px 0px rgba(0, 0, 0, 0.08), 0px -5px 13px -2px rgba(255, 255, 255, 0.55) inset; + backdrop-filter: blur(2px); + padding: 2.25rem 1.75rem; + + + &-logo { + height: 2.5rem; + + svg { + height: 100%; + width: auto; + } + &-row{ + display: flex; + align-items: center; + gap: 1rem; + &-multipurpose{ + padding: 0.25rem 0.5rem; + font-weight: 500; + color: var(--surface-900); + background: var(--surface-0); + border-radius: 0.5rem; + line-height: 1.5rem; + } + } + } + + p { + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + margin: 1rem 0 0; + color: var(--surface-0); + } + + &-buttons { + display: flex; + align-items: center; + gap: 1rem; + margin-top: 2rem; + + a { + text-decoration: none; + height: 2.5rem; + flex: 1; + border-radius: 3rem; + + font-size: 1rem; + font-weight: 700; + line-height: 1.0625rem; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + } + + &-btn1 { + border: 1px solid #212121; + background: #212121; + color: white; + + &:hover { + border-color: #444444; + background-color: #444444; + } + } + + &-btn2 { + background-color: var(--primary-600); + border-color: var(--primary-600); + + &:hover { + background-color: var(--primary-700); + border-color: var(--primary-700); + } + } + + } + + &-links { + margin-top: 1rem; + display: flex; + align-items: center; + gap: 1rem; + + a { + display: flex; + align-items: center; + gap: 0.5rem; + color: var(--surface-0); + + span { + font-size: 1rem;; + line-height: normal; + + &:hover { + text-decoration-line: underline; + } + } + } + } + } + + &-rectangle { + position: absolute; + top: 0rem; + left: -8rem; + z-index: 4; + height: 100%; + width: auto; + } + + &-light { + position: absolute; + top: -4rem; + left: 6rem; + z-index: 5; + + } + + &-dashboard1 { + z-index: 9; + position: absolute; + top: 2.02rem; + left: 60rem; + width: 37.875rem; + filter: drop-shadow(0px 0px 43.65px rgba(0, 0, 0, 0.12)); + border-radius: 0.25rem; + } + + &-dashboard2 { + z-index: 8; + position: absolute; + top: 2.02rem; + left: 42rem; + width: 37.875rem; + filter: drop-shadow(0px 0px 43.65px rgba(0, 0, 0, 0.12)); + border-radius: 0.25rem; + } + } + +} + +@media only screen and (max-width: 1440px) { + .template { + &-hero { + height: 32.25rem; + + &-card { + margin-left: 3.5rem; + padding: 2rem 1.5rem; + border-radius: 1.25rem; + width: 26.25rem; + } + + &-rectangle { + left: -8rem; + } + + &-light { + left: 2rem; + } + + &-dashboard1 { + top: 2.5rem; + left: 44rem; + width: 36rem; + } + + &-dashboard2 { + top: 2.5rem; + left: 32rem; + width: 36rem; + } + } + } +} + +@media only screen and (max-width: 768px) { + .template { + &-hero { + height: 53.25rem; + padding: 7.5rem 1.25rem 1.25rem; + border-radius: 1rem; + align-items: baseline; + &-card { + width: 100%; + margin-left: 0rem; + padding: 2rem 1.5rem; + border-radius: 1.25rem; + margin-top: -4rem; + &-links { + justify-content: center; + } + } + + &-rectangle { + left: -2rem; + height: auto; + width: 80rem; + } + + &-light { + left: 50%; + transform: translateX(-50%); + } + + &-dashboard1 { + top: 28.5rem; + left: 12rem; + width: 80%; + } + + &-dashboard2 { + top: 28.5rem; + left: 1.5rem; + width: 80%; + } + + } + + } +} + +@media only screen and (max-width: 576px) { + .template { + &-hero { + &-rectangle { + left: -10rem; + } + + &-dashboard1 { + width: 36rem; + } + + &-dashboard2 { + width: 36rem; + } + } + + } +} + +//TEMPLATE INTRO +.template { + &-intro { + border-radius: 2rem; + background: var(--surface-card, #FFF); + padding: 5rem 2rem; + + h2 { + color: var(--surface-900); + text-align: center; + font-size: 3.42857rem; + font-weight: 600; + line-height: 4rem; + margin: 0; + } + + p { + color: var(--surface-900); + text-align: center; + font-size: 1rem; + font-weight: 400; + line-height: 1.5rem; + max-width: 50rem; + margin: 1.5rem auto 0; + } + + &-image { + position: relative; + background-color: var(--primary-600); + max-width: 75rem; + margin: 3.5rem auto 0; + border-radius: 1.15rem; + display: flex; + + &::after { + content: ''; + position: absolute; + inset: 0; + z-index: 5; + background-color: var(--primary-100); + opacity: 0.15; + border-radius: inherit; + } + + img { + width: 100%; + height: auto; + } + } + } +} + + +@media only screen and (max-width: 992px) { + .template { + &-intro { + padding: 2.5rem 1.25rem; + + h2 { + font-size: 1.5rem; + line-height: normal; + } + + p { + line-height: 1.5; + margin: 1rem auto 0; + font-size: 1rem; + } + } + } +} + +@media only screen and (max-width: 576px) { + .template { + &-intro { + padding: 3rem 1rem; + + h2 { + font-size: 1.5rem; + } + + &-image { + margin: 1.5rem auto 0; + } + } + } +} + + +// TEMPALTE SEPARATOR +.template { + &-separator { + gap: 1.5rem; + width: 100%; + display: flex; + align-items: center; + justify-content: center; + + &::before { + content: ''; + flex: 1; + height: 1px; + background-color: var(--surface-border) + } + + &::after { + content: ''; + flex: 1; + height: 1px; + background-color: var(--surface-border) + } + + &-icon { + width: 3rem; + height: 3rem; + display: flex; + align-items: center; + justify-content: center; + border: 1px solid var(--surface-border); + border-radius: 100%; + background-color: var(--surface-card); + } + } + + +} + +//TEMPLATE LICENCE + +.template { + &-license { + &-wrapper { + padding: 5rem 2rem; + border-radius: 2rem; + background: var(--surface-card, #FFF); + } + + &-cards { + display: flex; + flex-wrap: wrap; + align-items: flex-start; + justify-content: center; + gap: 1.5rem; + } + + &-card { + width: 21.25rem; + padding: 1.5rem; + border-radius: 1rem; + border: 1px solid var(--surface-200); + background-color: var(--surface-card); + span { + color: var(--surface-900); + font-weight: 600; + line-height: 1.5rem; + } + + h2 { + color: var(--surface-900); + font-size: 2.5rem; + font-weight: 600; + line-height: 3rem; + letter-spacing: -0.025rem; + margin: 1rem 0 1.25rem; + } + + .discount { + color: var(--text-color-secondary); + text-decoration: line-through; + } + + button { + padding: 0.25rem 0.75rem; + border-radius: 0.375rem; + background: var(--surface-900); + text-align: center; + width: 100%; + outline: none; + border: none; + min-height: 2rem; + cursor: pointer; + transition: all 0.2s ease; + + &:hover { + background: var(--surface-700); + } + + color: var(--surface-0); + text-align: center; + font-size: 1rem; + font-weight: 500; + line-height: 1.5rem; + letter-spacing: -0.00875rem; + } + + &-included { + display: flex; + flex-direction: column; + gap: 0.5rem; + margin-bottom: 1.25rem; + + p { + color: var(--surface-500); + font-size: 1rem; + font-weight: 400; + line-height: 1.5rem; + letter-spacing: -0.00875rem; + margin: 0; + } + } + } + + &-description { + color: var(--surface-500); + text-align: center; + font-size: 1rem; + line-height: 1.5rem; + letter-spacing: -0.00875rem; + max-width: 46.75rem; + margin: 1.5rem auto 0; + } + + &-visit { + font-size: 1rem; + font-weight: 400; + line-height: 1.5rem; + letter-spacing: -0.00875rem; + text-align: center; + margin: 1.5rem auto 0; + + a { + color: var(--primary-500); + cursor: pointer; + transition: all 0.2s ease; + + &:hover { + text-decoration-line: underline; + } + } + } + } +} + +@media only screen and (max-width: 992px) { + .template { + &-license { + &-wrapper { + padding: 2.5rem 1.25rem; + border-radius: 1.25rem; + } + &-description{ + max-width: 36.5rem; + } + } + } +} +@media only screen and (max-width: 721px) { + .template { + &-license { + &-card { + width: 80%; + } + &-description{ + max-width: 32rem; + } + } + } +} + +@media only screen and (max-width: 576px) { + .template { + &-license { + &-wrapper { + padding: 1.5rem 1rem; + } + + &-card { + width: 100%; + padding: 1.25rem; + border-radius: 0.75rem; + } + } + } +} diff --git a/styles/layout/templates/_ultima.scss b/styles/layout/templates/_ultima.scss new file mode 100644 index 0000000000..ca1c94d1db --- /dev/null +++ b/styles/layout/templates/_ultima.scss @@ -0,0 +1,39 @@ +.ultima { + .template { + &-hero { + + &-pattern { + width: 80rem; + height: auto; + position: absolute; + bottom: -26rem; + left: -22.5rem; + z-index: 6; + mix-blend-mode: overlay; + } + + &-dashboard1, + &-dashboard2{ + border-radius: 0.42857rem; + } + + } + } + +} + +@media only screen and (max-width: 768px) { + .ultima { + .template { + &-hero { + + &-pattern { + width: 90rem; + left: -25rem; + bottom: -10rem; + } + } + } + + } +} \ No newline at end of file diff --git a/styles/layout/templates/_verona.scss b/styles/layout/templates/_verona.scss new file mode 100644 index 0000000000..d0c05d2402 --- /dev/null +++ b/styles/layout/templates/_verona.scss @@ -0,0 +1,48 @@ +.verona { + .template { + &-hero { + + &-pattern { + width: 110rem; + height: auto; + position: absolute; + bottom: -2rem; + left: -1rem; + z-index: 6; + } + + } + } + +} + +@media only screen and (max-width: 1200px) { + .verona { + .template { + &-hero { + &-pattern { + width: 120rem; + left: -7.5rem; + bottom: -10rem; + } + } + } + + } +} + +@media only screen and (max-width: 768px) { + .verona { + .template { + &-hero { + + &-pattern { + width: 124rem; + left: -8.5rem; + bottom: 0; + } + } + } + + } +} \ No newline at end of file diff --git a/styles/layout/variables/_variables.scss b/styles/layout/variables/_variables.scss new file mode 100644 index 0000000000..82efa8da7d --- /dev/null +++ b/styles/layout/variables/_variables.scss @@ -0,0 +1,4 @@ +@import 'http://github.com/landing/_light'; +@import 'http://github.com/landing/_dark'; +@import 'http://github.com/main/_light'; +@import 'http://github.com/main/_dark'; \ No newline at end of file diff --git a/styles/layout/variables/landing/_dark.scss b/styles/layout/variables/landing/_dark.scss new file mode 100644 index 0000000000..ac227326bf --- /dev/null +++ b/styles/layout/variables/landing/_dark.scss @@ -0,0 +1,54 @@ +.landing.layout-dark { + --home-highlight-color:#22d3ee; + --home-highlight-darker-color:#67e8f9; + --home-highlight-fore-color:#030712; + --home-bg:#111827; + --home-border-color:#424b57; + --home-primary-text-color:#ffffff; + --home-secondary-text-color:rgba(255,255,255,.6); + --home-card-shadow:0px 50px 100px rgba(0, 0, 0, 0.25); + --home-box-bg:#1f2937; + --home-linkbox-bg:rgba(255, 255, 255, .05); + --home-linkbox-border:1px solid rgba(255, 255, 255, .1); + --home-linkbox-text-color:#ffffff; + --home-linkbox-hover-bg:rgba(255, 255, 255, .1); + --home-blocks-bg:transparent; + --home-blocks-block-bg:#111827; + --home-blocks-block-shadow:0px 5px 10px 0px rgba(0, 0, 0, 0.25) , 0px 4px 25px rgba(0, 0, 0, 0.25); + --home-blocks-border-left:5px solid #1f2937; + --home-blocks-border-bottom:7px solid #1f2937; + --home-blocks-border:1px solid #424b57; + --home-blocks-sidebar-bg:#1f2937; + --home-blocks-list-bg:#28323f; + --home-blocks-main-bg:#111827; + --home-blocks-main-border:1px solid #424b57; + --home-blocks-item-bg:#1f2937; + --home-blocks-image-bg:#28323f; + --home-blocks-text-color:#4b5563; + --home-blocks-active-shadow:0px 30px 50px 0px rgba(0, 0, 0, 0.25); + --home-blocks-active-border-top:1px solid #424b57; + --home-blocks-active-border-right:1px solid #424b57; + --home-blocks-active-border-bottom:6px solid #424b57; + --home-blocks-active-border-left:4px solid #424b57; + --home-blocks-animation-shadow:0px 30px 50px 20px rgba(0, 0, 0, 0.25); + --home-blocks-tablebar-bg:#4b5563; + --home-blocks-bar-bg:#4b5563; + --home-blocks-bar-button-bg:#ffffff; + --home-blocks-circle-bg:#4b5563; + --home-templates-bg:transparent; + --home-templates-block-shadow:0px 5px 10px 0px rgba(0, 0, 0, 0.25); + --home-templates-block-border-left:5px solid #424b57; + --home-templates-block-border-bottom:7px solid #424b57; + --home-templates-line:rgba(255,255,255,.1); + --home-templates-block-hover-bg:rgba(255,255,255,.1); + --home-templates-btn-bg:#1f2937; + --home-templates-btn-text-color:#ffffff; + --home-templates-btn-shadow:0px 10px 15px 0px rgba(0, 0, 0, 0.25); + --home-templates-btn-border-top:1px solid #424b57; + --home-templates-btn-border-right:1px solid #424b57; + --home-templates-btn-border-bottom:4px solid #424b57; + --home-templates-btn-border-left:3px solid #424b57; + --home-features-card-shadow: none; + --home-box-ring-color: rgba(34, 211, 238, .3) + +} \ No newline at end of file diff --git a/styles/layout/variables/landing/_light.scss b/styles/layout/variables/landing/_light.scss new file mode 100644 index 0000000000..d2f9b82f9d --- /dev/null +++ b/styles/layout/variables/landing/_light.scss @@ -0,0 +1,53 @@ +.landing.layout-light { + --home-highlight-color:#06b6d4; + --home-highlight-darker-color:#0891b2; + --home-highlight-fore-color:#ffffff; + --home-bg:#F9FAFB; + --home-border-color:rgba(0,0,0,.1); + --home-primary-text-color:#030712; + --home-secondary-text-color:#6b7280; + --home-card-shadow:0px 7px 15px 0px rgba(0, 0, 0, 0.02), 0px 28px 28px 0px rgba(0, 0, 0, 0.02), 0px 63px 38px 0px rgba(0, 0, 0, 0.01); + --home-box-bg:#ffffff; + --home-linkbox-bg:#ffffff; + --home-linkbox-border:1px solid rgba(0,0,0,.1); + --home-linkbox-text-color:#030712; + --home-linkbox-hover-bg:#e5e7eb; + --home-blocks-bg:transparent; + --home-blocks-block-bg:#ffffff; + --home-blocks-block-shadow:-10px 4px 10px 0px rgba(0, 0, 0, .1), -10px 4px 25px rgba(0, 0, 0, .1); + --home-blocks-border-left:5px solid rgba(0,0,0,.1); + --home-blocks-border-bottom:7px solid rgba(0,0,0,.1); + --home-blocks-border:1px solid rgba(0,0,0,.1); + --home-blocks-sidebar-bg:#f3f4f6; + --home-blocks-list-bg:#f9fafb; + --home-blocks-main-bg:#ffffff; + --home-blocks-main-border:1px solid rgba(0,0,0,.1); + --home-blocks-item-bg:#f4f5f7; + --home-blocks-image-bg:#e5e7eb; + --home-blocks-text-color:#d1d5db; + --home-blocks-active-shadow:0px 30px 50px 0px rgba(0, 0, 0, .1); + --home-blocks-active-border-top:1px solid rgba(0,0,0,.07); + --home-blocks-active-border-right:1px solid rgba(0,0,0,.07); + --home-blocks-active-border-bottom:4px solid rgba(0,0,0,.07); + --home-blocks-active-border-left:4px solid rgba(0,0,0,.07); + --home-blocks-animation-shadow:0px 30px 50px 10px rgba(0, 0, 0, .2); + --home-blocks-tablebar-bg:#d1d5db; + --home-blocks-bar-bg:#d1d5db; + --home-blocks-bar-button-bg:#ffffff; + --home-blocks-circle-bg:#c7cad0; + --home-templates-bg:transparent; + --home-templates-block-shadow:0px 5px 10px 0px rgba(0,0,0,.1); + --home-templates-block-border-left:5px solid #d1d5db; + --home-templates-block-border-bottom:7px solid #d1d5db; + --home-templates-line:rgba(0,0,0,.1); + --home-templates-block-hover-bg:rgba(0, 0, 0, 0.2); + --home-templates-btn-bg:rgba(0, 0, 0, 0.5); + --home-templates-btn-text-color:#ffffff; + --home-templates-btn-shadow:0px 10px 15px 0px rgba(0, 0, 0, 0.5); + --home-templates-btn-border-top:1px solid rgba(0,0,0,.1); + --home-templates-btn-border-right:1px solid rgba(0,0,0,.1); + --home-templates-btn-border-bottom:4px solid rgba(0,0,0,.1); + --home-templates-btn-border-left:3px solid rgba(0,0,0,.1); + --home-features-card-shadow: 0px 7px 15px 0px rgba(0, 0, 0, 0.02), 0px 28px 28px 0px rgba(0, 0, 0, 0.02), 0px 63px 38px 0px rgba(0, 0, 0, 0.01); + --home-box-ring-color: var(--primary-200); +} \ No newline at end of file diff --git a/styles/layout/variables/main/_dark.scss b/styles/layout/variables/main/_dark.scss new file mode 100644 index 0000000000..f108b9bf5b --- /dev/null +++ b/styles/layout/variables/main/_dark.scss @@ -0,0 +1,15 @@ +.layout-dark { + --topbar-sticky-bg:rgba(0,0,0,.3); + --card-border: 0 none; + --card-bg: var(--surface-card); + --glow-image: url(https://www.primefaces.org/cdn/primereact/images/layout/pattern.png), radial-gradient(50% 50% at center -25px, var(--primary-color) 0%, #000000 100%); + --glow-blend: hard-light, color-dodge; + --topbar-border: var(--surface-border); + --mobile-menu-bg: rgba(0,0,0,.3); + --demo-code-bg: var(--surface-card); + --demo-code-button-color: var(--surface-500); + --demo-code-button-hover-bg: rgba(255,255,255,.1); + --demo-code-button-hover-color: var(--surface-700); + --doc-highlight-text-bg: var(--highlight-bg); + --doc-highlight-text-color: var(--highlight-text-color); +} \ No newline at end of file diff --git a/styles/layout/variables/main/_light.scss b/styles/layout/variables/main/_light.scss new file mode 100644 index 0000000000..1af90c7aea --- /dev/null +++ b/styles/layout/variables/main/_light.scss @@ -0,0 +1,15 @@ +.layout-light { + --topbar-sticky-bg:rgba(255,255,255,.7); + --card-border: 1px solid var(--surface-border); + --card-bg: var(--surface-card); + --glow-image: url(https://www.primefaces.org/cdn/primereact/images/layout/pattern.png), radial-gradient(50% 50% at center top, var(--primary-100) 0%, #ffffff 100%); + --glow-blend: hard-light, multiply; + --topbar-border: rgba(0,0,0,.05); + --mobile-menu-bg: var(--surface-overlay); + --demo-code-bg: var(--surface-700); + --demo-code-button-color: var(--surface-300); + --demo-code-button-hover-bg: rgba(255,255,255,.1); + --demo-code-button-hover-color: var(--surface-100); + --doc-highlight-text-bg: var(--primary-100); + --doc-highlight-text-color: var(--primary-900); +} \ No newline at end of file diff --git a/styles/primereact.css b/styles/primereact.css new file mode 100644 index 0000000000..0311d30612 --- /dev/null +++ b/styles/primereact.css @@ -0,0 +1,3 @@ +/** + * The primereact[.min].css has been deprecated. In order not to break existing projects, it is currently included in the build as an empty file. + */ \ No newline at end of file