@vaadin/crud
Advanced tools
Comparing version 24.7.0-alpha2 to 24.7.0-alpha3
{ | ||
"name": "@vaadin/crud", | ||
"version": "24.7.0-alpha2", | ||
"version": "24.7.0-alpha3", | ||
"publishConfig": { | ||
@@ -40,18 +40,18 @@ "access": "public" | ||
"@polymer/polymer": "^3.0.0", | ||
"@vaadin/a11y-base": "24.7.0-alpha2", | ||
"@vaadin/button": "24.7.0-alpha2", | ||
"@vaadin/component-base": "24.7.0-alpha2", | ||
"@vaadin/confirm-dialog": "24.7.0-alpha2", | ||
"@vaadin/dialog": "24.7.0-alpha2", | ||
"@vaadin/form-layout": "24.7.0-alpha2", | ||
"@vaadin/grid": "24.7.0-alpha2", | ||
"@vaadin/overlay": "24.7.0-alpha2", | ||
"@vaadin/text-field": "24.7.0-alpha2", | ||
"@vaadin/vaadin-lumo-styles": "24.7.0-alpha2", | ||
"@vaadin/vaadin-material-styles": "24.7.0-alpha2", | ||
"@vaadin/vaadin-themable-mixin": "24.7.0-alpha2" | ||
"@vaadin/a11y-base": "24.7.0-alpha3", | ||
"@vaadin/button": "24.7.0-alpha3", | ||
"@vaadin/component-base": "24.7.0-alpha3", | ||
"@vaadin/confirm-dialog": "24.7.0-alpha3", | ||
"@vaadin/dialog": "24.7.0-alpha3", | ||
"@vaadin/form-layout": "24.7.0-alpha3", | ||
"@vaadin/grid": "24.7.0-alpha3", | ||
"@vaadin/overlay": "24.7.0-alpha3", | ||
"@vaadin/text-field": "24.7.0-alpha3", | ||
"@vaadin/vaadin-lumo-styles": "24.7.0-alpha3", | ||
"@vaadin/vaadin-material-styles": "24.7.0-alpha3", | ||
"@vaadin/vaadin-themable-mixin": "24.7.0-alpha3" | ||
}, | ||
"devDependencies": { | ||
"@vaadin/chai-plugins": "24.7.0-alpha2", | ||
"@vaadin/testing-helpers": "^1.0.0", | ||
"@vaadin/chai-plugins": "24.7.0-alpha3", | ||
"@vaadin/testing-helpers": "^1.1.0", | ||
"sinon": "^18.0.0" | ||
@@ -64,3 +64,3 @@ }, | ||
], | ||
"gitHead": "e2523f9b4abc5a9586fb758166f823dc40c399dd" | ||
"gitHead": "dd5cfad6c9b54e676f5b10dffba2233775378f40" | ||
} |
@@ -14,2 +14,3 @@ /** | ||
import { GridColumn } from '@vaadin/grid/src/vaadin-grid-column.js'; | ||
import { editColumnDefaultRenderer } from './vaadin-crud-helpers.js'; | ||
@@ -73,17 +74,4 @@ /** | ||
*/ | ||
_defaultRenderer(root, _column) { | ||
let edit = root.firstElementChild; | ||
if (!edit) { | ||
edit = document.createElement('vaadin-crud-edit'); | ||
if (this.hasAttribute('theme')) { | ||
edit.setAttribute('theme', this.getAttribute('theme')); | ||
} | ||
root.appendChild(edit); | ||
} | ||
if (this.ariaLabel) { | ||
edit.setAttribute('aria-label', this.ariaLabel); | ||
} else { | ||
edit.removeAttribute('aria-label'); | ||
} | ||
_defaultRenderer(root, column) { | ||
editColumnDefaultRenderer(root, column); | ||
} | ||
@@ -90,0 +78,0 @@ } |
@@ -14,3 +14,3 @@ /** | ||
import { FormLayout } from '@vaadin/form-layout/src/vaadin-form-layout.js'; | ||
import { capitalize } from './vaadin-crud-helpers.js'; | ||
import { createField, createFields } from './vaadin-crud-helpers.js'; | ||
import { IncludedMixin } from './vaadin-crud-include-mixin.js'; | ||
@@ -68,9 +68,3 @@ | ||
__createField(parent, path) { | ||
const field = document.createElement('vaadin-text-field'); | ||
field.label = capitalize(path); | ||
field.path = path; | ||
field.required = true; | ||
parent.appendChild(field); | ||
this._fields.push(field); | ||
return field; | ||
return createField(this, parent, path); | ||
} | ||
@@ -80,16 +74,3 @@ | ||
__createFields(parent, object, path) { | ||
Object.keys(object).forEach((prop) => { | ||
if (!this.include && this.exclude && this.exclude.test(prop)) { | ||
return; | ||
} | ||
const newPath = (path ? `${path}.` : '') + prop; | ||
if (object[prop] && typeof object[prop] === 'object') { | ||
this.__createFields(parent, object[prop], newPath); | ||
} else { | ||
this.__createField(parent, newPath); | ||
} | ||
}); | ||
if (!this._fields.length) { | ||
this._fields = undefined; | ||
} | ||
return createFields(this, parent, object, path); | ||
} | ||
@@ -96,0 +77,0 @@ } |
@@ -48,2 +48,3 @@ /** | ||
type: Boolean, | ||
sync: true, | ||
}, | ||
@@ -50,0 +51,0 @@ }; |
@@ -69,1 +69,45 @@ /** | ||
} | ||
export function editColumnDefaultRenderer(root, column) { | ||
let edit = root.firstElementChild; | ||
if (!edit) { | ||
edit = document.createElement('vaadin-crud-edit'); | ||
if (column.hasAttribute('theme')) { | ||
edit.setAttribute('theme', column.getAttribute('theme')); | ||
} | ||
root.appendChild(edit); | ||
} | ||
if (column.ariaLabel) { | ||
edit.setAttribute('aria-label', column.ariaLabel); | ||
} else { | ||
edit.removeAttribute('aria-label'); | ||
} | ||
} | ||
export function createField(crudForm, parent, path) { | ||
const field = document.createElement('vaadin-text-field'); | ||
field.label = capitalize(path); | ||
field.path = path; | ||
field.required = true; | ||
parent.appendChild(field); | ||
crudForm._fields.push(field); | ||
return field; | ||
} | ||
export function createFields(crudForm, parent, object, path) { | ||
Object.keys(object).forEach((prop) => { | ||
if (!crudForm.include && crudForm.exclude && crudForm.exclude.test(prop)) { | ||
return; | ||
} | ||
const newPath = (path ? `${path}.` : '') + prop; | ||
if (object[prop] && typeof object[prop] === 'object') { | ||
createFields(crudForm, parent, object[prop], newPath); | ||
} else { | ||
createField(crudForm, parent, newPath); | ||
} | ||
}); | ||
if (!crudForm._fields.length) { | ||
crudForm._fields = undefined; | ||
} | ||
} |
@@ -32,2 +32,3 @@ /** | ||
observer: '__onExcludeChange', | ||
sync: true, | ||
}, | ||
@@ -44,2 +45,3 @@ | ||
observer: '__onIncludeChange', | ||
sync: true, | ||
}, | ||
@@ -46,0 +48,0 @@ }; |
@@ -103,2 +103,3 @@ /** | ||
notify: true, | ||
sync: true, | ||
}, | ||
@@ -121,2 +122,3 @@ | ||
observer: '__editorPositionChanged', | ||
sync: true, | ||
}, | ||
@@ -133,2 +135,3 @@ | ||
value: false, | ||
sync: true, | ||
}, | ||
@@ -200,2 +203,3 @@ | ||
observer: '__editorOpenedChanged', | ||
sync: true, | ||
}, | ||
@@ -225,2 +229,3 @@ | ||
reflectToAttribute: true, | ||
sync: true, | ||
}, | ||
@@ -269,2 +274,3 @@ | ||
type: Object, | ||
sync: true, | ||
value() { | ||
@@ -304,3 +310,6 @@ return { | ||
/** @private */ | ||
__isDirty: Boolean, | ||
__isDirty: { | ||
type: Boolean, | ||
sync: true, | ||
}, | ||
@@ -317,2 +326,3 @@ /** @private */ | ||
observer: '__fullscreenChanged', | ||
sync: true, | ||
}, | ||
@@ -513,3 +523,4 @@ | ||
__moveChildNodes(target) { | ||
const nodes = [this._headerNode, this._form, this._saveButton, this._cancelButton, this._deleteButton]; | ||
const nodes = [this._headerNode, this._form]; | ||
const buttons = [this._saveButton, this._cancelButton, this._deleteButton].filter(Boolean); | ||
if (!nodes.every((node) => node instanceof HTMLElement)) { | ||
@@ -521,3 +532,3 @@ return; | ||
// NOTE: order in which buttons are moved matches the order of slots. | ||
nodes.forEach((node) => { | ||
[...nodes, ...buttons].forEach((node) => { | ||
target.appendChild(node); | ||
@@ -524,0 +535,0 @@ }); |
{ | ||
"$schema": "https://json.schemastore.org/web-types", | ||
"name": "@vaadin/crud", | ||
"version": "24.7.0-alpha2", | ||
"version": "24.7.0-alpha3", | ||
"description-markup": "markdown", | ||
@@ -360,3 +360,3 @@ "contributions": { | ||
"name": "vaadin-crud", | ||
"description": "`<vaadin-crud>` is a Web Component for [CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) operations.\n\n### Quick Start\n\nAssign an array to the [`items`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha2/#/elements/vaadin-crud#property-items) property.\n\nA grid and an editor will be automatically generated and configured based on the data structure provided.\n\n```html\n<vaadin-crud></vaadin-crud>\n```\n```js\nconst crud = document.querySelector('vaadin-crud');\n\ncrud.items = [\n { name: 'John', surname: 'Lennon', role: 'singer' },\n { name: 'Ringo', surname: 'Starr', role: 'drums' },\n // ... more items\n];\n```\n\n### Data Provider Function\n\nOtherwise, you can provide a [`dataProvider`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha2/#/elements/vaadin-crud#property-dataProvider) function.\n\n```js\nconst crud = document.querySelector('vaadin-crud');\n\nconst users = [\n { name: 'John', surname: 'Lennon', role: 'singer' },\n { name: 'Ringo', surname: 'Starr', role: 'drums' },\n // ... more items\n];\n\ncrud.dataProvider = (params, callback) => {\n const chunk = users.slice(params.page * params.pageSize, params.page * params.pageSize + params.pageSize);\n callback(chunk, people.length);\n};\n```\n\nNOTE: The auto-generated editor only supports string types. If you need to handle special cases\ncustomizing the editor is discussed below.\n\n### Customization\n\nAlternatively you can fully configure the component by using `slot` names.\n\nSlot name | Description\n---------------|----------------\n`grid` | To replace the auto-generated grid with a custom one.\n`form` | To replace the auto-generated form.\n`save-button` | To replace the \"Save\" button.\n`cancel-button`| To replace the \"Cancel\" button.\n`delete-button`| To replace the \"Delete\" button.\n`toolbar` | To provide the toolbar content (by default, it's empty).\n`new-button` | To replace the \"New item\" button.\n\n#### Example:\n\n```html\n<vaadin-crud id=\"crud\">\n <vaadin-grid slot=\"grid\">\n <vaadin-crud-edit-column></vaadin-crud-edit-column>\n <vaadin-grid-column id=\"column1\"></vaadin-grid-column>\n <vaadin-grid-column id=\"column2\"></vaadin-grid-column>\n </vaadin-grid>\n\n <vaadin-form-layout slot=\"form\">\n <vaadin-text-field label=\"First\" path=\"name\"></vaadin-text-field>\n <vaadin-text-field label=\"Surname\" path=\"surname\"></vaadin-text-field>\n </vaadin-form-layout>\n\n <div slot=\"toolbar\">Total singers: 2</div>\n <button slot=\"new-button\">New singer</button>\n\n <button slot=\"save-button\">Save changes</button>\n <button slot=\"cancel-button\">Discard changes</button>\n <button slot=\"delete-button\">Delete singer</button>\n</vaadin-crud>\n```\n```js\nconst crud = document.querySelector('#crud');\n\nconst column1 = document.querySelector('#column1');\ncolumn1.headerRenderer = (root, column) => {\n root.textContent = 'Name';\n};\ncolumn1.renderer = (root, column, model) => {\n root.textContent = model.item.name;\n};\n\nconst column2 = document.querySelector('#column2');\ncolumn2.headerRenderer = (root, column) => {\n root.textContent = 'Surname';\n};\ncolumn2.renderer = (root, column, model) => {\n root.textContent = model.item.surname;\n};\n\ncrud.items = [\n { name: 'John', surname: 'Lennon', role: 'singer' },\n { name: 'Ringo', surname: 'Starr', role: 'drums' },\n // ... more items\n];\n```\n\n### Helpers\n\nThe following elements are used to auto-configure the grid and the editor\n- [`<vaadin-crud-edit-column>`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha2/#/elements/vaadin-crud-edit-column)\n- `<vaadin-crud-grid>` - can be replaced with custom [`<vaadin-grid>`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha2/#/elements/vaadin-grid)\n- `<vaadin-crud-form>` - can be replaced with custom [`<vaadin-form-layout>`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha2/#/elements/vaadin-form-layout)\n\n### Styling\n\nThe following shadow DOM parts are available for styling:\n\nPart name | Description\n----------------|----------------\n`toolbar` | Toolbar container at the bottom. By default it contains the the `new` button\n\nThe following custom properties are available:\n\nCustom Property | Description | Default\n----------------|----------------\n--vaadin-crud-editor-max-height | max height of editor when opened on the bottom | 40%\n--vaadin-crud-editor-max-width | max width of editor when opened on the side | 40%\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.", | ||
"description": "`<vaadin-crud>` is a Web Component for [CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) operations.\n\n### Quick Start\n\nAssign an array to the [`items`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha3/#/elements/vaadin-crud#property-items) property.\n\nA grid and an editor will be automatically generated and configured based on the data structure provided.\n\n```html\n<vaadin-crud></vaadin-crud>\n```\n```js\nconst crud = document.querySelector('vaadin-crud');\n\ncrud.items = [\n { name: 'John', surname: 'Lennon', role: 'singer' },\n { name: 'Ringo', surname: 'Starr', role: 'drums' },\n // ... more items\n];\n```\n\n### Data Provider Function\n\nOtherwise, you can provide a [`dataProvider`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha3/#/elements/vaadin-crud#property-dataProvider) function.\n\n```js\nconst crud = document.querySelector('vaadin-crud');\n\nconst users = [\n { name: 'John', surname: 'Lennon', role: 'singer' },\n { name: 'Ringo', surname: 'Starr', role: 'drums' },\n // ... more items\n];\n\ncrud.dataProvider = (params, callback) => {\n const chunk = users.slice(params.page * params.pageSize, params.page * params.pageSize + params.pageSize);\n callback(chunk, people.length);\n};\n```\n\nNOTE: The auto-generated editor only supports string types. If you need to handle special cases\ncustomizing the editor is discussed below.\n\n### Customization\n\nAlternatively you can fully configure the component by using `slot` names.\n\nSlot name | Description\n---------------|----------------\n`grid` | To replace the auto-generated grid with a custom one.\n`form` | To replace the auto-generated form.\n`save-button` | To replace the \"Save\" button.\n`cancel-button`| To replace the \"Cancel\" button.\n`delete-button`| To replace the \"Delete\" button.\n`toolbar` | To provide the toolbar content (by default, it's empty).\n`new-button` | To replace the \"New item\" button.\n\n#### Example:\n\n```html\n<vaadin-crud id=\"crud\">\n <vaadin-grid slot=\"grid\">\n <vaadin-crud-edit-column></vaadin-crud-edit-column>\n <vaadin-grid-column id=\"column1\"></vaadin-grid-column>\n <vaadin-grid-column id=\"column2\"></vaadin-grid-column>\n </vaadin-grid>\n\n <vaadin-form-layout slot=\"form\">\n <vaadin-text-field label=\"First\" path=\"name\"></vaadin-text-field>\n <vaadin-text-field label=\"Surname\" path=\"surname\"></vaadin-text-field>\n </vaadin-form-layout>\n\n <div slot=\"toolbar\">Total singers: 2</div>\n <button slot=\"new-button\">New singer</button>\n\n <button slot=\"save-button\">Save changes</button>\n <button slot=\"cancel-button\">Discard changes</button>\n <button slot=\"delete-button\">Delete singer</button>\n</vaadin-crud>\n```\n```js\nconst crud = document.querySelector('#crud');\n\nconst column1 = document.querySelector('#column1');\ncolumn1.headerRenderer = (root, column) => {\n root.textContent = 'Name';\n};\ncolumn1.renderer = (root, column, model) => {\n root.textContent = model.item.name;\n};\n\nconst column2 = document.querySelector('#column2');\ncolumn2.headerRenderer = (root, column) => {\n root.textContent = 'Surname';\n};\ncolumn2.renderer = (root, column, model) => {\n root.textContent = model.item.surname;\n};\n\ncrud.items = [\n { name: 'John', surname: 'Lennon', role: 'singer' },\n { name: 'Ringo', surname: 'Starr', role: 'drums' },\n // ... more items\n];\n```\n\n### Helpers\n\nThe following elements are used to auto-configure the grid and the editor\n- [`<vaadin-crud-edit-column>`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha3/#/elements/vaadin-crud-edit-column)\n- `<vaadin-crud-grid>` - can be replaced with custom [`<vaadin-grid>`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha3/#/elements/vaadin-grid)\n- `<vaadin-crud-form>` - can be replaced with custom [`<vaadin-form-layout>`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha3/#/elements/vaadin-form-layout)\n\n### Styling\n\nThe following shadow DOM parts are available for styling:\n\nPart name | Description\n----------------|----------------\n`toolbar` | Toolbar container at the bottom. By default it contains the the `new` button\n\nThe following custom properties are available:\n\nCustom Property | Description | Default\n----------------|----------------\n--vaadin-crud-editor-max-height | max height of editor when opened on the bottom | 40%\n--vaadin-crud-editor-max-width | max width of editor when opened on the side | 40%\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.", | ||
"attributes": [ | ||
@@ -416,3 +416,3 @@ { | ||
"name": "include", | ||
"description": "A comma-separated list of fields to include in the generated grid and the generated editor.\n\nIt can be used to explicitly define the field order.\n\nWhen it is defined [`exclude`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha2/#/elements/vaadin-crud#property-exclude) is ignored.\n\nDefault is undefined meaning that all properties in the object should be mapped to fields.", | ||
"description": "A comma-separated list of fields to include in the generated grid and the generated editor.\n\nIt can be used to explicitly define the field order.\n\nWhen it is defined [`exclude`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha3/#/elements/vaadin-crud#property-exclude) is ignored.\n\nDefault is undefined meaning that all properties in the object should be mapped to fields.", | ||
"value": { | ||
@@ -428,3 +428,3 @@ "type": [ | ||
"name": "exclude", | ||
"description": "A comma-separated list of fields to be excluded from the generated grid and the generated editor.\n\nWhen [`include`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha2/#/elements/vaadin-crud#property-include) is defined, this parameter is ignored.\n\nDefault is to exclude all private fields (those properties starting with underscore)", | ||
"description": "A comma-separated list of fields to be excluded from the generated grid and the generated editor.\n\nWhen [`include`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha3/#/elements/vaadin-crud#property-include) is defined, this parameter is ignored.\n\nDefault is to exclude all private fields (those properties starting with underscore)", | ||
"value": { | ||
@@ -556,3 +556,3 @@ "type": [ | ||
"name": "include", | ||
"description": "A comma-separated list of fields to include in the generated grid and the generated editor.\n\nIt can be used to explicitly define the field order.\n\nWhen it is defined [`exclude`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha2/#/elements/vaadin-crud#property-exclude) is ignored.\n\nDefault is undefined meaning that all properties in the object should be mapped to fields.", | ||
"description": "A comma-separated list of fields to include in the generated grid and the generated editor.\n\nIt can be used to explicitly define the field order.\n\nWhen it is defined [`exclude`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha3/#/elements/vaadin-crud#property-exclude) is ignored.\n\nDefault is undefined meaning that all properties in the object should be mapped to fields.", | ||
"value": { | ||
@@ -568,3 +568,3 @@ "type": [ | ||
"name": "exclude", | ||
"description": "A comma-separated list of fields to be excluded from the generated grid and the generated editor.\n\nWhen [`include`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha2/#/elements/vaadin-crud#property-include) is defined, this parameter is ignored.\n\nDefault is to exclude all private fields (those properties starting with underscore)", | ||
"description": "A comma-separated list of fields to be excluded from the generated grid and the generated editor.\n\nWhen [`include`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha3/#/elements/vaadin-crud#property-include) is defined, this parameter is ignored.\n\nDefault is to exclude all private fields (those properties starting with underscore)", | ||
"value": { | ||
@@ -571,0 +571,0 @@ "type": [ |
{ | ||
"$schema": "https://json.schemastore.org/web-types", | ||
"name": "@vaadin/crud", | ||
"version": "24.7.0-alpha2", | ||
"version": "24.7.0-alpha3", | ||
"description-markup": "markdown", | ||
@@ -145,3 +145,3 @@ "framework": "lit", | ||
"name": "vaadin-crud", | ||
"description": "`<vaadin-crud>` is a Web Component for [CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) operations.\n\n### Quick Start\n\nAssign an array to the [`items`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha2/#/elements/vaadin-crud#property-items) property.\n\nA grid and an editor will be automatically generated and configured based on the data structure provided.\n\n```html\n<vaadin-crud></vaadin-crud>\n```\n```js\nconst crud = document.querySelector('vaadin-crud');\n\ncrud.items = [\n { name: 'John', surname: 'Lennon', role: 'singer' },\n { name: 'Ringo', surname: 'Starr', role: 'drums' },\n // ... more items\n];\n```\n\n### Data Provider Function\n\nOtherwise, you can provide a [`dataProvider`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha2/#/elements/vaadin-crud#property-dataProvider) function.\n\n```js\nconst crud = document.querySelector('vaadin-crud');\n\nconst users = [\n { name: 'John', surname: 'Lennon', role: 'singer' },\n { name: 'Ringo', surname: 'Starr', role: 'drums' },\n // ... more items\n];\n\ncrud.dataProvider = (params, callback) => {\n const chunk = users.slice(params.page * params.pageSize, params.page * params.pageSize + params.pageSize);\n callback(chunk, people.length);\n};\n```\n\nNOTE: The auto-generated editor only supports string types. If you need to handle special cases\ncustomizing the editor is discussed below.\n\n### Customization\n\nAlternatively you can fully configure the component by using `slot` names.\n\nSlot name | Description\n---------------|----------------\n`grid` | To replace the auto-generated grid with a custom one.\n`form` | To replace the auto-generated form.\n`save-button` | To replace the \"Save\" button.\n`cancel-button`| To replace the \"Cancel\" button.\n`delete-button`| To replace the \"Delete\" button.\n`toolbar` | To provide the toolbar content (by default, it's empty).\n`new-button` | To replace the \"New item\" button.\n\n#### Example:\n\n```html\n<vaadin-crud id=\"crud\">\n <vaadin-grid slot=\"grid\">\n <vaadin-crud-edit-column></vaadin-crud-edit-column>\n <vaadin-grid-column id=\"column1\"></vaadin-grid-column>\n <vaadin-grid-column id=\"column2\"></vaadin-grid-column>\n </vaadin-grid>\n\n <vaadin-form-layout slot=\"form\">\n <vaadin-text-field label=\"First\" path=\"name\"></vaadin-text-field>\n <vaadin-text-field label=\"Surname\" path=\"surname\"></vaadin-text-field>\n </vaadin-form-layout>\n\n <div slot=\"toolbar\">Total singers: 2</div>\n <button slot=\"new-button\">New singer</button>\n\n <button slot=\"save-button\">Save changes</button>\n <button slot=\"cancel-button\">Discard changes</button>\n <button slot=\"delete-button\">Delete singer</button>\n</vaadin-crud>\n```\n```js\nconst crud = document.querySelector('#crud');\n\nconst column1 = document.querySelector('#column1');\ncolumn1.headerRenderer = (root, column) => {\n root.textContent = 'Name';\n};\ncolumn1.renderer = (root, column, model) => {\n root.textContent = model.item.name;\n};\n\nconst column2 = document.querySelector('#column2');\ncolumn2.headerRenderer = (root, column) => {\n root.textContent = 'Surname';\n};\ncolumn2.renderer = (root, column, model) => {\n root.textContent = model.item.surname;\n};\n\ncrud.items = [\n { name: 'John', surname: 'Lennon', role: 'singer' },\n { name: 'Ringo', surname: 'Starr', role: 'drums' },\n // ... more items\n];\n```\n\n### Helpers\n\nThe following elements are used to auto-configure the grid and the editor\n- [`<vaadin-crud-edit-column>`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha2/#/elements/vaadin-crud-edit-column)\n- `<vaadin-crud-grid>` - can be replaced with custom [`<vaadin-grid>`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha2/#/elements/vaadin-grid)\n- `<vaadin-crud-form>` - can be replaced with custom [`<vaadin-form-layout>`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha2/#/elements/vaadin-form-layout)\n\n### Styling\n\nThe following shadow DOM parts are available for styling:\n\nPart name | Description\n----------------|----------------\n`toolbar` | Toolbar container at the bottom. By default it contains the the `new` button\n\nThe following custom properties are available:\n\nCustom Property | Description | Default\n----------------|----------------\n--vaadin-crud-editor-max-height | max height of editor when opened on the bottom | 40%\n--vaadin-crud-editor-max-width | max width of editor when opened on the side | 40%\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.", | ||
"description": "`<vaadin-crud>` is a Web Component for [CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) operations.\n\n### Quick Start\n\nAssign an array to the [`items`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha3/#/elements/vaadin-crud#property-items) property.\n\nA grid and an editor will be automatically generated and configured based on the data structure provided.\n\n```html\n<vaadin-crud></vaadin-crud>\n```\n```js\nconst crud = document.querySelector('vaadin-crud');\n\ncrud.items = [\n { name: 'John', surname: 'Lennon', role: 'singer' },\n { name: 'Ringo', surname: 'Starr', role: 'drums' },\n // ... more items\n];\n```\n\n### Data Provider Function\n\nOtherwise, you can provide a [`dataProvider`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha3/#/elements/vaadin-crud#property-dataProvider) function.\n\n```js\nconst crud = document.querySelector('vaadin-crud');\n\nconst users = [\n { name: 'John', surname: 'Lennon', role: 'singer' },\n { name: 'Ringo', surname: 'Starr', role: 'drums' },\n // ... more items\n];\n\ncrud.dataProvider = (params, callback) => {\n const chunk = users.slice(params.page * params.pageSize, params.page * params.pageSize + params.pageSize);\n callback(chunk, people.length);\n};\n```\n\nNOTE: The auto-generated editor only supports string types. If you need to handle special cases\ncustomizing the editor is discussed below.\n\n### Customization\n\nAlternatively you can fully configure the component by using `slot` names.\n\nSlot name | Description\n---------------|----------------\n`grid` | To replace the auto-generated grid with a custom one.\n`form` | To replace the auto-generated form.\n`save-button` | To replace the \"Save\" button.\n`cancel-button`| To replace the \"Cancel\" button.\n`delete-button`| To replace the \"Delete\" button.\n`toolbar` | To provide the toolbar content (by default, it's empty).\n`new-button` | To replace the \"New item\" button.\n\n#### Example:\n\n```html\n<vaadin-crud id=\"crud\">\n <vaadin-grid slot=\"grid\">\n <vaadin-crud-edit-column></vaadin-crud-edit-column>\n <vaadin-grid-column id=\"column1\"></vaadin-grid-column>\n <vaadin-grid-column id=\"column2\"></vaadin-grid-column>\n </vaadin-grid>\n\n <vaadin-form-layout slot=\"form\">\n <vaadin-text-field label=\"First\" path=\"name\"></vaadin-text-field>\n <vaadin-text-field label=\"Surname\" path=\"surname\"></vaadin-text-field>\n </vaadin-form-layout>\n\n <div slot=\"toolbar\">Total singers: 2</div>\n <button slot=\"new-button\">New singer</button>\n\n <button slot=\"save-button\">Save changes</button>\n <button slot=\"cancel-button\">Discard changes</button>\n <button slot=\"delete-button\">Delete singer</button>\n</vaadin-crud>\n```\n```js\nconst crud = document.querySelector('#crud');\n\nconst column1 = document.querySelector('#column1');\ncolumn1.headerRenderer = (root, column) => {\n root.textContent = 'Name';\n};\ncolumn1.renderer = (root, column, model) => {\n root.textContent = model.item.name;\n};\n\nconst column2 = document.querySelector('#column2');\ncolumn2.headerRenderer = (root, column) => {\n root.textContent = 'Surname';\n};\ncolumn2.renderer = (root, column, model) => {\n root.textContent = model.item.surname;\n};\n\ncrud.items = [\n { name: 'John', surname: 'Lennon', role: 'singer' },\n { name: 'Ringo', surname: 'Starr', role: 'drums' },\n // ... more items\n];\n```\n\n### Helpers\n\nThe following elements are used to auto-configure the grid and the editor\n- [`<vaadin-crud-edit-column>`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha3/#/elements/vaadin-crud-edit-column)\n- `<vaadin-crud-grid>` - can be replaced with custom [`<vaadin-grid>`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha3/#/elements/vaadin-grid)\n- `<vaadin-crud-form>` - can be replaced with custom [`<vaadin-form-layout>`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha3/#/elements/vaadin-form-layout)\n\n### Styling\n\nThe following shadow DOM parts are available for styling:\n\nPart name | Description\n----------------|----------------\n`toolbar` | Toolbar container at the bottom. By default it contains the the `new` button\n\nThe following custom properties are available:\n\nCustom Property | Description | Default\n----------------|----------------\n--vaadin-crud-editor-max-height | max height of editor when opened on the bottom | 40%\n--vaadin-crud-editor-max-width | max width of editor when opened on the side | 40%\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.", | ||
"extension": true, | ||
@@ -221,3 +221,3 @@ "attributes": [ | ||
"name": ".include", | ||
"description": "A comma-separated list of fields to include in the generated grid and the generated editor.\n\nIt can be used to explicitly define the field order.\n\nWhen it is defined [`exclude`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha2/#/elements/vaadin-crud#property-exclude) is ignored.\n\nDefault is undefined meaning that all properties in the object should be mapped to fields.", | ||
"description": "A comma-separated list of fields to include in the generated grid and the generated editor.\n\nIt can be used to explicitly define the field order.\n\nWhen it is defined [`exclude`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha3/#/elements/vaadin-crud#property-exclude) is ignored.\n\nDefault is undefined meaning that all properties in the object should be mapped to fields.", | ||
"value": { | ||
@@ -229,3 +229,3 @@ "kind": "expression" | ||
"name": ".exclude", | ||
"description": "A comma-separated list of fields to be excluded from the generated grid and the generated editor.\n\nWhen [`include`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha2/#/elements/vaadin-crud#property-include) is defined, this parameter is ignored.\n\nDefault is to exclude all private fields (those properties starting with underscore)", | ||
"description": "A comma-separated list of fields to be excluded from the generated grid and the generated editor.\n\nWhen [`include`](https://cdn.vaadin.com/vaadin-web-components/24.7.0-alpha3/#/elements/vaadin-crud#property-include) is defined, this parameter is ignored.\n\nDefault is to exclude all private fields (those properties starting with underscore)", | ||
"value": { | ||
@@ -232,0 +232,0 @@ "kind": "expression" |
173160
60
4702
+ Added@vaadin/a11y-base@24.7.0-alpha3(transitive)
+ Added@vaadin/button@24.7.0-alpha3(transitive)
+ Added@vaadin/checkbox@24.7.0-alpha3(transitive)
+ Added@vaadin/component-base@24.7.0-alpha3(transitive)
+ Added@vaadin/confirm-dialog@24.7.0-alpha3(transitive)
+ Added@vaadin/dialog@24.7.0-alpha3(transitive)
+ Added@vaadin/field-base@24.7.0-alpha3(transitive)
+ Added@vaadin/form-layout@24.7.0-alpha3(transitive)
+ Added@vaadin/grid@24.7.0-alpha3(transitive)
+ Added@vaadin/icon@24.7.0-alpha3(transitive)
+ Added@vaadin/input-container@24.7.0-alpha3(transitive)
+ Added@vaadin/lit-renderer@24.7.0-alpha3(transitive)
+ Added@vaadin/overlay@24.7.0-alpha3(transitive)
+ Added@vaadin/text-field@24.7.0-alpha3(transitive)
+ Added@vaadin/vaadin-lumo-styles@24.7.0-alpha3(transitive)
+ Added@vaadin/vaadin-material-styles@24.7.0-alpha3(transitive)
+ Added@vaadin/vaadin-themable-mixin@24.7.0-alpha3(transitive)
- Removed@vaadin/a11y-base@24.7.0-alpha2(transitive)
- Removed@vaadin/button@24.7.0-alpha2(transitive)
- Removed@vaadin/checkbox@24.7.0-alpha2(transitive)
- Removed@vaadin/component-base@24.7.0-alpha2(transitive)
- Removed@vaadin/confirm-dialog@24.7.0-alpha2(transitive)
- Removed@vaadin/dialog@24.7.0-alpha2(transitive)
- Removed@vaadin/field-base@24.7.0-alpha2(transitive)
- Removed@vaadin/form-layout@24.7.0-alpha2(transitive)
- Removed@vaadin/grid@24.7.0-alpha2(transitive)
- Removed@vaadin/icon@24.7.0-alpha2(transitive)
- Removed@vaadin/input-container@24.7.0-alpha2(transitive)
- Removed@vaadin/lit-renderer@24.7.0-alpha2(transitive)
- Removed@vaadin/overlay@24.7.0-alpha2(transitive)
- Removed@vaadin/text-field@24.7.0-alpha2(transitive)
- Removed@vaadin/vaadin-lumo-styles@24.7.0-alpha2(transitive)
- Removed@vaadin/vaadin-material-styles@24.7.0-alpha2(transitive)
- Removed@vaadin/vaadin-themable-mixin@24.7.0-alpha2(transitive)
Updated@vaadin/button@24.7.0-alpha3
Updated@vaadin/dialog@24.7.0-alpha3
Updated@vaadin/grid@24.7.0-alpha3